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

总的文件如下:

执行make all:

跑完后如下:

生成的文件如下:

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

可以看到波形如下:

最新文章

最新文章