在后仿真過程中經常會遇到關于setup和hold violation的問題,但是關于setup和hold time的產生原因和由來很多人還比較朦朧,為此本文通過解剖一個邊沿觸發器簡要說明setup和hold產生原因。
解剖示例
上圖為觸發器的簡要示意圖(clk和’clk為反向時鐘)。T1和T4同時導通,T2和T3同時導通,且T1、T4和T2、T3導通狀況互反。其中T1、T2、T3、T4均為傳輸門,均為電平敏感,所以所謂的時鐘跳變可以理解為高低電平的相互跳變所致。而電路中實際的延時信息主要由于電信號導通時通過電子器件時耗費的時間。
【注】傳輸門的開關狀態如下圖所示。
工作過程
clk和’clk互為相反的信號,clk為低電平(’clk為高電平)時,T1和T4導通,此時數據進入到`D和``D,因為此時T4導通,圖中綠色箭頭線中的數據保持上一拍的數據結果。 當clk高電平(’clk為低電平)到來時,T1和T4關斷,T2和T3導通,②中的數據維持穩定,通過T3輸出至Q端,同時B點、’Q和’’Q點的數據保持一致穩定;當低電平到來時,T2和T3關斷,T1和T4導通,此時B點、’Q(Q)和’’Q點數據一直穩定,因此可以保證綠色箭頭線部分有穩定一致的數據通過Q端發送出去。
所以,可以看到在上跳沿采樣的數據可以保持一個時鐘周期。通過上述分析,我們可以看到一個邊沿觸發器實際上可以解剖為兩個鎖存器,后續分析時也會用到這種結構特點。 一般觸發器setup和hold的產生,就跟上述觸發器的工作過程密切相關,下面一塊來看看兩者之間的聯系。
setup和hold蹤跡
下圖為陰影區域為timing violation區。
clk上跳沿之前
setup時間(tsu):輸入數據D在時鐘上升沿之前必須保持不變的時間。為了得到有效的數據,必須保證A點、`D和``D點的數據保持一致穩定,否則在T2導通時將會形成振蕩電路。當T1打開時,輸入信號經過T1后分別到達A點、`D和``D點,并且保持一致,耗費的時間為Ts,時鐘從低電平跳變到高電平需要耗費時間為Tc,因此,為了保持數據的有效和電路的穩定,輸入數據需要保持的時間至少應該為Ts,如果不滿足將會在T2導通時,A點、`D和``D點的值不同,從而可能會產生亞穩態。因此,可以這樣理解,所謂的建立時間是指輸入數據D經過多長時間才能使`D的數據穩定可靠。所以setup指的是數據從D到達``D的時間。
clk上跳沿之后
hold時間(thold):在時鐘上升沿到達后,輸入數據需要保持穩定的時間。在clk上跳沿發生之后,T1和T4關閉,T2和T3打開,數據從Q端輸出。但是需要注意,因為T1關閉需要時間,所以在T1和T4關閉到T2和T3打開輸入數據必須保持穩定,如果A點的數據受到D點的影響,從而導致A點和D點數據不一致,也就是在上跳沿發生后,即T2、T3導通時,②中循環的數據不能保持穩定一致,從而導致Q端數據不穩定。因此,thold可以理解為D端數據通過T1,再經過②到達A點,保證A和`D點數據一致穩定的時間。 上面是對setup和hold產生原因的一些簡單介紹,有些朋友可能會問,上文中setup和hold感覺都是正值,為什么我在仿真的時候遇到過setup或者hold為負值的情況呢?為了探討方便,此處以常用到的一種觸發器(由兩個鎖存器組成)為例進行簡單的說明。
hold time為負值
當data從pin到鎖存數據的鎖存器的delay時間大于clock從pin到達鎖存器CK端的delay時,那么當D結束于CLK上升沿之前,此時從REGISTER層面觀測到的hold為負值,而實際上在鎖存數據的鎖存器端,由于之前data延遲大于clock延遲,CLK'對D'進行控制時,D'相對于CLK'一直保持到CLK'為高電平之后,也就是此時hold為正值,出現在上升沿右側。
setup time為負值
當data從pin到鎖存數據的鎖存器的delay時間小于clock從pin到達鎖存器CK端的delay時,那么當D開始于CLK上升沿之后,此時從REGISTER層面觀測到的setup為負值,而實際上在鎖存數據的鎖存器端,由于之前data延遲小于clock延遲,CLK'對D'進行控制時,D'出現在了CLK'之前,也就是此時setup為正值,出現在上升沿左側。
審核編輯:劉清
-
鎖存器
+關注
關注
8文章
906瀏覽量
41551 -
觸發器
+關注
關注
14文章
2000瀏覽量
61215 -
CLK
+關注
關注
0文章
127瀏覽量
17183 -
邊沿觸發器
+關注
關注
0文章
34瀏覽量
4004
原文標題:說說setup和hold violation
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論