自从上次关于后仿的文章发布以后,又陆续收集到了一些关于后仿的其它小技巧。这次整理出来作为前文的补充,希望对大家有所帮助。文中提到的仿真器默认是VCS
.
初始化寄存器的值
有时候后仿中因为各种正确和不正确的原因,有些寄存器希望能有一个明确的初始值。那么可以准备一个类似下面内容的文件
代码语言:javascript复制#initial_to_0_regs.ucli
force -deposit test_bench.u_dut.enable_reg 0
如果需要初始化的寄存器比较多,那么可以在PrimeTime
或者其它工具里把网表中所有的触发器都遍历写出来,生成上面格式的文件,然后酌情做一些删减。
还需要准备一个编译时
选项需要调用的列表,里面包含了上面初始化寄存器文件中所涉及的寄存器例化时所用到的reference单元,内容类似下面这样。这个文件的目的就是告诉仿真器,在编译的时候需要特殊处理这些标准单元,以便运行时
可以做某些操作。
acc =wn:DFF0BWHVT
在仿真的零时刻用下面的方式加载这个文件
代码语言:javascript复制ucli% source ./initial_to_0_regs.ucli
当然别忘了启动vcs
的时候加上-debug
等选项,打开ucli
功能。
关闭某些寄存器的时序检查
后仿过程中可能有一些不必要或者不想检查的时序,尤其是两级同步的第一级DFF,通常不关心它们是否有时序违例。可以准备一个类似下面的文件
代码语言:javascript复制#async.listinstance { u.reg1, u.reg2 } { noTiming };
在仿真的时候用下面的选项加载这个文件,这样在后仿过程中将不对这些寄存器做时序检查,避免不必要的时序问题引起X
态传递。
vcs optconfigfile async.list
生成VCD文件
芯片实现的一些流程需要后仿写出波形文件,比较常用的就是VCD
格式的文件。VCD
是个不压缩的文本格式,因为兼容性好的原因一直得到各种流行工具的支持。当然它的特点也决定了它的缺点,那就是文件太大,会拖累本来就慢的后仿速度。
可以变通的一个方案是,后仿先写出压缩比好的FSDB
文件,再利用工具转成VCD
。并且转换过程中可以指定起止时间,这样一次后仿,就可以为不同的应用生成不同的VCD
文件。
仿真中写出FSDB
的系统函数不必赘述。
FSDB
转VCD
的工具通常在Verdi
的安装目录
$VERDI_HOME/bin/fsdb2vcd
基本的用法大概是这样的,-bt
是begin time,-et
是end time
fsdb2vcd your.fsdb -o your.vcd -bt 1000ns -et 2000ns
暂时补充这么多,大家有其它后仿的技巧欢迎补充。