從零構造一臺計算機——硬體模擬器

kaiux發表於2021-08-04

這裡介紹一下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描述了出來。使用硬體模擬器的好處是方便我們除錯,驗證邏輯是否正確,也不用手動去焊接電路。

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

相關文章