vcs+verdi仿真Verilog代码

作者:张海军 来源:傅里叶的猫

我们以一个简单的加法器为例,来看下如何用vcs+verdi仿真Verilog文件并查看波形。

源文件内容如下:

//adder.v
module adder(
 input          clk,
 input          rst,
 input   [9:0]  A,
 input   [9:0]  B,
 output reg [10:0] C
);
always @ ( posedge clk ) begin
    if(rst)
        C <= #`FFD 'b0;
    else
        C <= #`FFD A + B;
end
endmodule


我们再定义一个宏定义的文件:

//macro_define.sv
`define FFD 1ns

我们需要再定义一个testbench文件:

//test.sv
module test;
reg clk;
reg rst;
reg [9:0] A;
reg [9:0] B;
wire [10:0] C;
initial begin
    rst = 1;
    A = 0;
    B = 0;
    #1us;
    rst = 0;
    #1us;
    A = 10'd100;
    B = 10'd200;
    #1us;
    A = 10'd300;
    B = 10'd400;
        #20us;
        $finish;
end
initial begin
    clk = 0;
    forever  #10ns clk <= ~clk;
end
adder add_inst(
    .clk(clk),
    .rst(rst),
    .A(A),
    .B(B),
    .C(C)
);
`ifdef DUMP_FSDB
    initial begin 
                $fsdbDumpfile("tb.fsdb");
        $fsdbDumpvars("+all");
        //string testname;
        //if($value$plusargs("TESTNAME=%s", testname)) begin
        //    $fsdbDumpfile({testname, "_sim_dir/", testname, ".fsdb"});
        //end else begin
        //    $fsdbDumpfile("tb.fsdb");
        //end
    end 
`endif 
endmodule


再定义一个filelist文件:dut.f

./macro_define.sv
./adder.v
./test.sv

最后就是需要一个Makefile文件了:

#!/bin/make
all: comp sim
comp:
        vcs -full64 -timescale=1ns/1ps -V -R -sverilog \
        -debug_access+all +vc +v2k -kdb \
        -l vcs.log \
        -f dut.f +define+DUMP_FSDB=1 \
        -top test 
sim:
        ./simv -l simv.log
clean:
        rm -rf *~  core  csrc  simv*  vc_hdrs.h  ucli.key  urg* *.log  novas.* *.fsdb* verdiLog  64* DVEfiles *.vpd


总的文件如下:

1.png

执行make all:

2.png

跑完后如下:

3.png

生成的文件如下:

4.png

用verdi打开波形:verdi -ssf tb.fsdb

5.png

可以看到波形如下:

6.png

最新文章

最新文章