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