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

总的文件如下:

image-20230507181530700

执行make all

image-20230507181735377

跑完后如下:

image-20230507181825085

生成的文件如下:

image-20230507182042134

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

image-20230507182017953

可以看到波形如下:

image-20230507182653529

FPGA技术交流群:公众号:傅里叶的猫

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值