最近刚接触数字逻辑这门课,需要用到Verilog并配套Vivado编程,但是本人觉得Vivado内的操作较为繁琐,并且课上对Verilog涉及不多,容易导致新手在实际编写时遇到各种问题。
故本文将描述在VSCode中配置Verilog仿真的方法,同时补充对TestBench文件的讲解,希望可以通过VSCode更简便的实现Verilog仿真。
利用iVerilog和GTKWave两个开源软件。
iVerilog负责编译文件,GTKWave负责查看仿真波形。
故本质上可以通过终端命令操作,插件只是简化了操作步骤。
1. 安装iVerilog(附带安装GTKWave)
2. 在VSCode中安装Digital IDE插件
3. 在插件设置中,配置iVerilog和GTKWave的路径(电脑已经安装Vivado的,可以顺便配置Vivado的路径,以实现实时的语法纠错)
以一位全加器做示例,文件名:full_adder.v
module full_adder(Ai,Bi,Ci,Si,Ciout);
input Ai; //输入端口
input Bi; //输入端口
input Ci; //低位进位,输入端口
output Si; //本位和,输出端口
output Ciout; //向高位进位,输出端口
assign Si = Ci^Ai^Bi;
assign Ciout = Ai & Bi|(Ai^Bi) & Ci;
endmodule
关于TestBench理解
TestBench的直译是“测试台”,我将它理解为一种配置文件,在这个文件里面,我们对之前写好的模块进行实例化,并且编写测试的数据,在其中还可以设置仿真时的频率等等……
所以这个文件本质是为后续的仿真服务的
Digital IDE插件自己也有产生testbench的命令,不过也需要手动添加测试数据,故本文尝试自己编写,这样也可以忽略一些新手暂时用不到的配置。
步骤
1. 设置timescale
2. 写出与testbench文件重名的module
3. 把例化所用到的变量列出来
4. 例化模块
5. 编写测试数据
注意事项
波形文件要命名为wave.vcd,因为插件的simulate指令默认打开wave.vcd
testbench文件(tb_full_adder.v)
`timescale 1ps/1ps // 1.设置timescale,时间单位可设为1ps,精度1ps
`include "full_adder.v" // 有时候编译提示需要include头文件
// `include相当于C里的#include
module tb_full_adder; // 2.写出与testbench重名的module
reg Ai, Bi, Ci; // 3.列出例化所用到的变量
wire Si, Ciout;
full_adder name( // 4.例化full_adder.v里的全加器模块
.Ai(Ai),
.Bi(Bi),
.Ci(Ci),
.Si(Si),
.Ciout(Ciout));
initial begin // 5.下面开始编写测试数据:
$dumpfile("wave.vcd"); // 产生波形文件的命令
$dumpvars; // 使所有变量都参与仿真的命令
Ai=1'b0; Bi=1'b0; Ci=1'b0; // 6.以一个时间单位(#1),本例中即1ps的间隔输入测试数据
#1 Ai=1'b0; Bi=1'b0; Ci=1'b1;
#1 Ai=1'b0; Bi=1'b1; Ci=1'b0;
#1 Ai=1'b0; Bi=1'b1; Ci=1'b1;
#1 Ai=1'b1; Bi=1'b0; Ci=1'b0;
#1 Ai=1'b1; Bi=1'b0; Ci=1'b1;
#1 Ai=1'b1; Bi=1'b1; Ci=1'b0;
#1 Ai=1'b1; Bi=1'b1; Ci=1'b1;
#1;
end
endmodule
右键testbench文件,选择“simulate”
弹出窗口后找到相应的变量,缩放观察波形
simulate操作步骤
VerilogHDL插件操作步骤
用VS Code + iverilog + GTKwave仿真Verilog_JeronZhou的博客-CSDN博客
文章编写不易,有用的话还请点个赞吧~