【数字IC验证之前后仿的理解】

1.前仿:零延迟仿真

前仿(功能仿真、行为级仿真、RTL级仿真):针对不带任何延迟信息的RTL代码进行的功能验证。

2.后仿:带真实的反标延迟仿真

后仿(时序仿真):采用后端工具生成的SDF文件对布局布线后的门级网表进行的时序和功能验证。

后仿有两种说法,一种是综合后仿真:对DC综合后的网表进行仿真,连线延迟来自于线负载模型的估计;另一种是布局布线后仿真:对布局布线后的网表进行仿真,连线延迟来自于版图的提取。(验证中的后仿一般是针对布局布线后的仿真)

后仿也叫动态时序仿真,相比于静态时序分析STA(针对同步电路设计中时序分析),它主要应用在异步逻辑、多周期路径、错误路径的时序验证中。

 SDF文件介绍

    SDF(standard delay format):描述电路布局布线后单元及互联线的延时数据,主要作用是将延迟信息反标(back annotation)到功能模型中,模拟芯片在真实工作时的状态。

反标SDF文件有两种方法:一种是作为elaboration的选项指定,一种是使用系统函数$sdf_annotate来完成。

3.芯片后仿违例类型:

1、Setup/hold违背(posedge D -> posedge CK  , negedge D -> posedge CK)

2、Recovary/Removal违背 (posedge CDN -> posedge CK  ,posedge SDN -> posedge CK)??

3、Width违背 (CK,CDN,SDN)

4、IP接口时序不符合datasheet?外设器件是否也需要带延时的model?

4.后仿的意义

后端一般会进行静态时序分析(STA),静态时序分析根据一定的模型从网表中创建无向图,计算路径延迟的总和,如果所有的路径都满足时序约束和规范,那么认为电路设计满足时序约束规范。静态时序分析的方法不依赖于激励,且可以穷尽所有路径,运行速度很快,占用内存很少。对于同步设计电路,可以借助于静态时序分析工具完成时序验证的任务,但是不能对异步电路进行时序分析。所以如果设计中存在异步电路,就要借助于后仿真。

后仿真主要意义在于:

1、确认异步路径、multi cycle path、false path。

2、功能仿真不包含的信息,如DFT插入的扫描链,或者基于工艺单元的功耗评估以及时序信息等。

3、检查时序约束(SDC)的正确性,防止约束错误。

4、检查网表的完备性,防止综合、布局布线过程中的意外错误。

5、为后续流程如功耗分析、IR drop分析提供波形(后仿波形分析更准确)。

6、完整的系统初始化上电处理流程和复位流程,尤其是面对系统中存在不定态的情况。

由于后仿真较为耗时,一般不会将所有的前仿case都进行后仿,通常的做法是挑出一部分进行后仿即可,而case的挑选可以基于以上几点,将有风险的case挑选出来进行仿真。

5.SDF延迟反标注方法:

方法一:使用$sdf_annotate将SDF文件反标到网表中:

$sdf_annotate("sdf_file"  [,module_instance] [,"sdf_configfile"]  [, "sdf_logfile"] [,"mtm_spec"]

[, "scale_factors"] [, "scale_type"]);

其中,module_instance是例化的模块名,例如在testbench中,例化顶层:

digital_top  digital_top_u   

digital_top_u是例化的模块名,那么按照上面的格式,在testbench中添加下列代码:

initial begin

$sdf_annotate( "fast.sdf"  ,digital_top_u  ,     , “fast_sdf.log"  ,"MAXIMUM"  ,    ,  );

end

sdf_file: sdf文件;(此例中sdf文件名为fast.sdf)

module_instance:调用$sdf_annotate模块实例的范围;

sdf_configfile:指定SDF配置文件;

sdf_logfile:生成所有的sdf反标错误的文件,需在编译时使用+sdfverbose。

mtm_spec:指向哪一种延时类型,通常有三种min,typ,max,分别表示最小延时,常规延时,最大延时。对应写在$sdf_annotate函数中是"MINIMUM", "TYPICAL", "MAXIMUM"。

在仿真器读入SDF的时候,要指定使用哪一组。

scale_factors:指定min:typ:max的缩放因子,默认为三个正实数“1.0:1.0:1.0”。

由于是默认参数,所以在上面的$sdf_annotate( "fast.sdf"  ,digital_top_u  ,     , “fast_sdf.log"  ,"MAXIMUM"  ,    ,  );  中的对应位置用空格表示,也可以不用空格,用空格对应参数看起来更清楚。

scale_type:指定SDF文件中缩放前使用的延迟值,它可能的值是"FROM_TYPICAL",

"FROM_MINIMUM"  ,   "FROM_MAXIMUM"和默认"FROM_MTM";

此项参数也是默认,同样在$sdf_annotate函数中对应位置可以用空格来表示。除sdf_file必须要给出以外,其他参数都可以使用默认值,用空格来表示,也可以不用空格。

VCS编译指令:-full64  -kdb  -sverilog  -f vflist   -l com.log  -debug_access+all  +vcs+vcdpluson   +negdelay    -sdfretain    +sdfverbose    

Notes:其中testbench,dut.v,sdf文件放在同一层目录(同一个文件夹),但vflist里面只需要有testbench和dut.v的文件名,不需要把sdf文件的名字写进去,因为sdf文件已经用$sdf_annotate函数调用了。

如何确认成功反标?

编译完成后,可以从终端或者log文件中看到这么一句话:

SDF  annotation  completed.   

同时也会显示反标过程中有多少个error和warning。

方法二:VCS编译器配置

在VCS编译指令中加上    -sdf   min|typ|max:instance_name:file.sdf,

具体格式为   -sdf   max:tb_digital_top.digital_top_u:fast.sdf

其中,tb_digital_top为testbench的模块名,digital_top_u为顶层的例化名。

同时编译选项加上 +neg_tchk   -negdelay   -sdfretain

注意VCS编译指令中最大延时用max表示,在$sdf_annotate函数中最大延时用MAXIMUM表示。

Notes:关于后仿的延时文件fast.sdf以及slow.sdf,前者表示快的,后者表示慢的。fast.sdf检查hold时间,slow.sdf检查setup时间,越慢setup越不容易满足,越快hold越不容易满足。

其中,sdf反标注有延迟类型的选择,分最坏,最好,最常用三种情况,最坏情况:slow对应max,fast对应min。

Tips:如果需要对多个例化的模块进行延迟反标注,可以在testbench里面,用多个$sdf_annotate,分别用来标注需要反标的模块。

较为常见的方法是在bench中调用系统函数$sdf_annotate来完成。还有其他的方法,比如作为elaboration的选项指定等。$sdf_annotate的标准格式如下:

$sdf_annotate(“sdf_file”[,module_instance][,“sdf_configfile”][,“sdf_logfile”][,“mtm_spec”][,“scale_factors”][,“scale_type”]);

其中:

“sdf_file”:指定SDF文件的路径。

“module_instance”:指定反标设计的范围(scope)

“sdf_configfile”:指定SDF配置文件

“sdf_logfile”:指定VCS保存error 和warnings消息的SDF日志文件。也可以使用+sdfverbose runtime option来打印所有反标消息

“mtm_spec”:指定延迟类型"MINIMUM(min)", "TYPICAL(typ)“或者"MAXIMUM(max)”。

“scale_factors”:分别指定minmax的缩放因子,默认是"1.01.0"

“scale_type”:指定缩放之前延迟值的来源。

如下图举例:

在反标SDF后,specify块中定义的延迟不再有用,取代的将是SDF文件中的延迟

6.参考链接:

芯片后仿相关记录_sdf max min_ASIC_DBGer的博客-CSDN博客

【精选】【验证技能】数字IC后仿真总结_后仿真流程-CSDN博客

芯片验证之后仿真_芯片后仿-CSDN博客

芯片科普 | IC设计前仿真和后仿真的区别是什么? - 知乎 (zhihu.com)

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字IC验证工程师负责验证和测试数字集成电路的设计是否符合规格和功能要求。他们使用各种工具和技术来评估电路的性能和功能,并确保其能够正确地工作。 首先,数字IC验证工程师需要理解电路的设计规格和功能要求。他们会仔细阅读电路设计文档,并与设计工程师进行讨论,以确保对设计的理解正确无误。然后,他们会制定验证计划,包括测试策略和测试计划。 接下来,数字IC验证工程师会使用仿真工具,如Verilog或VHDL,来编写测试用例并进行仿真。他们会模拟电路的行为并执行测试用例,以验证电路的性能和功能。如果发现问题或错误,他们会与设计工程师合作进行故障排除和修改。 为了提高测试覆盖率,数字IC验证工程师会使用其他工具和技术,如基于事务的验证(Transaction-based Verification)和随机测试(Random Testing)。这些方法可以生成更多的测试用例,并帮助发现潜在的设计错误。 此外,数字IC验证工程师还需要与其他团队成员密切合作,如电路设计工程师、物理设计工程师和软件开发工程师。他们会参与电路设计和物理实现的评审会议,并提供反馈和建议。他们还会与软件开发工程师合作,以确保电路可以正确地与软件进行互动。 总之,数字IC验证工程师在电路验证和测试方面扮演着重要角色。他们需要具备深入的电路知识和技术能力,以确保数字集成电路的设计正确无误,并满足相关要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值