汪路元
(北京空間飛行器總體設計部,北京100094)
在進行 FPGA設計時,往往只關心“0”和“1”兩種狀態。然而在工程實踐中,除了“0”、“1”外還有其他狀態,亞穩態就是其中之一。亞穩態是指觸發器或鎖存器無法在某個規定時間段內達到一個可確認的狀態[1]。當一個觸發器進入亞穩態時,既無法預測該單元的輸出電平,也無法預測何時輸出才能穩定在某個正確的電平上。在亞穩態期間,觸發器輸出一些中間級電平,甚至可能處于振蕩狀態,并且這種無用的輸出電平可以沿信號通道上的各個觸發器級聯式傳播下去。亞穩態是異步數字電路設計中的固有現象,但是由于其偶發性和溫度敏感性的特點,在產品前期測試過程中很難發現。當前多個型號的FPGA產品研制過程中暴露的質量問題均與亞穩態有關,而且多是在設備研制后期進行高低溫試驗時出現,嚴重影響了產品研制。因此,亞穩態對系統的危害性應該引起足夠重視,并在設計初期階段應采取有效緩解措施,以提高系統的可靠性。
所有數字器件(包括FPGA)的信號傳輸都有一定的時序要求,以保證每個器件將捕獲的輸入信號正確輸出。對于觸發器,為了確保操作的可靠性,輸入信號必須在時鐘沿的某段時間(觸發器的建立時間)之前保持穩定,并且持續到時鐘沿之后的某段時間(觸發器的保持時間)才能改變,而且該觸發器的輸入反映到輸出還需要經過一定的延時(時鐘到輸出的時間)。如果數據信號的變化違反了建立時間或者保持時間的要求,則觸發器的輸出會處于亞穩態。此時,觸發器的輸出會在高電平“1”和低電平“0”之間盤旋一段時間,這也意味著觸發器的輸出達到一個穩定的高或者低電平的狀態所需要的時間會大于時鐘到輸出的時間。這樣觸發器輸出端Q在有效時鐘沿之后較長一段時間處于不確定狀態,這段時間稱為決斷時間。在這段時間里Q端可能為毛刺、振蕩或某一固定電壓值,而不是等于數據輸入端D的值。經過決斷時間之后 Q端將穩定到“0”或“1”上,但究竟是“0”還是“1”,是隨機的,與輸入沒有必然的聯系。圖1所示是第一級觸發器存在建立時間或保持時間沖突時導致Q1出現亞穩態的示意圖。
圖中,tsu為觸發器建立時間;th為觸發器保持時間;tco為輸出相對于時鐘沿之后的延遲時間;tres為決斷時間;tw為觸發器輸入數據變化可能形成亞穩態現象的時間窗口,這個時間窗口由建立時間和保持時間兩部分組成;tnet為第一級觸發器輸出至第二級觸發器輸入端的傳輸延時。

觸發器穩態輸出是在時鐘信號CLK的上升沿之后經過tco延時,將輸入數據反映到輸出端,但是在亞穩態發生時,輸出端數據將再經過 tres后才隨機穩定在“0”電平或“1”電平上,與輸入數據沒有必然聯系。圖2是觸發器亞穩態響應曲線[2],橫軸為數據到達時刻(相對于時鐘信號的上升沿),縱軸為輸出延時。當數據輸出延時超過tcomax時,觸發器輸出就會出現亞穩態,對應的數據達到時刻正好是建立時間和保持時間的臨界點。

由于亞穩態輸出在穩定下來之前可能是毛刺、振蕩、固定的某一電壓值,因此亞穩態對系統的影響主要表現在以下兩個方面:
(1)導致后端電路產生邏輯誤判,尤其是多扇出電路中,由于扇出延時的差別會導致各負載端識別出不同的邏輯電平,使系統功能發生紊亂。
(2)輸出0~1之間的中間電壓值還會使下一級產生亞穩態,即導致亞穩態在系統中傳播。
亞穩態的出現是一種概率現象,并且結果正確與否也是一種概率現象。因此,為了便于估算,工程實踐中提出了一種統計模型來評估亞穩態所造成的危害程度,即平均無故障時間MTBF(Mean Time Between Failures)。MTBF的定義如下[2]:

式中,fC為時鐘頻率,fD為輸入數據變化頻率,tr為最大可用決斷時間,T0和τ為與器件電氣特性和工藝特性相關的常數。值得注意的是,亞穩態本身與器件工作頻率無關,但是MTBF與時鐘頻率相關并成反比,所以系統工作頻率越高,MTBF越小,亞穩態引起故障的概率也就越高。
MTBF的計算對象是一個觸發器,在實際中器件生產廠家先通過特殊的測試手段得到產品的MTBF,然后再確定公式中的參數指標向外發布。用戶可以根據這些參數指標定量計算當前設計的可靠性。對于常用的Actel公司的FPGA和Xilinx SRAM型FPGA,器件廠商均公布了T0和τ的數值[3-4],實際使用時可以進行評估計算。
在FPGA設計中,只要不滿足內部觸發器的建立時間和保持時間要求,就會出現亞穩態。對于一個全同步設計來說,時鐘和數據相位關系固定,所有觸發器都由一個時鐘信號驅動,雖然在不同點也存在相位差別,但開發工具會通過計算時鐘信號線的走線長度來預測傳輸延時,并通過時鐘域內的時鐘樹綜合算法來求得優化的結構,使觸發器的建立時間和保持時間滿足要求,不出現亞穩態,這也是所有設計規范都推薦采用全同步設計的一個重要原因。但是,實際的系統一般都不只有一個時鐘,而是一個多時鐘系統,例如常見的下行鏈路數據復接設備,一般是有多少路輸入就有多少個時鐘,因而需要分析其中的異步傳輸路徑并采取緩解措施。
(1)慢時鐘域信號進入快時鐘域(兩者周期相差1倍以上)
慢時鐘域信號進入快速時鐘域是工程實踐中遇到最多的一種情況,輸入信號從CLK1時鐘域進入到CLK2時鐘域時可以通過兩級觸發器級聯的方式來緩解亞穩態,具體電路如圖3所示。

圖3電路中,由于無法預知異步輸入信號ASY_IN的翻轉時刻,所以同步器第一級觸發器的輸出Q1存在亞穩態,該信號通過FPGA布線路徑傳輸至第二級觸發器的輸入端。設CLK2的時鐘周期為T,且假定CLK2到兩個觸發器的時鐘延時相等(即偏斜為零),第一級觸發器輸出到第二級觸發器輸入端的路徑傳輸延時為tnet,其余時序參數定義同圖1。則只要滿足 tco+tres+tnet+tsu≤T,Q1就有足夠的時間從亞穩態恢復至穩定態,并滿足第二級觸發器的建立時間要求,所以第二級觸發器的輸出是穩定態。同時還要注意的是,信號在CLK2時鐘域內會有T~2T的延時。
設計中,可以通過增加觸發器級聯的數目來獲得更大的MTBF,但是這樣會進一步增大信號延時并占用更多FPGA資源。綜合考慮現有FPGA器件工藝和電氣參數,一般情況下,二級觸發器的級聯已經可以滿足實際要求了。
(2)慢時鐘域信號進入快時鐘域(兩者周期相差1倍以內)
從亞穩態的機理可以知道,圖3中Q1的亞穩態恢復結果可能是“0”也可能是“1”,所以要求 CLK1的周期必須是CLK2周期的2倍以上,才能保證當異步輸入信號為單周期脈沖時,在CLK2時鐘域信號不丟失。所以對于兩個時鐘周期相差1倍以內的情況,圖3的電路是不合適的,可以采用圖4所示的脈沖擴展同步電路來緩解亞穩態。

圖4電路中,通過“異或”邏輯在第一個時鐘域內對信號寬度進行擴展,然后采用兩級觸發器進行同步來實現。
(3)快時鐘域信號進入慢時鐘域
當信號從快速時鐘域進入慢時鐘域時,圖3和圖4電路都可能會引起輸入信號的丟失,這種情況下可以使用圖5所示的窄脈沖檢測電路來實現。

在許多應用中,跨時鐘域傳送的不只是簡單的單比特信號,很多時候是并行數據信號的跨時鐘域傳輸。這種情況下,不能簡單地對并行信號的每一位獨立使用圖3所示同步器。因為實際電路中無法保證并行信號同時翻轉,這樣做會導致輸出采集到錯誤的信號值,對系統功能產生影響。針對這種應用可以采用異步FIFO或雙口RAM來解決[5]。
在FPGA中,有現成的RAM硬核,設計時可以通過開發工具配置這些RAM的使用方式,可配成異步FIFO或雙口RAM。該類存儲器讀寫控制分別采用兩個完全獨立的時鐘域,異步FIFO內部采用格雷碼計數器進行編址,操作簡單,提供了現成的半滿、全滿和空信號(這些信號均經過了跨時鐘域處理,可以直接在讀時鐘域和寫時鐘域使用)。當采用雙口RAM時,需要自行處理地址信號的跨時鐘域,此處需要注意的是,要將多比特的地址信息在各自時鐘域中轉化為單比特,然后再使用單比特同步器來解決。
異步復位由于其實時性好、設計簡單以及與FPGA底層庫單元(帶異步復位的觸發器)結合性好等特點,受到廣大設計師的青睞,但是在使用過程中往往忽略了其中的亞穩態問題。類似于觸發器對輸入信號建立時間和保持時間的要求,異步復位信號在釋放時有恢復時間(Recovery time)和移除時間(Removal time)的要求,如圖6所示。

圖中,trec為恢復時間,指復位信號釋放時刻與緊隨其后的有效時鐘沿間的最小時間;trem為移除時間,指時鐘有效沿時刻與之后的復位信號釋放之間的最小時間。這就要求異步復位釋放時刻與時鐘的有效沿盡量遠,即異步復位應該和時鐘沒有任何關系。其實不然,對于觸發器,異步復位信號對內部保持電路和直接輸出電路都有影響。當復位信號有效時,輸出清零;當復位信號釋放后,輸出由保持電路決定,如果復位信號釋放時刻離時鐘沿太近,則輸出會在清零和數據保持之間出現亞穩態。
實際電路中,可以采用異步復位同步釋放的方式來緩解復位導致亞穩態的影響。低電平有效的異步復位同步釋放實現電路如圖7所示。圖7電路既保持了異步復位實時性好的優點,又緩解了復位釋放時刻的亞穩態,實際應用中可以參考。

隨著FPGA功能復雜度和運行頻率的大幅提升,亞穩態已經成為危害系統可靠性的重要隱患,必須在設計初期采取緩解措施,以獲得滿足要求的MTBF,將亞穩態的影響降低至系統允許范圍。根據實際需要,靈活運用文中的緩解措施,便可以減小亞穩態的影響,提高系統可靠性。
[1]沈立,朱來文,陳宏偉,等譯.高速數字設計[M].北京:電子工業出版社,2004:96-105.
[2]FOLEY C.Characterizing metastability[C].Proceedings of Second International Symposium on Date of Conference.Conference Publications,1996:175-184.
[3]Xilinx Corporation.Metastability considerations[R].1997.
[4]Actel Corporation.Metastability characterization report for actel antifuse FPGAs[R].2006.
[5]CUMMINGS C E,ALFKE P.Simulation and synthesis techniques for asynchronous FIFO design with asynchronous pointer comparisons[C].SNUG 2002(Synopsys Users Group Conference,San Jose,CA,2002)User Papers,March 2002.Section TB2,3rd paper.2002.