一、本地仿真环境搭建

1. 环境搭建

对于Verilog的仿真环境搭建,为了简便起见,这里推荐使用Visual Studio Code(VSCode) + Icarus Verilog (iverilog) + Gtkwave的仿真环境。

VScode用于编写代码,iverilog用于仿真,Gtkwave用于查看波形。

关于此仿真环境的搭建,网上的好教程很多,这里不再赘述。这里推荐大家阅读中科大数字电路实验1中3.1节的教程, 直至看到:

“至此,我们已经得到了基本的 VSCode 开发环境。你可以阅读这篇教程获得更多的信息。”

当然你也可以继续完成3.2节的配置,来获取更好的编程体验,不过这并不是必须要做的。

2. 仿真示例

此处以一个101序列检测器作为示例:

创建demo.v:

module demo(
        input clk,
        input rst,
        input wire a,
        output wire w
    );
    reg [2:0] buffer; //要检测的序列长度为3
    always @(posedge clk) begin
        if(rst) begin
            buffer <= 3'b0;
        end
        else begin
            buffer <= {buffer[1:0], a};
        end
    end
//检测101序列
assign w = (buffer == 3'b101);
endmodule

创建demo_tb.v,编写testbench:

`timescale 1ns/1ns

module demo_tb();
    reg clk;
    reg rst;
    reg input_;
    wire output_;
	
    demo demo_dut(
             .clk(clk),
             .rst(rst),
             .a(input_),
             .w(output_)
         );

    //生成时钟
    initial begin
        #5
        clk = 1'b0; 
        forever #5 clk = ~clk;
    end
    
    //生成波形文件
    initial begin
        $dumpfile("wave.vcd");
        $dumpvars(0, demo_tb);
    end

    //生成输入测试信号
    initial begin
        forever #10 input_ = $random % 2;
    end

    //生成复位信号和设置仿真时长
    initial begin
        rst = 1;  //使能复位
        #15  rst = 0;
        #200 $stop;   //停止仿真
    end
    
endmodule

仿真

在vscode中终端=>打开终端,并输入命令:

iverilog -o simv demo.v demo_tb.v
vvp -n  simv -lxt2

如果你发现键入命令后报错:找不到iverlog,则需要检查PATH环境变量。

此时查看当前目录下文件,发现生成了wave.vcd波形文件,则可使用gtkwave打开文件:

gtkwave wave.vcd 

image-20240429180400017

此处也可使用vscode的WaveTrace插件来打开vcd文件,但是该插件的免费版本最多只能显示8组信号。

如果你不想每次仿真都输入好几条命令: 可以尝试用make或者脚本来完成。