从验证角度谈后仿

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)到功能模型中,模拟芯片在真实工作时的状态。后端设计完成出的一份文件。

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值