如何使用 Lockup Latch 修掉 hold violation


數字后端 fix hold timing 的常見方法是墊 buffer 或者調 tree,其實還有一種修 hold 的方法: 插入 lockup latch

假設下圖中的電路存在較大的 hold violation

為了修掉這條 hold,我們可以在data path 上插入一個 低電平有效的 latch

在 data path 上插入一個 latch 后,由於 latch 低電平期間保持透明,高電平期間則保持原值不變,所以相當於將數據向后延遲了半個周期,這樣就不會再有 hold violation 了

這里插入的 latch 就 叫做 lockup latch,因為其功能就像是把數據鎖定了半個周期一樣

 

Lockup Latch 最常見的應用場景是在修 scan mode 下的 hold violation:

 

上圖中的clk1 與 clk2 是兩個相互獨立的時鍾域,做完cts 后 clk1 的 latency 較小, clk2 的 latency 較大;由於在scan mode 下所有的 reg 會串成一條 scan chain,所以在 scan mode 下, R3 與 R4 之間是需要 check timing,又因為二者 clock latency 相差較大,所以這條path 很可能出現較大的 hold violation,為了修掉這條 hold,如果我們直接在 R3 R4 之間墊buffer,可能需要墊很多buffer,很浪費,此時就可以考慮使用 lockup latch,使 R3 輸出的數據向后延遲半個周期,這樣應該就不會有 hold 問題了,可能有人擔心:這樣會不會導致 R3 到 R4 之間出現 setup 問題呢? 這個不用擔心,因為在 scan mode 下時鍾比較慢,時鍾周期足夠長,不太可能出現 setup violation。

 

 

 

|----------------------------------------|

 


免責聲明!

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



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