前言
quartus II + modesim的仿真流程太过繁琐,每次修改代码都要重新编译,重新打开modesim仿真十分花时间,了解到iverilog+GTKWave的仿真方法后觉得非常快速便捷,并结合VScode编辑,做个小结
参考:@wangxuan95、@浮沉野马
一、VScode下载以及插件安装
见参考的链接,有很详细的介绍
二、VSCode+iverilog+GTKWave流程
2.1 编写代码
我们使用VScode编写代码,文件名为CLC_LFSR.sv、tb.sv
ps:测试用例其实是CRC校验的文件,但是打错字写成了CLC…
正常编写tb文件后,额外加上一段代码:
initial begin
$dumpfile("wave.vcd"); // 指定VCD波形文件的名字为wave.vcd,仿真信息将记录到此文件,wave.vcd文件将存储在当前目录下
//$dumpfile("./simulation/wave.vcd"); // wave.vcd文件将存储在当前目录下的simulation文件夹下
$dumpvars(0, tb ); // 指定层次数为0,则tb模块及其下面各层次的所有信号将被记录,我们需要所有信号都被记录
#300 $finish; // 一定要设置一个仿真停止时间
end
2.2 iverilog编译
按CTRL + ~ 打开终端 PowerShell
在终端内输入:
md simulation
del sim.out wave.out
iverilog -g2005-sv -o sim.out tb.sv CLC_LFSR.sv
vvp -n sim.out
gtkwave wave.vcd
每行命令解释如下:
md simulation
(可没有): 在当前目录下新建文件夹:simulation
del sim.out wave.out
(可没有): 删除当前目录下的文件:sim.out 和 wave.vcd
使用该命令是为了在编译失败时也能删掉 sim.out 和 wave.vcd 文件(如果有的话),避免让你误以为编译成功并产生了 wave.vcd (实际上这可能是上次编译成功时生成的波形)。
iverilog -g2005-sv -o sim.out tb.sv CLC_LFSR.sv
:
该命令的含义是:
- 用 iverilog 编译 tb.sv 和 CLC_LFSR.sv(多个文件时最好将顶层模块放在首位)
- 生成仿真可执行文件 sim.out
- -g2005-sv 代表语言标准为 SystemVerilog-2005 。
关于语言标准,你可以用以下选项,高版本是向下兼容低版本的,比如你的代码使用 Verilog-2001 编写,那么这个选项也可以设为 -g2012 。
选项 | 语言标准 | IEEE 标准 | 备注 |
---|---|---|---|
-g1995 | Verilog-1995 | IEEE1364-1995 | |
-g2001 | Verilog-2001 | IEEE1364-2001 | |
-g2005 | Verilog-2005 | IEEE1364-2005 | 推荐使用(2022年) |
-g2005-sv | SystemVerilog-2005 | IEEE1800-2005 | 推荐使用(2022年) |
-g2009 | SystemVerilog-2009 | IEEE1800-2009 | |
-g2012 | SystemVerilog-2012 | IEEE1800-2012 |
目前(2022年)进行 FPGA 开发推荐使用的是 Verilog-2005 和 SystemVerilog-2005 ,因为各种 FPGA 开发环境支持的最全。
编译好后,可以看到生成了一个 sim.out 文件
vvp -n sim.out
: 使用该指令对sim.out文件进行仿真,并记录下波形,生成wave.vcd文件
gtkwave wave.vcd
: 使用该命令打开 gtkwave 查看波形文件(我测试时会报错,不过没关系,我们找到vcd文件的位置,双击选择gtkwave打开就行,如果有知道怎么解决的希望可以在评论区解答一下,谢谢)
所有命令中的文件都可以在当前目录的基础上指定子目录或上层目录的文件夹,例如
./RTL/tb.sv
是指在当前目录下的RTL
文件夹下的tb.sv
文件
../RTL/tb.sv
是指在当前目录的上层目录的RTL
文件夹下的tb.sv
文件
然后就可以愉快的查看波形啦~