做數字電路設計的可能都見過圖一所示的setup和hold時間檢查,從圖中可以明顯看出,setup time檢查下一個沿,而hold time檢查同一個沿。那么這是為什么呢 ?
圖1
數字電路的工作原理
以數字電路設計常見的狀態機為例,下一個狀態的值總是由當前狀態加一些判斷條件決定。為了保證下一個狀態值的正確,新的狀態值要在下一個時鐘沿被正確采樣,同時不能被當前時鐘沿采樣。
因此,setup time 的檢查是為了保證數據在下一個時鐘沿被正確采樣,而 hold time 的檢查是保證數據不被當前沿采樣或破壞,滿足了這兩點,數字電路便能正常工作。
Hold Time Violation
考慮一個兩級移位寄存器,其launch clock 和 capture clock如圖2所示。可以看到clock skew非常大,大于半個時鐘周期。假設數據的延遲小于半個時鐘周期,那么 hold time 的檢查公式必然不滿足, 即 Tcq + Tcomb < Tclk_skew + Thold。
對于這個兩級移位寄存器,我們希望的值是 00(cycle0), 01(cycle1), 10(cycle2),00(cycle3)。但是由于第二級寄存器有hold time violation,數據在當前沿就被采樣,那么我們實際看到的值為 00(cycle0),11(cycle1),00(cycle2),00(cycle3),完全是錯誤的結果。
圖2
時序違反一定會有亞穩態發生嗎
不一定。寄存器進入亞穩態有兩個前提條件,一是數據要發生變化,二是數據的變化要發生在setup time和hold time限制的范圍內。以上述圖2為例,假設數據的變化沒有出現在setup和hold time限制的范圍內,盡管是有hold time violation,也是沒有亞穩態發生的。
-
寄存器
+關注
關注
31文章
5336瀏覽量
120230 -
數字電路
+關注
關注
193文章
1605瀏覽量
80578 -
Setup
+關注
關注
0文章
30瀏覽量
11986
原文標題:為什么setup檢查下一個沿而hold檢查當前沿
文章出處:【微信號:FPGA開發之路,微信公眾號:FPGA開發之路】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論