当前位置: 代码迷 >> 综合 >> VCS 视频教程 笔记 第三课
  详细解决方案

VCS 视频教程 笔记 第三课

热度:12   发布时间:2023-12-18 22:43:59.0

第三课

Post-processing with VCD+ files

  • 后处理模式

第二课中介绍的是互动模式(interactive)是一种动态debug的做法,在第三课中后处理模式(post-processing)需要先仿真完成后打开波形

当项目趋于收敛时(即比较稳定)时,不会干预仿真,而是等仿真执行完毕

出现Fail会启用DVE,只有ERROR和Warning出现说明可以仿真是可以执行的。 

有一些大型项目的仿真可能要进行好几天,因此仿真速度是比较重要的影响因素

什么时候使用后处理模式:1.仿真比较成熟的项目时  2.需要并行处理波形文件时

 

  • VCD+

启用$vcdpluson选项来记录波形文件。可以记录所有波形也可以只记录一些模块的模型,不带参数则默认记录所有波形;选项可以放在testbench也可以放在RTL代码中

level_number用来标记记录的深度,不标记则表明含有这个语句的模块以及它所含有的所有子模块的信息都会被记录下来。

应用实例:

产生VCD+文件时的编译选项:

注意:1.尽量不要记录Verilog statements exectuion 2.只记录某些小模块的数据  3.使用+vcdbufsize+nn 来控制memory buffer的大小   防止最后的vcd+文件过大。

使用条件编译`ifdef语句可以避免反复的注释和去注释。

 

  • 实例

本视频文件放在~/VCS/fsm_example文件夹下

:set nu命令可以显示行号

OUTPUT = simv_fsm_moore #重命名输出文件
ALL_DEFINE = +define+DUMP_VPD  #如果引用ALL_DEFINE就会开启DUMP_VPD的宏定义#vpd file name
VPD_NAME = +vpdfile+${OUTPUT}.vpd  #符号$表示引用某个字符段,来指定生成文件的名字#compile command
VCS = vcs -sverilog _v2k -timescale=1ns/1ns     \-debug_all                                \+notimingcheck                            \  #这一项表示不作时序检查+nospecify                                \+vcs+flush+all                            \  #控制读写文件的选项${CM}                                     \${CM_NAME}                                \${CM_DIR}                                 \${ALL_DEFINE}                             \${VPD_NAME}                               \-o ${OUTPUT}                              \-l compile.log#simulation command
SIM = ./${OUTPUT}                \${CM} ${CM_NAME} ${CM_DIR} \${VPD_NAME}                \-l ${output}.log#start compile
con:${VCS} -f file_list.f#start simulation
sim:${SIM}#show the coverage
cov: dve -covdir *vdb &
debug:dve -vpd ${OUTPUT}.vpd &#start clean
clean:rm -rf ./csrc *.daidir ./csrc *.log *.vpd *.vdb simv* *.key *race.out*

 

//file_list.f文件内容-timescale=1ns/1ns
//Macro define
//+define+INC_COUNTER//Source file
./rtl/fsm_moore.v//Testbench 
./tb/fsm_top.v
./tb/hello.c

波形文件只显示一层可以用以下选项:

$vcdpluson(1,fsm_top);

显示memory中的数值可以用以下选项(可以用来记录数组):

$vcdplusmemon();

辅助宏

例如在代码的不同地方输出一样的信息如$display("Hello verilog!"),若这些信息都被输出则难以定位每一句出自何处,因此可以开启一些宏辅助输出其它信息,以供定位输出语句来自哪里。

$display("Hello verilog!",`__FILE__, `__LINE__);

__是两个下划线,__FILE__和__LINE__可以分别输出display语句所在的文件和行数。

  相关解决方案