黃金鳳 張紅
摘要:在日常生活中,我們經(jīng)??吹胶芏嘌h(huán)控制產(chǎn)品,如十字路口的交通燈、自動飲料收貨機、電梯運行、微波爐、電飯鍋等,它們的控制系統(tǒng)其實都可以用Verilog HDL的狀態(tài)機設(shè)計方法來完成。該論文首先講述了狀態(tài)機設(shè)計方法,然后講述了如何有效的運用3種過程描述來設(shè)計狀態(tài)機。
關(guān)鍵詞:Verilog HDL;狀態(tài)機;過程描述
中圖分類號:TP18 文獻標(biāo)識碼:A 文章編號:1009-3044(2016)23-0204-02
1 概述
有限狀態(tài)機(Finite State Machine,F(xiàn)SM)是時序電路設(shè)計中經(jīng)常采用的一種方式,尤其適合設(shè)計數(shù)字系統(tǒng)的控制模塊,在一些需要控制高速器件的場合,用狀態(tài)機進行設(shè)計是一種很好的解決問題的方案,具有速度快、結(jié)構(gòu)簡單、可靠性高等優(yōu)點。
有限狀態(tài)機非常適合用FPGA器件實現(xiàn),用Verilog HDL的case語句能很好地描述基于狀態(tài)機的設(shè)計,再通過EDA工具軟件的綜合,一般可以生成性能極優(yōu)的狀態(tài)機電路,從而使其在執(zhí)行時間、運行速度和占用資源等方面優(yōu)于用CPU實現(xiàn)的方案。
2 狀態(tài)機設(shè)計
有限狀態(tài)機可以認為是組合邏輯和寄存器邏輯的特殊組合,它一般包括組合邏輯和寄存器邏輯兩部分,寄存器邏輯用于存儲狀態(tài),組合邏輯用于狀態(tài)譯碼和產(chǎn)生輸出信號。根據(jù)輸出信號產(chǎn)生方法的不同,狀態(tài)機可分為兩類:摩爾型(Moore)和米里型(Mealy)。Moore型狀態(tài)機的輸出只和當(dāng)前狀態(tài)有關(guān),和輸入無關(guān)。 Mealy型狀態(tài)機的輸入是由當(dāng)前狀態(tài)和輸入共同決定。如圖1和圖2所示。
使用Verilog HDL語言設(shè)計狀態(tài)機的步驟:
1)將實際問題抽象成狀態(tài)圖
分析實際問題,找出輸入信號、輸出信號,最好畫出一個具有輸入和輸出的框圖,要給輸入、輸出信號取字母名。取狀態(tài)機上電的狀態(tài)為初始狀態(tài),并由此狀態(tài)開始,根據(jù)輸入條件決定狀態(tài)機的次態(tài)及輸出,直至所有情況描繪素完畢,畫出完整的狀態(tài)圖。
2)定義變量
定義描寫次態(tài)邏輯、狀態(tài)寄存器中需要的變量,注意在always塊中使用的變量應(yīng)該定義成寄存器變量,而連續(xù)賦值語句中使用的變量應(yīng)該定義成連線變量。
3)狀態(tài)編碼
根據(jù)狀態(tài)圖選擇狀態(tài)變量,進行狀態(tài)編碼,雖然有多種編碼方式,但可以找一種編碼試一試。例如,使用自然二進制碼。
4)描寫次態(tài)邏輯
使用always塊或是連續(xù)賦值語句描寫次態(tài)邏輯。
5) 描寫狀態(tài)寄存器
使用always塊描寫狀態(tài)寄存器。
6)描寫輸出邏輯
使用always塊或是連續(xù)賦值語句描寫輸出邏輯(輸出邏輯可以與次態(tài)邏輯在一個塊中描述)。
7)仿真
根據(jù)狀態(tài)機輸入信號的要求,用圖形或文本方式編輯輸入信號波形,然后進行功能仿真,根據(jù)仿真結(jié)果的正確與否決定是否修改設(shè)計,例如在狀態(tài)轉(zhuǎn)換時出現(xiàn)不該有的尖峰脈沖,則可以更改狀態(tài)編碼試一試。如果仿真成功,就可以在引腳鎖定后,進行編譯形成文件下載到芯片中,試一試是否成功。
在用Verilog HDL描述的有限狀態(tài)機時,其中重要的核心部分是描述方式,有以下3種描述方式。
1)三段式過程描述:即現(xiàn)態(tài)(CS)、次態(tài)(NS)、輸出邏輯(OL)各用一個always過程描述。
2)二段式過程描述:分為兩種,第一種:CS+NS、OL雙過程描述,使用兩個always過程來描述有限狀態(tài)機,一個過程描述現(xiàn)態(tài)和次態(tài)時序邏輯(CS+NS);另一個過程描述輸出邏輯(OL)。第二種,CS、NS+OL雙過程描述,一個過程用來描述現(xiàn)態(tài)(CS);另一個過程描述次態(tài)和輸出邏輯(NS+OL)。
3)一段式過程描述:將狀態(tài)機的現(xiàn)態(tài)、次態(tài)和輸出邏輯(CS+NS+OL)放在一個always過程中進行描述。
3 狀態(tài)機的3種過程描述
一般而言,對于符合圖1或圖2兩種模塊圖的狀態(tài)機設(shè)計而言,3種過程描述方式都是適合的,只不過,一段式過程描述一般不推薦使用,因為它只適合設(shè)計簡單的狀態(tài)機,對于復(fù)雜的狀態(tài)機,一段式不僅浪費了觸發(fā)器資源,而且其代碼難以修改調(diào)試。所以,通常情況下,我們都用二段式過程描述和三段式過程描述。
對于圖1(圖2)中的次態(tài)邏輯模塊中的輸入信號,如果不受時鐘信號控制,二段式和三段式過程描述設(shè)計方法是一樣的,但如果次態(tài)邏輯模塊是時序電路,輸入信號受時鐘信號控制,就適合采用二段式過程描述方法。下面以單通道交通燈設(shè)計為例加以驗證。
題目要求:單通道交通燈設(shè)計,南北方向,初始狀態(tài)為綠燈,綠燈停留6秒變?yōu)辄S燈,黃燈停留4秒變?yōu)榧t燈,紅燈停留6秒變?yōu)榫G燈,如此反復(fù)。
通過圖3和圖4的仿真結(jié)果圖,我們可以看出,圖3滿足題目要求,而圖4卻是凌亂的。當(dāng)次態(tài)邏輯模塊和現(xiàn)態(tài)寄存器模塊都受同一時鐘控制時,如果采用三段式分開描述這兩個模塊,那么現(xiàn)態(tài)變量和次態(tài)變量的值其實相互之間產(chǎn)生了干擾。所以建議使用二段式過程描述方式以避免邏輯的混亂。
4 結(jié)語
狀態(tài)機理論最初的發(fā)展在數(shù)字電路設(shè)計領(lǐng)域。狀態(tài)機設(shè)計是HDL設(shè)計里面的精華,幾乎所有的設(shè)計里面都或多或少地使用了狀態(tài)機的思想。狀態(tài)機,顧名思義,就是一系列狀態(tài)組成的一個循環(huán)機制,這樣的結(jié)構(gòu)使得編程人員能夠更好地使用HDL語言,同時具有特定風(fēng)格的狀態(tài)機也能提高程序的可讀性和調(diào)試性。
參考文獻:
[1]魏芳,劉志軍,王立華.基于Verilog HDL的可綜合有限狀態(tài)機設(shè)計[J].電子工程師,2006(6).
[2]溫國忠.基于Verilog HDL的高效狀態(tài)機設(shè)計[J].電子工程師,2006(6).
[3]劉小平,何云斌,董懷國.基于Verilog HDL的有限狀態(tài)機設(shè)計與描述[J].計算機工程與設(shè)計,2008(4).
[4]楊慶.有限狀態(tài)機的設(shè)計與優(yōu)化[J].湖北民族學(xué)院學(xué)報(自然科學(xué)版),2006(1).