原因
在同步系統中,如果觸發器的setuptime/holdtime不滿足,就可能產生亞穩態,此時觸發器輸出端Q在有效時鐘沿之後比較長的一段時間處於不確定的狀態,在這段時間裡Q端毛刺、振盪、固定的某一電壓值,而不是等於數據輸入端D的值。這段時間稱為決斷時間(resolutiontime)。經過resolutiontime之後Q端將穩定到0或1上,但是究竟是0還是1,是隨機的,與輸入沒有必然的關係。
分類
非平衡的亞穩態大致有以下幾種類型:(1)細晶組織當組織細小時,界面增多,自由能升高,故為亞穩狀態。
(2)高密度晶體缺陷的存在晶體缺陷使原子偏離平衡位置,晶體結構排列的規則性下降,故體系自由能增高。
(3)形成過飽和固溶體即溶質原子在固溶體中的濃度超過平衡濃度,甚至在平衡狀態是互不溶解的組元發生了相互溶解。
(4)發生非平衡轉變,生成具有與原先不同結構的亞穩新相例如鋼及合金中的馬氏體、貝氏體,以及合金中的準晶態相
(5)由晶態轉變為非晶態,由結構有序變為結構無序,自由能增高。
解決方法
1降低系統時鐘
2用反應更快的FF
3引入同步機制,防止亞穩態傳播
4改善時鐘質量,用邊沿變化快速的時鐘信號
關鍵是器件使用比較好的工藝和時鐘周期的裕量要大。
危害
由於輸出在穩定下來之前可能是毛刺、振盪、固定的某一電壓值,因此亞穩態除了導致邏輯誤判之外,輸出0~1之間的中間電壓值還會使下一級產生亞穩態(即導致亞穩態的傳播)。邏輯誤判有可能通過電路的特殊設計減輕危害(如異步FIFO中Gray碼計數器的作用),而亞穩態的傳播則擴大了故障面,難以處理。只要系統中有異步元件,亞穩態就是無法避免的,因此設計的電路首先要減少亞穩態導致錯誤的發生,其次要使系統對產生的錯誤不敏感。前者要用同步電路來實現,而後者根據不同的設計套用有不同的處理辦法。左邊為異步輸入端,經過兩級觸發器同步,在右邊的輸出將是同步的,而且該輸出基本不存在亞穩態。其原理是即使第一個觸發器的輸出端存在亞穩態,經過一個CLK周期後,第二個觸發器D端的電平仍未穩定的機率非常小,因此第二個觸發器Q端基本不會產生亞穩態。
注意,這裡說的是“基本”,也就是無法“根除”,那么如果第二個觸發器Q出現了亞穩態會有什麼後果呢?後果的嚴重程度是由你的設計決定的,如果系統對產生的錯誤不敏感,那么系統可能正常工作,或者經過短暫的異常之後可以恢復正常工作,例如設計異步FIFO時使用格雷碼計數器當讀寫地址的指針就是處於這方面的考慮。如果設計上沒有考慮如何降低系統對亞穩態的敏感程度,那么一旦出現亞穩態,系統可能就崩潰了。
可行性
使用同步電路以後,亞穩態仍然有發生的可能,與此相連的是MTBF(MeanTimeBetweenFailure),亞穩態的發生機率與時鐘頻率無關,但是MTBF與時鐘有密切關係。有文章提供了一個例子,某一系統在20MHz時鐘下工作時,MTBF約為50年,但是時鐘頻率提高到40MHz時,MTBF只有1分鐘!可見降低時鐘頻率可以大大減小亞穩態導致系統錯誤的出現,其原因在於,提供較長的resolutiontime可減小亞穩態傳遞到下一級的機會,提高系統的MTBF。