基于hlghdl的有限狀態(tài)機的幾種編碼方式_第1頁
基于hlghdl的有限狀態(tài)機的幾種編碼方式_第2頁
基于hlghdl的有限狀態(tài)機的幾種編碼方式_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

基于hlghdl的有限狀態(tài)機的幾種編碼方式

0有限狀態(tài)機設(shè)計數(shù)字系統(tǒng)包括以控制為主的系統(tǒng)和以數(shù)據(jù)為主的系統(tǒng)。通常,控制系統(tǒng)的主體是一個有限狀態(tài)機(finitestatemachine,FSM),通過接收外部信號以及數(shù)據(jù)單元產(chǎn)生的狀態(tài)信息,產(chǎn)生控制信號序列。在系統(tǒng)設(shè)計中,能否設(shè)計出高效可靠的有限狀態(tài)機已經(jīng)成為關(guān)鍵。傳統(tǒng)的有限狀態(tài)機的描述方式有狀態(tài)轉(zhuǎn)移圖,狀態(tài)轉(zhuǎn)移列表兩種。隨著EDA技術(shù)的發(fā)展,人們開始用硬件描述語言來描述有限狀態(tài)機,通過充分發(fā)揮硬件描述語言的抽象建模能力,對系統(tǒng)在系統(tǒng)級或寄存器傳輸級進行描述。使用VerilogHDL描述有限狀態(tài)機有一定的靈活性,同樣的系統(tǒng)功能可以用多種編碼方式和描述風(fēng)格來實現(xiàn),但其綜合出來的狀態(tài)機在穩(wěn)定性、速度、面積以及電路復(fù)雜程度上有很大的差別。因此研究FSM的編碼方式和描述風(fēng)格有利于更好地設(shè)計出高效可靠的有限狀態(tài)機。1有限狀態(tài)機性能特點根據(jù)狀態(tài)機的輸出是否與輸入條件相關(guān),可將有限狀態(tài)機分為Moore型狀態(tài)機和Mealy型狀態(tài)機,如圖1所示。前者的輸出僅僅依賴于當(dāng)前狀態(tài),與輸入條件無關(guān);后者的輸出不僅依賴于當(dāng)前狀態(tài),而且取決于該狀態(tài)的輸入條件??删C合有限狀態(tài)機的VerilogHDL設(shè)計的基本要求:(1)有限狀態(tài)機要安全,穩(wěn)定性高。這就要求有限狀態(tài)機不會進入死循環(huán),即使由于某些擾動進入非法狀態(tài),也能很快的恢復(fù)到正常的狀態(tài)循環(huán)中來。(2)有限狀態(tài)機速度快,滿足設(shè)計的頻率要求。(3)有限狀態(tài)機面積小,滿足設(shè)計所占資源要求。(4)有限狀態(tài)機設(shè)計要清晰易懂,易維護。有限狀態(tài)機的VerilogHDL設(shè)計的一些基本準則:(1)一個Verilog模塊至多描述一個有限狀態(tài)機。這樣不僅可以簡化狀態(tài)的定義、修改和調(diào)試,還可以利用一些EDA工具來協(xié)助設(shè)計。(2)使用參數(shù)給狀態(tài)賦值,而不是用宏定義(define)。因為define宏定義在編譯時自動替換整個設(shè)計中所定義的宏,而parameter僅僅定義模塊內(nèi)部的參數(shù),定義的參數(shù)不會與模塊外的其它狀態(tài)機混淆。(3)用always模塊寫組合邏輯時,采用阻塞賦值,而在always塊中建立時序電路時,用非阻塞賦值。這樣才能保證有限狀態(tài)機綜合前和綜合后仿真的一致性。2獨熱碼的編碼狀態(tài)編碼又稱為狀態(tài)分配,決定了用以保持狀態(tài)所需的觸發(fā)器的數(shù)量,并且影響著實現(xiàn)下一個狀態(tài)和輸出中所用的組合邏輯的復(fù)雜度。編碼方式選擇不當(dāng)可能會導(dǎo)致狀態(tài)機所占資源過大或速度降低。常用的編碼方式有3種:二進制碼、格雷碼、獨熱碼。二進制碼和格雷碼屬于壓縮狀態(tài)編碼,這種編碼的優(yōu)點是使用的狀態(tài)向量最少,但是需要較多的邏輯資源用來狀態(tài)譯碼。二進制碼從一個狀態(tài)轉(zhuǎn)換到相鄰狀態(tài)時,可能有多個比特位發(fā)生變化,易產(chǎn)生中間狀態(tài)轉(zhuǎn)移問題,狀態(tài)機的速度也要比采用其它編碼方式慢。格雷碼兩個相鄰的碼值僅有一位就可區(qū)分,這將會減少電路中相鄰物理信號線同時變化的情況,因而可以減少電路中的電噪聲。Johnson碼也有同樣的特點,但是要用較多的位數(shù)。獨熱碼指對任意給定的狀態(tài),狀態(tài)寄存器中只有1位為1,其余位都為0。n狀態(tài)的有限狀態(tài)機需要n個觸發(fā)器,但這種有限狀態(tài)機只需對寄存器中的一位進行譯碼,簡化了譯碼邏輯電路,額外觸發(fā)器占用的面積可用譯碼電路省下來的面積抵消。當(dāng)設(shè)計中加入更多的狀態(tài)時,譯碼邏輯沒有變得更加復(fù)雜,有限狀態(tài)機的速度僅取決于到某特定狀態(tài)的轉(zhuǎn)移數(shù)量,而其它類型有限狀態(tài)機在狀態(tài)增加時速度會明顯下降。獨熱碼還具有設(shè)計簡單、修改靈活、易于綜合和調(diào)試等優(yōu)點。由獨熱碼衍生出來簡化獨熱碼和零空閑獨熱碼兩種編碼方式。簡化獨熱碼用十進制數(shù)指向狀態(tài)寄存器中的某一位,狀態(tài)轉(zhuǎn)移時,把與十進制數(shù)相對應(yīng)的狀態(tài)向量的那一位置1即可,跟獨熱碼一樣,在任意時刻,狀態(tài)向量中只有1位為1,其余位都為0。與獨熱碼相比,這種編碼只須判斷十進制數(shù)所指向狀態(tài)向量的對應(yīng)位是否為1,所以狀態(tài)機的速度會相對較快。零空閑獨熱碼對于狀態(tài)之間存在復(fù)雜關(guān)系的設(shè)計可以產(chǎn)生高效的狀態(tài)機,特別是對多個狀態(tài)轉(zhuǎn)向某一特定狀態(tài)的情況。用這種方式編碼時,普通狀態(tài)的編碼方式同簡化獨熱碼一樣,只是特殊狀態(tài)用狀態(tài)寄存器全零來表示。表1總結(jié)了以上幾種編碼方式的定義方式。其中簡化獨熱碼和零空閑獨熱碼中的S0~S4非狀態(tài)編碼,而是代表指向狀態(tài)寄存器中的相應(yīng)位。在實際設(shè)計中,具體采用哪一種編碼要視器件結(jié)構(gòu)而定。由于CPLD更多地提供組合邏輯資源,而FPGA觸發(fā)器資源比較豐富,所以CPLD多使用二進程制碼和格雷碼,而FPGA多使用獨熱碼。選擇編碼方式還跟狀態(tài)數(shù)有一定關(guān)系,一般情況下,當(dāng)狀態(tài)數(shù)小于5時,推薦使用二進制碼,當(dāng)狀態(tài)數(shù)大于4而小于24時使用獨熱碼,狀態(tài)數(shù)大于24時建議使用格雷碼。3雙進程式和3-alws式用Verilog語言描述有限狀態(tài)機通常有3種描述風(fēng)格:單進程式,雙進程式和三進程式。單進程式又稱為One-Always方式,它將狀態(tài)轉(zhuǎn)移判斷的組合邏輯和狀態(tài)寄存器轉(zhuǎn)移的時序邏輯混寫在同一個always模塊中,圖2為其結(jié)構(gòu)圖。由于是寄存器輸出,輸出向量不會產(chǎn)生毛刺。但代碼相對比較冗長難于修改和調(diào)試,并且不利于附加約束,編譯器優(yōu)化效果差,往往導(dǎo)致邏輯速度慢、資源消耗多,應(yīng)該盡量避免使用。雙進程式又稱為Two-Always方式,在這種方式中,一個always模塊采用同步時序描述狀態(tài)轉(zhuǎn)移,另一個模塊采用組合邏輯給下一狀態(tài)和輸出向量賦值,其結(jié)構(gòu)圖如圖1所示。這種方式使FSM描述清晰簡潔,易于附加時序約束,編譯器優(yōu)化效果明顯,可以得到很理想的速度和資源占用率,是目前應(yīng)用最為廣泛的狀態(tài)機描述風(fēng)格。缺點是組合邏輯輸出可能會使輸出向量產(chǎn)生毛刺。一般情況下,輸出向量的毛刺對電路的影響可以忽略不計,但是當(dāng)其作為時鐘信號使用時,就必須消除毛刺,否則會對后面的電路產(chǎn)生致命的影響。為了消除組合輸出所帶來的毛刺問題,改用時序邏輯來描述輸出向量,這就是三進程式,又稱為Three-Always方式。這種方式用兩個時序always模塊分別用于產(chǎn)生當(dāng)前狀態(tài)向量和輸出向量,一個組合always用于產(chǎn)生下一狀態(tài)向量,其結(jié)構(gòu)圖如圖3所示。三段式描述與兩段式描述相比,雖然代碼結(jié)構(gòu)復(fù)雜了一些,但是換來的優(yōu)勢是使FSM做到了同步寄存器輸出,消除了組合邏輯輸出的不穩(wěn)定與毛刺的隱患,而且更利于綜合與布局布線。4狀態(tài)編碼和描述以一個簡單的有限狀態(tài)機設(shè)計—序列檢測器為例。序列檢測就是將一個指定的序列從數(shù)字碼流中識別出來。本文將設(shè)計一個“111”序列檢測器,此序列檢測器要求能夠成功檢測出序列重疊,其Moore型狀態(tài)轉(zhuǎn)移圖如圖4所示。模塊FSM_JHDR的狀態(tài)編碼采用簡化獨熱碼,描述風(fēng)格采用雙進程式;模塊FSMDR的狀態(tài)編碼采用獨熱碼,描述風(fēng)格采用三進程式。主要Verilog代碼如表2所示。利用QuartusⅡ6.0工具分別對兩模塊進行編譯和時序仿真,目標器件為Altera公司的EP2C8。編譯后,FSM_JHDR占用了5個邏輯單元,FSM_DR占用了6個邏輯單元,但模塊FSM_JHDR的輸出變量由于是組合邏輯輸出,產(chǎn)生了毛刺,而模塊FSM_DR采用三進程式描述方式很好的解決了這個問題。圖5為模塊FSMD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論