第七章有限狀態(tài)機的設(shè)計_第1頁
第七章有限狀態(tài)機的設(shè)計_第2頁
第七章有限狀態(tài)機的設(shè)計_第3頁
第七章有限狀態(tài)機的設(shè)計_第4頁
第七章有限狀態(tài)機的設(shè)計_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章

有限狀態(tài)機的設(shè)計主要內(nèi)容狀態(tài)機的概述

概念、優(yōu)點、分類MOORE(摩爾)型狀態(tài)機MEALY(米利)型狀態(tài)機狀態(tài)編碼非法狀態(tài)一、什么是狀態(tài)機?先看一個例子—設(shè)計一個六進制約翰遜計數(shù)器什么叫做約翰遜計數(shù)器?

一般的二進制計數(shù)器或十進制計數(shù)器,由于在每次計數(shù)時常有不止一位觸發(fā)器翻轉(zhuǎn),以至于發(fā)生競爭冒險現(xiàn)象,造成誤譯動作.為了消除這種干擾,采用每次僅有一位觸發(fā)器反轉(zhuǎn)的計數(shù)器,稱為約翰遜計數(shù)器一、什么是狀態(tài)機?(續(xù)1)libraryieee;useieee.std_logic_1164.all;entityjh_cntis port(clk,reset:instd_logic; q:outstd_logic_vector(3downto0));end;architectureoneofjh_cntis typestateis(s0,s1,s2,s3,s4,s5); signalcurrent_state,next_state:state;beginreg:process(clk,reset)begin ifreset='1'thencurrent_state<=s0; elsifclk'eventandclk='1'then current_state<=next_state; endif;endprocess;自定義數(shù)據(jù)類型state,枚舉類型主控時序進程在時鐘驅(qū)動下,負責(zé)狀態(tài)轉(zhuǎn)換,但是不負責(zé)下一狀態(tài)的具體狀態(tài)取值一、什么是狀態(tài)機?(續(xù)2)com:process(current_state)begin casecurrent_stateis whens0=>q<="0000";next_state<=s1; whens1=>q<="0001";next_state<=s2; whens2=>q<="0011";next_state<=s3; whens3=>q<="0111";next_state<=s4; whens4=>q<="0110";next_state<=s5; whens5=>q<="0100";next_state<=s0; endcase;endprocess;end;主控組合進程純組合電路,決定每一狀態(tài)下的輸出和下一狀態(tài)的具體取值一、什么是狀態(tài)機?(續(xù)3)就理論而言,任何一個時序模型的電路系統(tǒng)都可以歸結(jié)為一個狀態(tài)機。把該電路系統(tǒng)分為有限個狀態(tài)。在任意時刻,只能處于有限狀態(tài)中的一個,在接受到一個輸入事件時,狀態(tài)機產(chǎn)生一個輸出,同時伴隨著狀態(tài)的轉(zhuǎn)移。有限狀態(tài)機(FSM,F(xiàn)initeStateMachine)是一種基本的、簡單的、重要的形式化技術(shù)。是數(shù)字邏輯的另一種表示方法與一種設(shè)計思想。VHDL程序設(shè)計的FSM有如下優(yōu)點:設(shè)計方案相對固定,程序?qū)哟畏置?,結(jié)構(gòu)清晰,特別是可以定義為符號化枚舉類型的狀態(tài),使VHDL綜合器對狀態(tài)機具有很大的優(yōu)化功能。

容易構(gòu)成性能良好的同步時序模塊,容易消除電路中的毛刺現(xiàn)象。由純硬件組成,工作方式是根據(jù)控制信號按照預(yù)先設(shè)定的狀態(tài)進行順序運行,使其運行速度和可靠性較好。

二、狀態(tài)機的分類按照不同的分類方法有不同類型的狀態(tài)機按狀態(tài)機的信號輸出方式分MOORE型狀態(tài)機MEALY型狀態(tài)機輸出由當(dāng)前狀態(tài)所決定輸出由當(dāng)前狀態(tài)和輸入共同決定二、狀態(tài)機的分類(續(xù)1)按結(jié)構(gòu)分單進程狀態(tài)機(一段式)多進程狀態(tài)機(兩段式、三段式)主控時序進程主控組合進程決定下一狀態(tài)的具體取值每一個狀態(tài)的輸出二、狀態(tài)機的分類(續(xù)2)按狀態(tài)的表達方式上分符號化狀態(tài)機以文字符號代表每一個狀態(tài),在實際電路中是以二進制組合來表示,由綜合器根據(jù)優(yōu)化情況來確定編碼確定狀態(tài)編碼的狀態(tài)機在定義狀態(tài)時,就人為的將狀態(tài)的編碼確定下來,可以采用的編碼形式有:狀態(tài)位直接輸出型編碼、順序碼、格雷碼、一位熱碼等例:CONSTANTs0:std_logic_vector(1downtown0):=“00”;CONSTANTs1:std_logic_vector(1downtown0):=“01”;CONSTANTs2:std_logic_vector(1downtown0):=“10”;二、狀態(tài)機的分類(續(xù)3)按時鐘分同步輸出狀態(tài)機由時鐘信號控制異步輸出狀態(tài)機沒有經(jīng)過時鐘而直接輸出一般情況下,速度快于同步狀態(tài)機,僅僅檔狀態(tài)機的性能要求高時,才選擇三、MOORE型狀態(tài)機輸出僅和狀態(tài)有關(guān),因此狀態(tài)機的輸出信號就寫在表示狀態(tài)的圓圈之中。狀態(tài)轉(zhuǎn)移圖例1:實現(xiàn)下圖所示狀態(tài)機設(shè)計三、MOORE型狀態(tài)機(續(xù)1)entityd2mooreisport(clk,a,reset:instd_logic;q:outstd_logic_vector(3downto0));end;p0:process(reset,clk)beginifreset='1'thencurrent_state<=st0;elsifclk'eventandclk='1'thencurrent_state<=next_state;endif;endprocess;p1:process(current_state)begincasecurrent_stateiswhenst0=>q<="0000";whenst1=>q<="1001";whenst2=>q<="1100";whenst3=>q<="1111";endcase;endprocess;時鐘上升沿到來時,完成狀態(tài)轉(zhuǎn)移決定每一狀態(tài)下的輸出三、MOORE型狀態(tài)機(續(xù)2)p2:process(current_state,a)begincasecurrent_stateiswhenst0=>ifa='1'thennext_state<=st1;elsenext_state<=st0;endif;whenst1=>ifa='0'thennext_state<=st2;elsenext_state<=st1;endif;whenst2=>ifa='1'thennext_state<=st3;elsenext_state<=st2;endif;whenst3=>ifa='0'thennext_state<=st0;elsenext_state<=st3;endif;endcase;endprocess;end;決定下一狀態(tài)的具體取值三段式、MOORE型狀態(tài)機返回三、MOORE型狀態(tài)機(續(xù)3)由軟件自動生成狀態(tài)轉(zhuǎn)移圖TOOLS—NETLISTVIEWERS三、MOORE型狀態(tài)機(續(xù)4)三、MOORE型狀態(tài)機(續(xù)5)波形仿真結(jié)果異步復(fù)位三、MOORE型狀態(tài)機(續(xù)6)architectureoneofd1mooreistypestypeis(st0,st1,st2,st3);signalstate:stype;beginp0:process(reset,clk)beginifreset='1'thenstate<=st0;elsifclk'eventandclk='1'thencasestateiswhenst0=>q<="0000";ifa='1'thenstate<=st1;elsestate<=st0;endif;whenst1=>q<="1001";ifa='0'thenstate<=st2;elsestate<=st1;endif;whenst2=>q<="1100";ifa='1'thenstate<=st3;elsestate<=st2;endif;whenst2=>q<="1100";ifa='1'thenstate<=st3;elsestate<=st2;endif;whenst3=>q<="1111";ifa='0'thenstate<=st0;elsestate<=st3;endif;endcase;endif;endprocess;end;返回返回1三、MOORE型狀態(tài)機(續(xù)7)單進程MOORE狀態(tài)機多進程MOORE狀態(tài)機next_state<=st1current_state<=st1q<=“1001”q<=“0000”state<=st1;示例示例三、MOORE型狀態(tài)機(續(xù)8)單進程MOORE狀態(tài)機多進程MOORE狀態(tài)機毛刺三、MOORE型狀態(tài)機(續(xù)9)總結(jié)單進程狀態(tài)機的特點輸出端得到的信號值要比多進程晚一個時鐘周期能夠減少輸出信號波形的毛刺現(xiàn)象四、MEALY型狀態(tài)機例2:實現(xiàn)下圖所示狀態(tài)機設(shè)計輸出由當(dāng)前狀態(tài)和輸入信號決定,所以輸出信號寫在箭頭轉(zhuǎn)移處四、MEALY型狀態(tài)機(續(xù)1)architectureoneofd2mealyis typestypeis(st0,st1,st2,st3); signalstate:stype;beginreg:process(reset,clk)begin ifreset='1'thenstate<=st0; elsifclk'eventandclk='1'then casestateis whenst0=>ifa='1'thenstate<=st1;endif; whenst1=>ifa='0'thenstate<=st2;endif; whenst2=>ifa='1'thenstate<=st3;endif; whenst3=>ifa='0'thenstate<=st0;endif; endcase; endif;endprocess;在時鐘信號控制下,決定下一狀態(tài)四、MEALY型狀態(tài)機(續(xù)2)com:process(state,a)begin casestateis whenst0=>ifa='1'thenq<="1001"; elseq<="0000";endif; whenst1=>ifa='0'thenq<="1100"; elseq<="1001";endif; whenst2=>ifa='1'thenq<="1111";elseq<="1100";endif; whenst3=>ifa='0'thenq<="0000";elseq<="1111";endif; endcase;endprocess;end;根據(jù)狀態(tài)和輸入信號控制輸出輸出信號q由當(dāng)前狀態(tài)和輸入信號共同決定,與時鐘無關(guān)返回四、MEALY型狀態(tài)機(續(xù)3)MEALY型狀態(tài)機MOORE型狀態(tài)機示例示例四、MEALY型狀態(tài)機(續(xù)4)總結(jié)MEALY型狀態(tài)機和MOORE型狀態(tài)機的特點狀態(tài)轉(zhuǎn)化輸出信號與時鐘信號的關(guān)系MOOREMEALY由輸入決定由輸入決定由當(dāng)前狀態(tài)決定由當(dāng)前狀態(tài)和輸入決定與時鐘信號同步不依賴于時鐘,只要輸入變化,輸出能夠立即變化Moore和mealy狀態(tài)機

從信號輸出方式上分,有Moore和mealy狀態(tài)機。

Moore狀態(tài)機,輸出僅為當(dāng)前狀態(tài)的函數(shù);在輸入發(fā)生變化時,雖然能確定下一個狀態(tài)的去向,但還須等待下一個時鐘到來,才能使?fàn)顟B(tài)發(fā)生變化時,以導(dǎo)致輸出的變化。因此從時序上看屬異步輸出的狀態(tài)機。

mealy狀態(tài)機,輸出是當(dāng)前狀態(tài)和所有輸入信號的函數(shù);在輸入發(fā)生變化時,輸出立即發(fā)生變化。從時序上看屬同步輸出的狀態(tài)機。五、狀態(tài)編碼為了滿足一些特殊需要,可直接將各狀態(tài)用具體的二進制數(shù)進行定義,即狀態(tài)機的直接編碼。狀態(tài)位直接輸出型編碼順序編碼格雷碼(Gray)編碼一位熱碼(one-hot)編碼五、狀態(tài)編碼(續(xù)1)1、狀態(tài)為直接輸出型編碼直接把狀態(tài)機的狀態(tài)編碼作為輸出信號(output=state),是狀態(tài)機的一種特殊類型。例1:思考:此狀態(tài)機屬于什么類型?五、狀態(tài)編碼(續(xù)2)libraryieee;useieee.std_logic_1164.all;entitymoisport(clk,a,reset:instd_logic;q:outstd_logic_vector(1downto0));end;architectureoneofmoissignalstate:std_logic_vector(1downto0);constants0:std_logic_vector(1downto0):="00";constants1:std_logic_vector(1downto0):="10";constants2:std_logic_vector(1downto0):="11";constants3:std_logic_vector(1downto0):="01";begin狀態(tài)編碼五、狀態(tài)編碼(續(xù)3)process(clk,reset)beginifreset='1'thenstate<=s0;elsifclk'eventandclk='1'thencasestateiswhens0=>ifa='1'thenstate<=s1;endif;whens1=>ifa='0'thenstate<=s2;endif;whens2=>ifa='1'thenstate<=s3;endif;whens3=>ifa='0'thenstate<=s0;endif;endcase;endif;endprocess;q<=state;end;輸入決定狀態(tài)的轉(zhuǎn)移輸出=狀態(tài)編碼,狀態(tài)決定輸出五、狀態(tài)編碼(續(xù)4)2、其他編碼方式順序碼、格雷碼、一位熱碼順序編碼格雷碼編碼一位熱碼編碼S0=“00”000001S1=“01”010010S2=“10”110100S3=“11”101000五、狀態(tài)編碼(續(xù)5)順序編碼使用觸發(fā)器數(shù)量最少;剩余非法狀態(tài)最少;增加了從一種狀態(tài)向另一種狀態(tài)轉(zhuǎn)化的譯碼組合邏輯適用于組合邏輯資源相對豐富的CPLD器件格雷碼編碼當(dāng)狀態(tài)機改變狀態(tài)時,狀態(tài)向量中僅1位發(fā)生變化。一位熱碼編碼使用觸發(fā)器數(shù)量多,狀態(tài)數(shù)等于觸發(fā)器的數(shù)目簡化了狀態(tài)譯碼邏輯,提高了狀態(tài)轉(zhuǎn)化速度。適合含有較多時序邏輯資源的FPGA器件。六、非法狀態(tài)處理非法狀態(tài):使用枚舉類型或者直接指定狀態(tài)編碼的程序中,總是不可避免的出現(xiàn)大量剩余狀態(tài),即未定義的編碼組合,這些狀態(tài)在狀態(tài)機的正常運行中是不需要出現(xiàn)的。合法狀態(tài)與非法狀態(tài)之和:m=2n如果狀態(tài)機的實際狀態(tài)數(shù)小于m,可以有四種選擇:(1)、不做任何規(guī)定,讓偶然性決定

結(jié)果:可能進入非法狀態(tài),出現(xiàn)短暫失控,或是完全無法擺脫非法狀態(tài)而失去正常的功能。六、非法狀態(tài)處理(續(xù)1)(2)、對每一個非法狀態(tài)作出明確的狀態(tài)轉(zhuǎn)化指示狀態(tài)順序編碼St0000St1

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論