Eason's blog

如何在Mac OS X上安裝Verilog環境

Published on

一句話摘要:使用 Icarus Verilog 來編譯 Verilog、使用 GTKWave 來顯示波形

為了資工系的數位電路設計課,我們需要一個能夠編譯 Verilog 這個硬體描述語言(HDL)的環境,並且要能模擬電路運作狀況加上顯示波形。

老師建議的編譯環境是ModelSim,但是它只支援 Windows,我目前還沒找到 Mac OS X 或是 Linux 的版本,所以我只好另尋他法,找看看有沒有其他能夠編譯 Verilog 的工具。

我找到了Icarus Verilog,它是針對 Linux 的 Verilog 編譯器,而在 Mac OS X 底下,我們可以藉由 Command Line 來使用它。

安裝 Icarus Verilog

這是Icarus Verilog 的安裝指南,很完整的說明了怎麼在各種作業系統上安裝它,不過是英文的,而且字有點多。

對於 Mac OS X 你有兩種安裝手段,編譯程式原始碼來安裝,或是透過套件管理系統安裝,對於我這種懶人來說,當然是選擇使用套件管理系統囉!

我使用Homebrew來安裝 Icarus Verilog,如果你還沒有安裝 Homebrew,去把它裝起來吧!身為一位 Mac 用戶兼資工系學生,Homebrew 必備呀!

你可以在你的 Command Line 裡輸入這段文字來安裝 Homebrew(請忽略最左方的$符號,這是 Command Line 的提示字元):

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

接著使用這段 homebrew 的指令來安裝 Icarus Verilog:

$ brew install icarus-verilog

OK!現在你已經成功安裝了 Icarus Verilog 了!Homebrew 就是這麼的神奇!

測試 Icarus Verilog

安裝完了一個新程式,當然是要測試一下它的功能正不正常呀,這時就輪到經典 Hello World 測試程式登場了!

首先建立一個新文件命名為 hello.v,內含以下內容(Verilog 的源碼檔副檔名為.v):

module main;
  initial
    begin
      $display("Hello, World");
      $finish ;
    end
endmodule

接著使用 iverilog 指令來編譯 hello.v,使用-o hello 來指定以 hello 來作為產生的可執行檔檔名:

$ iverilog -o hello hello.v

最後,使用 vvp 指令來執行 hello 這個可執行檔,只要你看到 Hello, World 這個輸出,就代表你的 Icarus Verilog 安裝成功了:

$ vvp hello
Hello, World

安裝 GTKWave

接著,為了能夠更方便地查看電路運作的狀況,你需要一個波型顯示軟體,我使用GTKWave,這是一個可以跑在 Mac OS X、Linux、和 Windows 上的波型顯示軟體,使用效果如下圖(截圖自官網):

13010278_1324168817596781_1227376771_o.png

要在 Mac OS X 上安裝它很容易,就跟你安裝其他應用程式一樣,最大的困難可能是在官網上找到正確的下載連結......,連結已經幫你標出來了,請在官網上找到上圖紅框處 download 連結把它點下去!

接著把載下來了.zip 檔解壓縮,完畢後得到的.app 檔就是你要的 GTKWave 了!隨點隨用免安裝,那~麼~厲害!

使用 GTKWave 來顯示波形

建立新的測試程式

先別急著打開你的 GTKWave,你還需要一個新的測試程式,之前的 hello world 程式可根本不算是一個電路呢!

首先建立兩個新檔案,命名為 Simple_Circuit.v 和 t_Simple_Circuit.v(修改自我們老師的 Lab0 範例):

module	Simple_Circuit(A, B, C, D, E);
  output	D, E;
  input	A, B, C;
  wire	w1;

	and		G1(w1, A, B);
	not		G2(E, C);
	or		G3(D, w1, E);
endmodule
module	t_Simple_Circuit;
  wire	D, E;
  reg		A, B, C;

  //instantiate device under test
  Simple_Circuit	M1(A, B, C, D, E);

  //apply inputs one at a time
  initial	begin
    $dumpfile("mytest.vcd");
    $dumpvars;
    A=1'b0; B=1'b0; C=1'b0;
    #100 A=1'b1; B=1'b1; C=1'b1;
  end

  initial #200 $finish;
endmodule

將這兩個檔案編譯為 mycircuit 這個執行檔,並且執行它:

$ iverilog -o mycircuit t_Simple_Circuit.v Simple_Circuit.v
$ vvp mycircuit

因為我們在 t_Simple_Circuit.v 這個電路測試檔案裡頭加入了 dumpfile 和 dumpvars,所以執行完 mycircuit 後,會產生一個名為 mytest.vcd 的檔案,裡頭包含了我們所要的波型紀錄。

現在我們可以使用 GTKWave 來檢視波型了!

正式開啟 GTKWave 來檢視波型

開啟你的 GTKWave,點擊左上角的 File > Open New Tab 選擇剛剛產生的 mytest.vcd 檔,你應該會很失望地發現為什麼沒有出現你要的波型,如下圖:

螢幕快照 2016-03-19 上午1.23.20.png

那是因為你還沒有告訴 GTKWave 你想要看什麼,那我們就來告訴它吧!

在 GTKWave 左側面板,你會看到一串文字寫著 t_Simple_Circuit,那就是你的測試檔案,點開那個+號,點擊 M1 電路,下面就會列出 M1 電路裡所有的線路,把你想要看它波形的線路拖曳到右方的區塊吧!噠答!你要的波型顯示出來了!

螢幕快照 2016-03-19 上午1.30.18.png

恭喜你成功建置你的 Verilog 環境,現在你可以炫砲地使用你的 Macbook 來做數電設計作業了!

指令小筆記

$ iverilog -o <output-file> <source-file-1> <source-file-2> ... // 編譯
$ vvp <executable-verilog-file> // 執行