前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >后仿中$setup,$hold与$setuphold

后仿中$setup,$hold与$setuphold

原创
作者头像
ExASIC
修改2020-07-15 14:35:49
12.5K0
修改2020-07-15 14:35:49
举报
文章被收录于专栏:ExASIC

在sdf2.1版本中,只能用$setup,$hold和$recovery,$hold。在sdf3.0版本中,增加了$setuphold,$recrem,$removal。分开描述的$setup、$hold、$recovery、$removal不支持negative value。如果要标注负值只能用合起来的$setuphold和$recrem。

某工艺的verilog仿真库

代码语言:txt
复制
    $hold(posedge T &&& (shcheckTDlh=== 1'b1),
       posedge D &&& (shcheckTDlh=== 1'b1),1.0);
    $hold(posedge T &&& (shcheckTDlh=== 1'b1),
       negedge D &&& (shcheckTDlh=== 1'b1),1.0);
    $setup(posedge D &&&(shcheckTDlh === 1'b1),
       posedge T &&& (shcheckTDlh=== 1'b1),1.0);
    $setup(negedge D &&&(shcheckTDlh === 1'b1),
       posedge T &&& (shcheckTDlh=== 1'b1),1.0);
    $recovery(posedge S,posedge T,1.0);
    $removal(posedge S,posedge T,1.0);

对应3.0版本的SDF

代码语言:txt
复制
TIMINGCHECK
    (WIDTH (negedge S) (0.103::0.103))
    (REMOVAL (posedge S) (posedge T)(0.140::0.140))
    (RECOVERY (posedge S) (posedge T)(0.000::0.000))
    (WIDTH (negedge T) (0.078::0.078))
    (WIDTH (posedge T) (0.094::0.094))
    (SETUP (posedge D) (COND shcheckTDlh===1'b1(posedge T)) (0.000::0.000))
    (SETUP (negedge D) (COND shcheckTDlh===1'b1(posedge T)) (0.016::0.028))
    (HOLD (posedge D) (COND shcheckTDlh===1'b1 (posedgeT)) (0.043::0.049))
    (HOLD (negedge D) (COND shcheckTDlh===1'b1 (posedgeT)) (0.009::0.010))
  )

另一个工艺的verilog仿真库

代码语言:txt
复制
       $setuphold (posedge CP, posedge D, 0, 0,notifier,,, delayed_CP, delayed_D);
       $setuphold (posedge CP, negedge D, 0, 0,notifier,,, delayed_CP, delayed_D);
       $recovery (posedge SDN, posedge CP, 0,notifier);
       $hold (posedge CP, posedge SDN, 0,notifier);

对应的2.1版本的SDF:

代码语言:txt
复制
  (TIMINGCHECK
    (WIDTH (negedge SDN) (1.404::1.404))
    (HOLD (posedge SDN) (posedge CP)(-0.198::-0.198))
    (RECOVERY (posedge SDN) (posedge CP)(0.267::0.267))
    (WIDTH (negedge CP) (0.425::0.425))
    (WIDTH (posedge CP) (0.440::0.440))
    (SETUP (posedge D) (posedge CP)(0.057::0.057))
    (SETUP (negedge D) (posedge CP)(0.082::0.082))
    (HOLD (posedge D) (posedge CP)(-0.048::-0.048))
    (HOLD (negedge D) (posedge CP)(-0.013::-0.013))
  )

对比两个版本的SDF

可以看出3.0的SDF用$removal代替了$hold。第一个verilog仿真库,采用了分开的$setup$hold$recovery$removal。第二个库采用了合起来的$setuphold,但$recovery$hold还是分开的。

所以,第一个库不支持负值的标注;第二个库$setup$hold支持负值,而$recovery$hold不支持负值。

在SDF版本选择上,第一个库只能用3.0,因为库里用到了$removal。第二个库只能用2.1,因为使用了$hold,如果用3.0的话,Incisive后仿时,会报错,说找不到$removal

结论

工厂提供的verilog仿真库总是不那么规范。要么修改库(让工厂修改或自己修改),要么根据库产生符合条件的SDF,但也就不能反标注负值了。

提示:

  • pt产生SDF时加参数-version 2.1|3.0,用include来灵活控制,可产生不同需求的SDF。具体可查pt的write_sdf命令的参数。下面是一个例子:
代码语言:txt
复制
write_sdf -version 3.0 \
    -context verilog \
    -include {SETUPHOLD RECREM} \
    max.sdf
  • 后仿时看反标注的成功率,如果反标成功率太低,要仔细检查。Incisive的反标率如下:
代码语言:txt
复制
SDF statistics: No. of Pathdelays =37802  Annotated = 100.00% -- No. ofTchecks = 25964  Annotated = 99.60%
                   Total    Annotated    Percentage
     Path Delays         37802          37802         100.00
           $hold          2306           2306         100.00
          $width         12632          12632         100.00
       $recovery          2306           2306         100.00
      $setuphold          8720           8616          98.81
  • 然而VCS并没有这样的百分比报告。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 某工艺的verilog仿真库
  • 另一个工艺的verilog仿真库
  • 对比两个版本的SDF
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档