#VERDI# 关于利用 ucli 控制加载FSDB波形文件

有的时候我们不想对TB进行改动,也不想重新编译仿真顶层来修改fsdb信息,可以直接修改脚本完成对dump fsdb的控制,这时使用UCLI命令行来dump fsdb的优势就很明显了。使用这种交互式的接口,控制更加灵活,仿真过程中可以修改dump信息。

一 编写 Makefile  

export  file_name = top_tb

NOVAS_HOME = /share/eda/Synopsys/Verdi/L-2016.06/     # 这是我电脑上Verdi的目录
NOVAS_ARGS = ${NOVAS_HOME}/share/PLI/VCS/LINUX64/novas.tab \    # 这部分基本是固定的
${NOVAS_HOME}/share/PLI/VCS/LINUX64/pli.a  \
	
vcomp:
	vcs -full64-debug_pp -LDCLASS -rdynamic -P ${NOVAS_ARGS} \
	-f complie.f \
	-l compile.log

解释一下上面的命令:

debug/debug_pp/debug_all ,使能ucli命令。
-LDFLAGS ,传递参数给VCS的linker,与后面的-rdynamic和-P配合使用
-rdynamic,指定需要加载的动态库
-P ${NOVAS_ARGS},指定需要加载的表格文件(.tab)和静态库(.a)
export file_name = tb.v ,是为了向后面脚本中传递变量而使用的。Makefile中当一个变量使用 export 进行声明后,变量和它的值将被加入到当前工作的环境变量中。
——————————————————————————————————————————

二  仿真运行

相应地仿真时的脚本文件,如下:

sim:
	./simv  \
	-ucli -i dump_fsdb.tcl	\
	+fsdb+autoflush 	\
	-l sim.log

verdi:	
	verdi -nologo -sv -f complie.f -ssf *.fsdb
	
clean:
	rm -rf *.csrc *.daidir *simv* ucli* *.vpd *.fsdb *novas* *.log 

解释上面的命令:

  • simv 是 VCS编译Verilog后生成的二进制可执行文件,./simv执行这个文件,进行仿真;
  • -ucli 是启动UCLI命令行模式,-i 吃进去 tcl 脚本文件;
  • +fsdb+autofulsh,一边仿真,一边dump 波形;

三  ucli 脚本

下面是一个 利用VCS/ucli 控制波形加载的程序,谢大神分享!!!

#file ucli.do
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
run 1ms
 
//每fsdb每满500M就切一个file,最多生成100个
call {$fsdbAutoSwitchDumpfile(500,"dut.fsdb",100,"dut.fsdb.log")}
 
lappend dump_scope [list 0 top.dut_i.l2_tx_top]  //指定需要dump 波形的hierarchy,其中0代表当前hierarchy以下的module都dump波形,1代表只dump当前层,2:只dump当前层及下一层,3以此类推
 
lappend dump_scope [list 0 top.dut_i.l3_tx_top]
 
proc dump {} {
  global dump_scope 
  foreach itr $dump_scope{
    eval [list fsdbDumpvars [lindex $itr 0]   [lindex $itr 1]]
  }
 
}
 
run 1ms;
 
dump
 
run 5 ms
 
fsdbDumpoff
 
run