vcs-编译+仿真+dump波形【IMP】

资料来源

(1) 公众号-全栈芯片工程师;

(2) 公众号-ICer消食片;

注1:VCS仿真分为两步式(编译/compilation+仿真/simulation)和三步式(分析/analysis+细化/elaboration+simulation/仿真);

注2:analysis/分析是三步式flow中仿真design的第一步,在此阶段将使用vhdlanvlogan分析VHDL、Verilog、SystemVerilog和OpenVera文件。下面的部分包括几个分析设计文件的示例命令行:

 1 Analyzing your VHDL files:
 2 vhdlan [vhdlan_options] file1.vhd file2.vhd
 3 
 4 Analyzing your Verilog files:
 5 vlogan [vlogan_options] file1.v file2.v
 6 
 7 Analyzing your SystemVerilog files:
 8 vlogan -sverilog [vlogan_options] file1.sv file2.sv file3.v
 9 
10 Analyzing your OpenVera files:
11 vlogan -ntb [vlogan_options] file1.vr file2.vr file3.v
12 
13 Analyzing your SystemVerilog and OpenVera files:
14 vlogan -sverilog -ntb [vlogan_options] file1.sv file2.vr file3.v

注3:elaboration/细化是三步式flow中仿真design的第二步,在这个阶段,使用分析过程中生成的中间文件,VCS构建实例层次结构并生成一个二进制可执行的simv,该二进制可执行文件之后用于仿真。可选择优化模式或调试模式来细化design。

1.1.  编译

1.1.1. 关于编译

(1) 构建实例的层次结构,并且生成二进制可执行文件simv,该二进制可执行文件后续会用于仿真.

(2) 在编译阶段,可以选择optimized mode或debug_mode进行design的编译;

1.1.2. 编译命令

(1) vcs  [compile_options] verilog_files

(2) vcs -sverilog [compile_options] sverilog_files  (using sv with vcs)

(3) vcs -sverilog -ntb_opts uvm-1.2 [compile_options] user_source_files_using_UVM      (using uvm-1.2 with vcs, -ntb_opts uvm-1.2会load UVM-1.2)

(4) 显式指定UVM文件与参数: vcs -sverilog +incdir+${UVM_HOME}/src   ${UVM_HOME}/src/uvm_pkg.sv  ${UVM_HOME}/src/dpi/uvm_dpi.cc    -CFLAGS -DVCS [compile_options]user_source_files_using_UVM

(5) 使用需要通过UVM register backdoor机制访问HDL寄存器的test: vcs -sverilog -debug_pp -ntb_opts uvm [compile_options] user_source_files_using_UVM  (-debug_pp可能会影响仿真性能,需要使用+vcs+learn+pli提高HDL访问性能)

1.1.3. 常用的编译option

注1: -h or -help列出最常用的VCS编译和运行时选项的描述;

注2: -ID返回有用的信息,如VCS版本和构建日期,VCS编译器版本,以及工作站名称、平台和主机ID;

(1) -v filename:可以指定一个verilog库文件,vcs会在该文件中查找module或UDP实例的定义;

(2) -y directory:可以指定verilog库文件路径;

(3) +incdir+directory+:指定路径,vcs会在这些路径下搜索`include语句中的文件;

(4) +libext+extension+:指定vcs在指定路径下搜索哪些扩展名的文件;

(5) -full64:使能64-bit模式下的编译与仿真;

(6) -file filename:指定包含一系列文件与编译时间选项的文件;

(7) -gui:当在编译时使用gui模式,仿真时会启动DVE(Discovery Visualization Environment);

(8) -R:在编译完成后,立刻开始仿真;

(9) -l filename:指定vcs记录编译信息的文件;如果同时使用-R option,vcs会将编译信息和仿真信息均记录到该文件内;

(10) +define+macro=value+:其中=value参数是可选的,可以通过在verilog代码中使用`ifdef来测试该define;

(11) -debug, -debug_all, -debug_access(+<option>)

(12) -o:可以指定编译生成的二进制可执行文件的名字;

(13) +mindelays:门级仿真时使用,表示器件延时使用sdf 文件中的最小值(sdf 文件中的时序(min:typ:max));

(14) +maxdelays:门级仿真时使用,表示器件延时使用sdf 文件中的最大值(sdf 文件中的时序(min:typ:max));

(15) –sverilog:支持systemverilog 语法(vcs 用,verid 用-sv);

(16) +v2k:支持verilog 2001 特性;

(17) -lca:Limited Customer Availability,支持动态数据类型associative Array,dynamic Array,smart Queue,string,
event,class;

(18) –debug_all:支持所有debug 操作,DVE 选项,可以查看所有断点(line,time,value,event etc) all 就是加权限。+w 是写,+r 是读,+f 是force, +l 是支持ucli 的单步调试, +n 是对网表操作。具体可以看手册。+all 就是把所有的权限全开;

(19) –debug_acess+all:在VCS 编译的时候不用再加-p novas.tab pli.a 来定verdi 的路径。

(20) +ntb_random_seed=value:指定仿真随机种子;

(21) +ntb_random_seed_automatic:VCS 自动生成随机种子;

(22) -timescale=1ns/10ps:命令行定义仿真时间刻度,若rtl 中有timescale 的定义,则会覆盖makefile 中的定义;

(23) +neg_tchk:门级仿真时使用,表示当进行negative timing check时必须包含该option,否则vcs会把所有负值变为0,这会使得timing check很悲观.

(24)+nospecify/+notimingcheck:门级仿真时使用,表示忽略path delay和specify延时;

(25) -negdelay:门级仿真时使用,表示使能SDF文件中的所有的负值,但是要保证setup和hold(rec和rem)的和为正值,否则vcs会忽略负值同时给出warning.

 

1.2.  仿真 

1.2.1. 关于仿真

(1) 在编译阶段,vcs会生成二进制可执行文件.simv;可以使用simv进行仿真;

(2) 根据怎么编译design,仿真可以有两种模式: interactive模式(编译采用debug模式,也称为interactive模式)与batch模式;

(3) Interactive mode在初始阶段以交互模式(调试模式)编译design。在这个阶段,可以使用GUI或通过命令行调试design问题。通过GUI进行调试可以使用Verdi,通过命令行进行调试可以使用UCLI (Unified command line interface);

(4) batch mode: 当大多数design问题解决后,可以使用批处理模式(优化模式)编译design。在这个阶段,可以以最小的debug性能来换取更好的性能来运行回归

1.2.2. 仿真命令

(1) simv [run_options]

(2) uvm仿真命令: simv +UVM_TESTNAME=your_uvm_test  [sim_options]

1.2.3. 常用的仿真option

1.2.4. interactive模式下仿真

(1) 必须使用DVE或者UCLI;

(2) DVE的优点:

(2.1) DVE提供GUI接口,便于debug,使用时需要保证VCS与DVE版本相同;

(2.2) DVE便于观察波形,比较波形,观察原理图;

(2.3) 执行ucli/tcl命令;

(2.4) 设置断点;

(3) DVE工作在interactive模式下的仿真命令

(3.1) simv -gui

(4) DVE工作在post-processing模式下的仿真命令

(4.1) dve -vpd [VPD/EVCD_filename]

(5) UCLI简介

(5.1) ucli命令基于tcl;

(5.2) 通过使用ucli命令,可以控制仿真, dump VPD文件,保存或重现仿真状态, force/release信号;

(5.3) 使用断点;

(6) 启动ucli

(6.1) simv [simv_options] -ucli

1.2.5. batch模式下仿真

 

1.3.  dump波形

1.3.1 使能波形dump

无论采用系统函数或ucli dump波形,都必须采用如下option中的一个进行波形dump的使能;

(1) -debug_access

(2) -fsdb

(3) -P $VERDI_LIB/novas.tab $VERDI_LIB/pli.a

1.3.2 采用系统函数进行波形dump

(1) code内部调用系统函数,如下所示;

 

 

注1:dump波形时,避免在module内的两个线程内都调用$fsdbDumpfile函数;因为第一次调用该函数时,会产生一个后缀为.fsdb的文件,当第二次调用该函数时,会报如下warning:"FSDB WARNING: The FSDB file already exists. Overwriting the FSDB file may crash the programs that are using this file.",这种情况下,只有第一次调用生效;

(2) 编译命令如下所示;

 

(3) 仿真命令如下所示;

simv

1.3.3 采用ucli dump波形

 

posted on 2021-11-20 15:06  知北游。。  阅读(6241)  评论(0编辑  收藏  举报

导航