新聞中心

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

有限狀態(tài)機(jī)的VHDL優(yōu)化設(shè)計(jì)

作者: 時(shí)間:2017-06-06 來(lái)源:網(wǎng)絡(luò) 收藏

1.引言

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

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

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

狀態(tài)機(jī)由狀態(tài)寄存器和組合邏輯電路構(gòu)成,能夠根據(jù)控制信號(hào)按照預(yù)先設(shè)定的狀態(tài)進(jìn)行狀態(tài)轉(zhuǎn)移,是協(xié)調(diào)相關(guān)信號(hào)動(dòng)作,完成特定操作的控制中心。

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

設(shè)計(jì)時(shí)在結(jié)構(gòu)上通常遵循一下幾點(diǎn):

各模塊只描述一個(gè)狀態(tài)機(jī);將無(wú)關(guān)邏輯減至最少;將狀態(tài)寄存器從其他邏輯中分離出來(lái)[2]。

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

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

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

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

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

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

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

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

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

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

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

3.4 剩余狀態(tài)與容錯(cuò)技術(shù)

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

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

a)轉(zhuǎn)入空閑狀態(tài),等待下一個(gè)工作任務(wù)的到來(lái);

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

c)轉(zhuǎn)入預(yù)定義的專門處理錯(cuò)誤的狀態(tài),如預(yù)警狀態(tài)。

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

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

VHDL對(duì)不同的狀態(tài)機(jī)有不同的描述方式,描述方式不同使得綜合出來(lái)的門級(jí)網(wǎng)表也不同,因此必須根據(jù)數(shù)字電路的特性和可綜合性選擇相應(yīng)的狀態(tài)機(jī)描述方式。

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



設(shè)計(jì)的控制器時(shí)序仿真如圖2所示。



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

本文引用地址:http://2s4d.com/article/201706/349601.htm

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



改進(jìn)后的控制器時(shí)序仿真如圖4所示。



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

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

5.毛刺和競(jìng)爭(zhēng)處理

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

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

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

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

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

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

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

7.結(jié)論

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

參考文獻(xiàn)

[1] 吳繼華,王誠(chéng).《Verilog設(shè)計(jì)與驗(yàn)證》[M],北京:人民郵電出版社,2006。

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

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

[5] 駱珊,黃明達(dá).VHDL 電路結(jié)構(gòu)優(yōu)化設(shè)計(jì)探討 [J] .計(jì)算機(jī)應(yīng)用,2001,4:14-15.



關(guān)鍵詞: 有限狀態(tài)機(jī)VHDL

評(píng)論


技術(shù)專區(qū)

關(guān)閉