Icarus Verilog的简单使用
1. 关于iverilog
Icarus Verilog是一种Verilog仿真和综合工具,能够将基于Verilog(IEEE-1364)编写的源代码编译为某些目标格式。针对批处理仿真,编译器可生成一种名为" VVP "的中间组件;同时,自带GTKWave软件,可方便查看verilog/VHDL的仿真波形图。
相比FPGA大厂提供的复杂IDE,用户不仅要购买licence,而且需要花费不少时间熟悉操作方法;iverilog是一款轻量、免费、开源的Verilog编译器,且操作简单,通过“指令”操作,更贴近编译本质。
对于初学者,寻找一本好的教材,并基于iverilog平台熟悉例程,具有不错的学习效率。
2. 安装iverilog
下载iverilog安装包完成后,直接双击安装即可(注意:路径不能有空格)。
目前最新版本:iverilog-v11-20190809-x64_setup.exe [17.0MB]
选择“全安装方式”,如下:
选择“添加到环境变量”,如下:
打开cmd终端,查看是否安装成功,如下:
用户也可选择Cygwin64 Terminal,具体安装方法见《Win7下类linux终端环境—Cygwin》
3. 编写源码及测试文件点击下载附件
以计数器为例,源码文件(counter.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
对应的测试文件(counter_tb.v)如下:
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
endmodule4. 终端编译
打开cmd终端 或 Cygwin64 Terminal ,依次输入以下指令,进行编译和执行。
(1)编译代码
iverilog -o counter_test counter_tb.v counter.v
(2)生成.vcd文件
vvp counter_test
(3)gtkwave查看波形
gtkwave counter_test.vcd
5. 其它
除以上功能外,ierilog也支持很多其它功能,如:文件格式转换功能等。如下:
