VCS中利用Makefile脚本仿真详细图解


1.可仿真的Verilog文件

通常是写一个module.v文件,然后写一个testbenchmodule_tb.v文件,该文件中例化module。可仿真的Verilog文件是指testbenchmodule_tb.v

VCSmodule_tb.v除了声明timescale,初始化信号输入和例化module外,还需要加上波形输出函数$vcdpluson()和仿真时间控制函数$finish(),如下;

`timescale 1ns/1ns


module verilog_tb;


initial

begin

$vcdpluson();

//must write thisinitial if you want to view the waveform in DVE

end

initial

begin

#100 $finish();

//control thesimulation time, this example is 100ns

end

endmodule

本文先写一个简单的tb,先不包括例化module,仅仅只定义几个reg信号。下面为gen_circulation.v,其基本功能是生成多个重复波形,仿真时间为100ns,该文件在附件的gen_circulation文件夹中。具体可参考《VerilogHDL设计与实战》第10章。

`timescale 1ns/1ns


module gen_circulation;


reg a;

reg b;

reg c;

initial

begin

a = 0;

forever

#2 a = ~a;

end

initial

begin

b = 0;

end

always

#4 b = ~b;

initial

begin

c = 0;

forever

begin

#1 c= 1;

#2 c= 0;

#3 c= 1;

#4 c= 0;

end

end


initial

begin

$vcdpluson();

end


initial

begin

#100 $finish();

end

endmodule


2、通过Makefile脚本进行编译和仿真

采用Makefile脚本可以方便在VCS中的编译compile和仿真simulate以及清除文件clean,具体内容可以查看附件gen_circulation/Makefile。这里只讲解操作。

1)首先确认安装了VCS软件,然后在gen_circulation文件夹中打开terminal,输入makecompile f=gen_circulation.v,然后可以看到下图编译成功的信息。通过makefile实际上输入的命令为vcs-sverilog -debug_all +notimingcheck +nospecify +v2k -l com.loggen_circulation.v,这些都可以不理会。

2)然后在terminal中输入makesimulate,可以有如下仿真成功的信息。通过makefile实际上输入的命令为./simv-l sim.log +notimingcheck +nospecify,这些也可以不理会。

注:前面的makecompile f= gen_circulation.vmakesimulate两步可以合为一步执行makeall f= gen_circulation.v

3)最后terminal中输入dve,打开波形查看的界面。

4FileOpen Database 选择对应的vcdplus.vpd文件

5)选择a,b,c,右键选择Addto waves New wave view,这样就显示出了波形

6)现在就可以查看波形。通过Makefile脚本进行编译和仿真的操作过程已结束,后面是一个稍微复杂一点的testbench,即含有module例化的testbench仿真。

7)如果要清空gen_circulation文件夹中仿真过程产生的文件,可以在terminal中输入makeclean通过makefile实际上输入的命令为rm-rf csrc DVEfiles simv simv.daidir ucli.key VCS*rm-rf *.log *.vpd *.ddc *.svf *.SDF *Synth *Netlist* work vsim*transcript,这些也可以不理会。



3 含有module例化的testbench仿真half_adder

half_adder文件夹下有三个文件half_adder.vhalf_adder_tb.vMakefile,文件内容如下,

half_adder.v

module half_adder (

input I_a,

input I_b,


output O_sum,

output O_cout

);


assign O_sum = I_a ^ I_b;

assign O_cout = I_a & I_b;


endmodule

half_adder_tb.v

`timescale 1ns/1ns


`include "half_adder.v"


module half_adder_tb;

reg a;

reg b;

reg sum;

reg cout;

initial

begin

a=0;

forever

begin

#10 a=0;

#10 a=0;

#10 a=1;

#10 a=1;

end

end


initial

begin

b=0;

forever

begin

#10 b=0;

#10 b=1;

#10 b=0;

#10 b=1;

end

end

initial

begin

$vcdpluson(); // vcsdump waveform

end


initial

begin

#100 $finish();

end

half_adder U1_half_adder (

.I_a(a),

.I_b(b),

.O_sum(sum),

.O_cout(cout)

);


endmodule


terminal中输入

make all f=half_adder_tb.v

然后打开波形


4 总结

Makefile脚本能大大简化VCS中的仿真。



附:查看verilog对应的门级结构

VCS中不能查看verilog对应的门级结构,但是DC可以读入verilog文件对应到DC自带的GETCH库,然后打开gui查看门级结构。如果需要综合,则需要添加实际的库文件和时序约束。这里并没有综合,只是映射到DC自带的逻辑库GETCH库上。

1)启动DC

dc_shell -topographical -64bit| tee log

2)读入verilog文件

dc_shell-topo> read_veriloghalf_adder.v

3)打开gui界面

dc_shell-topo> start_gui

4)查看电路结构

你可能感兴趣的:(synopsys,脚本)