衛一然,甄國涌,單彥虎
(中北大學儀器科學與動態測試教育部重點實驗室,電子測試技術國家重點實驗室,山西 太原 030051)
責任編輯:時 雯
隨著大規模和超大規模FPGA/CPLD器件的誕生和發展,以VHDL(硬件描述語言)為工具、FPGA/CPLD器件為載體的EDA技術的應用越來越廣泛。在基于FPGA的數字設計中,狀態機是使用最為廣泛的時序電路模塊,它使得控制更加靈活、高效。因此如何提高狀態機的穩定性成為目前必須面對的問題。
FPGA的穩定性會因為外界的很多因素(如工作電壓、溫度)而受到影響,使狀態機出現亞穩定狀態,造成電路出現異常。本文針對記錄器在溫度實驗中,高溫造成FPGA狀態機穩定性下降,出現的亞穩定問題,對各種狀態編碼進行了解研究,比較各種編碼方式的特點,修改選定最適合的編碼方式,再結合FPGA綜合方面的約束,降低了溫度對其的影響,使其恢復正常工作。
FPGA狀態機的設計中,編碼方式的選擇是一個重要的部分。方法選擇得當,設計的電路可以很簡單;反之,電路會占用過多的邏輯或速度降低。下面介紹一下狀態機的幾種編碼方式及其特點。
二進制編碼(Sequential)和格雷碼(Gray)都屬于壓縮編碼。二進制編碼有其最典型的優點,即狀態向量最少。但是每次狀態轉換時,需要同時發生變化的比特位較多。格雷碼雖然每次只有一位發生變化,大大降低了產生暫態的可能,但不適合有很多狀態跳轉的情況。
One-hot編碼的典型定義為:在狀態機中,每一個狀態都使用一個寄存器來表達,并有相對應的唯一寄存器位,每次只有一個稱為“hot”的有效位“1”。所以,在編譯的時候僅需要獲取“1”值的位。狀態轉移則是由“1”變為“0”,或是由“0”變為“1”的那些位所表示的狀態發生了轉移。采用這種編碼方式需要的組合邏輯少、速度快,但占用觸發器多,考慮到FPGA更多的提供觸發器資源,所以該編碼方式更適合于FPGA的設計。但是One-hot編碼的使用將大大增加設計面積,因此在時序可以滿足的條件下還是建議盡可能使用二進制編碼[1]。
Compact編碼盡量減少狀態變量和觸發器的位數。當試圖優化面積時,這種編碼方式是一種不錯的選擇。
Johnson編碼方式與格雷碼類似,適用于長路徑無分支的狀態機。Speed1編碼是面向速度優化,一個狀態寄存器中的位的數量依賴于特定的有限狀態機,但一般比有限狀態機的數量多。
該記錄器用于導引頭試驗過程中視頻回波數據、實時圖像數據、控制信號時序數據以及狀態檢測信號的采集和記錄,記錄器在出廠前要進行一定的溫度試驗,確定其能在任務書規定的溫度環境范圍內正常工作,即記錄器能夠將導引頭試驗過程中的數據及信號準確地采集并存儲到記錄器的Flash芯片中。
記錄器溫度試驗的過程中,在高溫60oC的環境下對記錄器進行測試,發現采集到的數據有錯誤。通過利用示波器對采集存儲過程中的一些關鍵信號進行觀察研究,將問題定位到了FPGA控制Flash進行存儲這一模塊:用示波器觀察Flash芯片的信號,正常情況下,Flash最先進行無效塊校驗,信號連續出現一段方波然后拉高(如圖1)說明無效塊校驗完畢,之后程序向下執行擦、寫、讀。但是60℃環境下,信號一直沒有出現拉高,圖2是出現異常時的波形。說明程序在執行過程中,無效塊校驗模塊出現了異常并且一直游離在這種異常狀態中無法恢復正常,導致無效塊校驗一直完成不了,程序無法往下執行。


以FPGA為核心控制Flash進行存儲的程序設計,主要依靠的是大量的狀態機。在對FPGA進行綜合后,會生成以觸發器為核心的狀態寄存電路,其穩定性就是由此決定。時鐘信號在FPGA器件內通過連線到達各觸發器時,都有一定的延時。延時的長短不僅與pcb走線有關,還受到一些其他因素影響,如器件本身、外界激勵、溫度變化等[2]。實際的綜合布線后,各個觸發器的位置不同,連線長短不同,再加上溫度等外在條件對器件穩定性的影響,使得在多個觸發器在同步觸發時,觸發不能嚴格同步,總是出現無法避免的過渡狀態。若程序游離于這種過渡狀態無法恢復正常就會導致電路異常。圖3為記錄器異常時,利用邏輯分析儀抓到的狀態機波形。

圖3 記錄器異常情況下狀態機運行波形圖(截圖)
從圖中可以看出,狀態機運行過程中,在由狀態“0001111”向下一個狀態跳轉時出現了問題,狀態機并沒有按照程序跳轉到“0010000”,而是跳到了一個未被定義的狀態(也稱為“非法”狀態)“1001001”,并且進入了死循環長期無法跳出,造成程序進行不下去,電路出現異常[3]。
在實際的程序設計中是很難做到全編碼狀態機。該記錄器存儲程序設計中,狀態機的設計屬于非全編碼,采用的是二進制編碼風格。高溫60oC環境中器件穩定性有所下降,狀態機轉換時,由于記錄器中使用的狀態機數量眾多,同時需要跳變的比特位也相應劇增,很容易進入到非法狀態。很顯然這樣的非法狀態不屬于電路穩態下的邏輯,所以電路會出現異常,輸出一些不可預測的錯誤數據。程序在在進行無效塊校驗時,進入到非法狀態后沒有及時返回到正常狀態,而是長期游離在這樣的異常下就導致了正常程序無法進行下去。要減少這種情況的方法之一就是要盡量降低過渡狀態出現的概率。
One-hot編碼方式中,每一個狀態都使用一個寄存器來表達,每個狀態都有它獨立的寄存器位,對應于任何給定狀態的狀態向量各位中僅有一位為1,其他位全為0。例如state0=00000001,state1=00000010,state2=00000100……狀態轉移時,需要同時發生翻轉的比特位數與狀態數量無關,只有由“1”變為“0”,和由“0”變為“1”的那兩位發生翻轉。在比較大型的狀態機設計中,與二進制編碼相比,采用One-hot編碼在很大程度上降低了相鄰狀態轉換時需要同時發生翻轉的比特位,從而大大降低進入非法狀態的概率。在資源允許的情況下,可以考慮采用這種編碼方式。
針對個人的情況選擇合適的編碼方式可以減少非法狀態產生的概率,但并不等于完全將其消除。在編寫FPGA控制程序時,如果對非法狀態沒有進行有效處理,在外界一些不確定因素的干擾下,狀態機一旦進入了非法狀態,電路會出現短暫的失控,或者一直無法返回正常工作狀態。
對于One-hot編碼方式來說,有效狀態中只可能有一個觸發器的狀態為“1”,其余觸發器的狀態全為“0”,即任何狀態中只要為“1”的觸發器個數大于1就被確定為非法狀態[4]。而且在該記錄器的FPGA設計中,使用的狀態機數量眾多,相對應的非法狀態數量也劇增。
記錄器的系統程序設計中已經利用語句:When others=>next_state<=“初始狀態”對非法狀態進行轉移。考慮到在60oC的環境下還是出現了問題,程序進入非法狀態后并沒有及時回到正常狀態,所以在此基礎上,現利用Xilinx XST軟件在FPGA綜合中添加安全模式約束來實現有限狀態機,將添加額外的邏輯將狀態機從無效狀態調轉到有效狀態,否則只能復位來實現。
在使用One-hot風格對狀態機編碼的基礎上,添加安全模式約束后進行高低溫試驗,電路恢復正常,信號的波形也恢復如圖1正常狀態。
在第一狀態編碼上改用One-hot,第二綜合上添加安全模式加以約束,這兩方面做出改變后,溫度試驗中,記錄器正常工作,沒有再出現異常情況。圖4是狀態機穩定工作時的波形圖。

圖4 狀態機穩定工作波形圖(截圖)
由圖可知,One-hot編碼方式對降低非法狀態發生概率,提高設備穩定性方面較二進制編碼方式確實有很大的優勢。再加上綜合約束的進一步保障,在高溫環境下程序運行時,由狀態“0001111”向下一個狀態跳轉時沒有出現進入非法狀態無法跳出的情況,而是能夠順利地向下執行。
在FPGA的設計中,狀態機是使用最為廣泛的時序電路模塊,一個好的狀態機可以使控制更加靈活、高效。實現一個好的狀態機關鍵是好的編碼方式,以及對狀態機中出現的錯誤進行很好的轉移處理。本文詳細分析了在溫度實驗中,高溫造成FPGA狀態機穩定性下降,出現的一系列亞穩定問題的原因。并根據分析的結果,對狀態機的編碼方式和FPGA綜合方面進行了相應的改進,消除了高溫對其的影響,提高了FPGA在溫度方面的穩定性,使其能夠正常工作。
[1]魏芳,劉志軍,王立華.基于Verilog HDL的可綜合有限狀態機設計[J].電子工程師,2006(6):6-10.
[2]李雪梅.FPGA設計中由于延遲產生的冒險現象分析及消除[J].微計算機應用,2005,26(2):201-203.
[3]宋烈武,石強.設計CPLD/FPGA狀態機的穩定性探究[J].中南民族大學學報:自然科學版,2003(S1):24-25.
[4]龔書濤,呂國強,彭良清.在FPGA中狀態機的編碼方式[J].電子工程師,2005(11):51-53.