前言
计组课程官方推荐的Verilog仿真工具是ISE和VCS,评测机使用ISE。
但是在尝试在win11的wslg上安装ISE后,虽然成功了,但是难用的一批,而且还有bug,仿真总是失败等问题。而课程虚拟机里面的VCS按照课程组提供的方法,又无法生成波形文件,查阅资料后也一筹莫展,弄的我一头雾水。于是开始寻求其他工具。
在经过不同关键词检索以后,终于看到了本校学长的知乎专栏,推荐了一个VScode上进行Verilog仿真的方法!安装不仅非常简单,而且使用也很简单,爆杀20G的ISE和安装繁琐的VCS!而且是一个开源的,跨平台的软件,简直就是神一般的存在!
下面的教程参考了学长的专栏
安装VScode
不会吧不会吧,不会有人看这篇文章却没有安装VScode吧。
安装iVerilog
iVerilog全称Icarus Verilog,官方下载方式在这里
安装的时候,基本上都可以随意,直接Next都行,不过记得添加PATH。就是一定要勾选“Add executable folders to the user PATH”
安装VScode插件
你需要安装以下几个插件:
- Verilog-HDL/SystemVerilog/Bluespec SystemVerilog
- Verilog HDL
- Verilog Snippet
- WaveTrace
前三个插件,提供代码高亮,代码补全,一键运行等功能。
第四个插件,提供波形查看。(下载iVerilog的时候应该有下载GTKWave,你也可以用这个软件查看波形)
插件设置
仅需要设置Verilog-HDL/SystemVerilog/Bluespec SystemVerilog插件
找到插件设置中的Verilog > Linting: Linter
在下拉菜单中选中iverilog即可
使用
写一端.v代码,然后写对应的testbench,然后在testbench里面,点击右上角的绿色的按钮,即可运行。
若想要生成波形文件,请在testbench中加上以下代码:
initial begin
$dumpfile("*.vcd"); // * 是你希望产生的波形文件的名字
$dumpvars;
end
注意:你必须在testbench的test运行结束之后,使用$finish;
结束代码,否则波形文件不会结束,需要手动前往任务管理器,结束vvp.exe
进程。
最后点开*.vcd
文件就可以查看波形了(如果你下载了WaveTrace插件的话)
testbench怎么写我就不教了吧,下面给一个测试代码吧。
示例代码
// adder.v
`timescale 1ns/1ps
module adder (
input clk,
input [31:0] in1,
input [31:0] in2,
output reg [31:0] out
);
always @(posedge clk) begin
out <= in1 + in2;
end
endmodule
// adder_tb.v
`timescale 1ns/1ps
`include "adder.v"
module adder_tb;
// Dump waveform to file (it would be impossible to view wavefrom without
// this task)
initial begin
$dumpfile("adder_wave.vcd");
$dumpvars();
end
// Generate clock
reg clk;
initial clk = 0;
always #10 clk = ~clk;
// Input registers
reg [31:0] a, b;
wire [31:0] c;
initial begin
a = 0;
b = 0;
@(negedge clk);
a = 32'h631;
b = 341;
@(negedge clk);
$display("%d + %d = %d\n", a, b, c);
a = 32'o1461;
b = 0;
@(negedge clk);
$display("%d + %d = %d\n", a, b, c);
#20;
// Exit the simulation
$finish;
end
// Device under test (our adder)
adder dut(.clk(clk), .in1(a), .in2(b), .out(c));
endmodule
参考资料
–57ad80b4cdcc5f9fca963214c77b67e7–