jake的个人空间 http://blog.eetop.cn/1592 [收藏] [复制] [分享] [RSS]

日志

后仿 SDF 反标

热度 13已有 2229 次阅读2021-2-26 08:57 |系统分类:芯片设计

如果激励 (stimulus) 正确,SDF 反标后仿 (SDF back annotated gate level simulation) 大概是最接近实际的仿真了。即使跑得慢,还是应该尽可能在各个 corner 下把所有的 test case 都跑一遍。

SDF 反标可以通过 verilog task $sdf_annotate 实现。$sdf_annotate Verilog 标准的一部分,具体细节可以在 Verilog LRM (language reference manual) 里找到。$sdf_annotate可以直接在 test bench 里加上。下面是我自己常用的代码。

`ifdef GLS_SDF

   initial begin

`ifdef SDF_MAX

      $display("Performing SDF_MAX back annotation for adc_dig ...");

      $sdf_annotate("/home/project/digital/adc_dig/pd/EXPORT/SDF/adc_dig_func_max.sdf", tb_dig_core.u_adc_dig,,"./adc_dig_sdf_max.log", "MAXIMUM");

`elsif SDF_MIN

      $display("Performing SDF_MIN back annotation for adc_counter, adc_dig ...");

      $sdf_annotate("/home/project/digital/adc_dig/pd_1p2v/EXPORT/SDF/adc_dig_func_min.sdf", tb_dig_core.u_adc_dig,,"./adc_dig_sdf_min.log", "MINIMUM");

`elsif SDF_TYP

      $display("Performing SDF_TYP back annotation for adc_counter, adc_dig ...");

      $sdf_annotate("/home/project/digital/adc_dig/pd/EXPORT/SDF/adc_dig_func_typ.sdf", tb_dig_core.u_adc_dig,,"./adc_dig_sdf_typ.log", "TYPICAL");

`else

      $display("\nINFO: No SDF back annotation for adc_counter, adc_dig ...");

`endif  

   end

`endif

 

Cadence 仿真工具为例,跑后仿的时候,在 irun/xrun 命令行加上 -DEFINE GLS_SDF -DEFINE SDF_MAX, 仿真工具就可以编译上面这段代码并进行反标。 这里 -DEFINE SDF_MAX 选择的是 worst case corner

这里需要注意两点。

-        SDF 文件的路径。如有疑问,用完整路径。

-        待反标模块在 test bench 中的 hierarchy。上面这个例子里 u_adc_dig 模块直接在 test bench 里例化 (instantiate)。很多时候会在下面几层,路径会长一些。

 

仿真启动后应该查一下 log,找到类似下面这段。这里的 % 很重要,代表了 SDF 反标的成功率。通常都应该在 95% 以上。如果低了,就应该查一下是哪里出错。通常是 hierarchy 没对上,或是电路中其他模块是网表,test bench却没有加上 SDF 反标文件。

          Annotation completed successfully...

          SDF statistics:

                     No. of Pathdelays = 10133     No. of Disabled Pathdelays = 0        Annotated = 97.88% (9918/10133)

                     No. of Tchecks    = 5292      No. of Disabled Tchecks    = 1524     Annotated = 92.36% (3480/3768)

                                                Total(T)       Disabled(D)          Annotated(A)      Percentage(A/(T-D))

                     Path Delays                 10133                   0                    9918                   97.88

                          $width                  2531                 762                    1737                   98.19

                         $recrem                   831                 254                     577                  100.00

                      $setuphold                  1930                 508                    1166                   82.00

 

上面这个例子里 $setuphold 反标成功率比较低,原因是设计中同步电路第一级的被禁止做 timing check 了,是有意这样做的。同步器第一级不做 timing check,避免了同步器输出 X

 

Cadence irun/xrun 有个命令行开关,可以很方便地报告哪些部分反标不成功。在 irun/xrun 命令行加上 -sdf_stats sdfstats.log,在文本编辑器中看一下 sdfstats.log,一目了然。

 

发表评论 评论 (6 个评论)

回复 anpengfei 2021-3-11 15:47
请问,ss、ff、tt的coner各自都反标min|max|typ哪个delay?
回复 jake 2021-3-11 21:44
anpengfei: 请问,ss、ff、tt的coner各自都反标min|max|typ哪个delay?
ss -- max
tt -- typ
ff -- min
回复 anpengfei 2021-3-12 09:27
嗯晓得啦谢谢
回复 Anubis_lsljj 2021-3-15 15:15
谢谢作者分享。我原来只知道用好像是 -SDF_VERBOSE去看详细的log。以后可以试试 -sdf_stats。
回复 Lover_Momo 2021-3-21 19:31
请教两个问题:
1. 数字后端在做的时候,特别是先进工艺制成,无法做到所有的Corner都setup/hold clean(一(一般Sign-off只要求某些Corner setup clean, 某些corner hold clean),那么在后仿的时候是如何处理的?SDF一般只能一次分析一个吧,如果看的Corner是setup clean但是hold 未clean的,在Sign-Off是合理的,但是后仿如何处理不清楚了。
2. PrimeTime在出SDF的时候,不会出三个值(x:x:x),好像只会出两个值(X::X),并且这两个值都是相等的,这个时候在后仿真的时候如何来用?
回复 jake 2021-3-22 11:03
Lover_Momo: 请教两个问题:
1. 数字后端在做的时候,特别是先进工艺制成,无法做到所有的Corner都setup/hold clean(一(一般Sign-off只要求某些Corner setup clean, 某些co ...
1. 通常是 P&R 的时候只看 2, 3 个 corner, 但是加 margin。 在 STA 的时候减小 margin, 每一个 corner 都查。 如果有 violation,再回到 P&R 里修补。 通常先保证 setup 都过,且有足够 margin。 STA 只有少许 hold violation, 这样修起来就比较有把握了。 我前一家公司 STA 通常要查 9, 10 个 corner,与 wafer test/ATPG 相关的 corner 允许降频。 每个 corner 都要 pass, 否则不 tape out。 我的观察是设计里时钟处理不好,会造成 functional setup 和 scan hold 无法同时修复, 或是反之。 修改 RTL,或是 scan segment 上做些特殊处理,通常可以最后 clean。 也有 RTL 做得不好,最后始终无法修复的。换人推倒重来。
2. 如您所说,STA 是 single corner 一个个跑的,生成的 SDF 也是 (X::X),两个值相同。 后仿的时候也是一个一个 corner 跑,每次读入不同的 SDF 文件,$sdf_annotate 都取 maximum 就可以了。 后仿通常不会有问题,因为仿真不需要 margin, 没有 pessimism, 完全按照实际的 timing 来,应该都是过的。
我在前一家公司用过的最好的工艺是 45nm, 跟14nm, 22nm signoff 可能还是有差距的。

facelist

您需要登录后才可以评论 登录 | 注册

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询 |  EETOP 创芯网 ( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2021-4-10 22:50 , Processed in 0.050145 second(s), 19 queries , Gzip On.

返回顶部