




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、1 1第6章 狀態(tài)機的設計第 6 章 狀態(tài)機的設計6.1 狀態(tài)機概述6.2 狀態(tài)機的分類6.3 MOORE型狀態(tài)機6.4 MEALY型狀態(tài)機6.5 狀態(tài)編碼和剩余狀態(tài)處理6.6 利用Quartus軟件的圖形化工具設計狀態(tài)機6.7 狀態(tài)機設計實例習題2 2第6章 狀態(tài)機的設計6.1 狀態(tài)機概述一個實際的系統(tǒng),情況一般比較復雜,系統(tǒng)的工作狀態(tài)很多,分析狀態(tài)的結(jié)構(gòu)要花費相當多的精力。因此,狀態(tài)機的概念應運而生,它可以滿足對實際系統(tǒng)進行分析的要求。狀態(tài)機是利用可編程邏輯器件實現(xiàn)電子系統(tǒng)功能的常用設計方法之一,它在各種數(shù)字應用中,特別是定義了良好順序的控制器中被廣泛使用。3 3第6章 狀態(tài)機的設計就理論
2、而言,任何一個時序模型的電路系統(tǒng)都可以歸結(jié)為一個狀態(tài)機。狀態(tài)機通過時鐘驅(qū)動多個狀態(tài),實現(xiàn)狀態(tài)之間有規(guī)則的跳轉(zhuǎn),來完成復雜的邏輯設計,即可以把電路系統(tǒng)劃分為有限個狀態(tài),在任意一個時刻,系統(tǒng)只能處于有限個狀態(tài)中的一個。當接收到一個輸入事件時,狀態(tài)機能夠產(chǎn)生輸出,同時伴隨著狀態(tài)的轉(zhuǎn)移。有限狀態(tài)機(FSM,F(xiàn)inite State Machine)是一種基本的、簡單的、重要的形式化技術。4 4第6章 狀態(tài)機的設計下面先以一個計數(shù)器的例子從感性上來認識一下有限狀態(tài)機的設計方法。要求設計一個具有異步清零功能的十進制計數(shù)器,能夠完成09的計數(shù),且能夠產(chǎn)生進位信號。本例是一個普通計數(shù)器的設計,可以采用兩種方法
3、:一是IF語句;二是狀態(tài)機。采用IF語句的設計方法在前面的章節(jié)中已經(jīng)多次出現(xiàn),這里不再贅述。5 5第6章 狀態(tài)機的設計采用狀態(tài)機的設計方法對電子系統(tǒng)進行分析設計一般從狀態(tài)轉(zhuǎn)移圖入手。圖6-1所示是十進制計數(shù)器的狀態(tài)轉(zhuǎn)移圖,簡稱狀態(tài)圖。從圖中可以看到,電路系統(tǒng)被劃分為s0s9共10個狀態(tài)。狀態(tài)圖中的每一個圓圈代表一個狀態(tài),在圓圈中顯示的是該狀態(tài)下的輸出,即每一次計數(shù)的結(jié)果q。在時鐘信號clk上升沿時刻,狀態(tài)能夠進行跳轉(zhuǎn)。6 6第6章 狀態(tài)機的設計例如:當前狀態(tài)處于s0態(tài),輸出計數(shù)結(jié)果q為“0000”;當時鐘上升沿到來時,狀態(tài)能夠跳轉(zhuǎn)到s1態(tài),表示計數(shù)一次,輸出計數(shù)結(jié)果q為“0001”。因此,隨著
4、時鐘信號上升沿的不斷到來,狀態(tài)將按照s0s1s2s3s4s5s6s7s8s9s0的順序跳轉(zhuǎn),輸出計數(shù)結(jié)果q也從“0000”到“1001”依次輸出,每10個時鐘周期實現(xiàn)一次循環(huán),從而實現(xiàn)十進制計數(shù)。依照狀態(tài)圖寫出VHDL代碼,具體代碼如例6-1所示。7 7第6章 狀態(tài)機的設計圖6-1 十進制計數(shù)器狀態(tài)轉(zhuǎn)移圖8 8第6章 狀態(tài)機的設計9 9第6章 狀態(tài)機的設計10 10第6章 狀態(tài)機的設計例6-1的L12行定義了一個自定義數(shù)據(jù)類型state,屬于枚舉類型,有s0s9共10個值,分別對應于10個狀態(tài);L13行聲明了兩個信號current_state和next_state,其數(shù)據(jù)類型均為state。因
5、此,信號current_state和next_state的取值范圍在10個狀態(tài)中。11 11第6章 狀態(tài)機的設計例6-1的結(jié)構(gòu)體內(nèi)包含兩個進程:reg和com。reg是一個時序進程,在時鐘的驅(qū)動下,將信號next_state中的內(nèi)容賦值給信號current_state。也就是在時鐘信號clk的每一個上升沿就將次態(tài)賦予現(xiàn)態(tài),但是信號next_state中的次態(tài)究竟是s0s9中的哪一個狀態(tài)并不是該進程關心的問題,該進程只能完成機械的賦值操作。另外,時序進程reg中還定義了異步清零信號reset,當reset=“1”時,立刻回到初態(tài)s0。進程com是一個純組合進程,它決定著在不同狀態(tài)下的輸出計數(shù)結(jié)果
6、q的值以及信號next_state中的具體次態(tài)。十進制計數(shù)器的仿真結(jié)果如圖6-2所示。從圖中可以看到每10個時鐘周期完成一次計數(shù)循環(huán)。12 12第6章 狀態(tài)機的設計圖6-2 十進制計數(shù)器仿真結(jié)果13 13第6章 狀態(tài)機的設計從例6-1可以看出,狀態(tài)機的設計結(jié)構(gòu)一般可分為兩個進程:時序進程和組合進程(見圖6-3)。時序進程由時鐘信號驅(qū)動,時序進程由時鐘信號驅(qū)動,完成狀態(tài)的跳轉(zhuǎn),可以設置如清零或置位等控制信號完成狀態(tài)的跳轉(zhuǎn),可以設置如清零或置位等控制信號(ctl);組;組合進程確定每個狀態(tài)下的輸出和次態(tài),也可由外部輸入控制信合進程確定每個狀態(tài)下的輸出和次態(tài),也可由外部輸入控制信號號(ctl_inp
7、ut)控制不同輸入下的輸出。控制不同輸入下的輸出。14 14第6章 狀態(tài)機的設計圖6-3 典型狀態(tài)機結(jié)構(gòu)示意圖15 15第6章 狀態(tài)機的設計使用狀態(tài)機設計有很多的優(yōu)點,主要表現(xiàn)在以下幾個方面:(1) 表述形式相對固定,程序結(jié)構(gòu)分明,易讀易排錯。(2) 采用靈活的順序控制模型,克服了純硬件數(shù)字系統(tǒng)順序方式控制不靈活的缺點。此外,某些結(jié)構(gòu)的狀態(tài)機能夠較好地解決競爭冒險現(xiàn)象,消除毛刺,性能穩(wěn)定。(3) 能夠利用EDA工具對狀態(tài)機進行一定的優(yōu)化,如綜合器為狀態(tài)選擇合適的編碼方式等。(4) 較CPU運行而言更加快速和可靠。16 16第6章 狀態(tài)機的設計6.2 狀態(tài)機的分類6.2.1 按狀態(tài)個數(shù)分類按照狀
8、態(tài)機的狀態(tài)個數(shù)是否為有限個,狀態(tài)機可分為有限狀態(tài)機(FSM)和無限狀態(tài)機 (Infinite State Machine,ISM)。邏輯設計中一般所涉及的狀態(tài)都是有限的,所以后面的例子都是有限狀態(tài)機。17 17第6章 狀態(tài)機的設計6.2.2 按信號輸出分類按照信號的輸出由什么條件所決定,狀態(tài)機可以分為MOORE型狀態(tài)機和MEALY型狀態(tài)機。MOORE型狀態(tài)機的輸出僅由當前狀態(tài)所決定,而MEALY型狀態(tài)機的輸出由當前狀態(tài)和外部輸入信號共同決定。MOORE型狀態(tài)機和MEALY型狀態(tài)機的結(jié)構(gòu)框圖見圖6-4。由此可知,例6-1的狀態(tài)機屬于MOORE型狀態(tài)機。18 18第6章 狀態(tài)機的設計圖6-4 MO
9、ORE型狀態(tài)機與MEALY型狀態(tài)機的結(jié)構(gòu)框圖19 19第6章 狀態(tài)機的設計6.2.3 按結(jié)構(gòu)分類按結(jié)構(gòu)分是指按照狀態(tài)機描述的結(jié)構(gòu),即進程的數(shù)量和作用來分,狀態(tài)機可分為單進程狀態(tài)機和多進程狀態(tài)機。單進程狀態(tài)機在一個進程內(nèi)完成例6-1所示時序進程和組合進程的所有功能,又稱為一段式。多進程狀態(tài)機最典型的是二段式和三段式,例6-1即為一個典型二段式結(jié)構(gòu)。三段式結(jié)構(gòu)通常將二段式結(jié)構(gòu)中的組合進程再分為兩個進程實現(xiàn),一個進程描述輸出邏輯,另一個進程描述次態(tài)邏輯。三段式結(jié)構(gòu)使各進程的功能更加簡潔明確。2020第6章 狀態(tài)機的設計6.2.4 按狀態(tài)的表達方式分類按狀態(tài)的表達方式來分,狀態(tài)機可分為符號化狀態(tài)機和確
10、定狀態(tài)編碼的狀態(tài)機。符號化狀態(tài)機是以文字符號來代表每一個狀態(tài)的,如例6-1,使用s0s9分別代表10個狀態(tài)。但在實際的電路中,是用一組二進制數(shù)來表示不同的狀態(tài)的,所以綜合器會根據(jù)設計要求的約束條件或優(yōu)化來進行狀態(tài)編碼。當然,也可以在狀態(tài)機設計時就人為地將狀態(tài)編碼確定下來,稱為確定狀態(tài)編碼的狀態(tài)機。21 21第6章 狀態(tài)機的設計不管是綜合器進行的狀態(tài)編碼還是人為確定的狀態(tài)編碼,編碼方式一般包含以下幾種:(1) 直接輸出型編碼,即把狀態(tài)機的狀態(tài)(狀態(tài)的編碼)作為輸出信號。(2) 順序碼(Sequential Encoded)是一種最簡單、最常用的編碼,如8421BCD順序碼,若有n個觸發(fā)器(n位二
11、進制比特),則最多可實現(xiàn)2n個狀態(tài)的編碼。(3) 格雷碼(Gray Encoded),又稱循環(huán)二進制碼,具有反射性和循環(huán)性,任意兩個相鄰的編碼只有一位二進制數(shù)不同。(4) 一位熱碼(One-Hot Encoded),用n個觸發(fā)器來實現(xiàn)n個狀態(tài)的狀態(tài)機,每一個狀態(tài)都有一個特定的觸發(fā)器與之對應。2222第6章 狀態(tài)機的設計假設一個狀態(tài)機有8個狀態(tài),則采用順序碼、格雷碼格雷碼和一一位熱碼編碼位熱碼編碼的示例請參見表6-1。狀態(tài)編碼會在6.5節(jié)中具體講解。1)格雷碼格雷碼一位一位熱碼熱碼編碼編碼的的方法是使用方法是使用N位狀態(tài)寄存器來對位狀態(tài)寄存器來對N個狀態(tài)進行編碼,個狀態(tài)進行編碼,每個狀態(tài)都有它獨
12、立的寄存器位,并且在任意時候,其中只有一位有效每個狀態(tài)都有它獨立的寄存器位,并且在任意時候,其中只有一位有效2)一位熱碼編碼一位熱碼編碼2323第6章 狀態(tài)機的設計2424第6章 狀態(tài)機的設計6.2.5 按與時鐘的關系分類如果狀態(tài)的跳轉(zhuǎn)是由時鐘信號控制的,那么這種狀態(tài)機就稱為同步狀態(tài)機;否則,稱為異步狀態(tài)機。例6-1是一個同步狀態(tài)機。雖然異步狀態(tài)機的速度快于同步狀態(tài)機,但在設計時必須確保不會發(fā)生“競爭”現(xiàn)象,即不會出現(xiàn)一次改變多個狀態(tài)的情況。后面的講解和示例都只討論同步狀態(tài)機。2525第6章 狀態(tài)機的設計6.3 MOORE型狀態(tài)機從前面的講述中已經(jīng)知道,如果按照信號的輸出來分類,狀態(tài)機可分為M
13、OORE型狀態(tài)機和MEALY型狀態(tài)機。 本節(jié)通過一個實例序列檢測器的設計,分析MOORE型多進程狀態(tài)機和單進程狀態(tài)機的區(qū)別。2626第6章 狀態(tài)機的設計6.3.1 一個簡單的MOORE型狀態(tài)機的設計圖6-5所示是一個簡單的MOORE型狀態(tài)機的狀態(tài)圖。由于輸出信號僅由當前狀態(tài)決定,所以可以把輸出值寫在表示狀態(tài)的圓圈中,如:在狀態(tài)s0時,輸出為“0000”;在狀態(tài)s1時,輸出為“0101”。需要注意的是,輸出信號的值和狀態(tài)的編碼是不同的概念,不能混淆(直接輸出型編碼除外)。具體VHDL代碼見例6-2。2727第6章 狀態(tài)機的設計2828第6章 狀態(tài)機的設計2929第6章 狀態(tài)機的設計例6-2中加入
14、了復位控制信號(L17),當reset=“1”時,狀態(tài)回到初始態(tài)s0。由于該信號與時鐘信號clk無關,可以判斷reset信號為異步復位方式。例6-2所示MOORE型狀態(tài)機的仿真結(jié)果見圖6-6。在此,除添加了輸入、輸出節(jié)點外,還通過Node Finder窗口在Filter欄選擇Design Entry(all names)把表示當前狀態(tài)的信號cs也加入到觀察波形中??梢钥吹皆诘?個時鐘下降沿,當控制信號ctl由“0”變?yōu)椤?”時,輸出q并不是馬上發(fā)生變化,而是等到第3個時鐘脈沖上升沿到來后才發(fā)生變化。 3030第6章 狀態(tài)機的設計這是因為雖然ctl由“0”變“1”可以觸發(fā)組合進程com,但由于信
15、號cs仍然為s0態(tài),執(zhí)行L25L28行。雖然信號ns變?yōu)閟1態(tài),但是此時的輸出q仍然是“0000”,信號cs仍然是s0態(tài);當時鐘上升沿到來后,時序進程reg被觸發(fā),信號ns賦值給信號cs,才能導致信號cs發(fā)生變化(由s0態(tài)變?yōu)閟1態(tài)),進而再次導致組合進程com的觸發(fā)。此時,由于信號cs為s1態(tài),所以執(zhí)行L29L32行,使得輸出q變?yōu)椤?101”。當reset=“1”時,信號cs立刻回到初態(tài)s0,輸出q立刻變?yōu)椤?000”,與時鐘信號無關。31 31第6章 狀態(tài)機的設計圖6-6 例6-2MOORE型狀態(tài)機仿真結(jié)果3232第6章 狀態(tài)機的設計設計者還可以通過菜單ToolsNetlist View
16、ersState Machine Viewer來觀察當前設計的狀態(tài)機的狀態(tài)圖以及跳轉(zhuǎn)條件、狀態(tài)編碼等,如圖6-7所示。3333第6章 狀態(tài)機的設計圖6-7 例6-2的狀態(tài)圖、跳轉(zhuǎn)條件及狀態(tài)編碼3434第6章 狀態(tài)機的設計6.3.2 序列檢測器的多進程狀態(tài)機設計設計一個序列檢測器,可用于檢測一組串行輸入的二進制代碼序列。假設當連續(xù)檢測到4個1后,輸出為高電平“1”;其余情況輸出均為低電平“0”。3535第6章 狀態(tài)機的設計由于狀態(tài)機的分析和設計都需要從狀態(tài)轉(zhuǎn)移圖入手,所以,本例的第一步是根據(jù)設計要求確定狀態(tài)的數(shù)量以及跳轉(zhuǎn)的條件。圖6-8是根據(jù)設計要求繪出的狀態(tài)圖,一共分為s0s4共5個狀態(tài)。初始
17、時,狀態(tài)處于初態(tài)s0,如果輸入的二進制代碼序列一直都是“0”,則停留在s0態(tài),輸出為“0”;當輸入第一個二進制代碼“1”時,跳轉(zhuǎn)到s1態(tài),輸出仍然為“0”;當輸入第二個二進制代碼“1”時,繼續(xù)跳轉(zhuǎn)到s2態(tài),輸出為“0”;當輸入第三個“1”時,跳轉(zhuǎn)到s3態(tài),輸出為“0”;直到連續(xù)輸入4個“1”后,進入s4態(tài),輸出高電平“1”。在任意一個狀態(tài)下,如果下一次輸入的二進制代碼是“0”,狀態(tài)都將回到初始狀態(tài)s0,重新開始對輸入“1”的數(shù)量進行計數(shù)。具體代碼見例6-3。3636第6章 狀態(tài)機的設計圖6-8 序列檢測器狀態(tài)圖3737第6章 狀態(tài)機的設計3838第6章 狀態(tài)機的設計3939第6章 狀態(tài)機的設計
18、4040第6章 狀態(tài)機的設計例6-3所示二段式序列檢測器的仿真結(jié)果見圖6-9。從圖中可以看到,當信號reset=“1”時,狀態(tài)立即回到s0態(tài),reset屬于異步復位信號。當連續(xù)輸入4個“1”時,狀態(tài)從s0一直跳轉(zhuǎn)到s4態(tài),輸出q=“1”;當?shù)?個“1”輸入時,狀態(tài)仍然在s4態(tài),輸出“1”。如果輸入兩個“1”后,下一次輸入為“0”,則狀態(tài)回到s0態(tài),重新開始對“1”進行計數(shù)。41 41第6章 狀態(tài)機的設計圖6-9 例6-3多進程序列檢測器仿真結(jié)果4242第6章 狀態(tài)機的設計如果把例6-3的二段式結(jié)構(gòu)改為三段式結(jié)構(gòu),則需要將例6-3中的組合進程分為兩個進程:一個實現(xiàn)信號的輸出邏輯;另一個實現(xiàn)次狀態(tài)
19、的邏輯,具體代碼如例6-4所示。三段式結(jié)構(gòu)使程序結(jié)構(gòu)更加清晰,功能分工更加明確。4343第6章 狀態(tài)機的設計4444第6章 狀態(tài)機的設計4545第6章 狀態(tài)機的設計6.3.3 序列檢測器的單進程狀態(tài)機設計如前所述,單進程狀態(tài)機就是將所有要實現(xiàn)的功能都放在一個進程中完成。序列檢測器的單進程狀態(tài)機設計示例見例6-5。由于實體部分定義一致,這里只給出了結(jié)構(gòu)體部分。4646第6章 狀態(tài)機的設計4747第6章 狀態(tài)機的設計4848第6章 狀態(tài)機的設計例6-5所示單進程序列檢測器的仿真結(jié)果見圖6-10。比較圖6-9和圖6-10,二者的輸入激勵完全一致,但單進程的輸出信號q卻延遲了一個時鐘周期。單進程狀態(tài)機
20、的一個顯著特點是用時鐘信號同步輸出信號,使得輸出延時。從另一個角度講,輸出的延時使得“毛刺”得到了消除。單進程和多進程狀態(tài)機的特點及比較可參見本書配套的實驗指導書中第2章實驗6的內(nèi)容。4949第6章 狀態(tài)機的設計圖6-10 例6-5單進程序列檢測器仿真結(jié)果5050第6章 狀態(tài)機的設計6.4 MEALY型狀態(tài)機MEALY型狀態(tài)機的輸出由當前狀態(tài)和外部輸入信號共同決定。下面以一個簡單的例子來講解MEALY型狀態(tài)機,并比較MOORE型狀態(tài)機和MEALY型狀態(tài)機的特點。51 51第6章 狀態(tài)機的設計圖6-11是一個簡單MEALY型狀態(tài)機的狀態(tài)圖。從圖中可以發(fā)現(xiàn),輸出信號標示在狀態(tài)變遷處(即箭頭處),而
21、不是在圓圈中。這是由于MEALY型狀態(tài)機的輸出除了與當前狀態(tài)相關外,還與輸入信號有關。如:在狀態(tài)s0時,如果外部輸入信號為“0”,則仍然處于s0態(tài),輸出“0000”;如果外部輸入信號為“1”,則跳轉(zhuǎn)到s1態(tài),輸出“0101”。構(gòu)造MEALY型狀態(tài)機的方法與MOORE型狀態(tài)機基本相同,只是組合進程中的輸出信號是當前狀態(tài)和輸入信號的函數(shù)。具體代碼見例6-6。5252第6章 狀態(tài)機的設計圖6-11 簡單MEALY型狀態(tài)機狀態(tài)圖5353第6章 狀態(tài)機的設計5454第6章 狀態(tài)機的設計5555第6章 狀態(tài)機的設計5656第6章 狀態(tài)機的設計圖6-12 例6-6多進程MEALY型狀態(tài)機狀態(tài)圖利用觀察器觀察
22、到的狀態(tài)圖與例6-2完全一致,如圖6-12所示。5757第6章 狀態(tài)機的設計例6-6所示MEALY型狀態(tài)機的仿真結(jié)果見圖6-13。在第2個時鐘脈沖下降沿,當輸入信號ctl發(fā)生變化(“0”“1”)時,輸出q立即變化(執(zhí)行L25),輸出“0101”,信號ns變?yōu)閟1態(tài),但cs仍然是s0態(tài)。當?shù)?個時鐘上升沿到來時,觸發(fā)時序進程reg,信號cs被賦值s1。由于cs的變化,再次觸發(fā)組合進程com,執(zhí)行L28,輸出“1010”。隨后在第4個時鐘上升沿到來前,輸入信號ctl已變?yōu)椤?”,執(zhí)行L29,輸出“0101”。比較圖6-13和圖6-6,二者的輸入激勵設置完全相同,但MEALY型狀態(tài)機的輸出q卻比MO
23、ORE型狀態(tài)機的輸出q領先,即一旦輸入信號或狀態(tài)發(fā)生變化,MEALY型狀態(tài)機的輸出信號就立刻發(fā)生變化。5858第6章 狀態(tài)機的設計圖6-13 例6-6多進程MEALY型狀態(tài)機仿真結(jié)果5959第6章 狀態(tài)機的設計MOORE型狀態(tài)機屬于同步輸出狀態(tài)機,其輸出僅為當前狀態(tài)的函數(shù),輸出發(fā)生變化必須等待時鐘的到來;MEALY型狀態(tài)機屬于異步輸出狀態(tài)機,輸出是當前狀態(tài)和輸入信號的函數(shù),只要輸入發(fā)生變化就能立即觸發(fā)輸出的變化,輸出不依賴時鐘的同步。MEALY型狀態(tài)機也可寫為單進程結(jié)構(gòu),即用時鐘信號將輸出加載到觸發(fā)器中,在輸出端得到的信號要比多進程MEALY型狀態(tài)機晚一個時鐘周期,因而消除了“毛刺”。6060
24、第6章 狀態(tài)機的設計6.5 狀態(tài)編碼和剩余狀態(tài)處理雖然對狀態(tài)的編碼并不會影響狀態(tài)機的功能,但是不同的狀態(tài)編碼會導致占用器件資源的不同。設計者沒有必要在VHDL代碼中直接對狀態(tài)的編碼做出規(guī)定,因為綜合器能夠根據(jù)約束和優(yōu)化條件在綜合過程中確定編碼。當然,為滿足一些特殊需要,也可以在狀態(tài)機的設計中將各狀態(tài)用具體的二進制數(shù)來定義,即直接編碼方式。61 61第6章 狀態(tài)機的設計6.5.1 狀態(tài)編碼常用的狀態(tài)編碼有直接輸出型編碼、順序碼、格雷碼、一位熱碼、隨機碼等。1直接輸出型編碼直接輸出型編碼即狀態(tài)的輸出值與狀態(tài)的編碼一致,是狀態(tài)機的一種特殊類型。如圖6-14所示狀態(tài)機,如果把每個狀態(tài)圓圈中的輸出值當做
25、每個狀態(tài)的編碼,就是直接輸出型編碼。實際上,直接輸出型編碼的狀態(tài)機就是一種特殊的MOORE型狀態(tài)機。具體VHDL代碼見例6-7。6262第6章 狀態(tài)機的設計圖6-14 直接輸出型編碼狀態(tài)機的狀態(tài)圖6363第6章 狀態(tài)機的設計【例6-7】6464第6章 狀態(tài)機的設計6565第6章 狀態(tài)機的設計例6-7編譯后的仿真結(jié)果如圖6-15所示。從圖中可以看到,狀態(tài)的編碼與輸出q完全一致。例6-7其實是一個2位二進制計數(shù)器,這類編碼最典型的應用就是計數(shù)器。也可以采用在第4章中提到過的自定義屬性語句來定義狀態(tài)的編碼,見例6-8。6666第6章 狀態(tài)機的設計圖6-15 例6-7直接輸出型編碼仿真結(jié)果6767第6
26、章 狀態(tài)機的設計【例6-8】TYPE state IS (s0, s1, s2, s3);ATTRIBUTE enmu_encoding : STRING;ATTRIBUTE enmu_encoding OF state: TYPE IS “00 01 10 11”;SIGNAL st : state;把圖6-5所示MOORE型狀態(tài)機采用直接輸出型編碼方式,則代碼如例6-9所示。6868第6章 狀態(tài)機的設計 6969第6章 狀態(tài)機的設計7070第6章 狀態(tài)機的設計例6-9編譯后會出現(xiàn)圖6-16所示錯誤,提示CASE語句的選擇值沒有覆蓋所有的可能取值。觀察代碼L11L14,采用了4位二進制數(shù)為狀
27、態(tài)編碼,4位二進制數(shù)共有16種可能的取值組合,而由于本例的狀態(tài)個數(shù)只有4個,只用到了其中的4種組合。所以,導致剩下12種可能的取值組合在CASE語句的選擇值中并沒有出現(xiàn),這就是剩余狀態(tài)。改正的方法可以在L33行后加上語句“WHEN OTHERS = st = s0”,將所有剩余狀態(tài)都指回初態(tài)s0。有關剩余狀態(tài)的問題將在6.5.2節(jié)中進一步講述。71 71第6章 狀態(tài)機的設計圖 6-16 例6-9錯誤信息7272第6章 狀態(tài)機的設計2順序碼、格雷碼和一位熱碼順序碼(二進制碼)的編碼方式最為簡單,如例6-7所示編碼方式。采用順序碼編碼,n個觸發(fā)器最多可編碼的狀態(tài)個數(shù)是2n個。順序碼使用的觸發(fā)器數(shù)量
28、少,剩余狀態(tài)數(shù)量最少;但是可能產(chǎn)生兩位同時翻轉(zhuǎn)的現(xiàn)象(如:“01”“10”),增加了狀態(tài)轉(zhuǎn)化的譯碼組合邏輯,適用于組合邏輯資源相對豐富的器件。7373第6章 狀態(tài)機的設計格雷碼的編碼方式是每次僅一個狀態(tài)位的值發(fā)生變化,同時具有反射性和循環(huán)性,如:s0=“00”,s1=“01”,s2=“11”,s3=“10”。二進制碼轉(zhuǎn)化為格雷碼的方式是:從最右邊一位起,依次將每一位與左邊一位異或(XOR),作為對應格雷碼該位的值;最左邊一位與0相異或。7474第6章 狀態(tài)機的設計一位熱碼編碼方式中,每一個狀態(tài)采用一個觸發(fā)器,如有2個狀態(tài)需要2個觸發(fā)器,有4個狀態(tài)則需要4個觸發(fā)器,有n個狀態(tài)就需要n個觸發(fā)器。如
29、果例6-7采用了一位熱碼編碼方式,則s0=“1000”,s1=“0100”,s2=“0010”,s3=“0001”,剩余狀態(tài)數(shù)量有12個。一位熱碼編碼使用的觸發(fā)器數(shù)量最多,導致剩余狀態(tài)數(shù)量也最多;但它簡化了狀態(tài)譯碼邏輯,提高了狀態(tài)的轉(zhuǎn)化速度,適合于觸發(fā)器資源豐富的器件。表6-2顯示了一個有5個狀態(tài)的狀態(tài)機在采用不同編碼方式后的有效狀態(tài)和剩余狀態(tài)個數(shù)。7575第6章 狀態(tài)機的設計7676第6章 狀態(tài)機的設計在設計狀態(tài)機時,需要根據(jù)實際情況進行狀態(tài)編碼的選擇。一般而言,如果狀態(tài)較多,則選擇順序碼或格雷碼;如果器件觸發(fā)器資源豐富,如FPGA器件,則可以選擇一位熱碼。除例6-7和例6-8采用的是在VH
30、DL代碼中直接指定狀態(tài)編碼的方式外,還可以在軟件中設置編碼方式。選擇菜單AssignmentsSettings,打開設置對話框,在目錄欄Category中選擇Analysis & Synthesis Setting,出現(xiàn)分析與綜合設置窗口,點擊More Settings,彈出如圖6-17所示窗口。在Name欄中選擇State Machine Processing,則在其下的Setting欄中有各種編碼方式可以選擇。對于FPGA器件而言,Quartus默認的編碼方式(Auto)是一位熱碼。7777第6章 狀態(tài)機的設計圖6-17 設置狀態(tài)機編碼方式7878第6章 狀態(tài)機的設計6.5.2 剩
31、余狀態(tài)的處理在狀態(tài)機的設計中,無論使用符號化狀態(tài)機還是使用直接指定狀態(tài)編碼的狀態(tài)機,都不可避免地會出現(xiàn)大量剩余的狀態(tài),這些狀態(tài)在狀態(tài)機的正常運行中是不需要出現(xiàn)的,又稱為非法狀態(tài)。如果狀態(tài)機由于某種故障或干擾進入了非法狀態(tài),就有可能因無法擺脫非法狀態(tài)而失去正常工作的功能。因此,必須對狀態(tài)機的剩余狀態(tài)進行處理,以保證狀態(tài)機設計的安全性和穩(wěn)定性。當然,對剩余狀態(tài)的處理會耗費器件的邏輯資源,并且不同的處理方法耗費的程度不同。7979第6章 狀態(tài)機的設計一般來說,可以采用以下幾種方法對剩余狀態(tài)進行處理:(1) 由CASE語句中的WHEN OTHERS分支決定。例6-10使用OTHERS分支將剩余狀態(tài)指向
32、初態(tài)。當然,也可以把剩余狀態(tài)指向?qū)iT用于處理錯誤的狀態(tài)。但不幸的是,并非所有綜合器都支持OTHERS分支,或者對于不同的綜合器,WHEN OTHERS的功能也并非一致。8080第6章 狀態(tài)機的設計81 81第6章 狀態(tài)機的設計(2) 使用VHDL語言明確定義每一狀態(tài)下的行為。當上述WHEN OTHERS語句的不幸情況出現(xiàn)時,還可以采用將每一個非法狀態(tài)都明確確定其行為的方法,如例6-11所示。其中s5、s6、s7是非法狀態(tài)。該方法的優(yōu)點是直觀可靠,但缺點是可處理的非法狀態(tài)有限。如果非法狀態(tài)數(shù)量過多,則耗費的器件邏輯資源太多。8282第6章 狀態(tài)機的設計8383第6章 狀態(tài)機的設計6.6 利用Qu
33、artus軟件的圖形化工具設計狀態(tài)機1新建狀態(tài)機設計文件選擇菜單FileNew,打開如圖6-18所示的新建文件窗口,選擇State Machine File,則打開一個新建的以.smf為后綴的文件,見圖6-19。圖6-18 新建文件窗口8484第6章 狀態(tài)機的設計圖6-19 狀態(tài)機圖形編輯窗口8585第6章 狀態(tài)機的設計2通過新建狀態(tài)機向?qū)нM行參數(shù)的設置選擇菜單ToolsState Machine Wizard,或者是圖6-19中的快捷方式,即可打開圖6-20所示窗口。圖6-20 新建或修改已有狀態(tài)機設計8686第6章 狀態(tài)機的設計選擇新建一個狀態(tài)機設計,進入圖6-21所示窗口,設置復位信號r
34、eset為異步復位方式、高電平有效。圖6-21 設置復位信號reset的相關參數(shù)8787第6章 狀態(tài)機的設計點擊Next后進入圖6-22所示窗口,設置狀態(tài)數(shù)量、輸入信號以及跳轉(zhuǎn)條件。其中有state1state5共5個狀態(tài),輸入信號有時鐘信號clock、復位信號reset以及待輸入的串行二進制序列d。可以根據(jù)具體設計要求通過在Transition處輸入轉(zhuǎn)移條件來實現(xiàn)狀態(tài)間的跳轉(zhuǎn),如簡單的高低電平、取反(d)、相與(a & b)等。本例只需要設置原變量和反變量兩種條件即可,當然,也可以使用OTHERS來代表其他條件。8888第6章 狀態(tài)機的設計圖6-22 設置狀態(tài)跳轉(zhuǎn)條件等參數(shù)8989第
35、6章 狀態(tài)機的設計點擊Next,進入狀態(tài)機輸出的設置,見圖6-23。只有在狀態(tài)state5時,輸出才為高電平。當然,也可以進行MEALY型狀態(tài)機的設置,但需要設置附加條件(Additional Conditions)。圖6-23 設置狀態(tài)機的輸出9090第6章 狀態(tài)機的設計再次點擊Next,彈出圖6-24所示窗口,總結(jié)狀態(tài)機的設置情況。點擊Finish確認設置無誤,即可關閉狀態(tài)機設計向?qū)?,在編輯窗口中出現(xiàn)狀態(tài)圖,如圖6-25所示。圖6-24 總結(jié)狀態(tài)機的設置情況91 91第6章 狀態(tài)機的設計圖6-25 設置完成后的狀態(tài)圖9292第6章 狀態(tài)機的設計3保存文件將設計文件保存在文件夾內(nèi),可命名為s
36、tring_d.smf,注意后綴名是.smf。4生成對應的HDL文件選擇菜單ToolsGenerate HDL File,彈出圖6-26所示窗口,可以選擇的HDL語言有三種,本例選擇VHDL,可生成與狀態(tài)機設計文件具有相同名字的VHDL設計文件,即string_d.vhd。需要注意的是,必須在狀態(tài)機編輯窗口打開的情況下才能夠進行語言文件的轉(zhuǎn)換。9393第6章 狀態(tài)機的設計圖6-26 選擇需要生成的HDL語言9494第6章 狀態(tài)機的設計5仿真驗證將string_d.vhd文件置頂后編譯,可以按照與普通設計相同的方法進行波形的仿真。本例仿真結(jié)果見圖6-27。圖6-27 序列檢測器仿真結(jié)果9595第
37、6章 狀態(tài)機的設計6.7 狀態(tài)機設計實例6.6.1 八進制約翰遜計數(shù)器的設計1設計要求設計一個八進制約翰遜計數(shù)器,計滿后能夠產(chǎn)生進位信號,使用數(shù)碼管顯示計數(shù)結(jié)果,發(fā)光二極管顯示進位信號。9696第6章 狀態(tài)機的設計2設計方案整體設計可分為兩個模塊:計數(shù)模塊和顯示模塊。(1) 計數(shù)模塊。由前面章節(jié)的講述可知,計數(shù)器是典型的MOORE型狀態(tài)機。那么,什么是約翰遜計數(shù)器呢?一般的二進制計數(shù)器或十進制計數(shù)器,由于在每次計數(shù)時常有不止一位的觸發(fā)器發(fā)生翻轉(zhuǎn)(如“0111”“1000”),以致發(fā)生競爭冒險現(xiàn)象,產(chǎn)生不必要的毛刺,可能造成錯誤的譯碼信號。為了消除這種干擾,提出了一種在每次計數(shù)時僅有一位觸發(fā)器發(fā)
38、生翻轉(zhuǎn)的計數(shù)器,即約翰遜計數(shù)器。八進制約翰遜計數(shù)器的狀態(tài)圖如圖6-28所示。9797第6章 狀態(tài)機的設計圖6-28 八進制約翰遜計數(shù)器狀態(tài)圖9898第6章 狀態(tài)機的設計可以看到,隨著時鐘上升沿的不斷到來,狀態(tài)將按照s0s1s2s3s4s5s6s7s0的順序跳轉(zhuǎn),每8個時鐘周期實現(xiàn)一次循環(huán),從而實現(xiàn)八進制計數(shù)器。由于每個狀態(tài)下的輸出分別是:“0000”(0)、“0001”(1)、“0011”(3)、“0111”(7)、“1111”(F)、“1110”(E)、“1100”(C)、“1000”(8),所以滿足約翰遜計數(shù)器每次計數(shù)時只有一位觸發(fā)器發(fā)生翻轉(zhuǎn)的要求。具體VHDL代碼見例6-12。9999第
39、6章 狀態(tài)機的設計100100第6章 狀態(tài)機的設計101101第6章 狀態(tài)機的設計(2) 顯示模塊。采用共陰數(shù)碼管完成計數(shù)結(jié)果的譯碼和顯示。具體VHDL代碼見例6-13。102102第6章 狀態(tài)機的設計103103第6章 狀態(tài)機的設計(3) 頂層文件。采用元件例化語句完成頂層文件。具體代碼見例6-14。104104第6章 狀態(tài)機的設計105105第6章 狀態(tài)機的設計3結(jié)果驗證圖6-29是八進制約翰遜計數(shù)器模塊仿真結(jié)果。由圖6-29可以看到,當信號reset=“0”時,計數(shù)器清零;計數(shù)器計數(shù)到1000后,進位信號cout=“1”。 圖6-30是頂層文件仿真結(jié)果。106106第6章 狀態(tài)機的設計圖6-29 八進制約翰遜計數(shù)器模塊仿真結(jié)果107107第6章 狀態(tài)機的設計圖6-30 頂層文件仿真結(jié)果108108第6章 狀態(tài)機的設計仿真結(jié)果無誤后,選擇EDA綜合實驗箱模式5,進行引腳鎖定(見表6-3),即可在實驗箱上觀察到硬件驗證的結(jié)果。109109第6章 狀態(tài)機的設計110110第6章 狀態(tài)機的設計6.6.2 彩燈控制器的設計1設計要求設計一個彩燈控制器,使8個LED燈能夠按照預先設定好的規(guī)律閃爍。設置控制按鍵sel,當sel按下時,8個LED燈從左邊向右邊依次閃爍;否則,8個LE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 預防職業(yè)病教學課件
- 新生兒肺炎表現(xiàn)及預防
- 《電子產(chǎn)品制造技術》課件-第2章 印制電路板認知
- 沖床維修培訓
- 順利消防2023課件
- 項目現(xiàn)場安全課件
- 《道路勘測設計》課件-第三章 平面設計
- 音樂律動介紹課件
- 汽車配套產(chǎn)業(yè)基地項目風險管理方案(范文)
- 城市污水管網(wǎng)建設工程投資估算方案(模板)
- 預防艾滋病、梅毒和乙肝母嬰傳播相關報表、上報流程和要求
- 《鐵路技術管理規(guī)程》(普速鐵路部分)-14年新版
- 食用油儲存期品質(zhì)變化的太赫茲光譜無損識別
- 胎盤早剝預案演練腳本
- 五山文學全集第一卷
- 聚磷腈功能高分子材料的合成及應用
- 中國鐵路總公司《鐵路技術管理規(guī)程》(高速鐵路部分)2014年7月
- 鈣加維生素Dppt課件(PPT 14頁)
- TRD深基坑止水帷幕施工方案(22頁)
- 八少八素初試甄別試題
- 企業(yè)組織架構(gòu)圖模板
評論
0/150
提交評論