门级仿真分为两种:
一种是不带时序反标的门级仿真(只有门级电路延时的仿真,综合后的门级网表就可以做,因为在布局布线之前,由于这时hold没有修,所以会出现不少时序违例的情况);一种是带时序反标(back annotation)的门级后仿真,这时的网表是后端做完布局布线,修补完timing的网表,这时进行后仿真时,我们需要告知仿真工具cell与cell之间的延迟,D端到Q端的延迟,这就需要sdf文件。
VCS编译选项
+nospeicy在仿真时忽略库文件中指定的延时。
+delay_mode_zero将标准单元库中定义的延时替换成0。testbench中的#延时也都被消除。
+notimingcheck时序检查开关,启用该option在仿真中就不检查时序,启用该option往往能消除后仿结果中的X态,但是后仿真不使用该选项,因为后仿不检查时序,后仿就失去了意义。
反标SDF文件的后仿真编译选项
+sdfverbose显示所有的sdf反标错误;
+neg_tchk 使用负延时检查,检查设计的负延时。如果忽略此选项,VCS将所有负延时更改为0。
-negedelay 当sdf文件中有负延时,且负延时不忽略,开启此选项,否则VCS将所有负延时更改为0。
关闭某些寄存器的时序检查
在后仿过程中,可能会有一些不需要检查的时序,这些时序往往是不影响功能的。关闭某些寄存器的时序检查方法如下:
1、创建一个notiming.list文件,文件名notiming.list;
2、文件内容
(notes:关于选择关闭哪些寄存器的时序检查,由于在门级网表中,很多信号名已经改变,所以可以先进行后仿真,根据终端或sim.log文件上面显示的信息,看是哪些寄存器发生了时序违例,再判断这些寄存器需不需要关闭时序检查,从而获得关闭这些寄存器时序检查的文件格式。)
例如终端显示的一个时序违例:
Timing violation in tb_digital_top.e333d_top_u.spi_u.so_data_reg_1_
$hold(posedge RN:8,posedge SN:8,limit:2);
若要关闭tb_digital_top.e333d_top_u.spi_u.so_data_reg_1_寄存器,就在notiming.list文件里面写
instance{tb_digital_top.e333d_top_u.spi_u.so_data_reg_1_}{notiming};
注意notiming是连写,notiming.list和testbench以及DUT放在同一个文件夹里(同一级目录)。
{notiming};的 “ ; ”不能漏掉,否则编译会报错。
关闭多个寄存器的情况:
instance{tb.u_top.reg1,tb.u_top.reg2,tb.u_top.reg3}{notiming};
3、VCS编译选项
VCS+optconfigfile+notiming.list可以用上面的方法加载notiming.list这个文件,这样在后仿过程中将不对这些寄存器进行时序检查,避免了不必要的时序问题而引起的X态的传递。