




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
EDA技術(shù)及其應(yīng)用第6章實(shí)用狀態(tài)機(jī)設(shè)計(jì)技術(shù)
有限狀態(tài)機(jī)(Finite-StateMachine,FSM)
FSM簡稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學(xué)模型。
傳統(tǒng)時(shí)序電路的控制流程是順序的:遵循事先設(shè)定的邏輯,從頭到尾地執(zhí)行。很少有事件能改變標(biāo)準(zhǔn)執(zhí)行流程。
FSM能處理任何順序的事件(輸入),并提供有意義的響應(yīng)(輸出)——即使這些事件發(fā)生的順序和預(yù)計(jì)的不同。
什么是狀態(tài)機(jī)?狀態(tài)機(jī)可歸納為4個(gè)要素,即現(xiàn)態(tài)、條件、動作、次態(tài)?!艾F(xiàn)態(tài)”和“條件”是因,“動作”和“次態(tài)”是果。①現(xiàn)態(tài):指當(dāng)前所處狀態(tài)。②條件:又稱為“事件”。當(dāng)一個(gè)條件滿足,將會觸發(fā)一個(gè)動作,或執(zhí)行一次狀態(tài)的轉(zhuǎn)移。③動作:動作執(zhí)行后,可以轉(zhuǎn)移到新狀態(tài),也可以保持原狀態(tài)。動作不是必需的。④次態(tài):條件滿足后創(chuàng)新建立的新狀態(tài)?!按螒B(tài)”是相對于“現(xiàn)態(tài)”而言的;“次態(tài)”一旦被激活,就轉(zhuǎn)變成新的“現(xiàn)態(tài)”了。狀態(tài)機(jī)的基本要素?案例一:電梯門FSM案例二:接收器FSM
按輸出Y與現(xiàn)態(tài)Qn及輸入X的關(guān)系分:Moore型:輸出只和現(xiàn)態(tài)有關(guān),沒有輸入。Mealy型:輸出不僅和現(xiàn)態(tài)有關(guān),還和輸入有關(guān)。(由于輸出會受到輸入的干擾,可能會產(chǎn)生毛刺(Gitch)現(xiàn)象)
Z組合電路觸發(fā)器CPXYQZ組合電路觸發(fā)器CPYQFSM的結(jié)構(gòu)分類Moore型:Mealy型:Y=F1(Qn
)Y=F1(X,Qn
)FSM的結(jié)構(gòu)分類6.1有限狀態(tài)機(jī)設(shè)計(jì)初步
(1)為什么使用狀態(tài)機(jī)(其優(yōu)勢在哪里?)
1、克服了純硬件數(shù)字系統(tǒng)順序方式控制不靈活的缺點(diǎn)。2、由于狀態(tài)機(jī)的結(jié)構(gòu)相對簡單,設(shè)計(jì)方案相對固定。3、狀態(tài)機(jī)容易構(gòu)成性能良好的同步時(shí)序邏輯模塊。4、狀態(tài)機(jī)的VHDL表述豐富多樣、有其獨(dú)到的好處。5、在高速運(yùn)算和控制方面,狀態(tài)機(jī)更有其巨大的優(yōu)勢。6、高可靠性。6.1有限狀態(tài)機(jī)設(shè)計(jì)初步
6.1.2數(shù)據(jù)類型定義語句(這里將被用于“狀態(tài)”的定義)
TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義OF基本數(shù)據(jù)類型;
或
TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);TYPEm_stateIS(st0,st1,st2,st3,st4,st5);
SIGNALpresent_state,next_state:m_state;TYPEBOOLEANIS(FALSE,TRUE);
TYPEmy_logicIS('1','Z','U','0');SIGNALs1:my_logic;s1<='Z';6.1有限狀態(tài)機(jī)設(shè)計(jì)初步
6.1.3一般有限狀態(tài)機(jī)的結(jié)構(gòu)
1.說明部分
定義新的數(shù)據(jù)類型;定義狀態(tài)(信號型)。
ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;...
6.1有限狀態(tài)機(jī)設(shè)計(jì)初步
6.1.3一般有限狀態(tài)機(jī)的結(jié)構(gòu)
2.主控時(shí)序進(jìn)程
負(fù)責(zé)狀態(tài)機(jī)運(yùn)轉(zhuǎn)和在時(shí)鐘驅(qū)動下實(shí)現(xiàn)狀態(tài)轉(zhuǎn)換,稱為“驅(qū)動泵”。圖6-1一般狀態(tài)機(jī)結(jié)構(gòu)圖
6.1有限狀態(tài)機(jī)設(shè)計(jì)初步
6.1.3一般有限狀態(tài)機(jī)的結(jié)構(gòu)
3.主控組合進(jìn)程
即狀態(tài)譯碼進(jìn)程,根據(jù)現(xiàn)態(tài)和輸入確定次態(tài)和輸出。
4.輔助進(jìn)程不是必需的。常用來配合主控時(shí)序或組合進(jìn)程,以實(shí)現(xiàn)數(shù)據(jù)鎖存、算法完成等功能。6.1有限狀態(tài)機(jī)設(shè)計(jì)初步
6.1.3一般有限狀態(tài)機(jī)的結(jié)構(gòu)
【例6-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);--數(shù)據(jù)類型定義,狀態(tài)符號化SIGNALcurrent_state,next_state:FSM_ST;--現(xiàn)態(tài)和次態(tài)定義為新數(shù)據(jù)類型BEGINREG:PROCESS(reset,clk)--主控時(shí)序進(jìn)程
BEGINIFreset='1'THENcurrent_state<=s0;--檢測異步復(fù)位信號
ELSIFclk='1'ANDclk‘EVENTTHEN
current_state<=next_state;--長江后浪推前浪ENDIF;ENDPROCESS;
接下頁COM:PROCESS(current_state,state_Inputs)--主控組合進(jìn)程
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;
6.1有限狀態(tài)機(jī)設(shè)計(jì)初步
6.1.3一般有限狀態(tài)機(jī)的結(jié)構(gòu)
圖6-2例6-1的工作時(shí)序6.1有限狀態(tài)機(jī)設(shè)計(jì)初步
6.1.3一般有限狀態(tài)機(jī)的結(jié)構(gòu)
圖6-3通過StateMachineViewer觀察到的例6-1的狀態(tài)圖
6.2Moore型有限狀態(tài)機(jī)設(shè)計(jì)
6.2.1多進(jìn)程有限狀態(tài)機(jī)
圖6-4ADC0809工作時(shí)序特點(diǎn):·CMOS電路·8路模擬輸入,8bit輸出(3S門)·與常用μP兼容·采用逐次比較法,轉(zhuǎn)換時(shí)間約100μsADC0809—集成逐次比較型ADCADC0809ADC0809原理圖數(shù)字系統(tǒng)和FSM在集成電路設(shè)計(jì)時(shí),通??梢詫⑾到y(tǒng)劃分為兩部分,一部分是數(shù)據(jù)單元,另一部分是控制單元。數(shù)據(jù)單元包含保存運(yùn)算數(shù)據(jù)和運(yùn)算結(jié)果的數(shù)據(jù)寄存器,也包括完成數(shù)據(jù)運(yùn)算的組合邏輯。數(shù)據(jù)單元要產(chǎn)生輸出信號,數(shù)據(jù)運(yùn)算狀態(tài)等有用信號。控制單元用來產(chǎn)生信號序列,以決定何時(shí)進(jìn)行何種數(shù)據(jù)運(yùn)算,控制單元要從數(shù)據(jù)單元得到條件信號,以決定繼續(xù)進(jìn)行那些數(shù)據(jù)運(yùn)算。數(shù)據(jù)單元和控制單元中,有兩個(gè)非常重要的信號,即復(fù)位信號和時(shí)鐘信號。復(fù)位信號保證了系統(tǒng)初始狀態(tài)的確定性,時(shí)鐘信號則是時(shí)序系統(tǒng)工作的必要條件。狀態(tài)機(jī)通常在復(fù)位信號到來的時(shí)候恢復(fù)到初始狀態(tài),每個(gè)時(shí)鐘到來的時(shí)候內(nèi)部狀態(tài)發(fā)生變化。FSM要點(diǎn)(1)moore和mealy的區(qū)別在于輸出是否只和當(dāng)前狀態(tài)有關(guān)。(2)狀態(tài)機(jī)的兩種基本操作:一是狀態(tài)機(jī)內(nèi)部狀態(tài)的轉(zhuǎn)換,另一是產(chǎn)生輸出信號序列。(3)狀態(tài)機(jī)的分析可以從狀態(tài)圖入手,狀態(tài)機(jī)的設(shè)計(jì)也可以從狀態(tài)圖入手。6.2Moore型有限狀態(tài)機(jī)設(shè)計(jì)
6.2.1多進(jìn)程有限狀態(tài)機(jī)
圖6-5控制ADC0809采樣狀態(tài)圖
6.2Moore型有限狀態(tài)機(jī)設(shè)計(jì)
6.2.1多進(jìn)程有限狀態(tài)機(jī)
圖6-6采樣狀態(tài)機(jī)結(jié)構(gòu)框圖6.2Moore型有限狀態(tài)機(jī)設(shè)計(jì)
6.2.1多進(jìn)程有限狀態(tài)機(jī)
【例6-2】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYADCINTISPORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);--來自0809轉(zhuǎn)換好的8位數(shù)據(jù)CLK:INSTD_LOGIC;--狀態(tài)機(jī)工作時(shí)鐘EOC:INSTD_LOGIC;--轉(zhuǎn)換狀態(tài)指示,低電平表示正在轉(zhuǎn)換ALE:OUTSTD_LOGIC;--8個(gè)模擬信號通道地址鎖存信號START:OUTSTD_LOGIC;--轉(zhuǎn)換開始信號OE:OUTSTD_LOGIC;--數(shù)據(jù)輸出3態(tài)控制信號ADDA:OUTSTD_LOGIC;--信號通道最低位控制信號LOCK0:OUTSTD_LOGIC;--觀察數(shù)據(jù)鎖存時(shí)鐘Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--8位數(shù)據(jù)輸出ENDADCINT;ARCHITECTUREbehavOFADCINTISTYPEstatesIS(st0,st1,st2,st3,st4);--定義各狀態(tài)子類型
SIGNALcurrent_state,next_state:states:=st0;SIGNALREGL :STD_LOGIC_VECTOR(7DOWNTO0);SIGNALLOCK :STD_LOGIC;--轉(zhuǎn)換后數(shù)據(jù)輸出鎖存時(shí)鐘信號接下頁
BEGINADDA<='1';--當(dāng)ADDA<='0',模擬信號進(jìn)入通道IN0;當(dāng)ADDA<='1',則進(jìn)入通道IN1Q<=REGL;LOCK0<=LOCK;
COM:PROCESS(current_state,EOC)BEGIN--規(guī)定各狀態(tài)轉(zhuǎn)換方式
CASEcurrent_stateISWHENst0=>ALE<='0';START<='0';LOCK<='0';OE<='0';next_state<=st1;--0809初始化
WHENst1=>ALE<='1';START<='1';LOCK<='0';OE<='0';Next_state<=st2;--啟動采樣
WHENst2=>ALE<='0';START<='0';LOCK<='0';OE<='0';IF(EOC='1')THENnext_state<=st3;--EOC=1表明轉(zhuǎn)換結(jié)束
ELSEnext_state<=st2;ENDIF;--轉(zhuǎn)換未結(jié)束,繼續(xù)等待
WHENst3=>ALE<='0';START<='0';LOCK<='0';OE<='1';Next_state<=st4;--開啟OE,輸出轉(zhuǎn)換好的數(shù)據(jù)
WHENst4=>ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=st0;WHENOTHERS=>next_state<=st0;ENDCASE;ENDPROCESSCOM;REG:PROCESS(CLK)BEGINIF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;ENDIF;ENDPROCESSREG;--由信號current_state將當(dāng)前狀態(tài)值帶出此進(jìn)程REGLATCH1:PROCESS(LOCK)--此輔助進(jìn)程中,在LOCK的上升沿將轉(zhuǎn)換好的數(shù)據(jù)鎖入
BEGINIFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;ENDIF;ENDPROCESSLATCH1;ENDbehav;
6.2Moore型有限狀態(tài)機(jī)設(shè)計(jì)
6.2.1多進(jìn)程有限狀態(tài)機(jī)
圖6-7ADC0809采樣狀態(tài)機(jī)工作時(shí)序6.2Moore型有限狀態(tài)機(jī)設(shè)計(jì)
6.2.1多進(jìn)程有限狀態(tài)機(jī)
【例6-3】
例6-2中組合進(jìn)程的拆分COM1:PROCESS(current_state,EOC)
--確定狀態(tài)轉(zhuǎn)換方式BEGIN
CASEcurrent_stateISWHENst0=>next_state<=st1;WHENst1=>next_state<=st2;WHENst2=>IF(EOC='1')THENnext_state<=st3; ELSEnext_state<=st2;ENDIF;WHENst3=>next_state<=st4;--開啟OEWHENst4=>next_state<=st0;WHENOTHERS=>next_state<=st0;ENDCASE;ENDPROCESSCOM1;COM2:PROCESS(current_state)
--狀態(tài)譯碼BEGIN
CASEcurrent_stateISWHENst0=>ALE<='0';START<='0';LOCK<='0';OE<='0';WHENst1=>ALE<='1';START<='1';LOCK<='0';OE<='0';WHENst2=>ALE<='0';START<='0';LOCK<='0';OE<='0';WHENst3=>ALE<='0';START<='0';LOCK<='0';OE<='1';WHENst4=>ALE<='0';START<='0';LOCK<='1';OE<='1';WHENOTHERS=>ALE<='0';START<='0';LOCK<='0';ENDCASE;ENDPROCESSCOM2;
6.2.2單進(jìn)程Moore型有限狀態(tài)機(jī)
【例6-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;
BEGIN
PROCESS(CLK,RST)
--混合進(jìn)程(組合+時(shí)序)BEGINIFRST='1'THENC_ST<=ST0;Q<="0000";ELSIFCLK'EVENTANDCLK='1'THENCASEC_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;
例6-4單進(jìn)程狀態(tài)機(jī)狀態(tài)轉(zhuǎn)移圖
6.2.2單進(jìn)程Moore型有限狀態(tài)機(jī)
st0/1001st1/0101st2/1100st3/0010st4/100110110100Not10Not11Not01Not00Not11116.2.2單進(jìn)程Moore型有限狀態(tài)機(jī)
優(yōu)點(diǎn):輸出經(jīng)鎖存(狀態(tài)機(jī)外加鎖存器),由時(shí)序器件同步輸出,避免冒險(xiǎn)現(xiàn)象,無毛刺;缺點(diǎn):輸出滯后一個(gè)時(shí)鐘周期。6.2Moore型有限狀態(tài)機(jī)設(shè)計(jì)
圖6-9對應(yīng)于例6-4的二進(jìn)程狀態(tài)機(jī)工作時(shí)序圖
例6-4中二進(jìn)程Moore型有限狀態(tài)機(jī)
缺點(diǎn):輸出由組合電路產(chǎn)生,未經(jīng)鎖存,可能有毛刺;優(yōu)點(diǎn):輸出不滯后交通燈控制器設(shè)計(jì)由分頻模塊獲得1秒鐘信號SEC06.3Mealy型有限狀態(tài)機(jī)設(shè)計(jì)
6.3Mealy型有限狀態(tài)機(jī)設(shè)計(jì)
【例6-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'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;(接下頁)6.3Mealy型有限狀態(tài)機(jī)設(shè)計(jì)
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;6.3Mealy型有限狀態(tài)機(jī)設(shè)計(jì)
圖6-10例6-5狀態(tài)機(jī)工作時(shí)序圖6.3Mealy型有限狀態(tài)機(jī)設(shè)計(jì)
【例6-6】LIBRARYIEEE;--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;
6.3Mealy型有限狀態(tài)機(jī)設(shè)計(jì)
圖6-11例6-6狀態(tài)機(jī)工作時(shí)序圖
6.4狀態(tài)編碼
6.4.1狀態(tài)位直接輸出型編碼START=current_state(4);ALE=current_state(3);OE=current_state(2);LOCK=current_state(1);
狀態(tài)狀態(tài)編碼STARTALEOELOCKB功能說明ST000000初始態(tài)ST111000啟動轉(zhuǎn)換ST200001若測得EOC=1時(shí),轉(zhuǎn)下一狀態(tài)ST3ST300100輸出轉(zhuǎn)換好的數(shù)據(jù)ST400110利用LOCK的上升沿將轉(zhuǎn)換好的數(shù)據(jù)鎖存表6-1控制信號狀態(tài)編碼表
6.4狀態(tài)編碼
6.4.1狀態(tài)位直接輸出型編碼【例6-7】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYAD0809IS...PORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);CLK,EOC:INSTD_LOGIC;ALE,START,OE,ADDA:OUTSTD_LOGIC;c_state:OUTSTD_LOGIC_VECTOR(4DOWNTO0);Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDAD0809;ARCHITECTUREbehavOFAD0809ISSIGNALcurrent_state,next_state:STD_LOGIC_VECTOR(4DOWNTO0);CONSTANTst0:STD_LOGIC_VECTOR(4DOWNTO0):="00000";CONSTANTst1:STD_LOGIC_VECTOR(4DOWNTO0):="11000";CONSTANTst2:STD_LOGIC_VECTOR(4DOWNTO0):="00001";CONSTANTst3:STD_LOGIC_VECTOR(4DOWNTO0):="00100";CONSTANTst4:STD_LOGIC_VECTOR(4DOWNTO0):="00110";SIGNALREGL:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALLOCK:STD_LOGIC;BEGINADDA<='1';Q<=REGL;START<=current_state(4);ALE<=current_state(3);OE<=current_state(2);LOCK<=current_state(1);c_state<=current_state;COM:PROCESS(current_state,EOC)BEGIN--規(guī)定各狀態(tài)轉(zhuǎn)換方式
CASEcurrent_stateISWHENst0=>next_state<=st1;--0809初始化
WHENst1=>next_state<=st2;--啟動采樣
WHENst2=>IF(EOC='1')THENnext_state<=st3;--EOC=1表明轉(zhuǎn)換結(jié)束
ELSEnext_state<=st2;--轉(zhuǎn)換未結(jié)束,繼續(xù)等待
ENDIF;WHENst3=>next_state<=st4;--開啟OE,輸出轉(zhuǎn)換好的數(shù)據(jù)
WHENst4=>next_state<=st0;WHENOTHERS=>next_state<=st0;ENDCASE;ENDPROCESSCOM;REG:PROCESS(CLK)BEGINIF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;ENDIF;ENDPROCESSREG;--由信號current_state將當(dāng)前狀態(tài)值帶出此進(jìn)程:REGLATCH1:PROCESS(LOCK)--此進(jìn)程中,在LOCK的上升沿,將轉(zhuǎn)換好的數(shù)據(jù)鎖入
BEGINIFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;ENDIF;ENDPROCESSLATCH1;ENDbehav;6.4狀態(tài)編碼
6.4.1狀態(tài)位直接輸出型編碼圖6-12例6-7狀態(tài)機(jī)工作時(shí)序圖6.4狀態(tài)編碼
6.4.2順序編碼
表6-2編碼方式
狀態(tài)順序編碼一位熱碼編碼STATE0000100000STATE1001010000STATE2010001000STATE3011000100STATE4100000010STATE51010000016.4狀態(tài)編碼
6.4.2順序編碼
【例6-8】SIGNALCRURRENT_STATE,NEXT_STATE: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";6.4狀態(tài)編碼
6.4.3一位熱碼編碼圖6-13一位熱碼編碼方式選擇對話框6.5非法狀態(tài)處理
表6-3剩余狀態(tài)狀態(tài)
st0
St1
St2
St3
St4
st_ilg1
st_ilg2st_ilg3順序編碼
000
001
010011
100
101
110
111
WHENst_ilg1=>next_state<=st0;WHENst_ilg2=>next_state<=st0;6.5非法狀態(tài)處理
【例6-9】TYPEstatesIS(st0,st1,st2,st3,st4,st_ilg1,st_ilg2,st_ilg3);SIGNALcurrent_state,next_state:states;...COM:PROCESS(current_state,state_Inputs)--組合邏輯進(jìn)程BEGINCASEcurrent_stateIS--確定當(dāng)前狀態(tài)的狀態(tài)值
...WHENOTHERS=>next_state<=st0;ENDcase;
6.5非法狀態(tài)處理
【例6-10】alarm<=(st0AND(st1ORst2ORst3ORst4ORst5))OR(st1AND(st0ORst2ORst3ORst4ORst5))OR(st2AND(st0ORst1ORst3ORst4ORst5))OR(st3AND(st0ORst1ORst2ORst4ORst5))OR(st4AND(st0ORst1ORst2ORst3ORst5))OR(st5AND(st0ORst1ORst2ORst3ORst4));習(xí)題
6-1.
仿照例6-1,將例6-4用兩個(gè)進(jìn)程,即一個(gè)時(shí)序進(jìn)程,一個(gè)組合進(jìn)程表達(dá)出來。6-2.
為確保例6-5的狀態(tài)機(jī)輸出信號沒有毛刺,試用例6-4的方式構(gòu)成一個(gè)單進(jìn)程狀態(tài),使輸出信號得到可靠鎖存,在相同輸入信號條件下,給出兩程序的仿真波形。6-3.
序列檢測器可用于檢測一組或多組由二進(jìn)制碼組成的脈沖序列信號,當(dāng)序列檢測器連續(xù)收到一組串行二進(jìn)制碼后,如果這組碼與檢測器中預(yù)先設(shè)置的碼相同,則輸出1,否則輸出0。由于這種檢測的關(guān)鍵在于正確碼的收到必須是連續(xù)的,這就要求檢測器必須記住前一次的正確碼及正確序列,直到在連續(xù)的檢測中所收到的每一位碼都與預(yù)置數(shù)的對應(yīng)碼相同。在檢測過程中,任何一位不相等都將回到初始狀態(tài)重新開始檢測。例6-11描述的電路完成對序列數(shù)“11100101”的檢測,當(dāng)這一串序列數(shù)高位在前(左移)串行進(jìn)入檢測器后,若此數(shù)與預(yù)置的密碼數(shù)相同,則輸出“A”,否則仍然輸出“B”。習(xí)題
【例6-11】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSCHKISPORT(DIN,CLK,CLR:INSTD_LOGIC;--串行輸入數(shù)據(jù)位/工作時(shí)鐘/復(fù)位信號
AB:OUTSTD_LOGIC_VECTOR(3DOWNTO0));--檢測結(jié)果輸出ENDSCHK;ARCHITECTUREbehavOFSCHKISSIGNALQ:INTEGERRANGE0TO8;SIGNALD:STD_LOGIC_VECTOR(7DOWNTO0);--8位待檢測預(yù)置數(shù)(密碼=E5H)BEGIND<="11100101";--8位待檢測預(yù)置數(shù)
PROCESS(CLK,CLR)BEGINIFCLR='1'THENQ<=0;ELSIFCLK'EVENTANDCLK='1'THEN--時(shí)鐘到來時(shí),判斷并處理當(dāng)前輸入的位
CASEQISWHEN0=>IFDIN=D(7)THENQ<=1;ELSEQ<=0;ENDIF;WHEN1=>IFDIN=D(6)THENQ<=2;ELSEQ<=0;ENDIF;WHEN2=>IFDIN=D(5)THENQ<=3;ELSEQ<=0;ENDIF;WHEN3=>IFDIN=D(4)THENQ<=4;ELSEQ<=0;ENDIF;WHEN4=>IFDIN=D(3)THENQ<=5;ELSEQ<=0;ENDIF;WHEN5=>IFDIN=D(2)THENQ<=6;ELSEQ<=0;ENDIF;WHEN6=>IFDIN=D(1)THENQ<=7;ELSEQ<=0;ENDIF;WHEN7=>IFDIN=D(0)THENQ<=8;ELSEQ<=0;ENDIF;WHENOTHERS=>Q<=0;ENDCASE;ENDIF;ENDPROCESS;PROCESS(Q)--檢測結(jié)果判斷輸出
BEGINIFQ=8THENAB<="1010";--序列數(shù)檢測正確,輸出“A”ELSEAB<="1011";--序列數(shù)檢測錯(cuò)誤,輸出“B”ENDIF;ENDPROCESS;ENDbehav;
習(xí)題
6-4.
根據(jù)圖6-14(a)所示的狀態(tài)圖,分別按照圖6-14(b)和圖6-14(c)寫出對應(yīng)結(jié)構(gòu)的VHDL狀態(tài)機(jī)。圖6-14習(xí)題6-4狀態(tài)圖習(xí)題
6-5.
在不改變原代碼功能的條件下用兩種方法改寫例6-2,使其輸出的控制信號(ALE、START、OE、LOCK)沒有毛刺。方法1:將輸出信號鎖存后輸出;方法2:使用狀態(tài)碼直接輸出型狀態(tài)機(jī),并比較這三種狀態(tài)機(jī)的特點(diǎn)。實(shí)驗(yàn)與實(shí)踐
6-1.
序列檢測器設(shè)計(jì)
6-2.ADC0809采樣控制電路實(shí)現(xiàn)6-3.
基于0809的數(shù)據(jù)采集電路和簡易存儲示波器設(shè)計(jì)
實(shí)驗(yàn)與實(shí)踐
圖6-15ADC0809采樣電路系統(tǒng):RSV.bdf
實(shí)驗(yàn)與實(shí)踐
【例6-12】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10BISPORT(LOCK0,CLR:INSTD_LOGIC;CLK:INSTD_LOGIC;WE:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(8DOWNTO0);CLKOUT:OUTSTD_LOGIC);ENDCNT10B;ARCHITECTUREbehavOFCNT10BISSIGNALCQI:STD_LOGIC_VECTOR(8DOWNTO0);SIGNALCLK0:STD_LOGIC;BEGINCLK0<=LOCK0WHENWE='1'ELSECLK;PROCESS(CLK0,CLR,CQI)BEGINIFCLR='1'THENCQI<="000000000";ELSIFCLK0'EVENTANDCLK0='1'THENCQI<=CQI+1;ENDIF;ENDPROCESS;DOUT<=CQI;CLKOUT<=CLK0;ENDbehav;
實(shí)驗(yàn)與實(shí)踐
6-4.
基于5510/5651的數(shù)字存儲示波器設(shè)計(jì)圖6-16存儲示波器結(jié)構(gòu)簡圖實(shí)驗(yàn)與實(shí)踐
6-4.
基于5510/5651的數(shù)字存儲示波器設(shè)計(jì)圖6-17TLC5510引腳圖
實(shí)驗(yàn)與實(shí)踐
6-4.
基于5510/5651的數(shù)字存儲示波器設(shè)計(jì)圖6-18TLC5510采樣時(shí)序圖實(shí)驗(yàn)與實(shí)踐
6-5.VGA彩條信號顯示控制器設(shè)計(jì)
圖6-19VGA行掃描、場掃描時(shí)序示意圖
實(shí)驗(yàn)與實(shí)踐
6-5.VGA彩條信號顯示控制器設(shè)計(jì)
表6-4行掃描時(shí)序要求:(單位:像素,即輸出一個(gè)像素Pixel的時(shí)間間隔)行同步頭行圖像行周期對應(yīng)位置TfTaTbTcTdTeTg時(shí)間(Pixels)8964086408800實(shí)驗(yàn)與實(shí)踐
6-5.VGA彩條信號顯示控制器設(shè)計(jì)
表6-5場掃描時(shí)序要求:(單元:行,即輸出一行Line的時(shí)間間隔)
對應(yīng)位置TfTaTbTcTdTeTg時(shí)間(Lines)222584808525行同步頭行圖像行周期實(shí)驗(yàn)與實(shí)踐
6-5.VGA彩條信號顯示控制器設(shè)計(jì)
圖6-20HS和VS的時(shí)序圖
實(shí)驗(yàn)與實(shí)踐
6-5.VGA彩條信號顯示控制器設(shè)計(jì)
圖6-20HS和VS的時(shí)序圖
實(shí)驗(yàn)與實(shí)踐
6-5.VGA彩條信號顯示控制器設(shè)計(jì)
表6-6顏色編碼顏色黑藍(lán)紅品綠青黃白R00001111G00110011B01010101實(shí)驗(yàn)與實(shí)踐
6-5.VGA彩條信號顯示控制器設(shè)計(jì)
【例6-13】LIBRARYIEEE;--VGA顯示器彩條發(fā)生器USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCOLORISPORT(CLK,MD:INSTD_LOGIC;HS,VS,R,G,B:OUTSTD_LOGIC);--行場同步/紅,綠,蘭ENDCOLOR;ARCHITECTUREbehavOFCOLORISSIGNALHS1,VS1,FCLK,CCLK:STD_LOGIC;SIGNALMMD:STD_LOGIC_VECTOR(1DOWNTO0);--方式選擇
SIGNALFS:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALCC:STD_LOGIC_VECTOR(4DOWNTO0);--行同步/橫彩條生成
SIGNALLL:STD_LOGIC_VECTOR(8DOWNTO0);--場同步/豎彩條生成
SIGNALGRBX:STD_LOGIC_VECTOR(3DOWNTO1);--X橫彩條
SIGNALGRBY:STD_LOGIC_VECTOR(3DOWNTO1);--Y豎彩條
SIGNALGRBP:STD_LOGIC_VECTOR(3DOWNTO1);SIGNALGRB:STD_LOGIC_VECTOR(3DOWNTO1);BEGINGRB(2)<=(GRBP(2)XORMD)ANDHS1ANDVS1;GRB(3)<=(GRBP(3)XORMD)ANDHS1ANDVS1;GRB(1)<=(GRBP(1)XORMD)ANDHS1ANDVS1;PROCESS(MD)(接下頁)
實(shí)驗(yàn)與實(shí)踐
6-5.VGA彩條信號顯示控制器設(shè)計(jì)
BEGINIFMD'EVENTANDMD='0'THENIFMMD="10"THENMMD<="00";ELSEMMD<=MMD+1
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南海區(qū)課題申報(bào)書
- 護(hù)理課題申報(bào)書范本
- 教學(xué)課題的申報(bào)書
- 合作購銷產(chǎn)品合同范例
- 商法學(xué)課題申報(bào)書
- 眼科課題申報(bào)書范文
- 江西省中醫(yī)課題申報(bào)書
- 【復(fù)習(xí)大串講】【中職專用】高二語文上學(xué)期期末綜合測試題(五)(職業(yè)模塊)(解析版)
- 做廣告物料合同范本
- 合作加工木炭合同范本
- 咨詢公司項(xiàng)目風(fēng)險(xiǎn)控制方案
- 2024年初一英語閱讀理解專項(xiàng)練習(xí)及答案
- 污水處理廠防水防腐工程施工方案
- 幕墻作業(yè)安全技術(shù)交底
- 食堂晨午檢制度
- 23J916-1 住宅排氣道(一)
- 《邊緣計(jì)算與人工智能應(yīng)用開發(fā)技術(shù)》全套教學(xué)課件
- 病例報(bào)告表(CRF)模板
- 2024年云南昆明市教育體育局直屬學(xué)校(單位)選調(diào)10人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- (完整版)建筑工程項(xiàng)目精益建造實(shí)施計(jì)劃書
- 幼兒園大班社會《服裝的由來》課件
評論
0/150
提交評論