前言
本系列整理數字系統設計的相關知識體系架構,為了方便后續自己查閱與求職準備。對于FPGA和ASIC設計中,D觸發器是最常用的器件,也可以說是時序邏輯的核心,本文根據個人的思考歷程結合相關書籍內容和網上文章,聊一聊D觸發器與亞穩態的那些事。
D觸發器結構
由傳輸門和兩個反相器組成一個循環電路(鎖存器),再由前后兩級鎖存器按主從結構連接而成。分別用兩個反相時鐘控制 , 觸發器在時鐘有效沿的短期時間 “ 窗口” 采樣數據。傳輸門起開關的作用,隨著CLK的狀態變化切換開關。從輸出來看的話,前級的鎖存器的值會有序傳送給后級(隨著時鐘輸入)。
D-FF電路結構
D觸發器的工作時序如下圖,圖中的D為上圖D觸發器輸入端,Q為D觸發器輸出端。此處分析并不考慮時鐘存在抖動偏移的情況,認為時鐘是理想的,沒有抖動偏移的。
D觸發器工作流程
時鐘為低電平時,也即主鎖存器工作時,D觸發器的主鎖存器進行鎖存,在圖中標號1為輸入的信號。主鎖存器經過傳輸門和反相器進行數據寄存;此時后級的從鎖存器和前級隔開;從鎖存器輸出上一個時鐘周期的數據。
主鎖存器工作
時鐘為高電平時,也即從鎖存器工作時,D輸入端和主鎖存器斷開,確保數據穩定,然后主鎖存器將數據傳輸給從鎖存器,然后輸出到Q端。
從鎖存器工作
標號2的虛線表示理想條件下(無延時)主鎖存器的鎖存邊沿,實際上主鎖存器穩定鎖存需要時間,所以相比理想條件需要延時一段時間。標號3的虛線表示理想條件下(無延時)從鎖存器的鎖存邊沿,實際上從鎖存器穩定鎖存需要時間,所以相比理想條件需要延時一段時間。根據主從鎖存器的輸出結果,可得到D觸發器輸出Q的波形。圖中的標號4中的虛線表示理想條件下(無延時)從鎖存器的鎖存邊沿,這里的延時是經過傳輸門 TG3 和反相器到輸出端 Q 的延遲。
同時,當時鐘由低電平變為高電平時,涉及到了兩組傳輸門的切換,因為實際的物理模型開關切換都是需要時間的,并且每個開關進行開斷時都有一定的時間偏差,所以在此時D端的輸入改變就容易造成從鎖存器的鎖存錯誤,從而造成從鎖存器的反相器環路想后級傳遞值時,給出錯誤的數據值,進而影響功能。
與主鎖存器相關的建立時間
此時再回顧建立時間的定義,建立時間(通常表示為tsu)指在時鐘上升沿來臨之前信號保持穩定的最小時間。結合前面的分析,建立時間的存在意義也就是于此。在時鐘電平跳變前,主鎖存器需要穩定鎖存我們想要的數據,由于實際物理電路的延遲,需要提前一段時間進行將數據進行穩定。因此,建立時間,實質上是主鎖存器鎖存需要的時間,。
與從鎖存器相關的保持時間
再回顧保持時間的定義,保持時間(通常表示為th)指在時鐘上升沿來臨之后信號保持穩定的最小時間。結合前面的分析,保持時間的存在意義也就是于此。當時鐘進入高電平后,由于傳輸門關斷需要一定的時間,因此輸入D必須繼續穩定一段時間才能夠保證數據被穩定鎖存。因此,保持時間,實質上是傳輸門切換至從鎖存器鎖存數據需要的時間。
簡單來說,主鎖存器決定了D觸發器的建立時間,從鎖存器決定了D觸發器的保持時間,從上面的例子中可以很容易看到,同時說明一點上面的分析均基于理想時鐘的情況下,同樣的道理,時鐘的抖動也會影響,數據正常鎖存。
亞穩態理論引入
所以,根據前文D觸發器模型的分析可知,當信號沒有滿足兩個鎖存器的鎖存時間時(也即違背了觸發器的建立和保持時間),就沒法正常的讓系統工作。設計中任何一個觸發器都有特定的建立和保持時間,在時鐘上升沿前后的這段時間窗口內,數據輸入信號必須保持穩定。如果信號在這段時期發生了變化,那么輸出將是未知的。這種有害狀態的傳播就叫做亞穩態。
亞穩態窗口
因此,可以定義觸發器的建立時間和保持時間為亞穩態窗口( Metastability Window)。在亞穩態窗口內,如果信號發生變化,輸出就可能變成亞穩態。建立時間和保持時間共同決定亞穩態窗口的寬度。
亞穩態窗口
窗口越大,進人亞穩態的概率越高。在大多數情況下,較新的邏輯器件會有更小的亞穩態窗口,也就意味著器件進入亞穩態的概率會更小。
異步系統容易發生亞穩態
在同步系統中輸入信號總是滿足觸發器的時序要求,所以不會發生亞穩態。但是,在異步系統中,由于數據和時鐘的關系不是固定的,因此有時會出現違反建立和保持時間的現象。此時觸發器的輸出會因此而產生毛刺,或者暫時保持在不穩定狀態而且需要較長時間才能回到穩定狀態。
當觸發器處在亞穩態時,輸出會在高低電平之間波動,這會導致延遲輸出轉換過程,并超出所規定的時鐘到輸出的延遲值(tco)。亞穩態輸出恢復到穩定狀態所需的超出t的額外時間部分稱為穩定時間(tMET)。并非所有不滿足建立和保持時間的輸入變化都會導致亞穩態輸出。觸發器是否進入亞穩態和返回穩態所需時間取決于生產器件的工藝技術與外界環境。一般來說,觸發器都會在一個或者兩個時鐘周期內返回穩態。
亞穩態示例
當信號在一個時鐘域( src_data_out)里變化,在另一個時鐘域(dest_data_in)內采樣時,就會導致輸出變成亞穩態。這就是所謂的同步失敗,會導致邏輯功能的異常。
異步亞穩態
平均無故障時間(MTBF)
當系統的故障率恒定時,MTBF ( Mean/ Average Time Between Failures,平均無故障時間)就是故障率的倒數。我們可以從中知道特定觸發器發生故障的頻率。
對于一個具有給定時鐘頻率和在該時鐘周期內具有均勻概率密度的異步數據信號邊沿的單級同步器,亞穩態事件的發生率可以用建立、保持時間窗口和時鐘周期的比值乘以信號觸發頻率來計算。
常數W和τ跟觸發器的電氣特性有關,會根據工藝技術而改變。所以,相同工藝生產出來的不同器件有著相似的W和τ值。
如何盡量避免亞穩態
每當違背建立、保持時間時,亞穩態就會出現,所以了解在何種情況下容易發生亞穩態,自然也就知道如何更好的避免亞穩態。在以下條件中,信號可能違背建立時間和保持時間的要求:
異步信號:輸入信號是異步信號。
時鐘不穩定:時鐘偏移/擺動(上升/下降時間)高于容限值。
跨時鐘域工作:信號在兩個不同頻率或者相同頻率但是相位和偏移不同的時鐘域下跨時鐘域工作。
組合延遲過大使觸發器的數據輸入在亞穩態窗口內發生變化。
亞穩態會引起過多的傳輸延遲和系統故障,所有的觸發器和寄存器都存在亞穩態可能。
亞穩態不能根除,但是可以減小亞穩態發生的概率。
在最簡單的情況下,設可以通過確保時鐘周期足夠長來避免亞穩態(也即降低時鐘頻率),但這種方法很難再滿足性能的要求。另一種避免亞穩態的方法就是使用同步器,這種同步器最好在單Bit信號的情況下使用。
使用多級同步器
避免亞穩態最常見的方法是在跨時鐘域的信號上加上一個或者多個同步觸發器,如下圖所示。這種方法用一個完整的時鐘周期來解決第一級同步觸發器的亞穩態問題(不包括第二級觸發器的建立時間)。但是這種方式增加了同步邏輯輸入的延遲。
N級同步器
簡而言之就是對于異步信號進行打拍處理,這個在數字系統設計中很常用。
使用時鐘倍頻電路的多級同步器
多級同步器的一個局限就是系統需要花費較長的時間去響應異步輸入。解決這個問題的辦法就是使用倍頻時鐘作為兩個同步觸發器的時鐘輸入。Altera的FPGA中具有這項稱為時鐘倍頻的技術。
時鐘倍頻電路的多級同步器
這種方法不僅能夠讓系統在一個系統時鐘周期內響應一個異步輸入,而且改善了MTBF。盡管這種倍頻時鐘能夠降低MTBF,但是這個影響要超過兩級觸發器引起的偏移量。
兩種方法都不能保證同步器阻止亞穩態傳播下去,它們僅僅減少了亞穩態發生的概率。
同步器的類型
根據MTBF的計算公式 ,一個異步輸入電路的MTBF和用于從亞穩態恢復的時間呈指數關系。 用同步器構成的時間緩沖器可以幫助從亞穩態中恢復。(這里參考的是《硬件架構的藝術》這本書,但是個人感覺翻譯的筆者可能把這段搞混掉了,如果看了原書的人,可能沒太能搞懂他說的兩種同步器,圖片和內容在我看來好像是存在不對應的情況,這里就依據個人理解對書中的內容進行勘誤)。
在《硬件架構的藝術》這本書中介紹了兩級同步器的兩種不同的模式:模式A(慢時鐘域轉快時鐘域)和模式B(快時鐘域轉慢時鐘域)。
模式A(慢時鐘域轉快時鐘域)
模式A是一個標準的電路,當異步輸入信號比時鐘周期大得多時最有效。(這里根據我的個人理解他可能想表達的就是常規在目的時鐘域中打兩拍的做同步,所以我這里暫且認定前面提到的多級同步器是他這里說的標準電路)
模式A同步器
使用在目的時鐘域打兩拍的方式作為兩級同步器,即使異步輸入在建立時間區間之外穩定,它仍然需要由時鐘驅動產生兩個周期的延遲,否則FF1可能進入亞穩態。如果亞穩態在不到一個時鐘周期內就解析了,FF2就會有穩定的輸入,否則就需要級聯更多的觸發器作為同步器。
模式B(快時鐘域轉慢時鐘域)
對于同步器的模式B,第一級觸發器的輸入D與Vcc相連,同時時鐘信號是異步輸入信號。另外兩個觸發器直接由系統時鐘(clk)控制。一個短脈沖讓q1變成高電平,這個高電平在經過兩個時鐘(clk)沿后從sync_out輸出。
模式B同步器
本節總結:
當信號存在跨時鐘域工作或者為異步信號時,此時要采用同步器進行同步,確保工作穩定。
如果是慢時鐘域轉快時鐘域的場景,可以進行打拍處理;如果是快時鐘域轉慢時鐘域,就采用同步器的模式B。
面對亞穩態建議
在兩個相互異步系統的交界面亞穩態是不可避免的。下面的幾點建議可以明顯減小亞穩態發生的概率。
工藝器件角度:
采用響應更快的觸發器(縮短亞穩態窗口 Tw )。
使用亞穩態硬化觸發器(專為高寬帶設計并且減少為時鐘域輸入電路而優化的采樣時間)。
設計角度:
采用同步器。
使用級聯觸發器(兩個或者多個)作為同步器。如果一個觸發器的亞穩態失敗概率為P,那么N個觸發器的亞穩態失敗率就是P^{N}。
減少采樣速率,或者說降低時鐘頻率。
避免使用dV/dt低的輸入信號(電壓突變較慢的輸入信號)。
小思與總結
本文針對前面D觸發器的分析沒有進行考慮時鐘的偏移情況,相關內容在后續介紹時序約束時進行整理;同時本文的同步方法建議在單Bit信號進行使用,多Bit信號或者單Bit信號處理的其他方法待后續進行整理。
為什么多Bit信號不能使用文中的同步器方式呢?在《硬件架構的藝術》書中提到了這樣一句話:一個異步信號不應該被兩個或者多個同步器所同步,這樣做會存在多個同步器輸出產生不同信號的風險。 這大概也就是這個問題的答案,具體分析將在后面關于跨時鐘處理的文章中進行整理解答,筆者水平有限,如有錯誤,歡迎討論。
審核編輯:湯梓紅
-
FPGA
+關注
關注
1629文章
21729瀏覽量
603000 -
asic
+關注
關注
34文章
1199瀏覽量
120436 -
時鐘
+關注
關注
10文章
1733瀏覽量
131447 -
D觸發器
+關注
關注
3文章
164瀏覽量
47902 -
亞穩態
+關注
關注
0文章
46瀏覽量
13268
原文標題:數字設計小思 - D觸發器與死纏爛打的亞穩態
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論