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

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

约束 – max_transition, max_capacitance, max_fanout

热度 8已有 1437 次阅读| 2023-4-30 04:01 |系统分类:芯片设计

约束文件中除了常见的timing constraint外,通常会加上DRC constraints,如set_max_transition, set_max_fanout, set_max_capacitance。如何设定这些DRC constraints的取值才合理呢?

max_fanout比较直观。有的.lib里会设一个50为上限。50其实有点大。不妨以20-35为起点,跑几次综合,比较一下gate count。通常差别不大。一般设计里high fanoutnet并不多,无非就是clockresetscan_enable。其中resetscan_enablefanout在综合时通常会加上buffer tree,在Innovusplacement阶段可以进一步优化,而clockfanout则在CTS时解决。

再看max_capacitance。暂且先不加set_max_capacitance。其实约束文件里没有set_max_capacitance,工具还是会计算max_capacitance的。.lib里每个cell的输出pin都有一个max_capacitance值。工具会自动算输出pinload是否超出其max_capacitance并报出违例。在Innovus里,place_opt_designoptDesign都可以修复优化max_capacitance违例。

最重要的其实是max_transition。这个约束会对PPA (Performance, Power, Area)有影响,需要认真研究。先看对performance/timing的影响。下面是某个.libBUF_X2的信息。可以看到,这个cellcharacterize的时候index_1 input net transition的上限是2.13333。通常库里所有的cell都是用同一套input_net_transitiontotal_output_net_capacitancecharacterize的。这样,我们就知道整个设计的set_max_transition约束取值也应该<=input_net_transition的上限。这里要澄清一下,不是说max_transition超出这个上限工具就不能算timing了。其实工具还是可以做插值运算,但那样算出来的timing就不准了,风险也就大了。

drc_constraints_pic1.png

还要说明一下,有的库不同的PVT cornerinput_net_transition的上限也不同。对于设计而言,应该考虑以数字小的为上限。

那么是否set_max_transition约束就应该直接取input_net_transition的上限呢?其实也不是。如果我们仔细看上面这个表,两个index的取值并不是线性的,数值越大,相邻两个数值的差别就越大,也就是说二维表就越稀疏。我们知道工具是通过插值来计算timing的。表里的数据越稀疏,插值的误差可能就越大。如果一个设计对timing的要求很高,那我们就希望插值计算时取的数值越靠近表的左上方区域。也就是说set_max_transition约束取值小一点,设计的timing就可以算得越准。同理,也可以取一个略小于total_output_net_capacitance上限的值作为set_max_capacitance的约束取值。这个set_max_capacitance的约束取值通常远小于X8X10X12之类大驱动cell输出pinmax_capacitance。这也解释了为什么大驱动的cell用得很少。除了驱动输出,内部其实很少用到大驱动的cell

那么是否set_max_transition约束值越小越好呢?不是的。以同一个cell为例,我们可以看一下input_net_transitionpower的影响。对于同一个total_output_net_capacitance,大致可以看出input_net_transition越小,功耗越大,虽然只是大一点点。从表里的数字看,貌似在input_net_transition取最大的两个值时,功耗计算还有点非线性。所以从功耗角度出发,还是考虑把set_max_transition约束取值设得偏大一点。就这个表而言,我认为set_max_transition 0.6-0.8 都是合理的,timing可以算得准一些,也给了工具足够的空间优化功耗。

drc_constraints_pic2.png

需要说明一下,如果不设set_max_transition,如果工具计算出来的transition time超过input_net_transition上限,工具是会报warning的。很多时候时间紧迫,不一定会有时间/脚本仔细检查log中的每一个warning。所以约束文件里还是要加一个set_max_transition,保险一些。

还要说明一下,set_max_transition 0.6 [current_design]是针对整个设计的。事实上在CTS的时候,clock treemax_transition要设得小很多。在Innovusset_ccopt_property target_max_transset_ccopt_property target_max_capacitance取值都会比整个设计的set_max_transition, set_max_capacitance要小很多。这样clock tree能实现low skewclose timing比较容易。当然, target_max_transtarget_max_capacitance取值也不能太小,还是要全盘考虑PPA。这是另一个话题了。

总结一下。

1.      set_max_fanout 25 为起点,综合迭代几次。

2.      set_max_transition, set_max_capacitance参考.lib,取值小于二维表index_1, index_2上限。

工作之余写点心得,希望能有帮助。时间仓促,如有谬误,请留言指正。


6

点赞

刚表态过的朋友 (6 人)

发表评论 评论 (10 个评论)

回复 happy/ed 2023-5-4 16:35
谢谢楼主!我有些别的问题,在timing signoff阶段set_clock_uncertainty 这个值怎么考虑呢?和dc出来的timing constraint的差别在于?
回复 jake 2023-5-4 21:15
happy/ed: 谢谢楼主!我有些别的问题,在timing signoff阶段set_clock_uncertainty 这个值怎么考虑呢?和dc出来的timing constraint的差别在于? ...
setup uncertainty通常取时钟周期5%-10%
hold uncertainty通常取25-50ps或PDK signoff guide里推荐的数字
set_clock_uncertainty -setup [5% of your clock period] [get_clocks your_clock]
set_clock_uncertainty -hold [50ps or 25ps or value from PDK signoff guide] [get_clocks your_clock]
回复 happy/ed 2023-5-5 11:04
jake: setup uncertainty通常取时钟周期5%-1010%
hold uncertainty通常取25-50ps或PDK signoff guide里推荐的数字
set_clock_uncertainty -setup [5% of your clock pe ...
明白了,谢谢!
回复 乌拉啦 2023-10-9 15:41
请问楼主通过lib是如何评估出trans合理范围为0.6~0.8的
回复 jake 2023-10-10 01:00
乌拉啦: 请问楼主通过lib是如何评估出trans合理范围为0.6~0.8的
等于过滤掉了index_1最后两个数字
回复 乌拉啦 2023-10-10 09:23
jake: 等于过滤掉了index_1最后两个数字
在工厂没有给出signoff gui时是否均可以通过该种方式评估?还是有什么方式?
比如如下input trans,那么该如何评估signoff的trans呢?
index_1(“0.01,0.052,0.118,0.2,0.484,0.499,0.925,1.226,1.544,2.36”)
index_2(“0,0.05,0.167,0.3,0.416,0.520,0.614,0.7,0.778,0.851,0.920,0.985,0.92,0.985,1”)
回复 jake 2023-10-10 21:23
乌拉啦: 在工厂没有给出signoff gui时是否均可以通过该种方式评估?还是有什么方式?
比如如下input trans,那么该如何评估signoff的trans呢?
index_1(“0.01,0.052, ...
跑flow的时候用紧凑一些的max_transition约束,signoff的时候可以用index_1的最大值
回复 乌拉啦 2023-10-13 13:59
jake: 跑flow的时候用紧凑一些的max_transition约束,signoff的时候可以用index_1的最大值
好的,谢谢楼主
回复 samuelmicer 2023-12-13 09:33
楼主请问对于输入、输出、时钟,set_max_capacitance、set_max_transition会有区别吗?我现在想单独测试sram,sram的接口的约束也是参考BUF来吗?谢谢
回复 jake 2023-12-21 00:37
samuelmicer: 楼主请问对于输入、输出、时钟,set_max_capacitance、set_max_transition会有区别吗?我现在想单独测试sram,sram的接口的约束也是参考BUF来吗?谢谢 ...
要参考SRAM的.lib文件

facelist

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

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 1

    关注
  • 224

    粉丝
  • 89

    好友
  • 281

    获赞
  • 273

    评论
  • 2288

    访问数
关闭

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

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

GMT+8, 2024-4-18 20:57 , Processed in 0.012194 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部