1.后仿是什么
rtl设计到一定阶段以后,需要进行综合网表的步骤,用sdc综合出来的网表去给后端做设计用。 此时综合出来的网表netlist 可作为rtl的替换塞进验证环境里跑仿真,此时的仿真为不带timing的网表的后仿仿真。 后端设计完成给了sdf timing约束后,加进去一起跑仿真的叫带timing网表的仿真。带pg综合后的网表叫netlist_pg, 此综合网表netlist_pg+sdf 约束放到一起的仿真叫后仿。如果有dft逻辑,那么dft netlist网表+pg netlist网表是最全的netlist。 看公司需求是否用最全的netlist+sdf 约束来跑仿真。
2.后仿的意义
检查异步逻辑,检查多时钟周期的时序,检查错误路径的时序。
3.后仿flow加入验证环境
基本的timing选项
+sdfverbose -negdelay +neg_tchk +csdf+precomp+dir+$(SDF_C_DIR) +transport_path_delays +pulse_e/0 +pulse_r/0 +transport_int_delays +pulse_in_e/0 +pulse_int_r/0 -sdfretain -xlrm alt_retain(不会让输出发生变化的RETAIN信息和X态会被优化) -sdfretain=warning +optconfigfile+postsim.cfg(ignore timing violation file) -f behavior_list
netlist comp optinon(带dft的与此相同):
基本选项
+no_notifier +notimingcheck +nospecify +define+NETLIST
-f /netlist.f
postsim comp option:
基本选项
+vcs+initreg+random
-f /netlist.f
postsim comp with pg option:
基本选项
-f netlist_pg.f(将rtl list替换为网表)
用define的方式将sdf 文件annotate进环境。方式是在tb top里initial begin end块中加入
`ifdef SS
$sdf_annotate(ss sdf file, tb_top.dut_inst,,"./sdf_max.log","MAXIMUM",,"FROM_MAXIMUM");
`ifdef FF
$sdf_annotate(ff sdf file, tb_top.dut_inst,,"./sdf_min.log","MINMUM",,"FROM_MINIMUM");
`ifdef TT
$sdf_annotate(tt sdf file,tb_top.dut_inst,,"./sdf_typical.log","MINMUM",,"FROM_MAXIMUM");
在comp option中加入+define+FF来决定使用哪种sdf。一般后端设计组会给出3种timing,ss,tt和ff。每种timing又分三种delay,一般选ss+maxdelay 和ff+mindelay作为两个极端来跑后仿。
elab选项主要用来加define去区分是跑哪种网表
netlist elab option
+define+NETLISTSIM
postsim elab option
+define+NETLISTSIM +define+POSTSIM
postsim pg elab option
+define+NETLISTSIM +define+POSTSIM + define+POWER_PINS +define+POWER_PIN +define+POWER_PINS_NEG_MODEL +define+PG
netlist sim option
postsim sim option
postsim with pg sim option
+vcs+initreg+0(init reg value is 0, to avoid init value x)
4.后仿case的调试
1.常见错误类型1,多级同步的第一级出现timing violation,一般可以忽略掉。忽略的方法是在postsim.cfg文件里加
instance {第一级的信号的全路径} {noTiming};
2.常见类型错误2,在综合后的网表里有些信号拉成z,导致case里的force信号名需要修改才能把case跑过。 解决方案是在force的时候最好使用reg类型的信号,如果没有需要加define来区分跑网表类型和跑rtl。 wire类型的多bit信号在综合网表里会被打成单根信号,名字也可能会发生变化,需要看波形检查。
3.常见类型错误3,有些关键信号在每次网表仿真的时候会随机拉成0或者是1,这个时候如果在case里等这个信号的话,需要根据网表打开的波形来确定是等上升沿或者下降沿。
3.用verdi打开后仿波形。
postsim
verdi -sverilog +v2k -f ${TB_FILE_OPTS} ${VERID_OPTS} +define+NETLISTSIM+define+POSTSIM -uvm -full64 -workMode hardwareDebug -top tb_top -ssf */*.fsdb
netlistsim
verdi -sverilog +v2k -f ${TB_FILE_OPTS} ${VERID_OPTS} +define+NETLISTSIM +define+ARM_UD_MODEL -uvm -full64 -workMode hardwareDebug -top tb_top -ssf */*.fsdb
postsim with pg
verdi -sverilog +v2k -f ${TB_FILE_OPTS} ${VERID_OPTS} +define+NETLISTSIM+define+POSTSIM+define+POWER_PINS +define+POWER_PIN +define+POWER_PINS_NEG_MODEL -uvm -full64 -workMode hardwareDebug -top tb_top -ssf */*.fsdb
5.名词解释
sdc=constraining designs for synthesis(综合的设计约束)
sdf 文件=standard delay format,描述电路布局布线后单元及互联线的延时数据,主要作用是将延迟信息反标(back annotation)到功能模型中,模拟芯片在真实工作时的状态。后端设计完成出的一份文件。