棋子 · 1月18日

探STA | 修timing violation的二十一种方法

其实修setup violation和hold violation是对立统一的,例如我们通过insert buffer修一个setup violation,那么有时我们也可以通过remove buffer修一个hold violation。

十九种fix setup violation的方法

Setup violation的本质是一个时钟周期内上一级寄存器锁存的数据无法正确的传输到下一级寄存器并被正确地锁存,也就是数据跑的太慢了。

方法一:减少path上的buffer数量

这会减少cell delay;cell级数减少了,这种减小也不是单纯地几何倍数的减小,减小的程度应该是小于“remove buffer的数量 ✖ 原来的cell delay“;因为net wire变长之后,电流从net一端传播到net另一端电流衰减更加严重,对器件的充电速度变慢。

但是会增加net delay,net wire总长度变大,RC参数变大,RC曲线更加绵长。

方法二:使用一对inverter替换buffer

我们知道buffer的结构基本上等价于两个inverter,使用一对inverter替换buffer可以较少path上总的delay。

跟只用一个buffer相比,一对反相器会两倍的减少transition time,所以这会减少RC delay。而一个buffer的cell delay约等于一对inverter的cell delay,但是net delay减小了,所以总的delay减小了。

image.png

方法三:swap VT

就是换cell的VT,就是把HVT换成SVT/RVT或者LVT。

相同情况下low VT的cell的栅极阈值电压更低,所以对于该cell本身其slew更小;相同情况下low VT的cell的栅极导通电流更大,所以其对于后续的net wire的充电速度更快。

所以low VT的cell相当于从cell delay和net delay两种角度去减小了总的delay。

不过,Low VT的cell静态电流更大,静态功耗也更大。

方法四:增加驱动强度(size-up cell)

一般来说大驱动的cell具有更高的speed,但是可能某些cell类型,更大的cell可能速度更慢。

不过,这样也会使得power更高,area更大。

image.png

方法五:insert buffer

插buffer会减小transition time,这会减小net delay。如果总的net delay的减小大于cell delay的增加;那么总的delay就会减小。

不过,这也会导致power和area增加。

方法六:insert repeater

这跟insert buffer类似,不过区别在于场景的不同。

Long net wire会导致大的RC delay,如果insert repeater可以将net wire切分成多段可以减少总的net delay;因为总的net delay的减少大于cell delay的增加,所以这是一种有效的方法。

image.png

方法七:调整cell在版图location

本质也是减少net delay。

image.png

方法八:调整clock skew

就是通过skew调整向后一级借setup余量。

image.png

方法九:给critial path用NDR走线

类似于CTS绕线原理,就是减少net wire的RC和cross-talk。

方法十:手动走线

手动换高层走线或者手动把net wire捋直。

方法十一:修crosstalk

修crosstalk除了加shielding和NDR rule以外,还有一种方法是:违例点周围的各种走线remove掉或者拉的远一点。

方法十二:降频

如果实在修不下去,该降就降吧。

方法十三:换库

实在不行,也可以选用一些speed更快的库,或者自己定做一些库。

也分全局换库和局部换库,全局就是整个design都换,局部就是让critical path用一些特殊的库。

方法十四:调整pg plan

通过调整pg plan,释放一部分高层绕线资源,也可利于修setup。

方法十五:调整floorplan

通过调整floorplan使得具有交互的module的位置更合理。

方法十六:split multi-bit flip-flop

因为MBFF cell内部的公共走线和公共的晶体管更多,所以其本身的load更大,那么transition time就更大,delay就更大;所以可以通过拆分MBFF cell来修setup violation。

image.png

方法十七:打拍

打拍就是在reg2reg path中间再加一个reg,一个周期搞不定的事情,分成两个周期来做。

方法十八:使用pba替代gba

GBA 的全称是(Graph Base Analysis)。STA工具计算 timing 时,默认是采用 GBA 模式来报 timing 的。GBA全称为graph based analysis,是工具默认的分析方式。它是说工具在从lib中读取cell的delay的时候,永远是读取由最差transition产生的delay。PBA是path based analysis,指的是我要分析哪条timing path,就用这条timing path的transition来查cell的delay。pba算法复杂,分析时间大大提高,但结果更为精确。

image.png

方法十九:改RTL

如果RTL综合出来本身的timing path逻辑级数太长或者组合逻辑太多,可以考虑改RTL。

二种fix hold violation的方法

方法二十:add delay

可以使用buffer、inverter piars、delay cell来修hold violation。

由于hold violation path的start point和end point可能对应着别的setup violation path(或者setup slack比较紧张),所以add delay时需要格外小心。

另外,一般不要再两条timing path的commen path add delay。

image.png

方法二十一:size-down cell

尽可能去size end-point附近的cell,这样对别的path影响较小。

另外修crosstalk和手动走线也可修hold。

抛砖引玉
欢迎各位读者留言补充其他fixtiming的方法。

END

作者: Jack Xu
文章来源:志芯

推荐阅读

更多IC设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
20186
内容数
1307
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息