版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章有限狀態(tài)機(jī)設(shè)計(jì)8.1有限狀態(tài)機(jī)的優(yōu)點(diǎn)及轉(zhuǎn)移圖描述8.2有限狀態(tài)機(jī)的VHDL描述8.3有限狀態(tài)機(jī)編碼8.4有限狀態(tài)機(jī)剩余狀態(tài)碼的處理8.5有限狀態(tài)機(jī)設(shè)計(jì)實(shí)例8.1有限狀態(tài)機(jī)的優(yōu)點(diǎn)及轉(zhuǎn)移圖描述
8.1.1有限狀態(tài)機(jī)的優(yōu)點(diǎn)
用VHDL可以設(shè)計(jì)不同表達(dá)方式和不同實(shí)用功能的有限狀態(tài)機(jī),這些有限狀態(tài)機(jī)的VHDL描述都具有相對(duì)固定的語(yǔ)句和程序表達(dá)方式,只要我們把握了這些固定的語(yǔ)句表達(dá)部分,就能根據(jù)實(shí)際需要寫(xiě)出各種不同風(fēng)格的VHDL有限狀態(tài)機(jī)。
有限狀態(tài)機(jī)可以描述和實(shí)現(xiàn)大部分時(shí)序邏輯系統(tǒng)。與基于VHDL的其他設(shè)計(jì)方案或者與使用CPU編制程序的解決方案相比,有限狀態(tài)機(jī)都有其難以超越的優(yōu)越性。
(1)有限狀態(tài)機(jī)是純硬件數(shù)字系統(tǒng)中的順序控制電路,具有純硬件電路的速度和軟件控制的靈活性。
(2)由于有限狀態(tài)機(jī)的結(jié)構(gòu)模式相對(duì)簡(jiǎn)單,設(shè)計(jì)方案相對(duì)固定,特別是可以定義符號(hào)化枚舉類(lèi)型的狀態(tài),這一切都為VHDL綜合器盡可能發(fā)揮其強(qiáng)大的優(yōu)化功能提供了有利條件。而且,性能良好的綜合器都具備許多可控或自動(dòng)的專(zhuān)門(mén)用于優(yōu)化有限狀態(tài)機(jī)的功能。
(3)有限狀態(tài)機(jī)容易構(gòu)成性能良好的同步時(shí)序邏輯模塊,這對(duì)于解決大規(guī)模邏輯電路設(shè)計(jì)中令人深感棘手的競(jìng)爭(zhēng)冒險(xiǎn)現(xiàn)象無(wú)疑是一個(gè)上佳的選擇。為了消除電路中的毛刺現(xiàn)象,在有限狀態(tài)機(jī)設(shè)計(jì)中有多種設(shè)計(jì)方案可供選擇。
(4)與VHDL的其他描述方式相比,有限狀態(tài)機(jī)的VHDL表述豐富多樣,程序?qū)哟畏置?,結(jié)構(gòu)清晰,易讀易懂,在排錯(cuò)、修改和模塊移植方面也有其獨(dú)到之處。
(5)在高速運(yùn)算和控制方面,有限狀態(tài)機(jī)更有其巨大的優(yōu)勢(shì)。由于在VHDL中,一個(gè)有限狀態(tài)機(jī)可以由多個(gè)進(jìn)程構(gòu)成,一個(gè)結(jié)構(gòu)體中可以包含多個(gè)有限狀態(tài)機(jī),而一個(gè)單獨(dú)的有限狀態(tài)機(jī)(或多個(gè)并行運(yùn)行的有限狀態(tài)機(jī))以順序方式所能完成的運(yùn)算和控制方面的工作與一個(gè)CPU的功能類(lèi)似。因此,一個(gè)設(shè)計(jì)實(shí)體的功能便類(lèi)似于一個(gè)含有并行運(yùn)行的多CPU的高性能系統(tǒng)的功能。與采用CPU硬件系統(tǒng),通過(guò)編程設(shè)計(jì)邏輯系統(tǒng)的方案相比,有限狀態(tài)機(jī)的運(yùn)行方式類(lèi)似于CPU,而在運(yùn)行速度和工作可靠性方面都優(yōu)于CPU。
就運(yùn)行速度而言,由有限狀態(tài)機(jī)構(gòu)成的硬件系統(tǒng)比CPU所能完成同樣功能的軟件系統(tǒng)的工作速度要高出三至四個(gè)數(shù)量級(jí)。CPU和有限狀態(tài)機(jī)均靠時(shí)鐘節(jié)拍驅(qū)動(dòng),由于存在指令讀取、譯碼的過(guò)程,因此常見(jiàn)的CPU的一個(gè)指令周期須由多個(gè)機(jī)器周期構(gòu)成,一個(gè)機(jī)器周期又由多個(gè)時(shí)鐘節(jié)拍構(gòu)成;且每條指令只能執(zhí)行簡(jiǎn)單操作,一個(gè)含有運(yùn)算和控制的完整設(shè)計(jì)程序往往需要成百上千條指令。相比之下,有限狀態(tài)機(jī)狀態(tài)變換周期只有一個(gè)時(shí)鐘周期,每個(gè)狀態(tài)之間的變換是串行方式的,但每個(gè)狀態(tài)下的過(guò)程處理可以采取并行方式,在一個(gè)時(shí)鐘節(jié)拍中完成多個(gè)操作。
就可靠性而言,有限狀態(tài)機(jī)的優(yōu)勢(shì)也是十分明顯的。CPU本身的結(jié)構(gòu)特點(diǎn)與執(zhí)行軟件指令的工作方式?jīng)Q定了任何CPU都不可能獲得圓滿(mǎn)的容錯(cuò)保障。有限狀態(tài)機(jī)系統(tǒng)是由純硬件電路構(gòu)成的,不存在CPU運(yùn)行軟件過(guò)程中許多固有的缺陷。有限狀態(tài)機(jī)的設(shè)計(jì)中能使用各種完整的容錯(cuò)技術(shù),可避免大部分錯(cuò)誤,即便發(fā)生運(yùn)行錯(cuò)誤,由于有限狀態(tài)機(jī)運(yùn)行速度上的優(yōu)勢(shì),進(jìn)入非法狀態(tài)并從中跳出,進(jìn)入正常狀態(tài)所耗的時(shí)間通常只有二三個(gè)時(shí)鐘周期,約數(shù)十納秒,尚不足以對(duì)系統(tǒng)的運(yùn)行構(gòu)成損害;而CPU通過(guò)復(fù)位方式從非法運(yùn)行方式中恢復(fù)過(guò)來(lái),耗時(shí)達(dá)數(shù)十毫秒,這對(duì)于高速高可靠系統(tǒng)顯然是無(wú)法容忍的。應(yīng)用VHDL設(shè)計(jì)有限狀態(tài)機(jī)的具體步驟如下:
(1)根據(jù)系統(tǒng)要求確定狀態(tài)數(shù)量、狀態(tài)轉(zhuǎn)移的條件和各狀態(tài)輸出信號(hào)的賦值,并畫(huà)出狀態(tài)轉(zhuǎn)移圖。
(2)按照狀態(tài)轉(zhuǎn)移圖編寫(xiě)有限狀態(tài)機(jī)的VHDL設(shè)計(jì)程序。
(3)利用EDA工具對(duì)有限狀態(tài)機(jī)的功能進(jìn)行仿真驗(yàn)證。8.1.2有限狀態(tài)機(jī)的轉(zhuǎn)移圖描述
根據(jù)輸出與輸入、系統(tǒng)狀態(tài)的關(guān)系,有限狀態(tài)機(jī)又可分為Moore型有限狀態(tài)機(jī)和Mealy型有限狀態(tài)機(jī)。Moore型有限狀態(tài)機(jī)是指輸出僅與系統(tǒng)狀態(tài)有關(guān),與輸入信號(hào)無(wú)關(guān)的狀態(tài)機(jī)。Mealy型有限狀態(tài)機(jī)是指輸出與系統(tǒng)狀態(tài)和輸入均有關(guān)系的有限狀態(tài)機(jī)。
(1)在Moore型有限狀態(tài)機(jī)中,輸出在時(shí)鐘的活動(dòng)沿到達(dá)后的幾個(gè)門(mén)電路的延遲時(shí)間之后即得到,并且在該時(shí)鐘周期的剩余時(shí)間內(nèi)保持不變,即使輸入在該時(shí)鐘周期內(nèi)發(fā)生改變,輸出值也保持不變。然而,因?yàn)檩敵雠c當(dāng)前的輸入無(wú)關(guān),當(dāng)前輸入產(chǎn)生的任何效果將延遲到下一個(gè)時(shí)鐘周期。Moore型有限狀態(tài)機(jī)的優(yōu)點(diǎn)是將輸入和輸出分隔開(kāi)。
(2)在Mealy型有限狀態(tài)機(jī)中,因?yàn)檩敵鍪禽斎氲暮瘮?shù),如果輸入改變,輸出可以在一個(gè)時(shí)鐘周期的中間發(fā)生改變。這使Mealy型有限狀態(tài)機(jī)比起Moore型有限狀態(tài)機(jī)來(lái),對(duì)輸入變化的響應(yīng)要早一個(gè)時(shí)鐘周期,但也使輸出隨著假輸入的變化而變化,輸入線上的噪聲也會(huì)傳到輸出。實(shí)現(xiàn)同樣的功能,Moore型有限狀態(tài)機(jī)比Mealy型有限狀態(tài)機(jī)可能需要更多的狀態(tài)。
通常采用轉(zhuǎn)移圖對(duì)有限狀態(tài)機(jī)的功能進(jìn)行描述。轉(zhuǎn)移圖是一種有向圖,由圓表示有限狀態(tài)機(jī)的狀態(tài),有向曲線表示系統(tǒng)的狀態(tài)轉(zhuǎn)移過(guò)程,有向線段的起點(diǎn)表示初始的狀態(tài),終點(diǎn)表示轉(zhuǎn)移后的狀態(tài)。對(duì)于Mealy型有限狀態(tài)機(jī)在有向曲線段上的字符表示系統(tǒng)的輸入和輸出,用“/”分隔。對(duì)于Moore型有限狀態(tài)機(jī),通常在狀態(tài)后標(biāo)出輸出值,用“/”分隔,輸入信號(hào)仍然在有向線段上標(biāo)注。圖8.1所示就是一個(gè)簡(jiǎn)單的Mealy型有限狀態(tài)機(jī)的轉(zhuǎn)移圖。圖8.1簡(jiǎn)單Mealy型有限狀態(tài)機(jī)的轉(zhuǎn)移圖如圖8.1所示的Mealy型有限狀態(tài)機(jī)只有一位輸入、一位輸出,兩個(gè)狀態(tài)A1和A2,左側(cè)繪制的指向A1的箭頭表示系統(tǒng)的初始狀態(tài)為A1;在A1的上方,繪制一個(gè)起點(diǎn)和終點(diǎn)都在A1上的有向曲線,以及曲線上的標(biāo)注“1/0”表示,當(dāng)狀態(tài)為A1,輸入信號(hào)為1時(shí),有限狀態(tài)機(jī)的狀態(tài)不變,輸出為0;由A1指向A2的標(biāo)注為“0/1”的箭頭表示,當(dāng)系統(tǒng)狀態(tài)為A1,輸入為0時(shí),系統(tǒng)狀態(tài)變?yōu)锳2,且輸出為1。同理,由轉(zhuǎn)移圖可知,當(dāng)系統(tǒng)處于A2狀態(tài)時(shí),輸入為1時(shí)狀態(tài)不變,輸出為1;當(dāng)輸入為0時(shí),狀態(tài)變?yōu)锳1,輸出為0。對(duì)于比較復(fù)雜的有限狀態(tài)機(jī),在有向箭頭的標(biāo)識(shí)上還可以添加字符說(shuō)明。圖8.2所示為一個(gè)Moore型有限狀態(tài)機(jī)的轉(zhuǎn)移圖。
圖8.2所示的Moore型有限狀態(tài)機(jī)只有一位輸入、一位輸出,兩個(gè)狀態(tài)A1和A2,左側(cè)繪制的指向A1的箭頭表示系統(tǒng)的初始狀態(tài)為A1;標(biāo)注“A1/1”表示處于狀態(tài)A1時(shí),輸出為1;同理“A2/0”表示處于狀態(tài)A2時(shí),系統(tǒng)輸出為0;在狀態(tài)A1上方繪制的起點(diǎn)和終點(diǎn)均在A1上的有向曲線,以及曲線上的標(biāo)注“1”表示,當(dāng)狀態(tài)為A1,輸入信號(hào)為1時(shí),有限狀態(tài)機(jī)的狀態(tài)不變;由A1指向A2的標(biāo)注為“0”的箭頭表示,當(dāng)狀態(tài)為A1,輸入為0時(shí),有限狀態(tài)機(jī)的狀態(tài)變?yōu)锳2。圖8.2Moore型有限狀態(tài)機(jī)的轉(zhuǎn)移圖同理可知,當(dāng)有限狀態(tài)機(jī)處于A2狀態(tài)時(shí),如果輸入為1,有限狀態(tài)機(jī)的狀態(tài)就會(huì)變?yōu)锳1。對(duì)于這種輸出在{0,1}二值區(qū)間的Moore型有限狀態(tài)機(jī),一般稱(chēng)之為有限狀態(tài)自動(dòng)機(jī),對(duì)于有限狀態(tài)自動(dòng)機(jī)還有另一種轉(zhuǎn)移圖的表示方法,即用雙圓環(huán)表示輸出為1的狀態(tài),并稱(chēng)之為接受狀態(tài)。使用這種轉(zhuǎn)移圖畫(huà)法后,圖8.2所示的有限狀態(tài)機(jī)可繪制為如圖8.3所示的轉(zhuǎn)移圖。
圖8.3所示的有限狀態(tài)自動(dòng)機(jī)的轉(zhuǎn)移圖中狀態(tài)A1為接受狀態(tài),用雙圓環(huán)表示。圖8.3有限狀態(tài)自動(dòng)機(jī)的轉(zhuǎn)移圖8.2有限狀態(tài)機(jī)的VHDL描述
用VHDL設(shè)計(jì)的有限狀態(tài)機(jī)有多種形式:從有限狀態(tài)機(jī)的信號(hào)輸出方式上分,有Mealy型和Moore型兩種有限狀態(tài)機(jī);從結(jié)構(gòu)上分,有單進(jìn)程有限狀態(tài)機(jī)和多進(jìn)程有限狀態(tài)機(jī);從狀態(tài)表達(dá)方式上分,有符號(hào)化有限狀態(tài)機(jī)和確定狀態(tài)編碼的有限狀態(tài)機(jī);從編碼方式上分,有順序編碼有限狀態(tài)機(jī)、一位熱碼編碼有限狀態(tài)機(jī)或其他編碼方式的有限狀態(tài)機(jī)。
無(wú)論有限狀態(tài)機(jī)屬于何種類(lèi)型,其結(jié)構(gòu)均可分為狀態(tài)說(shuō)明、主控時(shí)序進(jìn)程、主控組合進(jìn)程和輔助進(jìn)程幾個(gè)部分。8.2.1狀態(tài)說(shuō)明
狀態(tài)說(shuō)明用于說(shuō)明有限狀態(tài)機(jī)可能的所有狀態(tài)。根據(jù)有限狀態(tài)機(jī)狀態(tài)的編碼方式的不同,有兩種狀態(tài)說(shuō)明結(jié)構(gòu):一種是自動(dòng)狀態(tài)編碼,這種編碼方式不指定編碼的具體順序和方式,只是說(shuō)明編碼的個(gè)數(shù)以及名稱(chēng),由綜合器自動(dòng)進(jìn)行二進(jìn)制編碼,這種方式的VHDL描述比較簡(jiǎn)潔;另一種是指定狀態(tài)編碼,由設(shè)計(jì)者分別指定各個(gè)狀態(tài)的二進(jìn)制編碼,采用這種編碼方式后,可根據(jù)需要設(shè)置各個(gè)狀態(tài)的編碼,但狀態(tài)說(shuō)明的描述過(guò)程比較繁瑣。采用自動(dòng)狀態(tài)編碼方式的狀態(tài)說(shuō)明部分的核心是用TYPE語(yǔ)句定義的新的描述狀態(tài)的枚舉數(shù)據(jù)類(lèi)型,其元素都用狀態(tài)機(jī)的狀態(tài)名來(lái)定義。用來(lái)存儲(chǔ)狀態(tài)編碼的狀態(tài)變量應(yīng)定義為信號(hào),便于信息傳遞;并將狀態(tài)變量的數(shù)據(jù)類(lèi)型定義為含有既定狀態(tài)元素的新定義的數(shù)據(jù)類(lèi)型。說(shuō)明部分一般放在結(jié)構(gòu)體的ARCHITECTURE和BEGIN之間。例8.1所示就是一個(gè)典型的狀態(tài)說(shuō)明部分。
[例8.1]
ARCHITECTURE…IS
TYPEFSM_STIS(A1,A2);
SIGNALcur_st,next_st:FSM_ST;例8.1中新定義的數(shù)據(jù)類(lèi)型名是“FSM_ST”,其類(lèi)型的元素分別為A1、A2,使其恰好表達(dá)有限狀態(tài)機(jī)的2個(gè)狀態(tài)。定義信號(hào)SIGNAL的狀態(tài)變量為cur_st和next_st,它們的數(shù)據(jù)類(lèi)型被定義為FSM_ST,因此狀態(tài)變量cur_st和next_st的取值范圍在數(shù)據(jù)類(lèi)型FSM_ST所限定的2個(gè)元素中。由于狀態(tài)變量的取值是文字符號(hào),因此以上語(yǔ)句定義的狀態(tài)機(jī)屬于符號(hào)化狀態(tài)機(jī)。
采用指定狀態(tài)編碼方法的狀態(tài)說(shuō)明部分就比較繁瑣,需要使用關(guān)鍵詞“CONSTANT”一一列出指定的狀態(tài)的二進(jìn)制編碼,用來(lái)存儲(chǔ)狀態(tài)編碼的狀態(tài)變量也應(yīng)定義為信號(hào),且類(lèi)型必須與狀態(tài)編碼的類(lèi)型相同。例8.2所示就是一個(gè)采用指定狀態(tài)編碼方式的有限狀態(tài)機(jī)的狀態(tài)說(shuō)明部分。
[例8.2]
ARCHITECTURE…IS
CONSTANTA1:STD_LOGIC:='1';
CONSTANTA2:STD_LOGIC:='0';
SIGNAL cur_st,next_st:STD_LOGIC;
例8.2中定義的狀態(tài)只有兩個(gè),分別是A1和A2,用1位就可以對(duì)這兩個(gè)狀態(tài)進(jìn)行編碼,用“1”代表狀態(tài)A1,用“0”代表狀態(tài)A2。8.2.2主控時(shí)序進(jìn)程
主控時(shí)序進(jìn)程是負(fù)責(zé)有限狀態(tài)機(jī)狀態(tài)轉(zhuǎn)化的進(jìn)程。有限狀態(tài)機(jī)是隨外部時(shí)鐘信號(hào)以同步時(shí)序方式工作的。主控時(shí)序進(jìn)程就是保證狀態(tài)的跳變與時(shí)鐘信號(hào)同步,即保證在時(shí)鐘發(fā)生有效跳變時(shí),有限狀態(tài)機(jī)的狀態(tài)才發(fā)生變化。一般地,主控時(shí)序進(jìn)程負(fù)責(zé)系統(tǒng)的初始和復(fù)位的狀態(tài)設(shè)置,不負(fù)責(zé)下一狀態(tài)的具體狀態(tài)取值。當(dāng)復(fù)位信號(hào)到來(lái)時(shí),主控時(shí)序進(jìn)程將同步或異步復(fù)位狀態(tài);當(dāng)時(shí)鐘的有效跳變到來(lái)時(shí),時(shí)序進(jìn)程只是機(jī)械地將代表次態(tài)的信號(hào)next_st中的內(nèi)容送入到現(xiàn)態(tài)的信號(hào)cur_st中,而信號(hào)next_st中的內(nèi)容完全由其他的進(jìn)程根據(jù)實(shí)際情況來(lái)決定。主控時(shí)序進(jìn)程的設(shè)計(jì)比較固定、單一和簡(jiǎn)單。例8.3所示就是一個(gè)典型的主控時(shí)序進(jìn)程的示例。
[例8.3]
PROCESS(reset,clk)
BEGIN
IF(reset='1')THEN
cur_st<=st1;
ELSIF(clk='1'ANDclk‘event)THEN
cur_st<=next_st;
ENDIF;
ENDPROCESS;8.2.3主控組合進(jìn)程
主控組合進(jìn)程用于實(shí)現(xiàn)有限狀態(tài)機(jī)的狀態(tài)選擇和信號(hào)輸出。主控組合進(jìn)程根據(jù)當(dāng)前狀態(tài)信號(hào)cur_st的值確定進(jìn)行相應(yīng)的操作,處理有限狀態(tài)機(jī)的輸入、輸出信號(hào),同時(shí)確定下一個(gè)狀態(tài),即next_st的取值。主控組合進(jìn)程的設(shè)計(jì)往往需要參考有限狀態(tài)機(jī)的轉(zhuǎn)移圖,這類(lèi)似于編寫(xiě)程序流程圖一樣。在主控組合進(jìn)程中,通常使用CASE語(yǔ)句或者IF語(yǔ)句實(shí)現(xiàn)根據(jù)當(dāng)前狀態(tài)進(jìn)行順序語(yǔ)句的轉(zhuǎn)移。
例8.4所示為根據(jù)圖8.1所示的轉(zhuǎn)移圖設(shè)計(jì)的主控組合進(jìn)程,其輸入信號(hào)為input,輸出信號(hào)為output。
[例8.4]
PROCESS(current_state,input)
BEGIN
CASEcur_stIS
WHENA1=>IF(inputs=1)THEN
output<=0;
next_st<=A1;
ELSE
output<=1;
next_st<=A2;
ENDIF;
WHENA2=>IF(inputs=1)THEN
output<=1;
next_st<=A2;
ELSE
output<=0;
next_st<=A1;
ENDIF;
ENDCASE;
ENDPROCESS;8.2.4輔助進(jìn)程
輔助進(jìn)程指用于配合有限狀態(tài)機(jī)工作的其他組合進(jìn)程或時(shí)序進(jìn)程,例如為了完成某種算法的進(jìn)程或者是為了穩(wěn)定輸出設(shè)置的數(shù)據(jù)鎖存器等。
例8.5為圖8.2所示的有限狀態(tài)機(jī)轉(zhuǎn)移圖的VHDL描述。
[例8.5]
LIBRARYIEEE;
USEIEEE.STD_LOGIC_l164.ALL;
ENTITYsampIS
PORT(clk,reset:INSTD_LOGIC;
input:INSTD_LOGIC;
output:OUTSTD_LOGIC);
ENDsamp;
ARCHITECTUREbehavOFsampIS
TYPEFSM_STIS(A1,A2);
SIGNALcur_st,next_st:FSM_ST;
BEGIN
PROCESS(reset,clk)
BEGIN
IF(reset='1')THEN
cur_st<=A1;
ELSIF(clk'eventANDclk='1')THEN
cur_st<=next_state;
ENDIF;
ENDPROCESS;
PROCESS(cur_st,input)
BEGIN
CASEcur_stIS
WHENA1=>
outputs<='1';
IF(inputs='1')THEN
next_st<=A1;
ELSE
next_st<=A2;
ENDIF;
WHENA2=>
outputs<='0';
IF(inputs='1')THEN
next_st<=A1;
ELSE
next_st<=A2;
ENDIF;
ENDCASE;
ENDPROCESS;
ENDbehav;
8.3有限狀態(tài)機(jī)編碼
本節(jié)將具體介紹有限狀態(tài)機(jī)設(shè)計(jì)過(guò)程中的狀態(tài)編碼問(wèn)題。在有限狀態(tài)機(jī)的設(shè)計(jì)中,用文字符號(hào)定義的各狀態(tài)變量稱(chēng)為符號(hào)化狀態(tài)編碼,如前面幾節(jié)中介紹的例子就采用的是符號(hào)化狀態(tài)編碼,這些狀態(tài)變量的具體編碼由VHDL綜合器根據(jù)具體情況來(lái)確定。有限狀態(tài)機(jī)的狀態(tài)編碼方式有多種,這要根據(jù)需要設(shè)計(jì)的有限狀態(tài)機(jī)的實(shí)際情況來(lái)確定。為了簡(jiǎn)化有限狀態(tài)機(jī),節(jié)約器件資源,在某些情況下,設(shè)計(jì)者采用可由有限狀態(tài)機(jī)直接輸出的狀態(tài)編碼或非符號(hào)化編碼定義方式等狀態(tài)機(jī)編碼方式。8.3.1狀態(tài)位直接輸出型編碼
狀態(tài)位直接輸出型編碼方式是指有限狀態(tài)機(jī)的狀態(tài)位碼可以直接用于輸出的編碼方式。這種編碼方式要求狀態(tài)位碼的編制具有一定特殊的規(guī)律,最典型的應(yīng)用實(shí)例就是計(jì)數(shù)器。
例8.6所示就是一個(gè)使用狀態(tài)位直接輸出型編碼設(shè)計(jì)的格雷碼計(jì)數(shù)器。
[例8.6]
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYgraycntIS
PORT(clk,reset:INSTD_LOGIC;
q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDgraycnt;
ARCHITECTUREbehavOFgraycntIS
SIGNALstateSTD_LOGIC_VECTOR(3DOWNTO0);
CONSTANTst0:STD_LOGIC_VECTOR(3DOWNTO0):="0000";
CONSTANTst1:STD_LOGIC_VECTOR(3DOWNTO0):="0001";
CONSTANTst2:STD_LOGIC_VECTOR(3DOWNTO0):="0011";
CONSTANTst3:STD_LOGIC_VECTOR(3DOWNTO0):="0111";
CONSTANTst4:STD_LOGIC_VECTOR(3DOWNTO0):="1111";
CONSTANTst5:STD_LOGIC_VECTOR(3DOWNTO0):="1110";
CONSTANTst6:STD_LOGIC_VECTOR(3DOWNTO0):="1100";
CONSTANTst7:STD_LOGIC_VECTOR(3DOWNTO0):="1000";
SIGNALcur_st:STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALnext_st:STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk,reset)
BEGIN
IF(reset='1')THEN
cur_st=st0;
ELSIF(clk'eventANDclk='l')THEN
cur_st<=next_st;
ENDIF;
ENDPROCESS;
PROCESS(cur_st,clk)
BEGIN
IF(clk‘eventANDclk='1')THEN
CASEcur_stIS
WHENst0=>
next_st<=st1;
WHENst1=>
next_st<=st2;
WHENst2=>
next_st<=st3;
WHENst3=>
next_st<=st4;
WHENst4=>
next_st<=st5;
WHENst5=>
next_st<=st6;
WHENst6=>
next_st<=st7;
WHENs7=>
next_st<=st0;
WHENOTHERS=>n<=st0;
ENDCASE;
ENDPROCESS;
q<=cur_st;
ENDbehav;
在例8.6所示的格雷碼計(jì)數(shù)器的VHDL描述中,用于編碼的cur_st最后用于輸出計(jì)數(shù)值,從而減少了編碼、解碼的過(guò)程,節(jié)約了器件的資源。8.3.2順序編碼
順序編碼就是采用自然數(shù)的方式對(duì)有限狀態(tài)機(jī)的狀態(tài)進(jìn)行編碼,st0對(duì)應(yīng)于0,st1對(duì)應(yīng)于1,…,st12對(duì)應(yīng)于12等。采用這種編碼方式最為簡(jiǎn)單,且使用的觸發(fā)器數(shù)量最少,剩余的非法狀態(tài)最少,容錯(cuò)技術(shù)最為簡(jiǎn)單。例8.7所示為一個(gè)采用順序編碼的有限狀態(tài)機(jī)的狀態(tài)說(shuō)明部分。
[例8.7]
SIGNALcur_st,next_st:STD_LOGIC_VECTOR(2DOWNTO0);
CONSTANTst0:STD_LOGIC_VECTOR(2DOWNTO0):="000";
CONSTANTst1:STD_LOGIC_VECTOR(2DOWNTO0):="001";
CONSTANTst2:STD_LOGIC_VECTOR(2DOWNTO0):="010";
CONSTANTst3:STD_LOGIC_VECTOR(2DOWNTO0):="011";
CONSTANTst4:STD_LOGIC_VECTOR(2DOWNTO0):="100";
采用順序編碼方式的缺點(diǎn)是,雖然節(jié)省了觸發(fā)器,但卻增加了從一種狀態(tài)向另一種狀態(tài)轉(zhuǎn)換的譯碼組合邏輯,這對(duì)于在觸發(fā)器資源豐富而組合邏輯資源相對(duì)較少的FPGA器件中實(shí)現(xiàn)是不利的。8.3.3一位熱碼編碼(OneHotEncoding)
一位熱碼編碼方式就是用n個(gè)觸發(fā)器來(lái)實(shí)現(xiàn)具有n個(gè)狀態(tài)的有限狀態(tài)機(jī),有限狀態(tài)機(jī)中的每一個(gè)狀態(tài)都由其中一個(gè)觸發(fā)器的狀態(tài)來(lái)表示。即當(dāng)處于該狀態(tài)時(shí),對(duì)應(yīng)的觸發(fā)器為“1”,其余的觸發(fā)器都置“0”。例如,8個(gè)狀態(tài)的有限狀態(tài)機(jī)需由8位表達(dá),其對(duì)應(yīng)狀態(tài)編碼如例8.8所示。
[例8.8]
SIGNALcur_st,next_st:STD_LOGIC_VECTOR(7DOWNTO0);
CONSTANTst0:STD_LOGIC_VECTOR(2DOWNTO0):="00000001";
CONSTANTst1:STD_LOGIC_VECTOR(2DOWNTO0):="00000010";
CONSTANTst2:STD_LOGIC_VECTOR(2DOWNTO0):="00000100";
CONSTANTst3:STD_LOGIC_VECTOR(2DOWNTO0):="00001000";
CONSTANTst4:STD_LOGIC_VECTOR(2DOWNTO0):="00010000";
CONSTANTst5:STD_LOGIC_VECTOR(2DOWNTO0):="00100000";
CONSTANTst6:STD_LOGIC_VECTOR(2DOWNTO0):="01000000";
CONSTANTst7:STD_LOGIC_VECTOR(2DOWNTO0):="10000000";一位熱碼編碼方式盡管用了較多的觸發(fā)器,但其簡(jiǎn)單的編碼方式大為簡(jiǎn)化了狀態(tài)譯碼邏輯,提高了狀態(tài)轉(zhuǎn)換速度,這對(duì)于含有較多的時(shí)序邏輯資源、較少的組合邏輯資源的FPGA器件是較好的解決方案。此外,許多面向FPGA/CPLD設(shè)計(jì)的VHDL綜合器都有將符號(hào)化狀態(tài)機(jī)自動(dòng)優(yōu)化設(shè)置成為一位熱碼編碼狀態(tài)的功能。
8.4有限狀態(tài)機(jī)剩余狀態(tài)碼的處理
在有限狀態(tài)機(jī)設(shè)計(jì)中,由于有限狀態(tài)機(jī)的狀態(tài)不可能總是2n個(gè),或者在使用枚舉類(lèi)型或直接指定狀態(tài)編碼的程序中,特別是使用了一位熱碼編碼方式后,不可避免地會(huì)出現(xiàn)大量未被定義的編碼組合,這些狀態(tài)在有限狀態(tài)機(jī)的正常運(yùn)行中是不需要出現(xiàn)的,通常稱(chēng)之為非法狀態(tài)。在器件上電的隨機(jī)啟動(dòng)過(guò)程中,或者在外界不確定的干擾或內(nèi)部電路產(chǎn)生的毛刺作用下,有限狀態(tài)機(jī)的狀態(tài)變量的取值可能是那些未定義的非法編碼,從而使有限狀態(tài)機(jī)進(jìn)入不可預(yù)測(cè)的非法狀態(tài),其后果或是對(duì)外界出現(xiàn)短暫失控,或是因完全無(wú)法擺脫非法狀態(tài)而失去正常的功能,除非對(duì)有限狀態(tài)機(jī)進(jìn)行復(fù)位操作。因此,有限狀態(tài)機(jī)的剩余狀態(tài)的處理(即有限狀態(tài)機(jī)系統(tǒng)容錯(cuò)技術(shù)的應(yīng)用)是設(shè)計(jì)者必須慎重考慮的問(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)機(jī)有可靠的工作性能,則必須設(shè)法使系統(tǒng)落入這些非法狀態(tài)后還能迅速返回正常的狀態(tài)轉(zhuǎn)移路徑中。解決的方法是在枚舉類(lèi)型定義中就將所有的狀態(tài)(包括多余狀態(tài))都作出定義,并在以后的語(yǔ)句中加以處理。處理的方法有以下兩種:
(1)在語(yǔ)句中對(duì)每一個(gè)非法狀態(tài)都作出明確的狀態(tài)轉(zhuǎn)換指示,當(dāng)狀態(tài)變量落入非法狀態(tài)時(shí),自動(dòng)設(shè)置狀態(tài)復(fù)位操作。
(2)使用“OTHERS”關(guān)鍵詞對(duì)未定義的狀態(tài)作統(tǒng)一處理,其語(yǔ)句如下:
WHENOTHERS=>next_st<=st0;
其中next_st是編碼變量,st0是初始狀態(tài)編碼。
這種方式適用于采用符號(hào)編碼的有限狀態(tài)機(jī)。
對(duì)于有限狀態(tài)機(jī)的非法狀態(tài)的處理,常用的方法是將狀態(tài)變量改變?yōu)槌跏紶顟B(tài),自動(dòng)復(fù)位,也可以將狀態(tài)變量導(dǎo)向?qū)iT(mén)用于處理出錯(cuò)恢復(fù)的狀態(tài)中。使用一位熱碼編碼方式的有限狀態(tài)機(jī)中的非法狀態(tài)較其他編碼方式的有限狀態(tài)機(jī)要多得多。一位熱碼編碼方式所帶來(lái)的非法狀態(tài)的數(shù)量與有效狀態(tài)數(shù)量呈2的指數(shù)關(guān)系。例如對(duì)于8個(gè)狀態(tài)的一位熱碼編碼使用的是8位編碼變量,非法的編碼數(shù)量為28-8,即有248個(gè)非法編碼,這種情況下,如果采用以上的非法狀態(tài)處理方式,將會(huì)耗用大量的器件資源,這違背了使用一位熱碼編碼方式的初衷,此時(shí)可根據(jù)編碼的特點(diǎn),判斷非法狀態(tài),進(jìn)行處理。
由于一位熱碼編碼方式產(chǎn)生的狀態(tài)編碼中均只有一位為“1”,其余位為“0”的特點(diǎn),因此可以根據(jù)編碼變量中“1”的數(shù)量判斷編碼是否為合法編碼。8.5有限狀態(tài)機(jī)設(shè)計(jì)實(shí)例
本節(jié)將通過(guò)控制ADC0809進(jìn)行AD采樣的有限狀態(tài)機(jī)的實(shí)例設(shè)計(jì)完整地介紹有限狀態(tài)機(jī)的設(shè)計(jì)過(guò)程。
ADC0809是CMOS的8位A/D轉(zhuǎn)換器,片內(nèi)有8路模擬開(kāi)關(guān),可控制8個(gè)模擬量中的一個(gè)進(jìn)入轉(zhuǎn)換器中。ADC0809的精度為8位,轉(zhuǎn)換時(shí)間約100μs,含鎖存控制的8路多路開(kāi)關(guān),輸出由三態(tài)緩沖器控制,單5V電源供電。
ADC0809的轉(zhuǎn)換過(guò)程時(shí)序如圖8.4所示。圖8.4ADC0809的轉(zhuǎn)換過(guò)程時(shí)序圖8.5中,START是轉(zhuǎn)換啟動(dòng)信號(hào),高電平有效;ALE是3位通道選擇地址(ADDC、ADDB、ADDA)信號(hào)的鎖存信號(hào),當(dāng)模擬量送至某一輸入端(如IN1或IN2等)后,由3位地址信號(hào)選擇,而地址信號(hào)由ALE鎖存;EOC是轉(zhuǎn)換情況狀態(tài)信號(hào),當(dāng)啟動(dòng)轉(zhuǎn)換約100μs后,EOC產(chǎn)生一個(gè)負(fù)脈沖,以示轉(zhuǎn)換結(jié)束;在EOC的上升沿后,若使輸出使能信號(hào)OE為高電平,則控制打開(kāi)三態(tài)緩沖器,把轉(zhuǎn)換好的8位數(shù)據(jù)結(jié)果輸送至數(shù)據(jù)總線。至此,ADC0809的一次轉(zhuǎn)換結(jié)束。
根據(jù)ADC0809的轉(zhuǎn)換時(shí)序,控制ADC0809的狀態(tài)機(jī)中共設(shè)置了7個(gè)狀態(tài),計(jì)為“st0~st6”,這7個(gè)狀態(tài)在時(shí)序圖中的位置如圖8.5所示。圖8.5有限狀態(tài)機(jī)的7個(gè)狀態(tài)在時(shí)序圖中的位置根據(jù)轉(zhuǎn)換時(shí)序,控制A/D轉(zhuǎn)換的有限狀態(tài)機(jī)中僅有一個(gè)輸入信號(hào)“EOC”,有四個(gè)輸出信號(hào),分別是“ale”、“start”、“oe”和“l(fā)ock_data”,其中“l(fā)ock_data”是輸出數(shù)據(jù)鎖存信號(hào)。這些輸出信號(hào)的值僅與狀態(tài)機(jī)所處的狀態(tài)有關(guān),故采用Moore型有限狀態(tài)機(jī),繪制如圖8.6所示的狀態(tài)轉(zhuǎn)移圖。由于輸出的信號(hào)不止一位,因此在有限狀態(tài)機(jī)的轉(zhuǎn)移圖中按照“start”、“ale”、“oe”和“l(fā)ock”的次序列出每個(gè)狀態(tài)的輸出。圖8.6狀態(tài)轉(zhuǎn)移圖根據(jù)圖8.7所示的狀態(tài)轉(zhuǎn)移圖即可編制例8.9所示的VHDL程序。
[例8.9]
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYADCcontIS
PORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);
CLK,eoc:INSTD_LOGIC;
lock_data,ale,start,oe,ADDA:OUTSTD_LOGIC;
Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDADCcont;
ARCHITECTUREbehavOFADCcontIS
TYPETMS_STIS(st0,stl,st2,st3,st4,st5,st6);
SIGNALcur_st,next_st:TMS_ST:=st0;
SIGNALregl:STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALlock:STD_LOGIC;
BEGIN
ADDA<=‘1’;lock_data<=lock;
PROCESS(cur_st,eoc)--主控組合進(jìn)程
BEGIN
CASEcur_stIS
WHENst0=>
ale<='0';
start<='0';
oe<='0';
lock<='0';
next_st<=stl;
WHENstl=>
ale<='1';
start<='0';
oe<='0';
lock<='0';
next_st<=st2;
WHENst2=>
ale<='0';
start<='1';
oe<='0';
lock<='0';
next_st<=st3;
WHENst3=>
ale<='0';
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 4 school days further study說(shuō)課稿 -2024-2025學(xué)年譯林版七年級(jí)英語(yǔ)上冊(cè)
- Unit 1 How can I get there Part A Lets learn(說(shuō)課稿)-2024-2025學(xué)年人教PEP版英語(yǔ)六年級(jí)上冊(cè)
- 2025年小學(xué)語(yǔ)文教研組工作計(jì)劃范例
- 美發(fā)裁剪知識(shí)培訓(xùn)課件
- 板材卷材:普中板行業(yè)相關(guān)投資計(jì)劃提議
- 臨空經(jīng)濟(jì)行業(yè)相關(guān)投資計(jì)劃提議范本
- 2025年秋季初中教研工作計(jì)劃
- 潤(rùn)滑油脂行業(yè)相關(guān)投資計(jì)劃提議范本
- 噪聲污染治理相關(guān)行業(yè)投資方案范本
- 智能壓力校驗(yàn)儀相關(guān)項(xiàng)目投資計(jì)劃書(shū)
- 物業(yè)項(xiàng)目經(jīng)理崗位競(jìng)聘
- 第8課《蒲柳人家(節(jié)選)》教學(xué)設(shè)計(jì)-2023-2024學(xué)年統(tǒng)編版語(yǔ)文九年級(jí)下冊(cè)
- 幼兒沙池活動(dòng)指導(dǎo)方法
- 2024年冬季校園清雪合同
- 翻譯美學(xué)理論
- 15J403-1-樓梯欄桿欄板(一)
- 中國(guó)傳統(tǒng)樂(lè)器蕭介紹
- 2024屆華中師范大學(xué)新高三第一次聯(lián)考試題
- 小學(xué)食堂食品添加劑管理制度
- 第3章《物態(tài)變化》大單元教學(xué)設(shè)計(jì)- 2023-2024學(xué)年人教版八年級(jí)物理上冊(cè)
- 領(lǐng)導(dǎo)對(duì)述職報(bào)告的點(diǎn)評(píng)詞
評(píng)論
0/150
提交評(píng)論