1 VCS的仿真过程主要包括两步:

1)编译

2)执行

VCS仿真学习(1)_VCS

2 addertb.v

module addertb;
reg [7:0] a_test, b_test;
wire [7:0] sum_test;
reg cin_test;
wire cout_test;
reg [17:0] test;

add8 u1(a_test, b_test, cin_test, sum_test, cout_test);

initial
begin
for (test = 0; test <= 18'h1ffff; test = test +1) begin
cin_test = test[16];
a_test = test[15:8];
b_test = test[7:0];
#50;
if ({cout_test, sum_test} !== (a_test + b_test + cin_test)) begin
$display("***ERROR at time = %0d ***", $time);
$display("a = %h, b = %h, sum = %h; cin = %h, cout = %h",
a_test, b_test, sum_test, cin_test, cout_test);
$finish;
end
#50;
end
$display("*** Testbench Successfully completed! ***");
$finish;
end
endmodule

3 makefile

```bash
#complie simulation coverage debug clean
.PHONY:com sim cov debug clean

#output sim file
OUTPUT =add

#code coverage command
CM = -cm line+cond+fsm+branch+tgl
CM_NAME = -cm_name ${OUTPUT}
CM_DIR = -cm_dir ./${OUTPUT}.vdb

VPD_NAME =+vdpfile+vcdplus.vpd
DUMP_VPD =+define+DUMP_VPD
VCS =vcs -full64 \
-timescale=1ns/1ns \
-cpp g++-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed \
+v2k \
-debug_all \
-o ${OUTPUT} \
-l compile.log \
${VPD_NAME} \
${DUMP_VPD} \
${CM} \
${CM_NAME} \
${CM_DIR} \
-Mupdate \
-cm_hier ./cov.cfg

SIM =./${OUTPUT} ${VPD_NAME} -l ${OUTPUT}.log \
${CM} \
${CM_NAME} \
${CM_DIR}

com:
${VCS} -f filelist.f
sim:
${SIM}

cov:
dve -full64 -covdir *.vdb &
debug:
dve -full64 -vpd vcdplus.vpd &
clean:
rm -rf ./csrc *.daidir *.log simv* *.key *.vpd ./DVEfiles ${OUTPUT} *.vdb

4使用

make

VCS仿真学习(1)_VCS_02

make sim

VCS仿真学习(1)_bash_03