GHDL不完全入門手冊

這學期的數電實驗與即將到來的數設均會大量使用VHDL。而Quatus作爲一款官方綁定的軟件並未提供有效的仿真手段。因此可能大家都是寫好後燒錄至CPLD上進行調試,調試週期長,而且很困難。

GHDL是一款開源自由的VHDL仿真軟件,通過編譯VHDL語言的源文件來生成一個文本文件,再對其進行解釋,達到仿真的目的。

使用Linux的同學可能會在軟件庫中找到ghdl,而Mac與Windows的同學可以點這裏來獲取。

仿真的準備活動

首先你需要一個vhdl的源代碼……其中包含着你想要實現的硬件。在這裏我們用一個4選1選擇器來作爲樣例。

[codebox 1]

我們需要對其進行測試與仿真。

硬件的一個entity就好像軟件中的一個函數/類,它還需要很多參數才能有確定的行爲。因此我們需要像給自己寫的函數庫寫測試一樣,給這個硬件寫一個用來測試它的構件(有沒有想到實驗室裏用來測試門芯片的那個箱子?)。

[codebox 2]

在寫測試的時候記得儘量將情況考慮周全,最好還能比較容易地判斷正確性。

開始仿真!

現在請確認

[codebox 3]

然後……ghdl要怎麼用呢?其實ghdl自帶生成一個簡單的Makefile的小工具。比如執行如下代碼:

[codebox 4]

就可以獲取一個簡單的Makefile了。Makefile也比較簡單,稍微看一下就能明白。緊接着,運行make以及make run就可以看到我們的仿真輸出了。

幾個Trick

首先,GHDLFLAGS必須要加上—ieee=synopsys選項才能使用library ieee裏面的內容。如果不想看到很多function “.*” is never referenced,可以加上—warn-no-unused。

其次,如果想限制仿真的運行時間,可以將Makefile中的GHDLRUNFLAGS變量加上—stop-time=time(如—stop-time=50ns)。

另外,如果你的系統有X server,你還可以輸出波形來進行檢查。查看波形需要使用gtkwave軟件,Linux與Mac的同學都可以在庫中方便地找到。想要生成波形,需要在GHDLRUNFLAGS中加上—vcd=filename。

吶吶,自從用上ghdl,從來沒燒過兩次CPLD。如果有問題請在下面提問。