Timing borrow
http://www.mamicode.com/info-detail-2296344.html
https://blog.csdn.net/cy413026/article/details/89404998
http://bbs.eetop.cn/thread-488834-1-1.html?_dsign=5c11920d
相關的原理和解釋可以看下面兩個文章:
前一篇詳細解釋了如何利用timing borrow 來優化setup violation.
要修setup違例,將原本時序比較緊(arrival time比較長)的兩個DFF的后面一個換成高電平latch,利用高電平的透明時間,可以做到即使arrival time在下一個上升沿之后,latch也能將數據透明到Q端。這樣相當於借用了后一個周期的時間,最多借用半個周期。這種方法對再后一級DFF的setup有影響,只能再后面一級的setup slack比較充裕的情況下使用。
當然,對於這種情況,也可以使用useful skew。
后一篇詳細解釋了如何利用timing borrow 來優化hold violation.
利用latch修hold的原理是利用低電平latch, 因為低電平latch在高電平時間是鎖存的,所以當檢查latch之后的DFF的hold時,因為在高電平latch的輸出一直不變,所以一直滿足后級DFF的hold time,也就是說hold的slack=半周期-holdtime (忽略clk skew 和c-q), hold違例就能改善。
具體的做法可以看這里