最近在非同步fifo設計中,遇到了對跨時鐘訊號的同步處理,主要是為了降低亞穩態出現的概率。因此這篇文章主要講一下亞穩態出現原因以及處理辦法。
(一)亞穩態的出現原因
亞穩態主要是指觸發器在某一段時間內不能達到乙個確定的狀態。乙個觸發器一旦進入亞穩態狀態,則無法**觸發器的輸出電平,也無法**什麼時候可以穩定在某個確定的電平上,此時觸發器的輸出端q在較長時間內處於振盪狀態,不等於輸入端d。這段時間稱作決斷時間(resolution time)。經過resolution time之後,輸出端q將會穩定在某個電平上,但是這個穩定之後的電平與輸入端d是沒有關係的。
亞穩態出現的主要原因是因為觸發器無法滿足setup time或者hold time。亞穩態在在輸出穩定下來之前有可能是毛刺、振盪、固定的某一電平值,因此會導致邏輯誤判;並且在沒有穩定下來之前,輸出在0-1之間的值還會使得下一級電路進入亞穩態狀態。邏輯誤判可以通過一些設計技巧進行改善(grey編碼),但是亞穩態的傳輸會擴大故障,難以處理。
只要系統中存在非同步元件,則亞穩態是沒有辦法避免的,亞穩態通常發生在非同步訊號檢測、跨時鐘傳輸和復位電路當中。下面做乙個詳細的說明。
在同步系統中,輸入總是與時鐘同步,因此暫存器的setup time和hold time是滿足
的,一般情況下是不會發生亞穩態情況的。亞穩態一般是發生在跨時鐘傳輸和非同步訊號採集中以及復位電路中:
(1)在跨時鐘傳輸中,由於時鐘之間存在相移,因此當源暫存器發出資料之後,無法確定在什麼時間段到達目的暫存器,因此也不能保證滿足目的暫存器的setup time 和hold time要求。
(2)在非同步訊號採集當中,由於非同步訊號可以在任何時間點到達目的暫存器,因此也無法滿足目的暫存器的setup time和hold time 時間。
(3) 復位電路分為兩類,非同步復位電路和同步復位電路。分別介紹一下:
a.非同步復位電路:非同步復位電路的verilog編碼如下:
always @(posedge clk or negedge rst)
begin
if(!rst) dout<=0;
else dout<=din;
end
綜合出來的電路如下圖所示:
如果rst訊號的撤銷在trecovery和tremoval之內,那勢必會產生亞穩態。輸出會在時鐘邊沿的tc2q時間之後產生振盪,在tmet時間之後穩定在某個電平上,而tmet時間就是決斷時間,這樣的話就會造成復位失敗。整個過程如下圖所示:
b.同步復位電路:其verilog實現如下:
always @(posedge clk)
begin
if(!rst) dout<=0;
else dout<=din;
end
該**綜合出來的硬體電路如下圖所示:
當輸入端din為高電平的時候,復位訊號的撤銷正好位於setup 和 hold之間,那麼與din相與之後的訊號也在clk訊號的setup和hold之間,亞穩態肯定也隨之產生。這種情況下的同步復位是失敗的。整個過程如下圖所示:
(二)對亞穩態的處理
對亞穩態的情形一般有三種處理方法:
a.對非同步訊號進行同步處理
b.採用fifo對跨時鐘訊號進行緩衝設計
c.對復位訊號採用非同步復位、同步處理的方法
這三種處理方法其實本質上都是在進行同步處理, 也就是運用同步器進行處理。而同步器的一般設計方法就是把將兩個觸發器級聯,第乙個觸發器看做預處理器,主要是對資料進行緩衝,使得資料在傳入第二個觸發器之前穩定下來。
以上就是亞穩態的相關知識。
數位電路中的亞穩態產生原因和處理方法
最近在非同步fifo設計中,遇到了對跨時鐘訊號的同步處理,主要是為了降低亞穩態出現的概率。因此這篇文章主要講一下亞穩態出現原因以及處理辦法。一 亞穩態的出現原因 亞穩態主要是指觸發器在某一段時間內不能達到乙個確定的狀態。乙個觸發器一旦進入亞穩態狀態,則無法 觸發器的輸出電平,也無法 什麼時候可以穩定...
數位電路中為什麼產生亞穩態?應該如何處理?
最近在非同步fifo設計中,遇到了對跨時鐘訊號的同步處理,主要是為了降低亞穩態出現的概率。因此這篇文章主要講一下亞穩態出現原因以及處理辦法。一 亞穩態的出現原因 亞穩態主要是指觸發器在某一段時間內不能達到乙個確定的狀態。乙個觸發器一旦進入亞穩態狀態,則無法 觸發器的輸出電平,也無法 什麼時候可以穩定...
數位電路中跨時鐘域問題CDC 1 亞穩態
從這篇開始,推送一系列晶元設計中跨時鐘域 cdc 的知識。跨時鐘域設計幾乎是現代數字晶元設計中所有設計人員必須要掌握的基本知識,但是從自身的經歷來說,這方面的知識在本科和研究生的課程當中都沒有講過,卻是面試中經常被考到的知識點。同時工作中工程師也必不可少地要和cdc打交道,考慮如何進行跨時鐘域設計,...