2024-10-01|閱讀時間 ‧ 約 0 分鐘

[Verilog] STA分析 - setup time violation如何處理 ? (原創)


上一篇內容提到說register取樣時需要刻意地維持訊號源的stable,

才不會讓register取樣時出現問題,

那如果我真的發生了上述的violation要怎麼處理呢?

setup time violation和hold time violation的解法一致?

在這邊詳細的說明一下


上一篇內容提到

setup time check在做的事情是檢查在訊號取樣時必須維持多久不動的時間,

假如果看到的結果是setup time violation,

物理解釋上就是 register已經準備要取值了但是signal還是一直在0-1之間動來動去,

而非維持著恆1或恆0,

至於為甚麼會看到這種現象?

原因就是因為我們觀測的signal實際上也是由前一顆Register的output丟出來的,

在經過了新的combinational運算後輸出成當前觀測Register的input,

這段路程實在是走的太長導致無法在當前的register準備要取值時讓訊號保持穩定(clk已經流到了黃色區間但訊號還沒stable)



那對於上述提到的violation該怎麼解呢

這邊提供幾個想法讓大家參考


大致上有四類解法

1.從data端解決

2.從clk端解決

3.從製程端解決

4.從synthesis tool解


關於從data端解決的話

由於上述提到說出現setup time violation原因是因為路徑走太長

因此這就成了一種解法,我只要把走過的路徑縮短就好,

  1. 降低combinational的複雜度(Q0->D1 之間的運算太複雜導致無法在規定時間內讓訊號維持好穩定) -> 敲pipe,把原先在同一T要做完的function拆成2-3T來做
  2. 縮短這兩個reg之間的距離,降低訊號從a點傳到b點的距離 (wire delay/wire latency)

->電流傳輸時其實就像是一根水管再傳水一樣,水由a點傳到b點就會消耗掉一定的時間


付費訂閱
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.