简单来说,setup检查是为了检查数据传输不能太慢,否则,在capture edge就不能正确的锁存数据。修复setup的方法分为以下几种。
一、 优化网表
1. DCG综合
DCG是DC的SPG MODE。其中包含了虚拟布局布线技术,使得在RTL综合期间预测布线拥堵。从而自动优化网表以达到减少cong.的情况。
参考文件:https://max.book118.com/html/2018/1014/8076024016001127.shtm
2. pipeline和retiming
当logic depth太长且design的周期不是很长时,timing即使优化的很好达不到约束条件。
这时候需要对网表的逻辑进行优化,一般分为pipeline和retiming两种方法,原理图如下:
二、place 阶段调整floorplan
floorplan时要注意的几个点:
·有一些macro需要靠近port需要提前注意。
·有相互关联的macro要摆在一起。
·macro出pin的地方预留走线空间。
·有特殊要求需要放的比较近的一些cell,可以添加region限制module的place 空间。
…
三、通过group path设置优化timing
·细分group path,
·更具需要设置不同group的权重。
·设置目标slack,使工具能更强的优化对应的timing。
四、减小data path的delay
1. 更换不同的Vt/channel length
通常是指选用Vt更小或者channel length。 一般的,同一种cell会分为HVT, RVT, LVT等,同种Vt又会分为多种channel length,如C20, C24, C28,C32。
Vt:
阈值电压越低,因为饱和电流变小,所以速度性能越高;但是因为漏电流会变大,因此功耗会变差。
*速度大小按快到慢依次排列:SLVT>LVT>RVT>HVT。
*功耗大小:SLVT>LVT>RVT>HVT。
*即HVT的cell其阈值电压最大其掺杂浓度越高,其泄露功耗最小;
channel length:
*数值越高,速度越慢。
ecoChangeCell -inst xxx -cell xxx
2. 插入BUF
由于Setup violation绝大部分原因是由于drv造成的。比如cell的delay其实是根据它的input transition,以及output load查表计算得来。
因此,我们解决了cap和slew的问题,timing其实自然也得到了解决。比如net连接得太长导致驱动变弱,可以插入buf打断net,来提高驱动;fanout太大,也可以通过插入buf来减少fanout数目。
ecoAddRepeater
ecoDeleteRepeater
3. Size up cell
如果某个cell的驱动能力太弱,比较容易产生比较大的delay,因此我们可以通过size up这个cell来提高驱动能力,比如X1的BUF换成X4, X8的等。
但是我们在size up cell前也需要注意该cell的输入/输出transition的变化情况,因为驱动能力强的cell,它本身的load会比较大,可能会造成前一级cell驱动不了它的情况,所以实际的data path情况会比较复杂,不一定换大驱动的cell,delay就会变小。
一般情况下,如果我们看到某个cell的output transition比input transition大很多,那说明这个cell的驱动不够,我们可以尝试size up一下。
ecoChangeCell -upsize/-downsize
ecoChangeCell -inst xxx -cell xxx -loc {xLoc yLoc}
4. Layer assignment
高层金属有电阻小,延迟低的特点。所以可以通过更换布线层次来实现setup的修复。
如:删除wire后,设置绕线属性,让它绕在高层。
五、增加capture clock path delay
也可以叫做通过useful skew来修复。clock path位置如下图所示:
在capture clock path上追加delay cell使得capture clock path和launch clock path delay的到达时间一样,而达到约束条件,这样的方法叫做useful skew。
但是,由于这样会动到clock path,所以我们插cell前还是需要很谨慎的。首先我们得确保从capture clock出发的下一级path是不是有setup slack margin,同时,检查一下到当前该级register的input pin上的有没有hold margin。
innovus中提供了一些option来使用usefulSkew:
六、减小launch clock path delay
这也是动clock path来修复setup violation的一种方法,需要减小launch clock path delay。 这类方法一般用的比较少。理论上我们可以减小clock path的级数来实现,但实际操作起来还是要分析清楚clock的结构。
七、修setup的注意事项
1)检查timing path的hold margin。 需要注意的是,一般setup的violation在SS corner下,而hold则出现在FF的corner下面,两者之间有3倍左右的timing variation。所以,检查margin时需要考虑不同的corner影响。如果设计频率过高的话,可能会出现setup和hold相互打架的情况,这时可以考虑提高net delay占的比重,修出margin。
2)尽量动靠近endpoint的cell。因为越往path后面的cell,影响的path数目越少。但有时还是需要考虑path分叉情况再决定修复的方法。
3)修完所有path后,需要在PR工具中对动过的cell重新摆放以及route。
checkPlace (-noHalo)
ecoRoute
八、批量ecoChange cell的模板
1. change 指定cell
2. change Vt/channel length (from port)
————————————————
原文链接:https://blog.csdn.net/kobayashiyou/article/details/118900663