本系列將帶來FPGA的系統性學習,從最基本的數字電路基礎開始,最詳細操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業學生、初入職場小白及打算進階提升的職業開發者都可以有系統性學習的機會。
系統性的掌握技術開發以及相關要求,對個人就業以及職業發展都有著潛在的幫助,希望對大家有所幫助。后續會陸續更新 Xilinx 的 Vivado、ISE 及相關操作軟件的開發的相關內容,學習FPGA設計方法及設計思想的同時,實操結合各類操作軟件,會讓你在技術學習道路上無比的順暢,告別技術學習小BUG卡破腦殼,告別目前忽悠性的培訓誘導,真正的去學習去實戰應用,這種快樂試試你就會懂的。話不多說,上貨。
在FPGA中,同步信號、異步信號和亞穩態的理解
PGA(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。
再多級的寄存器,也無法避免亞穩態,只是級數越多,最后一級輸出亞穩態的幾率將會越低。
在實際電路中,一般采用兩級或者三級即可。
更多熱點文章閱讀
-
電子技術
+關注
關注
18文章
891瀏覽量
56069 -
電子發燒友論壇
+關注
關注
4文章
197瀏覽量
1101
原文標題:【教程分享】在FPGA中,同步信號、異步信號和亞穩態的理解
文章出處:【微信號:gh_9b9470648b3c,微信公眾號:電子發燒友論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論