Icarus Verilog(以下簡稱iverilog )號稱“全球第四大”數(shù)字芯片仿真器,也是一個完全開源的仿真器。由于Synopsys、Cadence、Mentor版權(quán)的關(guān)系,國外很多高校在數(shù)字芯片設(shè)計的教學(xué)中都采用iverilog。 GTKWave是一個開源的波形文件察看工具,支持Verilog VCD/EVCD文件格式。因此,通過“iverilog +gtkwave”的方式,可以很方便地實現(xiàn)商用仿真器的功能。 本文為我的學(xué)生整理自 iverilog 和 gtkwave 官方網(wǎng)站。 介紹 iverilog Icarus Verilog是一個verilog仿真工具. 以編譯器的形式工作, 將以verilog編寫的源代碼編譯為某種目標(biāo)格式. 如果要進行仿真的話, 它可以生成一個叫做vvp的中間格式. 這個格式可以由其所附帶的vvp命令執(zhí)行. gtkwave wave viewer. 可以用于查看標(biāo)準(zhǔn)的verilog VCD/EVCD, 以及其他的一些格式的波形文件。 安裝 iverilog
linux a. 包管理器安裝下載:sudo pacman -S gtkwave b. 從上面的鏈接下載源碼, 然后編譯
使用 1. 示例:
1//adder_rtl.v 2moduleadder(clk,rst_n,a,b,c); 3input[3:0]a; 4input[3:0]b; 5output[7:0]c; 6inputclk,rst_n; 7 8wire[3:0]a; 9wire[3:0]b; 10wire[7:0]c; 11 12always@(posedgeclkornegedgerst_m)begin 13if(rst_n==1'b0) 14c<=?8'b0; 15????????else 16????????????c?<=?a+b; 17????end 18endmodule 2. 編譯:
1iverlogadder_rtl.v

1moduleadder(clk,rst_n,a,b,c); 2input[3:0]a; 3input[3:0]b; 4output[7:0]c; 5inputclk,rst_n; 6 7wire[3:0]a; 8wire[3:0]b; 9reg[7:0]c; 10 11always@(posedgeclkornegedgerst_n)begin 12if(rst_n==1'b0) 13c<=?8'b0; 14????????else 15????????????c?<=?a+b; 16????end 17endmodule 3. 編譯: 1iverlogadder_rtl.v

1//adder_tb.v 2`timescale1ns/1ns 3moduleadder_tb(); 4reg[3:0]a; 5reg[3:0]b; 6wire[7:0]c; 7 8regclk,rst_n; 9 10adderDUT( 11.clk(clk), 12.rst_n(rst_n), 13.a(a), 14.b(b), 15.c(c) 16); 17 18alwaysbegin 19#10clk=0; 20#10clk=1; 21end 22 23initialbegin 24rst_n=1; 25test(4'b1111,4'b1111,5'b11110); 26$finish; 27end 28tasktest; 29input[3:0]in; 30input[3:0]in2; 31input[7:0]e; 32begin 33a=in; 34b=in2; 35@(posedgeclk); 36@(negedgeclk); 37if(c==e)begin 38$display("Itworks"); 39endelsebegin 40$display("opps%d+%d~=%d,expect%d",in,in2,c,e); 41end 42end 43endtask 44endmodule 4. 編譯運行:
1iverilogadder_rtl.vadder_tb.v


1iverilogadder_rtl.vadder_tb.v-oadder_test

1initialbegin 2$dumpfile("wave.vcd");//指定用作dumpfile的文件 3$dumpvars;//dumpallvars 4end 7. 重新編譯運行一遍, 生成了一個vcd文件, 使用gtkwave查看.



-D: 定義宏
-P: 覆蓋root module中的一個參數(shù)的值
-E: 只預(yù)處理(進行宏替換), 不編譯
-g1995, -g2001, -g2005 ...: 選擇支持的verilog語言版本.
-I includedir: 指定(添加)verilog中include指令的搜索路徑
-s topmodule : 指定要建立的頂層模塊. 默認(rèn)是沒有被實例化的哪些module
VPI: Verilog Prodecure Interface(VPI), 最開始也稱作PLI 2.0, 一個主要面向C語言的接口. 可以讓行為級別的Verilog代碼調(diào)用C函數(shù), 讓C函數(shù)調(diào)用標(biāo)準(zhǔn)Verilog系統(tǒng)函數(shù).
1//adder.c 2#include
1//adder_tb.v 2`timescale1ns/1ns 3moduleadder_tb(); 4reg[3:0]a; 5reg[3:0]b; 6wire[7:0]c; 7 8regclk,rst_n; 9 10integeri,n,nf; 11 12adderDUT( 13.clk(clk), 14.rst_n(rst_n), 15.a(a), 16.b(b), 17.c(c) 18); 19 20alwaysbegin 21#10clk=0; 22#10clk=1; 23end 24 25initialbegin 26$display("============================="); 27$display("Tbstartathere"); 28rst_n=1; 29n=0; 30nf=0; 31//$test($random%4,2); 32for(i=0;i20;?i++) 33?????????????????????test($urandom%5'b10000,$urandom%5'b10000); 34??????????????$display("%d?total,?%dfail",?n,?nf); 35??????????????$finish; 36???????end 37???????task?test; 38??????????????input?[3:0]?in; 39??????????????input?[3:0]?in2; 40??????????????begin:?test 41?????????????????????reg?[7:0]?e; 42?????????????????????a?=?in; 43?????????????????????b?=?in2; 44????????????$sum(a,b,e);?//?HERE 45?????????????????????@(posedge?clk); 46?????????????????????@(negedge?clk); 47?????????????????????n?=?n?+?1; 48?????????????????????if?(c?==?e)?begin 49????????????????????????????$display("Itworks,?%d?+?%d?=?%d",?in,?in2,?e); 50?????????????????????end?else?begin 51????????????????????????????nf?=?nf?+?1; 52????????????????????????????$display("opps%d?+?%d?~=?%d,?expect?%d",?in,?in2,?c,?e); 53?????????????????????end 54??????????????end 55???????endtask 56 57???????//?initial?begin 58??????????????//$dumpfile("wave.vcd"); 59??????????????//?$dumpvars; 60???????//?end 61endmodule 編譯運行:
1iverilogadder_rtl.vadder_tb.v-oadder.vvp 2iverilog-vpiadder.c 3vvp-M.-madderadder.vvp iverilog-vpi: 自帶的幫助生成庫的腳本 -M path: 將path加入定位VPI模塊的路徑, .: 當(dāng)前路徑 -m module: 告訴vvp在執(zhí)行simulation之前加載指定的module.

-
Verilog
+關(guān)注
關(guān)注
28文章
1365瀏覽量
111506 -
編譯
+關(guān)注
關(guān)注
0文章
674瀏覽量
33614 -
仿真工具
+關(guān)注
關(guān)注
0文章
36瀏覽量
10963
原文標(biāo)題:一文學(xué)會使用全球第四大數(shù)字芯片仿真器iverilog!
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
FPGA Verilog編譯和Syntesi工具怎么使用
基于Verilog的順序狀態(tài)邏輯FSM的設(shè)計與仿真

北大微電子verilog講義課件

基于STC-TOOL_STC單片機編譯(匯編)編程(燒錄)仿真工具說明書

verilog編譯指令_verilog編譯器指示語句(數(shù)字IC)

如何使用Icarus Verilog+GTKWave來進行verilog文件的編譯和仿真

Verilog HDL 編譯器指令說明

使用開源verilog仿真工具進行文件的編譯和仿真
VCS編譯選項:-y及+libext+
介紹下Verilog系統(tǒng)完整的8種編譯指令
Verilog 測試平臺設(shè)計方法 Verilog FPGA開發(fā)指南
Verilog 電路仿真常見問題 Verilog 在芯片設(shè)計中的應(yīng)用
FPGA Verilog HDL語法之編譯預(yù)處理

評論