一般我们会在tb的里面控制波形的dump与否,并设置dump的层次和深度。当仿真时间长时,可能需要修改dump的多与少,而直接修改这些代码需要重新编译,耗时耗力。其实可以用tcl脚本来做这个控制。
在仿真参数是增加如下参数,会在仿真开始时调用start.tcl
1 | simv [opt] -ucli -i start.tcl |
start.tcl如下
1 | set cfg_fn "$env(CURDIR)/dump.cfg" |
脚本中,有用到两个环境变量,$env(CURDIR) 和 $env(DUMPWAVE)。这个可以在makefile中传递进来。
1 | DUMP=0 |
其中DUMPWAVE表示是否要dump波形;CURDIR表示每个用例的目录,这样可以每个用例指定一个dump.cfg,单独控制每个用例需要dump的层次和深度。
该tcl流程:
当DUMPWAVE不为0时,dump波形。如果cfg文件存在,则开始解析cfg文件;如果cfg文件不存在,默认dump所有层次的波形。
cfg文件格式是:
- #开头的是注释
- 如果只有一个参数,则认为是层次
- 如果有两个参数,则认为第一个是层次,第二个是深度
1 | # this is comment |
脚本33-35行,如果run.tcl存在的话,就调用该tcl,这样可以在前面配置文件需求满足不了的时候,将tcl直接写在run.tcl里面。
1 | call {$fsdbDumpSVA()} |