搭建 Verilog 仿真环境
搭建 Verilog 仿真環境
對于 Verilog 的初學者,有一個仿真環境是必要的。這就好比是剛開始接觸 C 語言,連 C 語言的開發環境都沒有,怎么學習 C 語言呢,難道靠大腦模擬運行嗎?
本文介紹如何在 Linux 操作系統(以 Ubuntu 為例)下搭建一個輕量級的 RTL 仿真環境。
安裝軟件
要安裝 2 個軟件
sudo apt-get install iverilog
sudo apt-get install gtkwave
準備代碼
安裝好后可以做個實驗。
先準備兩個文件
count.v
module count4(out,reset,clk); output[3:0] out; input reset,clk; reg[3:0] out; always @(posedge clk) begin if (reset) out<=0; //同步復位 else out<=out+1; //計數 end endmoduletb_count.v
`timescale 1ns/1ns module coun4_tp; reg clk, reset; //測試輸入信號定義為 reg 型 wire[3:0] out; //測試輸出信號定義為 wire 型 parameter DELY=100; count4 mycount(out,reset,clk); //調用測試對象 always #(DELY/2) clk = ~clk; //產生時鐘波形 initial begin //激勵信號定義 clk=0; reset=0; #DELY reset=1; #DELY reset=0; #(DELY*20) $finish; // initial 塊執行一次,inital 塊里面是順序執行的end //定義結果顯示格式 initial $monitor($time,,"clk=%d reset=%d out=%d", clk, reset, out); //注意這里的 ,, 代表空參數,空參數在輸出時顯示為空格。 initial begin$dumpfile("test.vcd"); // 指定 VCD 文件的名字為 test.vcd ,仿真信息將記錄到此文件$dumpvars(0, coun4_tp); //指定層次數為0,則 coun4_tp 模塊及其下面各層次的所有信號將被記錄end endmodule代碼中有幾處要解釋:
$dumpfile 和 $dumpvar 是 verilog 語言中的兩個系統任務。
$dumpfile 系統任務:為所要創建的 VCD 文件指定文件名。
VCD 文件是在對設計進行的仿真過程中,記錄各種信號取值變化情況的信息記錄文件。EDA 工具通過讀取
VCD 格式的文件,顯示圖形化的仿真波形,所以,可以把 VCD 文件簡單視為波形記錄文件。
$dumpvar 系統任務:指定需要記錄到 VCD 文件中的信號,可以指定某一模塊層次上的所有信號,也可以單獨指定某一個信號。
典型語法為
$dumpvar(level, module_name);
參數 level 為一個整數,用于指定層次數,參數 module_name 則指定要記錄的模塊。
舉例:
initial$dumpvar (0, top); //指定層次數為0,則top模塊及其下面各層次的所有信號將被記錄 initial$dumpvar (1, top); //記錄模塊實例top以下一層的信號//層次數為1,即記錄top模塊這一層次的信號//對于top模塊中調用的更深層次的模塊實例,則不記錄其信號變化 initial$dumpvar (2, top); //記錄模塊實例top以下兩層的信號//即top模塊及其下一層的信號將被記錄代碼就講到這里,我們看看怎么仿真。
如何仿真
$ iverilog -o testname count.v tb_count.v-o 選項用來指定輸出的文件名,這里是 testname,你可以換成別的
這樣之后,就會生成可執行文件 testname
我們運行它,就會生成 .vcd 波形文件
$ ./testname VCD info: dumpfile test.vcd opened for output.0 clk=0 reset=0 out= x50 clk=1 reset=0 out= x100 clk=0 reset=1 out= x150 clk=1 reset=1 out= 0200 clk=0 reset=0 out= 0250 clk=1 reset=0 out= 1300 clk=0 reset=0 out= 1350 clk=1 reset=0 out= 2400 clk=0 reset=0 out= 2450 clk=1 reset=0 out= 3500 clk=0 reset=0 out= 3550 clk=1 reset=0 out= 4600 clk=0 reset=0 out= 4650 clk=1 reset=0 out= 5700 clk=0 reset=0 out= 5750 clk=1 reset=0 out= 6800 clk=0 reset=0 out= 6850 clk=1 reset=0 out= 7900 clk=0 reset=0 out= 7950 clk=1 reset=0 out= 81000 clk=0 reset=0 out= 81050 clk=1 reset=0 out= 91100 clk=0 reset=0 out= 91150 clk=1 reset=0 out=101200 clk=0 reset=0 out=101250 clk=1 reset=0 out=111300 clk=0 reset=0 out=111350 clk=1 reset=0 out=121400 clk=0 reset=0 out=121450 clk=1 reset=0 out=131500 clk=0 reset=0 out=131550 clk=1 reset=0 out=141600 clk=0 reset=0 out=141650 clk=1 reset=0 out=151700 clk=0 reset=0 out=151750 clk=1 reset=0 out= 01800 clk=0 reset=0 out= 01850 clk=1 reset=0 out= 11900 clk=0 reset=0 out= 11950 clk=1 reset=0 out= 22000 clk=0 reset=0 out= 22050 clk=1 reset=0 out= 32100 clk=0 reset=0 out= 32150 clk=1 reset=0 out= 42200 clk=0 reset=0 out= 4這時候,又會多出一個 test.vcd 文件
使用 gtkwave 命令查看 .vcd 文件
$ gtkwave test.vcd要把信號拖動到 Signals 里面
如果覺得前面敲那些命令太麻煩,可以來一個簡單的 Makefile
TGT =main SRC =$(wildcard *.v) CC =iverilog$(TGT): $(SRC)$(CC) -o $@ $^./$(TGT)gtkwave test.vcd # 代碼中指定 VCD 文件的名字為 test.vcd clean:$(RM) $(TGT) test.vcd參考資料
【1】verilog的 $dumpfile 和 $dumpvar 系統任務詳解
【2】搭建verilog學習環境
總結
以上是生活随笔為你收集整理的搭建 Verilog 仿真环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬虫 django搜索修改更
- 下一篇: python爬动态网页json_爬虫再探