在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 29541|回复: 48

[原创] 自动时钟树ECO解决方案

[复制链接]
发表于 2011-10-12 10:44:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
各位同事,大家好。
  相信大家在route之后,都有过手工ECO的经历。目前,对于45nm的工艺而言,方法不外乎有换BUFFER, 高层金属走线,多倍线宽、线间距,时钟树偏移,以及BUFFER换INV等方法。
  这次,我主要与大家分享的是,我在做自动时钟树偏移脚本时的心得。
  众所周知,usefulskew一般是修timing的最后一步才用的手段。但只要对关键路径的前后级进行过分析,就不难发现,Encounter并没有将前后级空余完全利用上,或者说没有最大程度上平衡前后级的Slack。因此,才有了人工做时钟树ECO的需求。
  人工修CTS,主要原理并不复杂,基本上就是在时钟路径上插BUFFER,把时钟路径延时增加,以达到时钟借用的目的。
  但实际操作中,则会遇到各种各样问题:,
  1,如果只对单一路径插入BUFFER,则会造成标准单元浪费。因为,很多关键路径的时钟路径,有公共部分,对于公共路径操作,可以一次修许多条,还不会带来额外的BUFFER数量。另外,如果做的ECO数量多了,只对单一路径插入BUFFER,会造成标准单元拥塞,而修得少,又达不到timing收敛的目的。
  2,如果是对公共路径进行插入BUFFER的操作,则会出现各路径后续slack富余不同的情况。如果按最大的借,往往会使别的路径恶化,如果按最小的借,关键路径所获得的好处又有限。这就成为了一个两难的选择。
  3,对于插入BUFFER数量的估算,是个难点。举个例子,如果一个CKBUFFER的延时是20ps左右,你将其插入时钟路径后,并不一定会带来20ps的时钟借用。举例来说,如果是插入长线之间,反而会加快时钟路径,导致时序进一步恶化。而根据你插入的地点不同,时序的变化结果也不相同,这就造成了,即使你知道要借80ps,却估不出要插入多少级BUFFER。

针对以上三个问题,结合我在工作中编写ECO脚本的经验,我用了以下方案实现时钟树自动借用。

整体分为 五步:
第一步,通过对时序报告的分析,提取出关键路径中,时钟路径中最靠近寄存器的那根net的名字。并提取出,该级的slack,终点reg名,以及该net的fanout。

第二步,用encounter中的DB命令和report命令,得出与该NET所接的所有reg的名字,并将这些reg的最大的后一级slack报出来。

第三步,粗略计算出,需要插入的buffer数量。

第四步,进行ECO操作。(之后返回第一步,迭代1-2遍)

第五步,对于最后2%左右的路径。提取其最后一根NET的两个term名字,对单一路径进行ECO操作。迭代两遍。

时钟树自动ECO脚本的操作基本完成。

下面,我对这几个步骤进行一下说明。

首先,我选取最后一级NET,是希望,操作针对公共路径进行,但要尽量减少需要同时考虑的公共路径数量,提升脚本可操作性。
其次,迭代多遍,是因为,对于同一条线,插入第一个BUFFER,对于时钟的影响是不确定的。但插入后,以后再插入的buffer,由于驱动以达到饱和,因此,每多插入一级buffer,时钟路径都会稳定的增加相应的延迟。因此,迭代2-3遍,所估算的BUFFER插入数量就变得比较精确了。
最后,对于少量的关键路径。采用对公共的借用已然达不到要求,这时,就在该路径的时钟路径的非公共部分,进行ECO操作。因为,这类操作
需要插入的buffer数量较多,因此,只对1-2%操作,才不容易造成标准单元拥塞。

此外,首次迭代,我建议设置一个ECObuffer插入的最大数量,例如,我设置是5,这样,可以防止时钟树借用过大,造成的后续问题。比如hold等等。

最后说一下实现:
在提取参数阶段,我推荐使用perl语言编写,perl对大量文本的查找,提取和生成报表,效率比tcl要好一些。
在需要跟ENCOUNTER进行交互部分的脚本,还是用tcl编写比较好,这样实现起来比较容易。
最后给出一个初步BUFFER数量的运算公式:数量= (后一级最大slack - 当前一级最大slack)/ 一个buffer的延迟。

好了,这次的分享基本到这里,希望能对各位同事有所帮助。
大家如果有什么问题,或者有更好的方案,请告诉我哦,谢谢大家啦。
发表于 2011-10-12 17:47:52 | 显示全部楼层
写这么多不容易,加分了
发表于 2011-10-13 12:33:32 | 显示全部楼层
这个要顶一下
发表于 2011-10-13 15:41:08 | 显示全部楼层
楼主!
i know who you are...
有空去你们那儿交流...
发表于 2011-10-13 19:53:21 | 显示全部楼层
乖乖,这么复杂, 可以写个脚本卖给公司了,

真的可以,
 楼主| 发表于 2011-10-13 22:54:16 | 显示全部楼层
这个脚本已经写完了,调试也通过了。
效果还是很明显的,在我的设计中,能将slack从-92ps修到-12ps
其实复杂度还可以,写脚本都是熟能生巧的功夫。
原理搞定,实现起来,也不是太难。

4个嵌套脚本工程量大概也就1000行左右吧,编写用3天时间。
不过迭代调试,用了4天多。(主要是实验一些参数)
如果大家写得时候,遇到什么问题,可以问我哦。
发表于 2011-10-14 23:05:22 | 显示全部楼层
学习了!
发表于 2011-10-18 15:49:29 | 显示全部楼层
这么看来, icc 的 skew_opt  就幸福的多了
发表于 2011-10-18 16:25:54 | 显示全部楼层
谢谢分享!
发表于 2011-10-18 17:31:37 | 显示全部楼层
赞一下lz写脚本的耐心!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-23 02:31 , Processed in 0.024973 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表