十九種fix setup violation的方法
Setup violation的本質(zhì)是一個(gè)時(shí)鐘周期內(nèi)上一級(jí)寄存器鎖存的數(shù)據(jù)無法正確的傳輸?shù)较乱患?jí)寄存器并被正確地鎖存,也就是數(shù)據(jù)跑的太慢了。
這會(huì)減少cell delay;cell級(jí)數(shù)減少了,這種減小也不是單純地幾何倍數(shù)的減小,減小的程度應(yīng)該是小于“remove buffer的數(shù)量???原來的cell delay“;因?yàn)閚et wire變長(zhǎng)之后,電流從net一端傳播到net另一端電流衰減更加嚴(yán)重,對(duì)器件的充電速度變慢。
但是會(huì)增加net delay,net wire總長(zhǎng)度變大,RC參數(shù)變大,RC曲線更加綿長(zhǎng)。
我們知道buffer的結(jié)構(gòu)基本上等價(jià)于兩個(gè)inverter,使用一對(duì)inverter替換buffer可以較少path上總的delay。
跟只用一個(gè)buffer相比,一對(duì)反相器會(huì)兩倍的減少transition time,所以這會(huì)減少RC delay。而一個(gè)buffer的cell delay約等于一對(duì)inverter的cell delay,但是net delay減小了,所以總的delay減小了。
方法三:swap VT
就是換cell的VT,就是把HVT換成SVT/RVT或者LVT。
相同情況下low VT的cell的柵極閾值電壓更低,所以對(duì)于該cell本身其slew更??;相同情況下low VT的cell的柵極導(dǎo)通電流更大,所以其對(duì)于后續(xù)的net wire的充電速度更快。
所以low VT的cell相當(dāng)于從cell delay和net delay兩種角度去減小了總的delay。
不過,Low VT的cell靜態(tài)電流更大,靜態(tài)功耗也更大。
一般來說大驅(qū)動(dòng)的cell具有更高的speed,但是可能某些cell類型,更大的cell可能速度更慢。
不過,這樣也會(huì)使得power更高,area更大。
方法五:insert buffer
插buffer會(huì)減小transition time,這會(huì)減小net delay。如果總的net delay的減小大于cell delay的增加;那么總的delay就會(huì)減小。
不過,這也會(huì)導(dǎo)致power和area增加。
這跟insert buffer類似,不過區(qū)別在于場(chǎng)景的不同。
Long net wire會(huì)導(dǎo)致大的RC delay,如果insert repeater可以將net wire切分成多段可以減少總的net delay;因?yàn)榭偟膎et delay的減少大于cell delay的增加,所以這是一種有效的方法。
本質(zhì)也是減少net delay。
方法八:調(diào)整clock skew
就是通過skew調(diào)整向后一級(jí)借setup余量。
方法九:給critial path用NDR走線
類似于CTS繞線原理,就是減少net wire的RC和cross-talk。
手動(dòng)換高層走線或者手動(dòng)把net wire捋直。
修crosstalk除了加shielding和NDR rule以外,還有一種方法是:違例點(diǎn)周圍的各種走線remove掉或者拉的遠(yuǎn)一點(diǎn)。
如果實(shí)在修不下去,該降就降吧。
實(shí)在不行,也可以選用一些speed更快的庫,或者自己定做一些庫。
也分全局換庫和局部換庫,全局就是整個(gè)design都換,局部就是讓critical path用一些特殊的庫。
通過調(diào)整pg plan,釋放一部分高層繞線資源,也可利于修setup。
通過調(diào)整floorplan使得具有交互的module的位置更合理。
因?yàn)镸BFF cell內(nèi)部的公共走線和公共的晶體管更多,所以其本身的load更大,那么transition time就更大,delay就更大;所以可以通過拆分MBFF cell來修setup violation。
方法十七:打拍
打拍就是在reg2reg path中間再加一個(gè)reg,一個(gè)周期搞不定的事情,分成兩個(gè)周期來做。
方法十九:改RTL
如果RTL綜合出來本身的timing path邏輯級(jí)數(shù)太長(zhǎng)或者組合邏輯太多,可以考慮改RTL。
二種fix hold violation的方法
可以使用buffer、inverter piars、delay cell來修hold violation。
由于hold violation path的start point和end point可能對(duì)應(yīng)著別的setup violation path(或者setup slack比較緊張),所以add delay時(shí)需要格外小心。
另外,一般不要再兩條timing path的commen path add delay。
方法二十一:size-down cell
盡可能去size end-point附近的cell,這樣對(duì)別的path影響較小。
另外修crosstalk和手動(dòng)走線也可修hold。
歡迎各位讀者留言補(bǔ)充其他fix?timing的方法。