Hold Violation怎么修?


fix hold violations時,插入buffer或者delay cell的位置,是靠近launch端還是capture端,還是並無任何要求呢?

在邏輯和物理上都應該盡量靠近capture端,也就是endpoint。在邏輯上更靠近endpoint能夠保證插入的cells只會影響到有violation的path,物理上更靠近endpoint能夠有效避免DRV,因為修hold時加入的cell普遍驅動能力較弱。

 

 

同上篇中的setup相同,在實際設計中,因為會有一些margin加入,所以計算公式與上述略有不同,但本質沒有改變。那么,遇到hold violation一般怎么修呢?根據上面的公式可以看出,主要有三類方法:

1. 增大data line delay

此方法為后端設計中最常見的手法。具體操作是在data line上插入buffer 或者delay cell去增加delay。在此提出一個問題請大家思考:插入buffer或者delay cell的位置,是靠近launch端還是capture端,還是並無任何要求呢?答案下期揭曉~

2. 增大launch clock delay

增加launch clock delay的方法理論上可行,但是在實際中不到萬不得已我們是不希望動到clock的,因為動clock line不僅需要確認前后級path是否有足夠的margin,有時候還會遇到影響范圍不可控或者實現不方便等諸多限制。

3. 減小capture clock delay

此方法也具有方法2的缺點,同時還因為剪短clock delay在物理上無法實現的風險,因此應用更少。

 

總結來說,與setup不同,hold因為與clock cycle並無關系,只要clock tree做的比較balance,hold就比較容易收斂。但是因為setup和hold其實是一對相互制約的約束,也就是說修了hold后setup的slack就會變小甚至變負,因此越是高頻的path,setup和hold相互制約就越嚴重,甚至會出現修了setup后hold就修不掉的所謂“互卡”現象。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM