首先我们需要简单的了解一下iverilog和gtkwave是干什么用的:
iverilog:用于功能仿真并记录仿真结果数据,编译verilog和vhdl文件进行语法检查并生成可执行文件。
gtkwave:可以用开查看iverilog产生的数据波形文件
vvp:根据可执行文件,生成仿真波形文件
第一步:下载iverilog和gtkwave工具
安装iverilog
sudo apt-get install iverilog //安装12.0的iverilog
安装gtkwave
sudo apt-get install gtkwave
如果安装不成功。试着更换一下地址,或者重新运行一下安装程序。
第二步:查看是否安装成功
which iverilog
which vvp
which gtkwave
第三步:下面以一个简单的计数器为例,运行仿真波形并查看。
创建.v的源文件
$:vim counter.v
输入.v的源文件内容
module counter(irst, iclk, ocnt );
input irst, iclk;
output reg [3:0] ocnt;
always @ (posedge iclk)
if(irst)
ocnt <= 4'b0000;
else
ocnt <= ocnt + 1'b1;
endmodule
创建testbench仿真文件
$:vim counter_tb.v
输入testbench仿真文件内容
module counter_tb;
reg irst = 0;
reg iclk = 0;
wire [3:0] ocnt;
initial begin
irst = 1; #100;
irst = 0; #300;
$stop;
#1000;
$finish;
end
always begin #5 iclk = !iclk; end
counter counter_test(
.irst(irst),
.iclk(iclk),
.ocnt(ocnt)
);
initial
$monitor("At time %t, ocnt = %d", $time, ocnt);
initial
begin
$dumpfile("counter_test.vcd");
$dumpvars(0, counter_test);
end
endmodule
第四步:进行编译,生成波形文件,打开波形文件
$:iverilog -o counter_test counter_tb.v counter.v //创建一个test测试文件,对源文件和仿真文件,进行语法规则检查和编译
$:vvp -n counter_test -lxt2 //生成.vcd波形文件
$:cp counter_test.vcd counter_test.lxt
$:gtkwave counter_test.lxt //打开波形文件,可以在图形化界面中查看仿真的波形图