下面是知友(浮沉野马)的文章中的一部分:
Vscode的插件,调用iverilog编译,生成.o文件。vvp命令可以生成.vcd文件,gtkwave可以直接打开.vcd文件查看波形。
下面我们摆脱vscode编辑器的束缚,在CMD敲命令行代码,调用iverilog编译生成.o文件,然后用vvp命令生成.vcd波形文件(需要在testbench仿真模块"tb_code"里添加下面的代码,不然不会生成.vcd文件),然后用gtkwave打开.vcd波形文件查看波形。
下面展示一些 内联代码片
。
/* 生成vcd波形文件,用iverilog+GTKwave进行仿真所需的临时的vcd波形文件 */
initial begin
$dumpfile("./build/wave.vcd"); // 指定VCD文件的名字为wave.vcd,仿真信息将记录到此文件
$dumpvars(0, tb_code ); // 指定层次数为0,则tb_code 模块及其下面各层次的所有信号将被记录
#10000 $finish;
end
网上找资料也会看到有人在激励模块(仿真模块)添加这样的代码:
initial begin
$dumpfile("wave.vcd"); // 指定VCD文件的名字为wave.vcd,仿真信息将记录到此文件
$dumpvars(0, tb_code ); // 指定层次数为0,则tb_code 模块及其下面各层次的所有信号将被记录
end
我个人是因为希望把编译仿真生成的文件都放到"build"文件夹里,源代码都放到"src"文件夹里,所以我用的是"$dumpfile("./build/wave.vcd");"。
但是很多插件只能支持网上的那种最简单的写法,不然找不到.vcd文件。
还有就是"#10000 $finish;"是怕你一直仿真停不下来,按ctrl+c可强制结束。
然后我们在vscode按下" Ctrl+~ "打开cmd终端(或者点击开始菜单,搜索cmd,但是要cd到工程文件夹)
输入:
md build
iverilog -o ./build/a.out ./src/tb_code.v ./src/code.v
vvp -n ./build/a.out
gtkwave ./build/wave.vcd
这几个命令很好理解。
“md build"创建build文件夹用于存放编译仿真生成的文件
./src/或者说是.\src\ 源代码source都放在了src文件夹里,”."(点)的意思是当前位置。
iverilog作用是编译文件,比如设计模块的代码和仿真模块的代码都在一个test.v文件里,那么编译这个文件只需要命令"iverilog test.v"
可是如果设计模块代码写在了code.v文件里,仿真模块的代码写在了tbcode.v文件里,那么只需要把所有的文件名字全都缀在后面即可"iverilog code.v tb_code.v"
iverilog的参数"-o “是可以省略的,”-o"命令指定编译后生成的.out文件的名字,如果不指定会生成默认的名字,这里我们"-o ./build/a.out"命令生成的是build文件夹下的a.out文件。
"vvp a.out"命令是生成.vcd波形文件,需要在testbench仿真模块(激励模块)添加几行代码(前面有说)
vvp 的“ -n ”参数其实没啥用,因为在仿真模块里,“stop"暂停仿真 ,暂停的话其实就没有结束,你需要输入"finish"才能结束,你输入"exit”、“exit()”、“ctrl+c”、“ESC”、“stop”、":exit"全都没有用!当然继续仿真100ns我其实不太清楚,在vivado却很方便。"-n"的意思就是把"finish"处理了,权宜之计,更多的仿真功能我也不太会。
"gtkwave wave.vcd"意思就是用gtkwave.exe打开.vcd文件,当然你也可以用其他的软件打开。然后就可以看到波形了
当然如果你安装了这个插件WaveTrave,你甚至可以在vscode中直接双击打开你得.vcd文件。
标题自己照着文章中的步骤操作的