EDA第七章-狀態(tài)機(jī)設(shè)計(jì)_第1頁
EDA第七章-狀態(tài)機(jī)設(shè)計(jì)_第2頁
EDA第七章-狀態(tài)機(jī)設(shè)計(jì)_第3頁
EDA第七章-狀態(tài)機(jī)設(shè)計(jì)_第4頁
EDA第七章-狀態(tài)機(jī)設(shè)計(jì)_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

EDA技術(shù)實(shí)用教程第7章有限狀態(tài)機(jī)設(shè)計(jì)有限狀態(tài)機(jī)FSM思想廣泛應(yīng)用于硬件控制電路設(shè)計(jì),也是軟件上常用的一種處理方法(軟件上稱為FMM--有限消息機(jī))。它把復(fù)雜的控制邏輯分解成有限個穩(wěn)定狀態(tài),在每個狀態(tài)上判斷事件,變連續(xù)處理為離散數(shù)字處理,符合計(jì)算機(jī)的工作特點(diǎn)。同時,因?yàn)橛邢逘顟B(tài)機(jī)具有有限個狀態(tài),所以可以在實(shí)際的工程上實(shí)現(xiàn)。但這并不意味著其只能進(jìn)行有限次的處理,相反,有限狀態(tài)機(jī)是閉環(huán)系統(tǒng),有限無窮,可以用有限的狀態(tài),處理無窮的事務(wù)。7.1一般有限狀態(tài)機(jī)的設(shè)計(jì)7.1.1用戶自定義數(shù)據(jù)類型定義語句TYPE語句用法如下:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義OF基本數(shù)據(jù)類型;或TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義;以下列出了兩種不同的定義方式:TYPEst1ISARRAY(0TO15)OFSTD_LOGIC;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);7.1一般有限狀態(tài)機(jī)的設(shè)計(jì)7.1.1用戶自定義數(shù)據(jù)類型定義語句TYPEm_stateIS(st0,st1,st2,st3,st4,st5);SIGNALpresent_state,next_state:m_state;布爾數(shù)據(jù)類型的定義語句是:TYPEBOOLEANIS(FALSE,TRUE);TYPEmy_logicIS('1','Z','U','0');SIGNALs1:my_logic;s1<='Z';7.1一般有限狀態(tài)機(jī)的設(shè)計(jì)7.1.1用戶自定義數(shù)據(jù)類型定義語句子類型SUBTYPE的語句格式如下:SUBTYPE子類型名IS基本數(shù)據(jù)類型RANGE約束范圍;

SUBTYPEdigitsISINTEGERRANGE0to9;7.1.2為什么要使用狀態(tài)機(jī)7.1一般有限狀態(tài)機(jī)的設(shè)計(jì)

狀態(tài)機(jī)克服了純硬件數(shù)字系統(tǒng)順序方式控制不靈活的缺點(diǎn)。

狀態(tài)機(jī)的結(jié)構(gòu)模式相對簡單。

狀態(tài)機(jī)容易構(gòu)成性能良好的同步時序邏輯模塊。

狀態(tài)機(jī)的VHDL表述豐富多樣。

在高速運(yùn)算和控制方面,狀態(tài)機(jī)更有其巨大的優(yōu)勢。

就可靠性而言,狀態(tài)機(jī)的優(yōu)勢也是十分明顯的。7.1.3一般有限狀態(tài)機(jī)的設(shè)計(jì)7.1一般有限狀態(tài)機(jī)的設(shè)計(jì)1.說明部分2.主控時序進(jìn)程圖7-1

一般狀態(tài)機(jī)結(jié)構(gòu)框圖工作示意圖ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;...3.主控組合進(jìn)程7.1.3一般有限狀態(tài)機(jī)的設(shè)計(jì)

控組合進(jìn)程的任務(wù)是根據(jù)外部輸入的控制信號(包括來自狀態(tài)機(jī)外部的信號和來自狀態(tài)機(jī)內(nèi)部其它非主控的組合或時序進(jìn)程的信號),或(和)當(dāng)前狀態(tài)的狀態(tài)值確定下一狀態(tài)(next_state)的取向,即next_state的取值內(nèi)容,以及確定對外輸出或?qū)?nèi)部其它組合或時序進(jìn)程輸出控制信號的內(nèi)容。4.輔助進(jìn)程【例7-1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYs_machineISPORT(clk,reset:INSTD_LOGIC;state_inputs:INSTD_LOGIC_VECTOR(0TO1);comb_outputs:OUTINTEGERRANGE0TO15);ENDs_machine;ARCHITECTUREbehvOFs_machineISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;BEGINREG:PROCESS(reset,clk)BEGINIFreset='1'THENcurrent_state<=s0;ELSIFclk='1'ANDclk'EVENTTHENcurrent_state<=next_state;ENDIF;ENDPROCESS;COM:PROCESS(current_state,state_Inputs)

接下頁7.1.3一般有限狀態(tài)機(jī)的設(shè)計(jì)BEGINCASEcurrent_stateISWHENs0=>comb_outputs<=5;IFstate_inputs="00"THENnext_state<=s0;ELSEnext_state<=s1;ENDIF;WHENs1=>comb_outputs<=8;IFstate_inputs="00"THENnext_state<=s1;ELSEnext_state<=s2;ENDIF;WHENs2=>comb_outputs<=12;IFstate_inputs="11"THENnext_state<=s0;ELSEnext_state<=s3;ENDIF;WHENs3=>comb_outputs<=14;IFstate_inputs="11"THENnext_state<=s3;ELSEnext_state<=s0;ENDIF;ENDcase;ENDPROCESS;ENDbehv;接上頁圖7-2例7-1狀態(tài)機(jī)的工作時序圖7.1.3一般有限狀態(tài)機(jī)的設(shè)計(jì)4.輔助進(jìn)程用VHDL設(shè)計(jì)狀態(tài)機(jī)——AD574A采樣控制狀態(tài)機(jī)

VHDL綜合器易于優(yōu)化

易構(gòu)成性能良好的時序邏輯模塊

結(jié)構(gòu)模式簡單、層次分明、易讀易懂、易排錯

運(yùn)行模式類似于CPU,易于進(jìn)行順序控制

利用同步時序和全局時鐘線可實(shí)現(xiàn)高速FSM

高可靠性,非法狀態(tài)易控制

為什么要使用狀態(tài)機(jī)?7.2Moore型有限狀態(tài)機(jī)的設(shè)計(jì)7.2.1三進(jìn)程有限狀態(tài)機(jī)CE CSRCK12/8A0 工作狀態(tài)

0 X X X X 禁止

X 1 X X X 禁止

1 0 0 X 0 啟動12位轉(zhuǎn)換

1 0 0 X 1 啟動8位轉(zhuǎn)換

1 0 1 1 X 12位并行輸出有效

1 0 1 0 0 高8位并行輸出有效

1 0 1 0 1 低4位加上尾隨4個0有效表7-1AD574邏輯控制真值表(X表示任意)7.2.1三進(jìn)程有限狀態(tài)機(jī)圖7-3AD574工作時序7.2.1三進(jìn)程有限狀態(tài)機(jī)圖7-4AD574工作時序7.2.1三進(jìn)程有限狀態(tài)機(jī)圖7-5采樣狀態(tài)機(jī)結(jié)構(gòu)框圖【例7-2】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYAD574ISPORT(D:INSTD_LOGIC_VECTOR(11DOWNTO0);CLK,STATUS:INSTD_LOGIC;--狀態(tài)機(jī)時鐘CLK,AD574狀態(tài)信號STATUSLOCK0:OUTSTD_LOGIC;--內(nèi)部鎖存信號LOCK的測試信號

CS,A0,RC,K12X8:OUTSTD_LOGIC;--AD574控制信號

Q:OUTSTD_LOGIC_VECTOR(11DOWNTO0));--鎖存數(shù)據(jù)輸出ENDAD574;ARCHITECTUREbehavOFAD574ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALcurrent_state,next_state:states:=st0;SIGNALREGL:STD_LOGIC_VECTOR(11DOWNTO0);SIGNALLOCK:STD_LOGIC;BEGINK12X8<='1';LOCK0<=LOCK;COM1:PROCESS(current_state,STATUS)--決定轉(zhuǎn)換狀態(tài)的進(jìn)程

接下頁7.2.1三進(jìn)程有限狀態(tài)機(jī)BEGINCASEcurrent_stateISWHENst0=>next_state<=st1;WHENst1=>next_state<=st2;WHENst2=>IF(STATUS='1')THENnext_state<=st2;ELSEnext_state<=st3;ENDIF;WHENst3=>next_state<=st4;WHENst4=>next_state<=st0;WHENOTHERS=>next_state<=st0;ENDCASE;ENDPROCESSCOM1;COM2:PROCESS(current_state)--輸出控制信號的進(jìn)程

BEGINCASEcurrent_stateISWHENst0=>CS<='1';A0<='1';RC<='1';LOCK<='0';--初始化WHENst1=>CS<='0';A0<='0';RC<='0';LOCK<='0';--啟動12位轉(zhuǎn)換WHENst2=>CS<='0';A0<='0';RC<='0';LOCK<='0';--等待轉(zhuǎn)換WHENst3=>CS<='0';A0<='0';RC<='1';LOCK<='0';--12位并行輸出有效WHENst4=>CS<='0';A0<='0';RC<='1';LOCK<='1';--鎖存數(shù)據(jù)WHENOTHERS=>CS<='1';A0<='1';RC<='1';LOCK<='0';--其它情況返回初始態(tài)

接下頁接上頁ENDCASE;ENDPROCESSCOM2;REG:PROCESS(CLK)--時序進(jìn)程

BEGINIF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;ENDIF;ENDPROCESSREG;LATCH1:PROCESS(LOCK)--數(shù)據(jù)鎖存器進(jìn)程

BEGINIFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;ENDIF;ENDPROCESS;Q<=REGL;ENDbehav;接上頁7.2.1三進(jìn)程有限狀態(tài)機(jī)圖7-6AD574采樣狀態(tài)機(jī)工作時序7.2.1三進(jìn)程有限狀態(tài)機(jī)【例7-3】

COM:PROCESS(current_state,STATUS)BEGINCASEcurrent_stateISWHENst0=>next_state<=st1;CS<='1';A0<='1';RC<='1';LOCK<='0';WHENst1=>next_state<=st2;CS<='0';A0<='0';RC<='0';LOCK<='0';WHENst2=>IF(STATUS='1')THENnext_state<=st2;ELSEnext_state<=st3;ENDIF;CS<='0';A0<='0';RC<='0';LOCK<='0';WHENst3=>next_state<=st4;CS<='0';A0<='0';RC<='1';LOCK<='0';WHENst4=>next_state<=st0;CS<='0';A0<='0';RC<='1';LOCK<='1';WHENOTHERS=>next_state<=st0;ENDCASE;ENDPROCESSCOM;PROCESSREG時序進(jìn)程PROCESSCOM組合進(jìn)程PROCESSLATCH鎖存器current_statenext_stateLOCK狀態(tài)機(jī)FSMFPGA/CPLDCLK

CSA0RCK12/8STATUSD[11..0]AD574Q[11..0]模擬信號輸入采樣數(shù)據(jù)輸出LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYAD574IS

PORT(D:INSTD_LOGIC_VECTOR(11DOWNTO0);CLK,STATUS:INSTD_LOGIC;CS,A0,RC,K12X8:OUTSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(11DOWNTO0));ENDAD574;ARCHITECTUREbehavOFAD574ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALcurrent_state,next_state:states;

SIGNALREGL:STD_LOGIC_VECTOR(11DOWNTO0);

SIGNALLOCK:STD_LOGIC;

BEGIN

COM:

PROCESS(current_state,STATUS)

BEGIN

CASEcurrent_stateIS

WHENst0=>CS<='1';A0<='0';RC<='0';LOCK<='0';next_state<=st1;

WHENst1=>CS<='0';A0<='0';RC<='0';LOCK<='0';next_state<=st2;

WHENst2=>CS<='0';A0<='0';RC<='0';LOCK<='0';

IF(STATUS='1')THENnext_state<=st2;ELSEnext_state<=st3;ENDIF;

WHENst3=>CS<='0';A0<='0';RC<='1';LOCK<='0';next_state<=st4;

WHENst4=>CS<='0';A0<=’1';RC<='1';LOCK<='1';next_state<=st0;

WHENOTHERS=>next_state<=st0;

ENDCASE;

ENDPROCESSCOM;

REG:PROCESS(CLK)

BEGINIF(CLK'EVENTANDCLK='1')THEN

current_state<=next_state;

ENDIF;

ENDPROCESSREG;

LATCH:

PROCESS(LOCK)

BEGINIFLOCK='1'

ANDLOCK'EVENT

THENREGL<=D;

ENDIF;

ENDPROCESS;Q<=REGL;

ENDbehav;K12X8<=‘1’;狀態(tài)機(jī)VHDL源程序狀態(tài)機(jī)RTL電路圖狀態(tài)機(jī)工作時序圖狀態(tài)2:等待7.2.2單進(jìn)程Moore型有限狀態(tài)機(jī)【例7-4】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMOORE1ISPORT(DATAIN:INSTD_LOGIC_VECTOR(1DOWNTO0);CLK,RST:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDMOORE1;ARCHITECTUREbehavOFMOORE1ISTYPEST_TYPEIS(ST0,ST1,ST2,ST3,ST4);SIGNALC_ST:ST_TYPE;BEGINPROCESS(CLK,RST)BEGINIFRST='1'THENC_ST<=ST0;Q<="0000";ELSIFCLK'EVENTANDCLK='1'THEN

接下頁CASEC_STISWHENST0=>IFDATAIN="10"THENC_ST<=ST1;ELSEC_ST<=ST0;ENDIF;Q<="1001";WHENST1=>IFDATAIN="11"THENC_ST<=ST2;ELSEC_ST<=ST1;ENDIF;Q<="0101";WHENST2=>IFDATAIN="01"THENC_ST<=ST3;ELSEC_ST<=ST0;ENDIF;Q<="1100";WHENST3=>IFDATAIN="00"THENC_ST<=ST4;ELSEC_ST<=ST2;ENDIF;Q<="0010";WHENST4=>IFDATAIN="11"THENC_ST<=ST0;ELSEC_ST<=ST3;ENDIF;Q<="1001";WHENOTHERS=>C_ST<=ST0;ENDCASE;ENDIF;ENDPROCESS;ENDbehav;接上頁圖7-7例7-4狀態(tài)機(jī)綜合后的RTL電路模塊圖7.2.2單進(jìn)程Moore型有限狀態(tài)機(jī)7.2.2單進(jìn)程Moore型有限狀態(tài)機(jī)圖7-8例7-4單進(jìn)程狀態(tài)機(jī)工作時序7.2.2單進(jìn)程Moore型有限狀態(tài)機(jī)圖7-9對應(yīng)于例7-4的2進(jìn)程狀態(tài)機(jī)工作時序圖7.3Mealy型有限狀態(tài)機(jī)的設(shè)計(jì)【例7-5】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMEALY1ISPORT(CLK,DATAIN,RESET:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDMEALY1;ARCHITECTUREbehavOFMEALY1ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALSTX:states;BEGINCOMREG:PROCESS(CLK,RESET)BEGIN--決定轉(zhuǎn)換狀態(tài)的進(jìn)程

IFRESET='1'THENSTX<=ST0;ELSIFCLK'EVENTANDCLK='1'THEN

接下頁CASESTXISWHENst0=>IFDATAIN='1'THENSTX<=st1;ENDIF;WHENst1=>IFDATAIN='0'THENSTX<=st2;ENDIF;WHENst2=>IFDATAIN='1'THENSTX<=st3;ENDIF;WHENst3=>IFDATAIN='0'THENSTX<=st4;ENDIF;WHENst4=>IFDATAIN='1'THENSTX<=st0;ENDIF;WHENOTHERS=>STX<=st0;ENDCASE;ENDIF;ENDPROCESSCOMREG;COM1:PROCESS(STX,DATAIN)BEGIN--輸出控制信號的進(jìn)程

CASESTXISWHENst0=>IFDATAIN='1'THENQ<="10000";ELSEQ<="01010";ENDIF;WHENst1=>IFDATAIN='0'THENQ<="10111";ELSEQ<="10100";ENDIF;WHENst2=>IFDATAIN='1'THENQ<="10101";ELSEQ<="10011";ENDIF;WHENst3=>IFDATAIN='0'THENQ<="11011";ELSEQ<="01001";ENDIF;

WHENst4=>IFDATAIN='1'THENQ<="11101";ELSEQ<="01101";ENDIF;WHENOTHERS=>Q<="00000";ENDCASE;ENDPROCESSCOM1;ENDbehav;接上頁圖7-10例7-5狀態(tài)機(jī)工作時序圖【例7-6】MEALY2LIBRARYIEEE;--MEALYFSMUSEIEEE.STD_LOGIC_1164.ALL;ENTITYMEALY2ISPORT(CLK,DATAIN,RESET:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDMEALY2;ARCHITECTUREbehavOFMEALY2ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALSTX:states;SIGNALQ1:STD_LOGIC_VECTOR(4DOWNTO0);BEGINCOMREG:PROCESS(CLK,RESET)--決定轉(zhuǎn)換狀態(tài)的進(jìn)程

BEGINIFRESET='1'THENSTX<=ST0;ELSIFCLK'EVENTANDCLK='1'THENCASESTXISWHENst0=>IFDATAIN='1'THENSTX<=st1;ENDIF;WHENst1=>IFDATAIN='0'THENSTX<=st2;ENDIF;WHENst2=>IFDATAIN='1'THENSTX<=st3;ENDIF;WHENst3=>IFDATAIN='0'THENSTX<=st4;ENDIF;WHENst4=>IFDATAIN='1'THENSTX<=st0;ENDIF;WHENOTHERS=>STX<=st0;ENDCASE;接下頁ENDIF;ENDPROCESSCOMREG;COM1:PROCESS(STX,DATAIN,CLK)--輸出控制信號的進(jìn)程

VARIABLEQ2:STD_LOGIC_VECTOR(4DOWNTO0);BEGINCASESTXISWHENst0=>IFDATAIN='1'THENQ2:="10000";ELSEQ2:="01010";ENDIF;WHENst1=>IFDATAIN='0'THENQ2:="10111";ELSEQ2:="10100";ENDIF;WHENst2=>IFDATAIN='1'THENQ2:="10101";ELSEQ2:="10011";ENDIF;WHENst3=>IFDATAIN='0'THENQ2:="11011";ELSEQ2:="01001";ENDIF;WHENst4=>IFDATAIN='1'THENQ2:="11101";ELSEQ2:="01101";ENDIF;WHENOTHERS=>Q2:="00000";ENDCASE;接下頁IFCLK'EVENTANDCLK='1'THENQ1<=Q2;ENDIF;ENDPROCESSCOM1;Q<=Q1;ENDbehav;接上頁圖7-11例7-6狀態(tài)機(jī)工作時序圖7.4狀態(tài)編碼7.4.1狀態(tài)位直接輸出型編碼表7-2控制信號狀態(tài)編碼表每一位的編碼值都賦予了實(shí)際的控制功能,即:

CS=current_state(4);A0=current_state(3);RC=current_state(2);LOCK=current_state(1)?!纠?-7】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYAD574AISPORT(D:INSTD_LOGIC_VECTOR(11DOWNTO0);CLK,STATUS:INSTD_LOGIC;OUT4:OUTSTD_LOGIC_VECTOR(3DOWNTO0);Q:OUTSTD_LOGIC_VECTOR(11DOWNTO0));ENDAD574A;ARCHITECTUREbehavOFAD574AISSIGNALcurrent_state,next_state:STD_LOGIC_VECTOR(4DOWNTO0);CONSTANTst0:STD_LOGIC_VECTOR(4DOWNTO0):="11100";CONSTANTst1:STD_LOGIC_VECTOR(4DOWNTO0):="00001";CONSTANTst2:STD_LOGIC_VECTOR(4DOWNTO0):="00000";CONSTANTst3:STD_LOGIC_VECTOR(4DOWNTO0):="00100";CONSTANTst4:STD_LOGIC_VECTOR(4DOWNTO0):="00110";SIGNALREGL:STD_LOGIC_VECTOR(11DOWNTO0);SIGNALLK:STD_LOGIC;BEGINCOM1:PROCESS(current_state,STATUS)--決定轉(zhuǎn)換狀態(tài)的進(jìn)程

接下頁BEGINCASEcurrent_stateISWHENst0=>next_state<=st1;WHENst1=>next_state<=st2;WHENst2=>IF(STATUS='1')THENnext_state<=st2;ELSEnext_state<=st3;ENDIF;WHENst3=>next_state<=st4;WHENst4=>next_state<=st0;WHENOTHERS=>next

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論