版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
EDA技術(shù)實用教程第7章有限狀態(tài)機(jī)設(shè)計7.1一般有限狀態(tài)機(jī)的設(shè)計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;數(shù)組數(shù)據(jù)類型TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);枚舉數(shù)據(jù)類型數(shù)據(jù)類型詳見p231TYPEm_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';符號化狀態(tài)機(jī):用文字符號表示二進(jìn)制數(shù)。確定化狀態(tài)機(jī):直接用數(shù)值表示。子類型SUBTYPE的語句格式如下:SUBTYPE子類型名IS根本數(shù)據(jù)類型RANGE約束范圍;
SUBTYPEdigitsISINTEGERRANGE0to9;沒有定義新的數(shù)據(jù)類型7.1.2為什么要使用狀態(tài)機(jī)狀態(tài)機(jī)克服了純硬件數(shù)字系統(tǒng)順序方式控制不靈活的缺點(diǎn)狀態(tài)機(jī)的結(jié)構(gòu)模式相對簡單,設(shè)計方案相對固定。狀態(tài)機(jī)容易構(gòu)成性能良好的同步時序邏輯模塊〔消除毛刺〕狀態(tài)機(jī)的VHDL表述豐富多樣,程序?qū)哟吻宄?,結(jié)構(gòu)清晰。在高速運(yùn)算和控制方面,狀態(tài)機(jī)更有其巨大的優(yōu)勢。就可靠性而言,狀態(tài)機(jī)的優(yōu)勢也是十清楚顯的。比照與VHDL的其他設(shè)計方案或CPU相比
VHDL綜合器易于優(yōu)化(結(jié)構(gòu)模式相對簡單,設(shè)計方案相對固定)易構(gòu)成性能良好的時序邏輯模塊〔消除毛刺〕結(jié)構(gòu)模式簡單、層次清楚、易讀易懂、易排錯運(yùn)行模式類似于CPU,易于進(jìn)行順序控制
利用同步時序和全局時鐘線可實現(xiàn)高速FSM高可靠性,非法狀態(tài)易控制
(高速運(yùn)算和控制方面,狀態(tài)機(jī)更優(yōu)勢)(優(yōu)勢明顯)7.1.2為什么要使用狀態(tài)機(jī)與VHDL的其他設(shè)計方案或CPU相比7.1.3一般有限狀態(tài)機(jī)的設(shè)計用VHDL設(shè)計的狀態(tài)機(jī)有多種形式從信號輸出方式分:Mealy型狀態(tài)機(jī)和Moore型狀態(tài)機(jī)從結(jié)構(gòu)上分:單進(jìn)程狀態(tài)機(jī)和多進(jìn)程狀態(tài)機(jī)從狀態(tài)表達(dá)方式上分:符號化狀態(tài)機(jī)、確定狀態(tài)編碼狀態(tài)機(jī)從編碼方式上分:順序編碼狀態(tài)機(jī)、一位熱碼編碼狀態(tài)機(jī)或其他編碼方式狀態(tài)機(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;...FSM〔FiniteState_Machine〕負(fù)責(zé)狀態(tài)機(jī)運(yùn)轉(zhuǎn),在時鐘驅(qū)動下負(fù)責(zé)狀態(tài)轉(zhuǎn)換的進(jìn)程。
一般狀態(tài)機(jī)包含如下四個局部:3.
主控組合進(jìn)程根據(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)程用于配合狀態(tài)機(jī)工作的組合進(jìn)程或時序進(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_machineIS
TYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;BEGIN
REG:PROCESS(reset,clk)--主控時序進(jìn)程
BEGINIFreset=‘1’THENcurrent_state<=s0;--異步復(fù)位ELSIFclk='1'ANDclk'EVENTTHENcurrent_state<=next_state;ENDIF;ENDPROCESS;--信號current_state將值帶出此進(jìn)程
COM:PROCESS(current_state,state_Inputs)
--接下頁BEGINCASEcurrent_stateISWHENs0=>comb_outputs<=5;--
輸出僅取決于現(xiàn)態(tài)IFstate_inputs="00"THENnext_state<=s0;ELSEnext_state<=s1;--輸入決定次態(tài)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ī)的工作時序圖clkResetState_inputsCurrent_stateNext_stateComb_outputsx1xxs0x5000/xxs0s0/s15000/xxs1s1/s28011/xxs2s0/s312011/xxs3s3/s014狀態(tài)轉(zhuǎn)換圖輸出僅取決于現(xiàn)態(tài)與輸入無關(guān);輸入僅決定次態(tài)Moore型對照7.2Moore型有限狀態(tài)機(jī)的設(shè)計7.2.1多進(jìn)程有限狀態(tài)機(jī)AD754:采樣周期約為20us,采樣50個點(diǎn)需花時20us×50=1ms51單片機(jī):控制完成一次采樣最少需30條指令,設(shè)單片機(jī)頻率為12MHz,一次采樣花時30×2+20〔等待時間〕=80us,采樣50個點(diǎn)需花時80us×50=4msFPGA:控制完成一次采樣需4~5個狀態(tài),假設(shè)FPGA時鐘頻率為100MHz,一次采樣需花時10ns×5=50ns采樣50個點(diǎn)需花時50ns×50=2.5us圖7-3AD0809工作時序和引腳圖
用狀態(tài)機(jī)對AD0809進(jìn)行采樣控制的設(shè)計方法
狀態(tài)地址鎖存轉(zhuǎn)換啟動輸出有效輸出的數(shù)字信號01243表7-1AD0809邏輯控制真值表ALESTARTLOCKOEEOC
工作狀態(tài)
0 0 0 0 1 0_初始化
1 1 0 0 0 1_啟動采樣
0 0 0 0 0 2_轉(zhuǎn)換未結(jié)束
0 0 0 0 1 2_轉(zhuǎn)換結(jié)束
0 0 0 11 3_輸出轉(zhuǎn)換好的數(shù)據(jù)0 0 1 1 14_輸出數(shù)據(jù)送到鎖存器狀態(tài)地址鎖存轉(zhuǎn)換啟動輸出有效內(nèi)部鎖存圖7-4AD0809采樣狀態(tài)圖PROCESSREG時序進(jìn)程PROCESSCOM組合進(jìn)程PROCESSLATCH1鎖存器current_statenext_stateLOCK狀態(tài)機(jī)FSMFPGA/CPLDCLK狀態(tài)機(jī)工作時鐘ADC0809Q[7..0]模擬信號輸入采樣數(shù)據(jù)輸出A/D工作時鐘clk=750KHz
ALESTARTOEADDAEOCD[7..0]圖7-5采樣狀態(tài)機(jī)結(jié)構(gòu)框圖
【例7-2】
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYAD0809ISPORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);CLK,EOC:INSTD_LOGIC;
--狀態(tài)機(jī)時鐘CLK,AD0809工作狀態(tài)信號EOCLOCK0:OUTSTD_LOGIC;
--內(nèi)部鎖存信號LOCK的測試信號
ALE,START,OE,ADDA:OUTSTD_LOGIC;--AD0809控制信號
Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--鎖存數(shù)據(jù)輸出ENDAD0809;ARCHITECTUREbehavOFAD0809IS
TYPEstatesIS(st0,st1,st2,st3,st4);SIGNALcurrent_state,next_state:states:=st0;SIGNALREGL:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALLOCK:STD_LOGIC;BEGINADDA<=‘1’;--模擬信號進(jìn)入0809通道1接下頁
接上頁
Q<=REGL;LOCK0<=LOCK;
COM:PROCESS(current_state,EOC)--決定各狀態(tài)轉(zhuǎn)換方式BEGINCASEcurrent_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;--轉(zhuǎn)換結(jié)束ELSEnext_state<=st2;--轉(zhuǎn)換未結(jié)束,等待轉(zhuǎn)換ENDIF;WHENst3=>ALE<='0';START<='0';LOCK<='0';OE<='1';next_state<=st4;--開啟OE,輸出有效
WHENst4=>ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=st0;--鎖存數(shù)據(jù)WHENOTHERS=>next_state<=st0;ENDCASE;ENDPROCESSCOM;接下頁REG:PROCESS(CLK)--時序進(jìn)程
BEGINIF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;ENDIF;ENDPROCESSREG;
--信號current_state將值帶出此進(jìn)程
LATCH1:PROCESS(LOCK)--數(shù)據(jù)鎖存器進(jìn)程
BEGINIFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;ENDIF;ENDPROCESS;--在LOCK的上升沿將轉(zhuǎn)換好的數(shù)據(jù)鎖入ENDbehav;接上頁圖7-6AD0809采樣狀態(tài)機(jī)工作時序ALESTARTLOCKOEEOC
工作狀態(tài)
0 0 0 0 1 0_初始化
1 1 0 0 X 1_啟動采樣
0 0 0 0 0 2_轉(zhuǎn)換未結(jié)束
0 0 0 0 1 2_轉(zhuǎn)換結(jié)束
0 0 0 11 3_輸出轉(zhuǎn)換好的數(shù)據(jù)0 0 1 1 14_輸出數(shù)據(jù)送到鎖存器
【例7-3】COM1:PROCESS(current_state,EOC)–-狀態(tài)轉(zhuǎn)換的進(jìn)程BEGINCASEcurrent_stateISWHENst0=>next_state<=st1;WHENst1=>next_state<=st2;WHENst2=>IF(EOC='1')THENnext_state<=st3;ELSEnext_state<=st2;ENDIF;WHENst3=>next_state<=st4;WHENst4=>next_state<=st0;WHENOTHERS=>next_state<=st0;ENDCASE;ENDPROCESSCOM1;
接下頁【例7-2】中的組合進(jìn)程COM可以分成兩個組合進(jìn)程
COM2:PROCESS(current_state)--輸出控制信號的進(jìn)程
BEGINCASEcurrent_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;
接上頁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;ARCHITECTUREbehavOFMOORE1IS
TYPEST_TYPEIS(ST0,ST1,ST2,ST3,ST4);SIGNALC_ST:ST_TYPE;BEGIN
PROCESS(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〞;--輸出Q只與現(xiàn)狀態(tài)有關(guān),與輸入無關(guān)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;接上頁clkRSTDATAINCurrent_stateNext_stateQx1xxST0x0000010/xxST0ST1/ST01001011/xxST1ST2/ST10101001/xxST2ST3/ST01100000/xxST3ST4/ST20010011/xxST4ST0/ST31001狀態(tài)轉(zhuǎn)換圖C_ST輸出僅取決于現(xiàn)態(tài),與輸入無關(guān);(輸入僅決定次態(tài));Moore型對照圖7-8例7-4單進(jìn)程狀態(tài)機(jī)工作時序優(yōu)點(diǎn):輸出信號不會出現(xiàn)毛刺缺點(diǎn):輸出信號Q比多進(jìn)程狀態(tài)機(jī)的輸出晚一個時鐘周期對照圖7-9對應(yīng)于例7-4的二進(jìn)程狀態(tài)機(jī)工作時序圖優(yōu)點(diǎn):輸出信號Q比單進(jìn)程狀態(tài)機(jī)的輸出早一個時鐘周期缺點(diǎn):輸出信號有毛刺對照7.3Mealy型有限狀態(tài)機(jī)的設(shè)計【例7-5】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMEALY1ISPORT(CLK,DATAIN,RESET:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDMEALY1;ARCHITECTUREbehavOFMEALY1IS
TYPEstatesIS(st0,st1,st2,st3,st4);SIGNALSTX:states;BEGIN
COMREG:PROCESS(CLK,RESET)--決定轉(zhuǎn)換狀態(tài)的進(jìn)程
BEGINIFRESET='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)--輸出控制信號的進(jìn)程
BEGINCASESTXISWHENst0=>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;接上頁
clkRESETDATAINCurrent_stateNext_stateQx1xxST0xxx01/0ST0ST1/ST010000/0101000/1ST1ST2/ST110111/1010001/0ST2ST3/ST210101/1001100/1ST3ST4/ST311011/0100101/0ST4ST0/ST411101/01101狀態(tài)轉(zhuǎn)換圖STX輸出不僅取決于現(xiàn)態(tài),還與輸入有關(guān);Mealy型對照圖7-10例7-5狀態(tài)機(jī)工作時序圖缺點(diǎn):輸出信號Q是由組合電路直接產(chǎn)生,故有毛刺。對照【例7-6】MEALY2LIBRARYIEEE;--MEALYFSMUSEIEEE.STD_LOGIC_1164.ALL;ENTITYMEALY2ISPORT(CLK,DATAIN,RESET:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(4DOWNTO0));ENDMEALY2;ARCHITECTUREbehavOFMEALY2IS
TYPEstatesIS(st0,st1,st2,st3,st4);SIGNALSTX:states;
SIGNALQ1:STD_LOGIC_VECTOR(4DOWNTO0);BEGIN
COMREG:PROCESS(CLK,RESET)--決定轉(zhuǎn)換狀態(tài)的進(jìn)程
BEGINIFRESET='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,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=
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- JJF 2180-2024嬰兒輻射保暖臺校準(zhǔn)規(guī)范
- 語文工作計劃
- 電商工作計劃范文
- 十一國慶節(jié)七天假期安全教案
- 工作前安全分析管理規(guī)定
- 2025年AE活性酯市場調(diào)查報告
- 買賣合同五篇
- 七年級班務(wù)工作計劃
- 制定班級德育個人工作計劃
- 企業(yè)培訓(xùn)心得體會
- 互聯(lián)網(wǎng)+創(chuàng)新商業(yè)模式考核試卷
- 江蘇省揚(yáng)州市梅嶺中學(xué)2023-2024學(xué)年七年級上學(xué)期期末地理試題(含答案)
- 克羅恩病病例分析
- Lesson-1.-spring-festival(雙語課件-春節(jié))
- 消防聯(lián)動調(diào)試記錄(2)
- 追求“真實、樸實、扎實”的語文課堂
- 螺桿空壓機(jī)操作規(guī)程完整
- 702班素質(zhì)評價觀測學(xué)生填寫完成情況檢查
- 大學(xué)學(xué)院成績單(模板)
- 奧林燃燒器說明書(GP130-150H)
- 績效管理模塊-績效管理與績效考核制度
評論
0/150
提交評論