理解FPGA內部的同步信號、異步信號和亞穩態


        FPGA(Field-Programmable Gate Array),即現場可編程門陣列。主要是利用內部的可編程邏輯實現設計者想要的功能。FPGA屬於數字邏輯芯片,其中也有可能會集成一部分模擬電路的功能,大多數模擬電路都是當做asic進行工作的,可編程的部分大多數都是數字邏輯部分。

 

       數字邏輯電路是由組合邏輯和時序邏輯器件構成,在時序邏輯器件中,常用就是時鍾觸發的寄存器。

 

 

如果在設計中,所有的寄存器的時鍾端都是連接的同一個時鍾,那么稱之為同步電路設計。所為同步也就是所有的寄存器的輸出端都是由同一個時鍾端驅動出來的,所有的寄存器在同一個步調上進行更新。

 

同步電路中的信號,我們稱之為同步信號。

 

如果在設計中,寄存器的時鍾端連接在不同的時鍾上,那么稱之為異步電路設計。    

 

 

在異步電路中,被clk1驅動的寄存器和組合邏輯電路構成時鍾域clk1的電路,被clk2驅動的寄存器和組合邏輯電路構成時鍾域clk2的電路。信號從clk1的時鍾域到clk2的時鍾域,被稱為跨時鍾域。而對於信號D5來說,我們認為它是clk1時鍾域的信號,那么對於clk2時鍾域來說,就是異步信號,因為它不與clk2的驅動沿對齊。

 

寄存器有一種特性,在clk的有效邊沿時,采樣數據D,輸出到Q,此過程如果想要穩定進行,那么要求,數據D在clk有效邊沿之前一段時間保持穩定(建立時間),在clk有效邊沿之后一段時間保持穩定(保持時間),如果任何一個不滿足,就會導致此過程失敗,結果就是clk的有效邊沿過去后,Q的值可能就不會出現預想值。那么是什么呢?先不着急,后面慢慢談。

 

在真實的電路中,各部分元器件都是由延遲的。對於同步電路來說,Q的更新都是在clk上上升沿之后的一段時間(Tco:輸出延遲),輸出的數據經過組合邏輯或者線路也會有延遲(delay:線路延遲),到達下一個寄存器。此時,信號早就偏離了clk的上升沿。所以對於下級寄存器來說,這個信號也是“異步信號”。所以說真實電路中,全部的信號都是“異步信號”。

 

那么為什么在同步電路中,我們都稱為同步信號呢?

 

因為在電路中,所有的延遲都是已知的(TCO、delay等等),我們可以通過擴大clk的周期,確保clk的周期大於TCO等等之類延遲之和,那么就可以保證下級寄存器采樣到數據。所以這種電路中的信號,我們依然把他稱之為同步信號。

 

在跨時鍾域時,由於兩個時鍾之間沒有任何關系,無論怎么調整周期,都不一定能滿足下級寄存器采樣到數據,肯定不能調成一致周期,那就變成了同步設計。例:用寄存器采樣外部按鍵的輸入,那么此時外部按鍵的信號對於寄存器來說就是異步信號,因為外部信號是隨時都有可能有效,所以無論怎么調整,都不一定能夠保證信號滿足寄存器的建立保持時間。

 

那么既然在很多情況下,無論如何也避免不了異步信號帶的壞處,那么能不能全部采用同步設計?顯然是不太現實,不同接口或者存儲器等都有自己頻率,全部采用同步電路設計的方式將失去很多功能。例如:千兆以太網的GMII接口,采用125M接口,1080P的HDMI接口采用148.5MHz的接口。

 

既然無法避免,那就勇敢面對。

 

當信號不滿足建立和保持時間時,寄存器會輸出什么值呢?

 

 

在上圖中,輸入信號在clock的上升沿左右有了一個從高到低的變化,即不滿足建立和保持時間。那么寄存器的輸出端就會輸出一個既不是高電平也是低電平的一個電平。

 

在數字電路中,高電平和低電平是兩個穩定的電平值,能夠一直維持不變化。如果不滿足建立或者保持時間的話,輸出的電平值不高也不低,但是此電平不穩定,稱為亞穩態(類似於健康和亞健康)。亞穩定是不穩定的,終究要向高或者低電平進行變化。

 

那么有人說,亞穩態終究會走向穩態,那么豈不是沒有影響了。答案是錯誤的。可以想象,亞穩態走向穩態是必然趨勢,可是需要一定的時間,如果在這一段時間內,被其他電路所引用,那么就會造成亞穩態的傳播,進而導致整個電路的癱瘓(因為整個電路都會變成非高非低的信號在運行)。

 

那么應該如何處理呢?

 

對於單bit信號,我們一般采用同步寄存器鏈來進行處理。

 

 

對於同步寄存器鏈的要求有三點:

 

 

第一:在同步寄存器鏈中,所有的寄存器都必須用同一個或者相關(例如:一個時鍾是另外一個時鍾的相位延遲180度)時鍾驅動。

第二:第一個寄存器的輸入為外部的異步信號。

第三:在同步寄存器鏈中,所有的輸出只能給下一級使用。只有最后一級寄存器可以給其他的電路使用。

 

     對於第一點和第二點,不在解釋。下面解釋一下第三點。

 

 

D3信號為clk2時鍾域的異步信號,那么D4信號就有可能出現亞穩態。假設D4信號出現亞穩態后,恢復至穩態的時間為T1,組合邏輯2的延遲為T2,那么D5信號得到穩態的時間為T1+T2。如果沒有組合邏輯2時,D5信號得到穩態的時間為T1。如果clk2的周期大於T1+T2,那么有無組合邏輯2,將不受影響;如果clk2的周期大於T1且小於T1+T2,那么有組合邏輯2,就會造成亞穩態的傳播。如果clk2的周期小於T1,也會亞穩態的傳播。

 

綜上所述,組合邏輯2,還是不要有的好,能夠大大增加D5得到穩態的幾率。

在上述敘述中,我們只是提高了得到穩態的幾率,但是還是有亞穩態傳播的幾率。

 

在實際電路中,一般同步寄存器鏈會有兩級甚至多級。那么多級的同步寄存器鏈會有什么作用呢?

 

在上述敘述中得知,亞穩態是一種不穩定的狀態,會向穩定狀態過渡。如果第一級寄存器輸出亞穩態,恢復時間為T1,如果clk的周期小於T1,那么亞穩態將會在第二級寄存器輸出,由於第一級亞穩態已經經過clk一個周期的恢復,所以在第二級寄存器輸出時,亞穩態恢復至穩態的時間T2將會縮短。T2< T1。

 

再多級的寄存器,也無法避免亞穩態,只是級數越多,最后一級輸出亞穩態的幾率將會越低。

 

在實際電路中,一般采用兩級或者三級即可。

 

設計者:郝旭帥         QQ:746833924     QQ交流群: 173560979     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM