新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 有限狀態機的VHDL優化設計

        有限狀態機的VHDL優化設計

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

        1.引言

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

        本文將詳細討論狀態機編寫的各個步驟對優化狀態機所起到的作用。

        2.狀態機的分類

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

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

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

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

        3.狀態值編碼方式

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

        3.1 枚舉類型定義狀態值

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

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

        3.2 格雷碼表示狀態值

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

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

        3.3“ONE-HOT”狀態值編碼

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

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

        3.4 剩余狀態與容錯技術

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

        剩余狀態的轉移去向大致有如下幾種:

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

        b)轉入指定的狀態,去執行特定任務;

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

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

        4.狀態機的描述方法

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

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



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



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

        本文引用地址:http://www.104case.com/article/201706/349601.htm

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



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



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

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

        5.毛刺和競爭處理

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

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

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

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

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

        6.狀態機的優化

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

        7.結論

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

        參考文獻

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

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

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

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



        關鍵詞: 有限狀態機VHDL

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 巴彦淖尔市| 乌兰县| 盐源县| 越西县| 通城县| 山阳县| 吉首市| 奈曼旗| 富裕县| 松阳县| 滁州市| 洪江市| 西华县| 东乌珠穆沁旗| 电白县| 西乌| 阿图什市| 永清县| 宾川县| 万州区| 柳林县| 深水埗区| 阳春市| 闻喜县| 招远市| 成安县| 宝丰县| 徐水县| 宣城市| 雷山县| 宣武区| 海伦市| 民权县| 泽库县| 邢台市| 民和| 汉沽区| 榆社县| 通榆县| 如东县| 鹤壁市|