從零構造一台計算機——硬件模擬器

這裡介紹一下Nand2Tetris課程裏面用到的硬件模擬器的用法,可以在這裡找到下載方式。

HDL語法

假如我們要構建一個非門,這時候我們需要創建一個文件,文件名為:Not.hdl,內容如下:

// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/01/Not.hdl

/**
 * Not gate:
 * out = not in
 */

CHIP Not {
    IN in;
    OUT out;

    PARTS:
    Nand(a=in, b=in, out=out);
}

//開頭,或者在/** **/之間的是注釋,這個和主流的編程語言一致。上面/** **/之間的是Not的描述。

CHIP關鍵字定義了組件的名稱,IN定義了組件的輸入端,OUT定義了組件的輸出,PARTS下面是具體的實現。

我們來具體看實現:

Nand(a=in, b=in, out=out);的意思是Nand(與非門,默認提供)的輸入端a, b作為Not的輸入inNand的輸出out作為Not的輸出out

當我們構建完Not的時候,我們就可以把他作為組件在後續的代碼中使用了。

關於課程中project1的其他組件以及對應的功能描述,可以去參考網站的資料,我已經寫完並且上傳到github,可以供大家參考。

硬件模擬器

這裡的硬件模擬器是java寫的,所以我們首先需要安裝並配置jre,這裡不再贅述。配置完java之後,運行平台的腳本文件即可。例如mac運行HardwareSimulator.sh,windows運行HardwareSimulator.bat即可。

打開後界面如下所示:

這時候我們點擊File -> Load Chip或者下面的第一個圖標來加載一個組件。這時候我們可以改變Input pins中輸入的值,然後點擊Run -> Single Step或者下面對應的圖標去單步執行,執行完之後我們可以在Output pins中看到輸出。

為了驗證我們寫的程序是否正確,我們可以使用壓縮包中提供的測試文件來測試我們的程序:測試文件以.tst結尾,例如Not.hdl對應的測試文件就是Not.tst。然後我們可以點擊File -> LoadScript或者對應的圖標來加載測試測試腳本文件。

加載完成之後,可以在右側看到腳本文件的具體內容,同樣的,我們也可以點擊Run -> Single Step來單步執行測試腳本中的測試代碼,或者Run -> Run來執行全部的測試代碼。

如果執行成功,我們可以在最下方看到運行成功的提示,否則會給出對應的報錯。如下所示:

總結

到這裡為止,我們了解了一些基礎的邏輯電路,並且用HDL描述了出來。使用硬件模擬器的好處是方便我們調試,驗證邏輯是否正確,也不用手動去焊接電路。

課程中用到的硬件模擬器是以學習為目的的,是為了幫助我們了解計算機底層的電路結構。我這裡也沒有介紹的面面俱到,僅僅是介紹了最基本的用法。關於更詳細的使用方式我們可以去查閱網站中的資料。