上一篇內容提到說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原因是因為路徑走太長
因此這就成了一種解法,我只要把走過的路徑縮短就好,
->電流傳輸時其實就像是一根水管再傳水一樣,水由a點傳到b點就會消耗掉一定的時間