衛(wèi)一然,甄國涌,單彥虎
(中北大學儀器科學與動態(tài)測試教育部重點實驗室,電子測試技術國家重點實驗室,山西 太原 030051)
責任編輯:時 雯
隨著大規(guī)模和超大規(guī)模FPGA/CPLD器件的誕生和發(fā)展,以VHDL(硬件描述語言)為工具、FPGA/CPLD器件為載體的EDA技術的應用越來越廣泛。在基于FPGA的數(shù)字設計中,狀態(tài)機是使用最為廣泛的時序電路模塊,它使得控制更加靈活、高效。因此如何提高狀態(tài)機的穩(wěn)定性成為目前必須面對的問題。
FPGA的穩(wěn)定性會因為外界的很多因素(如工作電壓、溫度)而受到影響,使狀態(tài)機出現(xiàn)亞穩(wěn)定狀態(tài),造成電路出現(xiàn)異常。本文針對記錄器在溫度實驗中,高溫造成FPGA狀態(tài)機穩(wěn)定性下降,出現(xiàn)的亞穩(wěn)定問題,對各種狀態(tài)編碼進行了解研究,比較各種編碼方式的特點,修改選定最適合的編碼方式,再結(jié)合FPGA綜合方面的約束,降低了溫度對其的影響,使其恢復正常工作。
FPGA狀態(tài)機的設計中,編碼方式的選擇是一個重要的部分。方法選擇得當,設計的電路可以很簡單;反之,電路會占用過多的邏輯或速度降低。下面介紹一下狀態(tài)機的幾種編碼方式及其特點。
二進制編碼(Sequential)和格雷碼(Gray)都屬于壓縮編碼。二進制編碼有其最典型的優(yōu)點,即狀態(tài)向量最少。但是每次狀態(tài)轉(zhuǎn)換時,需要同時發(fā)生變化的比特位較多。格雷碼雖然每次只有一位發(fā)生變化,大大降低了產(chǎn)生暫態(tài)的可能,但不適合有很多狀態(tài)跳轉(zhuǎn)的情況。
One-h(huán)ot編碼的典型定義為:在狀態(tài)機中,每一個狀態(tài)都使用一個寄存器來表達,并有相對應的唯一寄存器位,每次只有一個稱為“hot”的有效位“1”。所以,在編譯的時候僅需要獲取“1”值的位。狀態(tài)轉(zhuǎn)移則是由“1”變?yōu)椤?”,或是由“0”變?yōu)椤?”的那些位所表示的狀態(tài)發(fā)生了轉(zhuǎn)移。采用這種編碼方式需要的組合邏輯少、速度快,但占用觸發(fā)器多,考慮到FPGA更多的提供觸發(fā)器資源,所以該編碼方式更適合于FPGA的設計。但是One-h(huán)ot編碼的使用將大大增加設計面積,因此在時序可以滿足的條件下還是建議盡可能使用二進制編碼[1]。
Compact編碼盡量減少狀態(tài)變量和觸發(fā)器的位數(shù)。當試圖優(yōu)化面積時,這種編碼方式是一種不錯的選擇。
Johnson編碼方式與格雷碼類似,適用于長路徑無分支的狀態(tài)機。Speed1編碼是面向速度優(yōu)化,一個狀態(tài)寄存器中的位的數(shù)量依賴于特定的有限狀態(tài)機,但一般比有限狀態(tài)機的數(shù)量多。
該記錄器用于導引頭試驗過程中視頻回波數(shù)據(jù)、實時圖像數(shù)據(jù)、控制信號時序數(shù)據(jù)以及狀態(tài)檢測信號的采集和記錄,記錄器在出廠前要進行一定的溫度試驗,確定其能在任務書規(guī)定的溫度環(huán)境范圍內(nèi)正常工作,即記錄器能夠?qū)б^試驗過程中的數(shù)據(jù)及信號準確地采集并存儲到記錄器的Flash芯片中。
記錄器溫度試驗的過程中,在高溫60oC的環(huán)境下對記錄器進行測試,發(fā)現(xiàn)采集到的數(shù)據(jù)有錯誤。通過利用示波器對采集存儲過程中的一些關鍵信號進行觀察研究,將問題定位到了FPGA控制Flash進行存儲這一模塊:用示波器觀察Flash芯片的信號,正常情況下,F(xiàn)lash最先進行無效塊校驗,信號連續(xù)出現(xiàn)一段方波然后拉高(如圖1)說明無效塊校驗完畢,之后程序向下執(zhí)行擦、寫、讀。但是60℃環(huán)境下,信號一直沒有出現(xiàn)拉高,圖2是出現(xiàn)異常時的波形。說明程序在執(zhí)行過程中,無效塊校驗模塊出現(xiàn)了異常并且一直游離在這種異常狀態(tài)中無法恢復正常,導致無效塊校驗一直完成不了,程序無法往下執(zhí)行。
以FPGA為核心控制Flash進行存儲的程序設計,主要依靠的是大量的狀態(tài)機。在對FPGA進行綜合后,會生成以觸發(fā)器為核心的狀態(tài)寄存電路,其穩(wěn)定性就是由此決定。時鐘信號在FPGA器件內(nèi)通過連線到達各觸發(fā)器時,都有一定的延時。延時的長短不僅與pcb走線有關,還受到一些其他因素影響,如器件本身、外界激勵、溫度變化等[2]。實際的綜合布線后,各個觸發(fā)器的位置不同,連線長短不同,再加上溫度等外在條件對器件穩(wěn)定性的影響,使得在多個觸發(fā)器在同步觸發(fā)時,觸發(fā)不能嚴格同步,總是出現(xiàn)無法避免的過渡狀態(tài)。若程序游離于這種過渡狀態(tài)無法恢復正常就會導致電路異常。圖3為記錄器異常時,利用邏輯分析儀抓到的狀態(tài)機波形。
圖3 記錄器異常情況下狀態(tài)機運行波形圖(截圖)
從圖中可以看出,狀態(tài)機運行過程中,在由狀態(tài)“0001111”向下一個狀態(tài)跳轉(zhuǎn)時出現(xiàn)了問題,狀態(tài)機并沒有按照程序跳轉(zhuǎn)到“0010000”,而是跳到了一個未被定義的狀態(tài)(也稱為“非法”狀態(tài))“1001001”,并且進入了死循環(huán)長期無法跳出,造成程序進行不下去,電路出現(xiàn)異常[3]。
在實際的程序設計中是很難做到全編碼狀態(tài)機。該記錄器存儲程序設計中,狀態(tài)機的設計屬于非全編碼,采用的是二進制編碼風格。高溫60oC環(huán)境中器件穩(wěn)定性有所下降,狀態(tài)機轉(zhuǎn)換時,由于記錄器中使用的狀態(tài)機數(shù)量眾多,同時需要跳變的比特位也相應劇增,很容易進入到非法狀態(tài)。很顯然這樣的非法狀態(tài)不屬于電路穩(wěn)態(tài)下的邏輯,所以電路會出現(xiàn)異常,輸出一些不可預測的錯誤數(shù)據(jù)。程序在在進行無效塊校驗時,進入到非法狀態(tài)后沒有及時返回到正常狀態(tài),而是長期游離在這樣的異常下就導致了正常程序無法進行下去。要減少這種情況的方法之一就是要盡量降低過渡狀態(tài)出現(xiàn)的概率。
One-h(huán)ot編碼方式中,每一個狀態(tài)都使用一個寄存器來表達,每個狀態(tài)都有它獨立的寄存器位,對應于任何給定狀態(tài)的狀態(tài)向量各位中僅有一位為1,其他位全為0。例如state0=00000001,state1=00000010,state2=00000100……狀態(tài)轉(zhuǎn)移時,需要同時發(fā)生翻轉(zhuǎn)的比特位數(shù)與狀態(tài)數(shù)量無關,只有由“1”變?yōu)椤?”,和由“0”變?yōu)椤?”的那兩位發(fā)生翻轉(zhuǎn)。在比較大型的狀態(tài)機設計中,與二進制編碼相比,采用One-h(huán)ot編碼在很大程度上降低了相鄰狀態(tài)轉(zhuǎn)換時需要同時發(fā)生翻轉(zhuǎn)的比特位,從而大大降低進入非法狀態(tài)的概率。在資源允許的情況下,可以考慮采用這種編碼方式。
針對個人的情況選擇合適的編碼方式可以減少非法狀態(tài)產(chǎn)生的概率,但并不等于完全將其消除。在編寫FPGA控制程序時,如果對非法狀態(tài)沒有進行有效處理,在外界一些不確定因素的干擾下,狀態(tài)機一旦進入了非法狀態(tài),電路會出現(xiàn)短暫的失控,或者一直無法返回正常工作狀態(tài)。
對于One-h(huán)ot編碼方式來說,有效狀態(tài)中只可能有一個觸發(fā)器的狀態(tài)為“1”,其余觸發(fā)器的狀態(tài)全為“0”,即任何狀態(tài)中只要為“1”的觸發(fā)器個數(shù)大于1就被確定為非法狀態(tài)[4]。而且在該記錄器的FPGA設計中,使用的狀態(tài)機數(shù)量眾多,相對應的非法狀態(tài)數(shù)量也劇增。
記錄器的系統(tǒng)程序設計中已經(jīng)利用語句:When others=>next_state<=“初始狀態(tài)”對非法狀態(tài)進行轉(zhuǎn)移。考慮到在60oC的環(huán)境下還是出現(xiàn)了問題,程序進入非法狀態(tài)后并沒有及時回到正常狀態(tài),所以在此基礎上,現(xiàn)利用Xilinx XST軟件在FPGA綜合中添加安全模式約束來實現(xiàn)有限狀態(tài)機,將添加額外的邏輯將狀態(tài)機從無效狀態(tài)調(diào)轉(zhuǎn)到有效狀態(tài),否則只能復位來實現(xiàn)。
在使用One-h(huán)ot風格對狀態(tài)機編碼的基礎上,添加安全模式約束后進行高低溫試驗,電路恢復正常,信號的波形也恢復如圖1正常狀態(tài)。
在第一狀態(tài)編碼上改用One-h(huán)ot,第二綜合上添加安全模式加以約束,這兩方面做出改變后,溫度試驗中,記錄器正常工作,沒有再出現(xiàn)異常情況。圖4是狀態(tài)機穩(wěn)定工作時的波形圖。
圖4 狀態(tài)機穩(wěn)定工作波形圖(截圖)
由圖可知,One-h(huán)ot編碼方式對降低非法狀態(tài)發(fā)生概率,提高設備穩(wěn)定性方面較二進制編碼方式確實有很大的優(yōu)勢。再加上綜合約束的進一步保障,在高溫環(huán)境下程序運行時,由狀態(tài)“0001111”向下一個狀態(tài)跳轉(zhuǎn)時沒有出現(xiàn)進入非法狀態(tài)無法跳出的情況,而是能夠順利地向下執(zhí)行。
在FPGA的設計中,狀態(tài)機是使用最為廣泛的時序電路模塊,一個好的狀態(tài)機可以使控制更加靈活、高效。實現(xiàn)一個好的狀態(tài)機關鍵是好的編碼方式,以及對狀態(tài)機中出現(xiàn)的錯誤進行很好的轉(zhuǎn)移處理。本文詳細分析了在溫度實驗中,高溫造成FPGA狀態(tài)機穩(wěn)定性下降,出現(xiàn)的一系列亞穩(wěn)定問題的原因。并根據(jù)分析的結(jié)果,對狀態(tài)機的編碼方式和FPGA綜合方面進行了相應的改進,消除了高溫對其的影響,提高了FPGA在溫度方面的穩(wěn)定性,使其能夠正常工作。
[1]魏芳,劉志軍,王立華.基于Verilog HDL的可綜合有限狀態(tài)機設計[J].電子工程師,2006(6):6-10.
[2]李雪梅.FPGA設計中由于延遲產(chǎn)生的冒險現(xiàn)象分析及消除[J].微計算機應用,2005,26(2):201-203.
[3]宋烈武,石強.設計CPLD/FPGA狀態(tài)機的穩(wěn)定性探究[J].中南民族大學學報:自然科學版,2003(S1):24-25.
[4]龔書濤,呂國強,彭良清.在FPGA中狀態(tài)機的編碼方式[J].電子工程師,2005(11):51-53.