日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

搭建 Verilog 仿真环境

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搭建 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 endmodule

tb_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 仿真环境的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。