新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 有限狀態(tài)機的VHDL優(yōu)化設計

有限狀態(tài)機的VHDL優(yōu)化設計

作者: 時間:2017-06-06 來源:網絡 收藏

1.引言

當前以硬件描述語言為工具、邏輯器件為載體的系統(tǒng)設計越來越廣泛。在設計中,狀態(tài)機是最典型、應用最廣泛的電路模塊,其在運行速度的高效、執(zhí)行時間的確定性和高可靠性方面都顯現出強大的優(yōu)勢。狀態(tài)機及其設計技術水平決定了系統(tǒng)設計的優(yōu)劣[1]。如何設計一個最優(yōu)化的狀態(tài)機是我們必須面對的問題。

本文將詳細討論狀態(tài)機編寫的各個步驟對優(yōu)化狀態(tài)機所起到的作用。

2.狀態(tài)機的分類

狀態(tài)機由狀態(tài)寄存器和組合邏輯電路構成,能夠根據控制信號按照預先設定的狀態(tài)進行狀態(tài)轉移,是協(xié)調相關信號動作,完成特定操作的控制中心。

狀態(tài)機可以分為Moore型和Mealy型兩種基本類型。設計時采用哪種方式的狀態(tài)機要根據設計的具體情況決定,輸出只由當前狀態(tài)值決定則選用Moore型,輸入信號和狀態(tài)值共同決定輸出則選用Mealy狀態(tài)機。

設計時在結構上通常遵循一下幾點:

各模塊只描述一個狀態(tài)機;將無關邏輯減至最少;將狀態(tài)寄存器從其他邏輯中分離出來[2]。

3.狀態(tài)值編碼方式

通常在設計狀態(tài)機時,狀態(tài)編碼方式的選擇是非常重要的,選得不好,可能會導致速度太慢或占用太多邏輯資源。實際設計中,必須考慮多方面因素選擇最為合適的編碼方式。

3.1 枚舉類型定義狀態(tài)值

設計中狀態(tài)機的狀態(tài)值定義為枚舉類型,綜合時一般轉化為二進制的序列,因此與二進制編碼方式本質上是相同的。

實際需要觸發(fā)器的數目為實際狀態(tài)的以2為底的對數。這種編碼方式最為簡單,綜合后寄存器用量較少,剩余狀態(tài)最少,其綜合效率和電路速度在一定程度上將會得到提高。但在狀態(tài)轉換過程中,狀態(tài)寄存器的高位翻轉和低位翻轉時間是不一致的,這樣就會出現過渡狀態(tài),若狀態(tài)機的狀態(tài)值更多的話,產生過渡狀態(tài)的概率更大。因此適合復雜度較低的設計。

3.2 格雷碼表示狀態(tài)值

格雷碼編碼,即相鄰兩個狀態(tài)的編碼只有一位不同,這使得采用格雷碼表示狀態(tài)值的狀態(tài)機,可以較大程度上消除由傳輸延時引起的過渡狀態(tài)。

該方式使得在相鄰狀態(tài)之間跳轉時,只有一位變化,降低了產生過渡狀態(tài)的概率,但當狀態(tài)轉換有多種路徑時,就無法保證狀態(tài)跳轉時只有一位變化。所以在一定程度上, 格雷碼編碼是二進制的一種變形,總體思想是一致的。

3.3“ONE-HOT”狀態(tài)值編碼

One-hot編碼方式是使用N個觸發(fā)器來實現N個狀態(tài)的狀態(tài)機,每個狀態(tài)都由一個觸發(fā)器表示,在任意時刻,其中只有1位有效,該位也稱為“hot”,觸發(fā)器為‘1’,其余的觸發(fā)器置‘0’。

這種結構的狀態(tài)機其穩(wěn)定性優(yōu)于一般結構的狀態(tài)機, 但是它占用的資源更多。其簡單的編碼方式簡化了狀態(tài)譯碼邏輯,提高了狀態(tài)轉換速度,適合于在FPGA 中應用。

3.4 剩余狀態(tài)與容錯技術

在狀態(tài)機設計中,不可避免地會出現大量剩余狀態(tài)。若不對剩余狀態(tài)進行合理的處理,狀態(tài)機可能進入不可預測的狀態(tài),后果是對外界出現短暫失控或者始終無法擺脫剩余狀態(tài)而失去正常功能。因此,對剩余狀態(tài)的處理,即容錯技術的應用是必須慎重考慮的問題。但是,剩余狀態(tài)的處理要不同程度地耗用邏輯資源,因此設計者在選用狀態(tài)機結構、狀態(tài)編碼方式、容錯技術及系統(tǒng)的工作速度與資源利用率方面需要做權衡比較,以適應自己的設計要求。

剩余狀態(tài)的轉移去向大致有如下幾種:

a)轉入空閑狀態(tài),等待下一個工作任務的到來;

b)轉入指定的狀態(tài),去執(zhí)行特定任務;

c)轉入預定義的專門處理錯誤的狀態(tài),如預警狀態(tài)。

對于前兩種編碼方式可以將多余狀態(tài)做出定義,在以后的語句中加以處理。處理的方法有2種:①在語句中對每一個非法狀態(tài)都做出明確的狀態(tài)轉換指示;②利用others語句對未提到的狀態(tài)作統(tǒng)一處理。對于One-hot編碼方式其剩余狀態(tài)數將隨有效狀態(tài)數的增加呈指數式劇增,就不能采用上述的處理方法。鑒于One-hot編碼方式的特點,任何多于1個觸發(fā)器為“1”的狀態(tài)均為非法狀態(tài)。因此,可編寫一個檢錯程序,判斷是否在同一時刻有多個寄存器為“1”,若有,則轉入相應的處理程序。

4.狀態(tài)機的描述方法

VHDL對不同的狀態(tài)機有不同的描述方式,描述方式不同使得綜合出來的門級網表也不同,因此必須根據數字電路的特性和可綜合性選擇相應的狀態(tài)機描述方式。

下面以實踐中激光測距儀中心控制器為例,介紹不同描述方法的設計,并給出仿真圖。
將整個狀態(tài)機寫到1個進程模塊里,在該模塊中既描述狀態(tài)轉移又描述狀態(tài)的輸入輸出,稱為一段式描述方法,即所謂的單進程狀態(tài)機。其將組合邏輯和時序邏輯在一個進程中描述,該方式的唯一優(yōu)點是可得到鎖存后的輸出信號。但在描述當前狀態(tài)時需考慮下一個狀態(tài)的輸出,整個代碼不清晰,不易于理解、維護,也不利于時序約束、功能更改、調試等,而且不能很好的表示Mealy狀態(tài)機的輸出,容易導致邏輯功能錯誤。另外,這種描述相對于另外兩種描述比較冗長。因此一段式描述是應當避免的描述方式,這里也不再做進一步討論。
采用2個進程模塊,一個模塊用同步時序描述狀態(tài)轉移;另一個模塊用組合邏輯判斷狀態(tài)轉移條件、描述狀態(tài)轉移規(guī)律及邏輯輸出,稱為兩段式描述方法,這是綜合器理解最好的一種描述方式,也是要求不高的條件下最常用的一種。分析其結構概括為圖1所示框圖。



設計的控制器時序仿真如圖2所示。



由圖2可以看到direct輸出信號出現毛刺,對于精密控制器來說這是不允許的。毛刺多由組合邏輯導致的,若在輸出部分加入一個寄存器節(jié)拍,可消除毛刺保證輸出信號的穩(wěn)定性,但輸出就會延遲一個周期,所以當時序允許時該方式是很好的選擇。

本文引用地址:http://butianyuan.cn/article/201706/349601.htm

使用3個進程模塊,一個模塊采用同步時序描述狀態(tài)轉移;第二個采用組合邏輯判斷狀態(tài)轉移條件,描述狀態(tài)轉移規(guī)律;第三個模塊使用同步時序電路描述每個狀態(tài)的輸出,該寫法稱為三段式寫法。分析其結構概括為圖3所示框圖。



改進后的控制器時序仿真如圖4所示。



三段式與兩段式描述相比,雖然代碼結構復雜了一些,但是換來的優(yōu)勢是做到了同步寄存器輸出,消除了組合邏輯輸出的不穩(wěn)定與毛刺的隱患,而且更利于時序路徑分組,在FPGA上的綜合與布局布線效果更佳。

一般而言,推薦的狀態(tài)機描述方法是后兩種。其原因:設計最好使用同步時序方式,以提高設計的穩(wěn)定性,消除毛刺。狀態(tài)機實現后,狀態(tài)轉移部分是同步時序電路而狀態(tài)的轉移條件的判斷是組合邏輯。兩段式描述方法雖然有很多好處,但一個明顯的弱點就是其輸出使用組合邏輯描述,易產生毛刺等不穩(wěn)定因素,并且在邏輯器件中過多的組合邏輯會影響實現的速率,而三段式巧妙地根據下一狀態(tài)的判斷,用同步時序邏輯寄存狀態(tài)機的輸出。

5.毛刺和競爭處理

毛刺的產生,一方面由于狀態(tài)機中包含有組合邏輯進程,使得輸出信號在時鐘的有效邊沿產生毛刺;另一方面當狀態(tài)信號是多位值的時候,由于傳輸延遲的存在,各信號線上的值發(fā)生改變的時間會有先后,使得狀態(tài)遷移的時候出現臨時狀態(tài)。當狀態(tài)機的輸出信號作為其他功能模塊的控制信號使用時, 將會使受控模塊發(fā)生誤動作, 造成系統(tǒng)工作混亂。因此,在這種情況下必須通過改變設計消除毛刺。

消除狀態(tài)機輸出信號的“ 毛刺”一般可從一下幾點改進:
①在電路設計時,選用延遲時間較小的器件,且盡可能采用級數少的電路結構;或者把時鐘信號引入組合進程,用時鐘來同步狀態(tài)遷移, 保證了輸出信號沒有毛刺,但這樣增加了輸出寄存器, 硬件開銷增大, 這對于一些寄存器資源較少的目標芯片是不利的;而且還會限制系統(tǒng)時鐘的最高工作頻率; 由于時鐘信號將輸出加載到附加的寄存器上, 所以在輸出端得到信號值的時間要比狀態(tài)的變化延時一個時鐘周期。

②調整狀態(tài)編碼, 使相鄰狀態(tài)間只有1位信號改變,避免毛刺的產生。

③直接把狀態(tài)機的狀態(tài)碼作為輸出信號,即采用狀態(tài)碼直接輸出型狀態(tài)機, 使狀態(tài)和輸出信號一致, 使得輸出譯碼電路被優(yōu)化掉了。這種方案, 占用芯片資源少, 信號與狀態(tài)變化同步, 速度快, 是一種較優(yōu)方案。但在設計過程中對狀態(tài)編碼時可能增加狀態(tài)向量, 出現多余狀態(tài)。雖然可用CASE語句中WHEN-OTHERS 來安排多余狀態(tài), 但有時難以有效控制多余狀態(tài), 運行時可能會出現難以預料的情況。因此它適用于狀態(tài)機輸出信號較少的場合。這種方式的缺點是削弱了設計的可讀性和可維護性[3]。

有限狀態(tài)機綜合中的競爭現象是指由于敏感信號的頻繁變化導致狀態(tài)機在同一個節(jié)拍內多次改變狀態(tài),影響電路的正常工作。當輸出信號反饋回來作為輸入信號的時候,就會發(fā)生競爭。這里要指出的是在綜合前模擬的時候往往不能發(fā)現描述中潛在的競爭現象,只有在綜合后,競爭才會完全暴露出來。消除競爭的辦法是把造成競爭的信號從敏感信號表中除去,而改成由時鐘信號來觸發(fā)進程,這樣就使狀態(tài)一個節(jié)拍只改變一次[4]。

6.狀態(tài)機的優(yōu)化

優(yōu)化的目標主要有兩個: 速度和規(guī)模,但是速度條件越苛刻, 所需規(guī)模就越大, 因此優(yōu)化電路結構時, 應綜合考慮各方面因素, 選擇最優(yōu)化方案。電路結構分為邏輯電路和時序電路。邏輯電路的優(yōu)化包括布爾表達式的優(yōu)化等, 時序電路包括通常的時序電路和狀態(tài)機。狀態(tài)機優(yōu)化包括選擇合適狀態(tài)和編碼等, 比如合理的歸并以及減少狀態(tài)的數量等都能大大簡化電路,在編程時應盡量把可歸并的邏輯放入同一結構體中, 這樣可以有效優(yōu)化電路結構[5]。

7.結論

有限狀態(tài)機是數字系統(tǒng)的一個重要組成部分。本文詳細討論了狀態(tài)機各部分及應注意的事項和各種不同寫法的優(yōu)缺點。以上只是作者在項目設計實踐中學習并總結的一些經驗與體會,設計時需根據實際情況做適合的選擇。

參考文獻

[1] 吳繼華,王誠.《Verilog設計與驗證》[M],北京:人民郵電出版社,2006。

[2] 王巍,高德遠.有限狀態(tài)機設計策略 [J].計算機工程與應用,1999,7:54-55.
[3] 魯玲,劉大年.消除狀態(tài)機毛刺策略探討 [J] .電子技術應用,2006,9:118-119.

[4] 李春霞,顧新,王君.有限狀態(tài)機的VHDL 描述及綜合 [J].計算機工程與應用,2005,6:111-113.

[5] 駱珊,黃明達.VHDL 電路結構優(yōu)化設計探討 [J] .計算機應用,2001,4:14-15.



評論


技術專區(qū)

關閉