在日常dump waveform进行debug时,通常有三种场景,分别对应3种不同的dump task。
- all dump:即所有hier都进行waveform的dump,更多适用于top,soc等data path的debug,因为这种场景下的debug可能会涉及更多的模块,子系统,通常使用dump all。
- 使用$fsdbDumpvars(depth, instance)。depth表示要加载波形的层次;0表示当前instance下的所有变量以及其它module实例的波形,1表示当前instance中的变量的波形,不包括当前instance中的其它module实例的波形,2表示包含当前instance以及其中的第一级子instance的波形;以此类推。instance指定要加载波形的module名。通常这里的instance设置为tb顶层,depth为0。
- dump part hier:当我们不想dump某些hier的波形时,比如我们在tb中可能例化了很多vip的bfm,这些hier往往日常debug不太需要,又或者是soc或top debug,把一些第三方ip的hier mask掉。我们只看更高层自己design的部分波形。
- 使用$fsdbSuppress(file_path),其中file_path中所有hier均不dump波形,格式如:tb_top.dut.module1 \n tb_top.dut.module2。即module1和module2 hier的波形均不dump。并且需要在仿真sim_opts中加入-suppress_file file_path。
- dump part hier:上面说的$fsdbSuppress() task是把一些不需要的hier拿掉,那么当我们在top或soc环境中进行一些ip的case时,可能只需要ip的hierarchy波形,其余全不要。
- 使用$fsdbDumpvarsByFile(file_path),可以在file_path中增加需要的波形,即只会dump在file_path中声明的波形,并且需要在sim_opts中增加-by_file file_path。file_path文件中的格式如下图:即只dump tb_top这一层波形,以及i2c_top,uart_top该层及其下面所有hier波形。