【验证技能】数字IC后仿真总结

IC后仿真

  • 一、后仿真理解
      • 后仿真是什么
      • 前仿真、后仿真和形式验证的区别
      • 静态仿真和动态仿真的区别:
      • 静态时序分析和动态时序仿真各有什么特点
      • 为什么有了静态时序分析(STA)还要进行后仿?
      • STA静态时序分析/Formality形式化验证
  • 二、后仿真流程与执行过程
      • 后仿真流程
      • 后仿真所需文件
      • 如何挑时序仿真的testcase(时序仿真的策略 )
      • sdf文件反标对于DUT模块的语法
      • 后仿真的一些仿真选项
  • 三、后仿真注意事项
  • 四、后仿真可能遇到的问题
  • 五、参考资料

一、后仿真理解

后仿真是什么

后仿是在前仿的基础上加入了延时信息的功能仿真,同时验证了设计的时序以及功能都正确,并且确保后仿功能和前仿一致。

前仿与后仿所使用的仿真器是相同的,所加激励也是相同的;

不同点主要有:仿真所需文件不完全相同、作用不同、波形不同。

后仿可以分为综合后仿真和布局布线后仿真。综合后仿真是对DC综合后的网表进行仿真,连线延时来自于通过线负载模型的估计;布局布线后仿真是对布局布线后的网表进行仿真,连线延时来自于版图的提取。

前仿真、后仿真和形式验证的区别

Modelsim仿真方法 前仿真和后仿真的区别 一定要看!!!!
https://www.cr173.com/html/46179_1.html

前仿:针对RTL的功能验证;

后仿:针对是综合后(加入了约束,单元延时等信息)的网表文件;

形式验证:,https://www.cnblogs.com/guolongnv/articles/8005544.html

形式验证是一种综合性的验证方式,我们可以设定一些属性,它会以一种严密的逻辑方式穷尽所有可能去尝试着证明我们的设计满足/不满足这种属性,不像我们的逻辑仿真存在一定的概率性,因为在逻辑仿真中我们不可能穷尽所有的可能去验证(可能要花费数年甚至几十年去穷尽所有可能),但形式验证可以做到而且往往只需要几十分钟或者数个小时

现在,形式验证现在可以应用在跨时钟域CDC(Clock Domain Crossing)验证,在CDC验证中,它可以识别CDC区域并进入电路中任何一个同步逻辑块中,建立CDC的稳定性模型并用于RTL的仿真中以确认没有这种不稳定的状态穿过Clock Domain的边界在DUT中继续进行传播;覆盖率收敛方面,形式验证也可以发挥很大作用,现在在我们的设计中会集成许多可配置可复用的设计模块,但是由于配置方式的不用,使得它的功能不同,覆盖率也就很难打到我们的要求(通常为100%),形式验证可以根据对模块的配置做一个覆盖率的分析,如果可以覆盖,它会给出一个覆盖的例子,如果不可以那我们就需要高度重视去重新检查可不可以过滤掉

静态仿真和动态仿真的区别:

静态仿真:主要保证电路能对得上逻辑(包括时序上,和网标的门级对应RTL级);
动态仿真:主要保证逻辑功能正确(前仿真保证RTL逻辑功能真确,后仿保证加入时序信息后,逻辑功能依旧真确);

静态时序分析和动态时序仿真各有什么特点

https://blog.csdn.net/weixin_30826761/article/details/99862527

回答一:

IC时序验证用两种方法实现:一是动态时序分析,即根据电路中提取的延时参数,通过仿真软件动态的仿真电路以验证时序是否满足要求。二是静态时序分析,即通过分析设计中所有可能的信号路径以确定时序约束是否满足时序规范。
  动态时序分析的时序确认通过仿真实现,分析的结果完全依赖于验证工程师所提供的激励。不同激励分析的路径不同,也许有些路径(比如关键路径)不能覆盖到,当设计规模很大时,动态分析所需要的时间、占用的资源也越来越大。
  静态时序分析根据一定的模型从网表中创建无向图,计算路径延迟的总和,如果所有的路径都满足时序约束和规范,那么认为电路设计满足时序约束规范。静态时序分析的方法不依赖于激励,且可以穷尽所有路径,运行速度很快,占用内存很少。它完全克服了动态时序验证的缺陷,适合大规模的电路设计验证。对于同步设计电路,可以借助于静态时序分析工具完成时序验证的任务。

回答二:

动态时序分析就是通常我们所说的仿真,该仿真可以验证功能,也可以验证时序,首先确定测试向量,输入硬件模型,进行仿真。由于为了完整地测试每条路径的功能或者时序是否都满足,测试向量需要很大,也不能保证100%的覆盖率。如果到了门级的仿真将非常消耗时间。

静态时序分析只能分析时序要求而不能进行功能验证。不需要测试向量,能比动态时序分析快地多的完成分析。静态时序分析只能对同步电路进行分析,而不能对异步电路进行时序分析。但是它却可以验证每一条路径,发现时序的重大问题,比如建立时间和保持时间冲突,slow path以及过大的时钟偏移。

  • 静态时序分析的优缺点:
    静态时序分析可以大大提高仿真时间,并能100%覆盖所有的路径。它通过预先计算所有的延时来提高速度。包括内部门延时以及外部的线延时。静态时序分析并不是简单的把各个延时相加,而是引入真值表,分析各种输入情况下所有可能经过的路径,而且能识别flase path。但是由于在深亚微米的工艺条件下,静态时序分析不能完整的把所有影响延时的因素给包含进去,因此在关键路径方面,便可以用STA工具导出关键路径的spice网表,用门级或者管级仿真工具进行电路仿真,以确定时序的正确性。

为什么有了静态时序分析(STA)还要进行后仿?

后仿也称为动态时序仿真,是对加入了延时信息的网表文件进行的仿真,目的是验证时序以及功能都正确。同步电路的分析采用静态时序分析实现,异步电路的分析则需要运行特殊仿真激励确认。静态时序分析的功能是根据设计规范的要求检查所有可能路径的时序,不需要通过仿真或者测试向量就可以有效的覆盖门级网表中的每一条路径,在同步电路设计中快速找出时序上的异常。动态时序分析主要是指门级的仿真,它主要应用在异步逻辑、多周期路径、错误路径的验证中。随着设计向65nm以下的工艺发展,只用静态分析工具将无法精确验证串扰等动态效应。通过动态时序分析与静态时序分析相结合可以验证时序逻辑的建立/保持时间,并利用动态技术来解决串扰效应、动态模拟时钟网络等问题。

STA静态时序分析/Formality形式化验证

https://blog.csdn.net/a389085918/article/details/80078519

  1. 静态时序分析STA
    对于仿真而言,电路的逻辑功能的正确性可以由RTL或者门级的功能仿真来保证;其次,电路的时序是否满足,通过STA(静态时序分析)得到。两种验证手段相辅相成,确保验证工作高效、可靠地完成。时序分析的主要作用是查看FPGA内部逻辑和布线的延时,确保其是否满足设计者的约束。

synopsys的STA工具是PT(primeTime),这是一个signoff的独立工具。
在早期的流程中,反标SDF的动态后仿真是标准的流程,现在的流程中后仿真已经不再需要进行,而是由STA+ formality形式验证 来代替。

基于动态仿真的验证和STA+FORMALITY的差别在于:一个需要开发仿真的pattern,另外一个不需要任何输入pattern。
另外,基于仿真的做法能验证到的path取决于输入pattern的完备性(覆盖率不高),VCS可以统计模块验证的覆盖率,而STA+Formality是基于数学的,可以分析所有的path。

但是在下面三个方面,还是需要进行后仿真,后仿在下面三种情况是必要的:
1。异步逻辑设计部分
2。ATPG向量验证
3。初始化状态验证
对于全同步的设计,在做了RTL仿真后,可以不作门级仿真,而对于存在异步电路的设计,需要针对异步电路进行相应的门级仿真。

其实不是后仿不需要,只是这可能花的时间太多,所以人们想用形式验证+STA代替。但是这种方法还是有漏洞的,因为STA只检查边沿timing,而形式验证只看register和combination的抽象功能。后仿在下面三种情况是必要的:异步逻辑设计部分、ATPG向量验证和初始化状态验证。另外,后仿产生的VCD文件还可以做功耗分析。

现在通常的策略是:采用形式验证手段来保证门级网表在功能上与RTL设计保持一致,配合静态时序分析工具保证门级网表的时序,对于全同步的设计,甚至可以不做门级仿真;对于存在异步电路的设计,也只需要针对异步电路进行极少的门级仍真工作。这无疑会加快设计进度,加快产品上市时间。

总结下来

STA + Formality 不能完全替代后仿真,但是因为后仿真的时间太长,因此也不能完全进行后仿真,而是进行STA+Formality,并且对异步设计和初始化等提供后仿真的case来进行简单的后仿真。

  1. 形式验证Formality
    Formality形式验证是一个基于数学意义的验证方法,通过比较两个设计A,B:

如果A的逻辑功能被B包含,那么形式验证认为是通过的。需要注意的是并不是说着两个design是完全相等的,而是逻辑上具有包含的关系。

在IC的流程中通常用于进行不同流程步骤的netlist的比较:

逻辑综合netlist,floorplan netlist,placement netlist ,CTSinserted netlist, P&R netlist,在每一个步骤后都有新的逻辑加入到netlist中,但是这个新的逻辑的加入不能改变之前netlist的功能。

在dynamicsimulation的流程中,需要开发验证pattern作为输入来进行验证,验证的覆盖率取决于pattern的开发的完备性;而formality是基于数学比较的,不需要任何的输入pattern。因此相比于动态仿真的优势在于:

不需要开发验证pattern、速度比较快、覆盖率100%、纯逻辑上的验证不考虑物理和timing信息;

缺点在于:

由于不考虑timing,因此需要配合STA工具使用。

后仿真能否被形式验证(Formal Verification)和静态时序分析(Static Timing Analysis)所取代…
https://blog.csdn.net/weixin_30826761/article/details/99862527

验证的主要目的:就是检查时间模型是否满足时间要求,是否实现了时间所需的功能。对于集成电路来说,具体就是在时间需求规定的激励下,电路是否产生了符合功能要求的输出;以及在设计需求规定的条件下,电路是否完成正常的功能。

以RTL级设计为仿真对象的前仿真,主要是验证电路的逻辑功能,信号的跳变是瞬时完成的,因此只能在功能上证明设计的正确性,而无法证明在实际电路中逻辑功能仍然正确。

门级仿真(后仿)是对RTL代码综合并布局布线后生成的门级网表进行时序仿真,是引入了逻辑延时时间的仿真。在后仿真阶段,仿真的过程中引入了线上和门级的延时,重点是验证在引入了实际时延之后系统功能是否正确,以避免因时延问题而导致系统时序功能的错误。

PS:前仿和后仿的激励输入是否一致呢?还不清楚

我们知道,当RTL级功能仿真或FPGA验证结束之后,传统的IC设计流程需要完成以下几次门级仿真:综合之后的门级仿真、DFT之后的门级仿真、布局布线之后的门级仿真等。如果设计很大或者电路很复杂,往往需要庞大的测试向量来验证设计的功能及时序是否正确,这就使得我们花费在门级仿真的时间会随着电路规模的增大而直线上升。

那么,可不可以用形式验证(Formal Verification)和静态时序分析(Static Timing Analysis)来代替动态后仿真呢?让我们先简单了解一下形式验证和静态时序分析。

形式验证是一种静态的验证手段,它根据电路结构静态地判断两个设计在功能上是否等价,常用来判断一个设计在修改前和修改后其功能是否保持一致。它运行时无须测试向量,但是必须有一个参照设计和一个待验证的设计。参照设计是设计者认为功能上完备无缺的设计,理论上它可以是用高级语言如C,C++实现的,也可以是用集成电路的建模语言SystemC,但就现实而言,多数形式验证过程中的参照设计就是我们的RTL设计,一般是用verilog或VHDL实现的。

静态时序分析简称STA ,它提供了一种针对大规模门级电路进行时序验证的有效方法。它只需要根据电路网表的拓扑,就可以检查电路设计中所有路径的时序特性,测试路径的覆盖率理论上可以达到100%,从而保证时序验证的完备性;同时由于不需要测试向量,所以STA验证所需时间远小于门级仿真的时间。当然,静态时序分析也有自己的弱点,它只能有效地验证同步时序电路的正确性,而无法验证电路功能的正确性,对于大部分设计中可能包含的异步电路的时序验证,则必须通过门级仿真来保证其时序的正确性。

对于上面的问题,我们的答案是模论两可的。

其实不是后仿不需要,只是这可能花的时间太多,所以人们想用形式验证+STA代替。但是这种方法还是有漏洞的,因为STA只检查边沿timing,而形式验证只看register和combination的抽象功能。后仿在下面三种情况是必要的:异步逻辑设计部分、ATPG向量验证和初始化状态验证。另外,后仿产生的VCD文件还可以做功耗分析

现在通常的策略是采用形式验证手段来保证门级网表在功能上与RTL设计保持一致,配合静态时序分析工具保证门级网表的时序,对于全同步的设计,甚至可以不做门级仿真;对于存在异步电路的设计,也只需要针对异步电路进行极少的门级仍真工作。这无疑会加快设计进度,加快产品上市时间。

https://wenku.baidu.com/view/bf5a40b665ce050876321321.html

二、后仿真流程与执行过程

后仿真流程

确认工艺Corner:一般后端同事会提供不同类型的*.sdf文件,选择哪些是需要进行反标进行的;
环境适配:filelist的修改,从之前的RTL加载变成加载网表;
inputdelay确定并加进环境中
仿真用例选择:往往前仿真会有很多测试用例,后仿真运行时间一般较慢,而且后仿真主要是验证异步路径,所以没必要将所有的前仿真用例在后仿真阶段进行仿真,只需要挑选出覆盖各个异步路径的场景case就可以了;并将这些挑选出来的用例在前仿真仿真通过;
将sdf文件反标DUT
仿真与violation确认:如果用例失败了,定位是否是时序未加载正确导致的,如果仿真pass了,但报violation了,确认报出来的violation是否是后端进行的时序收敛问题,与设计同事和后端同事一起确认;
质量活动:环境检查、后仿真报告评审等;

后仿真所需文件

DC综合或布局布线后生成的网表文件.vSDF文件.sdf,与综合时所用工艺库db对应的标准单元工艺库.v文件(不区分工艺角),以及前仿所用的测试激励文件testbench.v
https://blog.csdn.net/weixin_38197667/article/details/90739352

如何挑时序仿真的testcase(时序仿真的策略 )

选取2~3寄存器访问testcase
初始化的case
典型的功能case
关键路径,跨时钟域case

sdf文件反标对于DUT模块的语法

a file which contains all the net delays in design。An sdf has 3 kinds of delay(best,Worst,Typical)。

在环境的顶层的testbench中通过以下语法进行加载加载sdf文件;

`ifdef SDF
initial begin
begin
  $sdf_annotate("../../rtl/post_sim/U_sramc.sdf",u_top,,"sdf.log",);
end
end
`endif

后仿真的一些仿真选项

在仿真时添加以下仿真参数(VCS)

+nospecify :vcs不加入50 time unit的延时

+notimingcheck : 时序检查开关,比如setup/hold/width检查等等,如使用了该option,则仿真时不检查时序,行为类似于RTL仿真。在PR未结束,sdf反标文件还没准备好时,可用该选项忽略延时,可用于功能性的粗略检查。但真正跑后仿真时,不可使用该选项,否则仿真有效性大大降低。可使用tfile来将特定的路径加到no timing check list file中。建立notimingcheck.cfg文件,把违例的路径按格式instance {t_test.i_all.i_top.i_xx} {noTiming}; 添加到notimingcheck.cfg文件中,在编译的时候加入命令+optconfigfile+…/notimingcheck.cfg 注意文件路径是相对makefile文件。

+no_notifier :

+delay_mode_zero:将标准单元中定义的延时替换为0

注意:零延迟仿真用于调试仿真环境,挑testcase, 检验网表有没有问题。 当这些完成之后,就可以将SDF文件反标到网表文件上进行时序仿真,零延迟仿真将极大的提高仿真效率。

三、后仿真注意事项

确认端口inputdelay是否正确生效?
在将环境适配完成后,开始仿真后,在分析violation之前,先把后仿真的波形打开看看,看加载的inputdelay正确着没有,符合预期着没有,因为有时候的violation或者功能报错都可能是自己环境里面加载的inputdelay没加载正确造成的;

确认sdf反标是否正确,是否报error或warning:
通过sdf_annotate给DUT加载了时延后,会将反标是否正确与否等信息打印到上面语法中写的sdf.log文件中,在分析violation之前,先检查一下这个sdf.log文件中是否有异常,比如有error或者warning。error一般是sdf和netlist不匹配如某个cell类型不一致,warning可能是后端中加的各种延时仿真工具不能处理报出来的;
无复位端寄存器赋初值
因为无复位端寄存器的面积比有复位端寄存器面积要小,所以有些功能下就会使用无复位端寄存器,在前仿真的时候无复位端寄存器会把x态判断为0进行仿真,不会出现X态传播,但是进行后仿真的时候,如果没有将这些无复位端寄存器赋初值,那么就会出现X态传播,所以后仿真一定要给无复位端寄存器赋初值;(具体使用方法见《vcs initreg选项的使用》《vcs initreg 小记》《VCS init reg的使用心得》)

不一定用zero_delay仿真就一定仿真通过:
做后仿真时,应该先做zero_delay仿真,确保加载的网表文件是正确的,然后,再将SDF文件反标到网标文件上。但是有时候zero_delay仿真会仿真功能不通,就是因为没有延时。所以不反标时延有时候就不成功。那不反驳时延只用网表就一定不能仿真成功吗?这里面什么情况下可以成功,什么情况下不成功,这个是什么决定的呢?

后仿真某条case之前最好在前仿真仿真通过
后仿真仿真某条case的时候,如果case仿真失败了,去定位因为DUT变成了网表,内部信号很多都经过综合工具给优化没有了,定位起来很困难,所以应该先确定是不是前仿真也本来就是仿真不通过的,不然通过后仿真去定位问题,很费时费力;如果前仿真仿真是通过的,后仿真仿真不通过,那么可以将两个仿真的波形对照着看,看是哪些地方不一致;

网表中子模块接口信号行为可能和前仿真行为不一致
根据综合时候约束不同,可能会将整个IP进行综合,那么DUT内部子模块的接口信号可能就被综合工具优化处理了,也就是说子模块信号的行为可能和前仿真子模块信号的行为不一致了,那怎么定位呢?答案是看寄存器的输出值,在后仿网表中寄存器因为要存储信息,一般是不会被优化掉的,而且其行为肯定和前仿真的行为是一致的,所以可以利用后方网表中的寄存器行为来进行定位;

四、后仿真可能遇到的问题

  1. 当后仿真出问题,仿真不起来时
    检查clk,rst,PLL, reg
    timing violation 不定态 x. 见path
    test fail

五、参考资料

对以下文章和资料以表感谢,如有侵权,请知会!

《当我们做后仿时我们究竟在仿些什么》

《门级仿真经验》

你可能感兴趣的:(验证技能,硬件工程)