目录
有的时候我们不想对TB进行改动,也不想重新编译仿真顶层来修改fsdb信息,可以直接修改脚本完成对dump fsdb的控制,这时使用UCLI命令行来dump fsdb的优势就很明显了。
使用这种交互式的接口,控制更加灵活,仿真过程中可以修改dump信息。请注意:ucli 的波形操控方式,使得在run-time 期间灵活控制fsdb 文件,成为可能。
一 编写 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
解释一下上面的命令:
(1)debug/debug_pp/debug_all ,使能ucli命令。
(2)-LDFLAGS ,传递参数给VCS的linker,与后面的-rdynamic和-P配合使用
(3)-rdynamic,指定需要加载的动态库
(4)-P ${NOVAS_ARGS},指定需要加载的表格文件(.tab)和静态库(.a)
(5)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