EDA-第7講-狀態(tài)機的設計(選講)_第1頁
EDA-第7講-狀態(tài)機的設計(選講)_第2頁
EDA-第7講-狀態(tài)機的設計(選講)_第3頁
EDA-第7講-狀態(tài)機的設計(選講)_第4頁
EDA-第7講-狀態(tài)機的設計(選講)_第5頁
已閱讀5頁,還剩72頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

有限狀態(tài)機設計一、為什么要使用有限狀態(tài)機,什么是狀態(tài)機二、有限狀態(tài)機的分類及表示三、有限狀態(tài)機的設計舉例四、有限狀態(tài)機的狀態(tài)編碼五、有限狀態(tài)機的多余狀態(tài)為什么要使用狀態(tài)機

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

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

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

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

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

就可靠性而言,狀態(tài)機的優(yōu)勢也是十分明顯的?;貞浻嫈?shù)器設計設計一電路,包含模4計數(shù)器,和譯碼輸出模塊。計數(shù)器的輸出(Present_value)從0到3循環(huán);當計數(shù)值為2時,譯碼輸出(DataOut)為“1”,否則輸出“0”。Regs+1ClkPresent_valueQ(n)Next_valueQ(n+1)譯碼DataOutZ(n)Regs+1ClkPresent_valueQ(n)Next_valueQ(n+1)譯碼DataOutZ(n)00/001/010/111/0Regs+/-1ClkPresent_valueQ(n)Next_valueQ(n+1)譯碼DataOutZ(n)00/001/010/111/0擴展一個輸入端din,當din=1時計數(shù)器遞增計數(shù);當din=0時計數(shù)器遞減計數(shù)。dinDin=1Din=1Din=1Din=1Din=0Din=0Din=0Din=0Regs+/-1ClkPresent_valueQ(n)Next_valueQ(n+1)譯碼DataOutZ(n)再將計數(shù)器修改成一個狀態(tài)轉(zhuǎn)換器,狀態(tài)為S0,S1,S2,S3。每個狀態(tài)的取值根據(jù)具體情況而定。比如S0=00,S1=11,S3=01,S4=10。dinDin=1Din=1Din=1Din=100/001/010/111/0Din=0Din=0Din=0Din=0Regs譯碼ClkPresent_valueQ(n)Next_valueQ(n+1)譯碼DataOutZ(n)再將計數(shù)器修改成一個狀態(tài)轉(zhuǎn)換器,狀態(tài)為S0,S1,S2,S3。每個狀態(tài)的取值根據(jù)具體情況而定。比如S0=00,S1=11,S3=01,S4=10。dinDin=1Din=1Din=1Din=1S0/0S1/0S2/1S3/0Din=0Din=0Din=0Din=0Regs譯碼ClkPresent_stateQ(n)Next_stateQ(n+1)譯碼DataOutZ(n)dinDin=1Din=1Din=1Din=1S0/0S1/0S2/1S3/0Din=0Din=0Din=0Din=0現(xiàn)在我們得到了一個比較通用的時序電路,這種電路統(tǒng)稱為狀態(tài)機(StateMachine)。語音信箱控制系統(tǒng)用于控制對語音信箱的有關操作,允許用戶發(fā)送信息、重閱信息、存儲信息和擦除信息,狀態(tài)轉(zhuǎn)移圖如圖。狀態(tài)機的應用1、語音信箱控制系統(tǒng)設計一個空調(diào)系統(tǒng)的有限狀態(tài)自動機,它的兩個輸入端TEMP_HIGH和TEMP_LOW分別與傳感器相連,用于檢測室內(nèi)溫度。如果室內(nèi)溫度正常,則TEMP_HIGH和TEMP_LOW均為‘0’。如果室內(nèi)溫度過高,則TEMP_HIGH為‘1’,TEMP_LOW為‘0’。如果室內(nèi)溫度過低,則TEMP_HIGH為‘0’,TEMP_LOW為‘1’。根據(jù)TEMP_HIGH和TEMP_LOW的值來判斷當前的狀態(tài)(太熱TOO_HOT,太冷TOO_COLD或適中JUST_RIGHT),并決定HEAT和COOL的輸出值。狀態(tài)機的應用2、空調(diào)系統(tǒng)狀態(tài)機(STATEMACHINE)可以說是一個廣義時序電路,觸發(fā)器,計數(shù)器,移位寄存器都算是它的特殊功能的一種.

在電子設計自動化應用當中,狀態(tài)機經(jīng)常是擔任CPU的功能,從某種意義上講狀態(tài)機的應用讓系統(tǒng)具有了智能化的功能.

傳統(tǒng)的邏輯電路設計在描述狀態(tài)機的表示上,以狀態(tài)圖(STATEDIAGRAM)方式最為清晰且容易理解.根據(jù)輸入,輸出及狀態(tài)關系,狀態(tài)圖可以分為:1.狀態(tài)&輸出(輸出僅與狀態(tài)有關)2.輸入&狀態(tài)&輸出(輸出與狀態(tài)輸入有關)有限狀態(tài)機可以高效的用來實現(xiàn)控制功能。狀態(tài)機可以分為兩種基本類型:Mealy型狀態(tài)機和Moore型狀態(tài)機。

Moore型狀態(tài)機的輸出僅是當前狀態(tài)的函數(shù),屬于同步輸出狀態(tài)機。

Mealy型狀態(tài)機的輸出是當前狀態(tài)和輸入信號的函數(shù),不依賴時鐘的同步,屬于異步輸出狀態(tài)機。狀態(tài)機分類

數(shù)字系統(tǒng)控制單元通常用有限狀態(tài)機(FSM)建模。Moore型的輸出只是當前值的函數(shù);Mealy型的輸出為當前值和輸入值的函數(shù)。模型如圖所示。Moore型Mealy型狀態(tài)機的表示方法1方法一:狀態(tài)轉(zhuǎn)換表輸入當前狀態(tài)下一狀態(tài)輸出0000001010000000…………狀態(tài)機的表示方法2方法二:算法流程圖方法與軟件程序的流程圖類似狀態(tài)轉(zhuǎn)換表和算法流程圖都不適合復雜系統(tǒng)的設計狀態(tài)機的表示方法3方法三:狀態(tài)轉(zhuǎn)換圖狀態(tài)1狀態(tài)4狀態(tài)2狀態(tài)3入/出入入入/出/出/出Moore條件控制定序直接控制定序狀態(tài)機的表示方法3方法三:狀態(tài)轉(zhuǎn)換圖狀態(tài)1狀態(tài)4狀態(tài)2狀態(tài)3入/出入入入/出/出/出/出Mealy條件控制定序直接控制定序狀態(tài)機的代碼實現(xiàn)狀態(tài)寄存器輸出譯碼下一狀態(tài)譯碼clk時序進程組合進程1.說明部分2.時序進程ARCHITECTURE

...

IS

TYPE

ST

IS(s0,s1,s2,s3);

SIGNALcurrent_state,next_state:

ST;...3.組合進程在時鐘信號的作用下,負責狀態(tài)的轉(zhuǎn)換。4.輔助進程根據(jù)輸入信號和當前狀態(tài)的取值(current_state)確定下一狀態(tài)(next_state)的取值,確定輸出或產(chǎn)生內(nèi)部其它組合進程或時序進程所需的控制信號。配合時序進程或組合進程工作的數(shù)據(jù)鎖存器等進程。有限狀態(tài)機的程序構(gòu)成用戶自定義數(shù)據(jù)類型定義語句TYPE語句用法如下:TYPE

數(shù)據(jù)類型名IS

數(shù)據(jù)類型定義OF

基本數(shù)據(jù)類型;或TYPE

數(shù)據(jù)類型名IS

數(shù)據(jù)類型定義;以下列出了兩種不同的定義方式:TYPEst1ISARRAY(0TO15)OFSTD_LOGIC;TYPEweek

IS(sun,mon,tue,wed,thu,fri,sat);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';狀態(tài)機的設計舉例例子:設計一個二進制序列檢測器,當檢測到10110序列時,就輸出1(一個時鐘周期的脈沖)。其他情況下輸出0。規(guī)定檢測到一次之后,檢測器復位到最初始的狀態(tài),重新從頭檢測。如下所示:輸入:01101101101100輸出:00000001000001狀態(tài)轉(zhuǎn)換圖設計(Moore)10110S0/0S1/0S2/0S3/0S4/0S5/1Reset11001101001010110s1s2s3s4s5s0問題1:如何保證狀態(tài)機在初始時狀態(tài)為s0?問題2:在狀態(tài)機跑飛,即脫離有效狀態(tài)(s0—s5)時,如何使狀態(tài)機能恢復工作Sx/0波形波形如下圖所示問題:如果需要將輸出脈沖往前推一個時鐘周期,該如何修改設計?1011010110s1s2s3s4s5s0輸入時鐘輸出當前狀態(tài)發(fā)現(xiàn)當當前壯態(tài)為s4,并且輸入為0時,輸出為1。狀態(tài)轉(zhuǎn)換圖設計(Mealy)S0S1S2S3S4S5Reset100110100101sX/0/0/0/0/0/0/0/0/0/1/0/01011010110s1s2s3s4s5s0/00/1s0狀態(tài)機的代碼實現(xiàn)狀態(tài)定義ArchitecturertlofSynis…-- 其他信號定義。TypeSynFsmStateis(s0,s1,s2,s3,s4,s5);SignalSynCst,SynNst:SynFsmState;Begin…--結(jié)構(gòu)體。Endrtl;狀態(tài)機的代碼實現(xiàn)狀態(tài)寄存器進程描述狀態(tài)寄存器輸出譯碼下一狀態(tài)譯碼clk狀態(tài)機的代碼實現(xiàn)狀態(tài)寄存器進程描述狀態(tài)寄存器輸出譯碼下一狀態(tài)譯碼當前狀態(tài)輸出下一狀態(tài)輸入時鐘clk狀態(tài)寄存器進程描述Process(clk,Reset)Beginif(Reset=‘1’)then

SynCst<=S0;--初始狀態(tài)。

elsif(clk’eventandclk=‘1’)then

SynCst<=SynNst;--狀態(tài)轉(zhuǎn)換。

endif;Endprocess;狀態(tài)機的代碼實現(xiàn)狀態(tài)轉(zhuǎn)換進程描述狀態(tài)寄存器輸出譯碼下一狀態(tài)譯碼當前狀態(tài)輸出下一狀態(tài)輸入時鐘clk狀態(tài)轉(zhuǎn)換進程描述Process(SynCst,din)BegincaseSynCstiswhens0=>whens1=>…

whens5=>…Endcase;Endprocess;

if(din=‘1’)then

SynNst<=s1;else

SynNst<=s0;endif;

whenothers=>

SynNst<=s0;狀態(tài)機的代碼實現(xiàn)輸出進程描述狀態(tài)寄存器輸出譯碼下一狀態(tài)譯碼當前狀態(tài)輸出下一狀態(tài)輸入時鐘clk輸出進程描述Process(SynCst)BegincaseSynCstiswhens0=>

whens1=>…whens5=>…whenothers=>

Endcase;Endprocess;MooreMealyDout<=‘0’;Dout<=‘0’;Dout<=‘0’if(din=‘1’)thenelseendif;,din)狀態(tài)機設計小結(jié)Moore機的輸出z僅是當前狀態(tài)q的函數(shù);而Mealy機的輸出z是q和輸入a的函數(shù);Mealy機的輸出z可以比Moore機早一個時鐘周期;Mealy機中,輸入端的干擾容易被傳播到輸出端,而Moore機則不會。這是Moore機比Mealy機穩(wěn)定的地方。狀態(tài)機設計小結(jié)記得使用others來包含所有的“無效態(tài)”,以保證狀態(tài)機的安全運作。任何狀態(tài),任何條件下,都應該對“次態(tài)”和所有的輸出z賦值,以避免生成鎖存

下面采用狀態(tài)機設計一個一位比較器,比較兩個一位串行二進制數(shù)n1,n2的大小,二進制數(shù)序列由低位向高位按時鐘節(jié)拍逐位輸入。分析:兩數(shù)比較有三種結(jié)果:

n1=n2設為狀態(tài)s1;輸出為y=00;

n1>n2設為狀態(tài)s2;輸出為y=10;

n1<n2設為狀態(tài)s3;輸出為y=01;輸入有四種情況,分別為00,01,10,11。

1.

雙進程有限狀態(tài)機描述如下:

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

entitystateis port(n1,n2,clk:instd_logic; y:outstd_logic_vector(1downto0)); endstate;architecturestamachofstateistypestatypeis(s1,s2,s3);--自定義statype類型

signalpresent_state,next_state:statype;signaln:std_logic_vector(1downto0);begin n<=n1&n2;

sta_com:process(present_state,n)begin casepresent_stateis whens1=>y<=”00”;--現(xiàn)態(tài)為s1時,輸出”00” if(n=”10”)thennext_state<=s2;--輸入為”10”,次態(tài)為s2

elsif(n=”01”)thennext_state<=s3;--輸入為”01”,次態(tài)為s3 elsenext_state<=s1;endif;whens2=>y<=”10”; if(n=”01”)thennext_state<=s3;

elsif(n=”00”orn=”11”)thennext_state<=s1; elsenext_state<=s2; endif;whens3=>y<=”01”; if(n=”10”)thennext_state<=s2;

elsif(n=”00”orn=”11”)thennext_state<=s1; elsenext_state<=s3; endif;endcase;endprocesssta_com;

state_clk:process(clk)--第二個進程確定轉(zhuǎn)換時刻為上升沿

begin if(clk’eventandclk=’1’)then present_state<=next_state; endif; endprocessstate_clk; endarchitecturestamach;architecturestamachofstateis typestatypeis(s1,s2,s3);--自定義statype類型

signalstate:statype;signaln:std_logic_vector(1downto0);begin n<=n1&n2; process(clk,n) begin ifrising_edge(clk)thencasestateis whens1=>if(n=”10”)thenstate<=s2;--根據(jù)不同的輸入改變state的狀態(tài)

elsif(n=”01”)thenstate<=s3; elsestate<=s1; endif;2.單進程狀態(tài)機結(jié)構(gòu)體描述如下:hens2=>if(n=”01”)thenstate<=s3;

elsif(n=”00”orn=”11”)thenstate<=s1; elsestate<=s2; endif; whens3=> if(n1=’1’andn2=’0’)thenstate<=s2;

elsif(n=”00”orn=”11”)thenstate<=s1; elsestate<=s3; endif; endcase; endif; endprocess; withselect--根據(jù)state的不同狀態(tài)決定不同的輸出值

y<=”00”whens1,“01”whens2,“10”whens3; endbehave;

architecturestamachofstateissignalstate:std_logic_vector(1downto0);--不采用自定義類型,直接對state編碼

constants1:std_logic_vector(1downto0):=”00”;constants2:std_logic_vector(1downto0):=”01”;constants3:std_logic_vector(1downto0):=”11”;signaln:std_logic_vector(1downto0);begin n<=n1&n2; process(clk,n) begin ifrising_edge(clk)then

3.狀態(tài)編碼描述風格casestateiswhens1=>if(n=”10”)thenstate<=s2;--根據(jù)不同的輸入改變state的值

elsif(n=”01”)thenstate<=s3; elsestate<=s1;endif;

whens2=> if(n=”01”)thenstate<=s3;

elsif(n=”00”orn=”11”)thenstate<=s1; elsestate<=s2; endif;whens3=> if(n1=’1’andn2=’0’)thenstate<=s2;

elsif(n=”00”orn=”11”)thenstate<=s1; elsestate<=s3; endif; endcase; endif; endprocess; y<=state; endbehave;狀態(tài):S0表示初態(tài),S1表示投入5角硬幣,

S2表示投入1元硬幣,S3表示投入1元5角硬幣,

S4表示投入2元硬幣輸入:state_input(0)投入1元硬幣,

state_input(1)投入5角硬幣輸出:comb_outputs(0)輸出貨物,

comb_outputs(1)找5角零錢例1:投入1元5角硬幣輸出貨物,投入2元硬幣輸出貨物并找5角零錢的自動售貨機。根據(jù)需求列寫狀態(tài)圖。S0/00S2/00S1/00S3/10S4/11011000000110000110000110000110狀態(tài)/輸出輸入信號狀態(tài):S0、S1、S2、S3、S4;輸入:state_inputs輸出:comb_outputs;輸出僅與狀態(tài)有關LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmoore1ISPORT(clk,reset:INSTD_LOGIC;state_inputs:INSTD_LOGIC_VECTOR(0TO1);comb_outputs:OUTSTD_LOGIC_VECTOR(0TO1));ENDmoore1;ARCHITECTUREbehvOFmoore1IS

TYPEFSM_STIS(s0,s1,s2,s3,s4);SIGNALcurrent_state,next_state:FSM_ST;BEGINREG:PROCESS(reset,clk)

BEGINIFreset='1'THENcurrent_state<=s0;ELSIFclk='1'ANDclk'EVENTTHENcurrent_state<=next_state;ENDIF;

ENDPROCESS;

時序進程狀態(tài)定義COM:PROCESS(current_state,state_Inputs)

BEGINCASEcurrent_stateIS

WHENs0=>comb_outputs<="00";IFstate_inputs="00"THENnext_state<=s0;ELSIFstate_inputs="01"THENnext_state<=s1;ELSIFstate_inputs="10"THENnext_state<=s2;ENDIF;

WHENs1=>comb_outputs<="00";IFstate_inputs="00"THENnext_state<=s1;ELSIFstate_inputs="01"THENnext_state<=s2;ELSIFstate_inputs="10"THENnext_state<=s3;ENDIF;

WHENs2=>comb_outputs<="00";IFstate_inputs="00"THENnext_state<=s2;ELSIFstate_inputs="01"THENnext_state<=s3;ELSIFstate_inputs="10"THENnext_state<=s4;ENDIF;組合進程Moore型狀態(tài)機

WHENs3=>comb_outputs<="10";IFstate_inputs="00"THENnext_state<=s0;ELSIFstate_inputs="01"THENnext_state<=s1;ELSIFstate_inputs="10"THENnext_state<=s2;ENDIF;

WHENs4=>comb_outputs<="11";IFstate_inputs="00"THENnext_state<=s0;ELSIFstate_inputs="01"THENnext_state<=s1;ELSIFstate_inputs="10"THENnext_state<=s2;ENDIF;ENDCASE;

ENDPROCESS;

ENDbehv;投入2元硬幣S0→S2→S4投入1元5角硬幣S0→S1→S2→S3清零信號Si→S0自動售貨機moore1.vhd仿真波形:St0St2St1St31/000000/010101/001000/011101/000100/01100St40/000011/010110/000111/01101單端輸入1→0→1→0→1時,狀態(tài)依次改變,5位輸出依次從0→1→2→3→4變化,否則對應輸出為10,11,12,13,14。輸出與狀態(tài)和輸入有關。狀態(tài)輸入/輸出例2實現(xiàn)給定Mealy型狀態(tài)機的狀態(tài)圖。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)的進程

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

CASESTXISWHENst0=>STX<=st1;WHENst1=>STX<=st2;WHENst2=>STX<=st3;WHENst3=>STX<=st4;WHENst4=>STX<=st0;WHENOTHERS=>STX<=st0;ENDCASE;ENDIF;ENDPROCESSCOMREG;COM1:PROCESS(STX,DATAIN)BEGIN--決定輸出信號的進程

CASESTXISWHENst0=>

IFDATAIN='1'THENQ<="00000";ELSEQ<="01010";ENDIF;WHENst1=>

IFDATAIN='0'THENQ<="00001";ELSEQ<="01011";ENDIF;

WHENst2=>

IFDATAIN='1'THENQ<="00010";ELSEQ<="01100";ENDIF;WHENst3=>

IFDATAIN='0'THENQ<="00011";ELSEQ<="01101";ENDIF;

WHENst4=>

IFDATAIN='1'THENQ<="00100";ELSEQ<="01110";ENDIF;

WHENOTHERS=>Q<="11111";ENDCASE;ENDPROCESSCOM1;ENDbehav;Mealy型狀態(tài)機系統(tǒng)復位輸出隨輸入改變時鐘到來,狀態(tài)及輸出改變仿真波形看出:輸出信號不穩(wěn)定。可以在程序中將輸出信號鎖存后再輸出,參考程序mealy2.vhd。Mealy型狀態(tài)機mealy1.vhd仿真波形:LIBRARYIEEE;USEIEEE.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)的進程BEGINIFRESET='1'THENSTX<=ST0;ELSIFCLK'EVENTANDCLK='1'THENCASESTXISWHENst0=>STX<=st1;WHENst1=>STX<=st2;WHENst2=>STX<=st3;WHENst3=>STX<=st4;WHENst4=>STX<=st0;WHENOTHERS=>STX<=st0;ENDCASE;ENDIF;ENDPROCESSCOMREG;COM1:PROCESS(STX,DATAIN,CLK)--決定輸出信號的進程BEGINCASESTXISWHENst0=>IFDATAIN='1'THENQ1<="00000";ELSEQ1<="01010";ENDIF;WHENst1=>IFDATAIN='0'THENQ1<="00001";ELSEQ1<="01011";ENDIF;WHENst2=>IFDATAIN='1'THENQ1<="00010";ELSEQ1<="01100";ENDIF;WHENst3=>IFDATAIN='0'THENQ1<="00011";ELSEQ1<="01101";ENDIF;WHENst4=>IFDATAIN='1'THENQ1<="00100";ELSEQ1<="01110";ENDIF;WHENOTHERS=>Q1<="11111";ENDCASE;IFCLK'EVENTANDCLK='1'THENQ<=Q1;ENDIF;ENDPROCESSCOM1;ENDbehav;輸出信號鎖存系統(tǒng)復位輸出只在時鐘邊沿處改變從仿真波形看到輸出信號穩(wěn)定。Mealy型狀態(tài)機修改程序mealy2.vhd仿真波形:mealy2.vhd比mealy1.vhd的描述滯后一個時鐘周期。用文字符號定義狀態(tài)變量的符號化狀態(tài)編碼。例如:moore.vhd、mealy1.vhd、mealy1.vhd根據(jù)設計需要,人為設定非符號狀態(tài)編碼,且將狀態(tài)編碼作為輸出信號。例如:ad574a.vhd由綜合器自動選擇編碼狀態(tài)編碼通??梢杂袔追N方式:

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 01 低4位加上尾隨4個0有效AD574時序圖AD574真值表

AD574采樣控制狀態(tài)機結(jié)構(gòu)圖可以將兩個組合進程合并為一個進程,將狀態(tài)編碼設計成輸出信號。

CSA0RCK12/8STATUSD[11..0]AD574模擬信號輸入PROCESSREG時序進程PROCESSCOM組合進程PROCESSLATCH鎖存器current_statenext_stateLKCLKQ[11..0]采樣數(shù)據(jù)輸出AD574采樣控制狀態(tài)機結(jié)構(gòu)圖AD574采樣控制狀態(tài)圖狀態(tài)狀態(tài)編碼out4(3~0)功能說明STCSA0RCLKBST011100初態(tài)ST100001啟動轉(zhuǎn)換ST200000若測得status=1,轉(zhuǎn)下一狀態(tài)ST300100輸出轉(zhuǎn)換后的數(shù)據(jù)ST400110產(chǎn)生LK邊沿,將轉(zhuǎn)換數(shù)據(jù)鎖存

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;ARCHITECTUREbehavOFAD574AIS

SIGNALcurrent_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)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;OUT4<=current_state(4DOWNTO1);ENDPROCESSCOM1;REG:PROCESS(CLK)--時序進程

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

BEGINIFLK='1'ANDLK'EVENTTHENREGL<=D;ENDIF;ENDPROCESS;Q<=REGL;ENDbehav;正在轉(zhuǎn)換轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換結(jié)束順序編碼格雷編碼ONE-HOT編碼S0=“00”S0=“00”S0=“0001”S1=“01”S1=“01”S1=“0010”S2=“10”S2=“11”S2=“0100”S3=“11”S3=“10”S3=“1000”......SIGNALCRURRENT_STATE,NEXT_STATE:STD_LOGIC_VECTOR(1DOWNTO0);CONSTANTS0:STD_LOGIC_VECTOR(2DOWNTO0):="00";CONSTANTS1:STD_LOGIC_VECTOR(2DOWNTO0):="01";CONSTANTS2:STD_LOGIC_VECTOR(2DOWNTO0):="10";CONSTANTS3:STD_LOGIC_VECTOR(2DOWNTO0):="11";......狀態(tài)機編碼方式設置一位熱碼編碼(One-hotencoding)的設置打開編譯窗口,選擇assign/globalprojectlogicsynthesis...TYPEstatesIS(st0,st1,st2,st3,st4,st_ilg1,st_ilg2,st_ilg3);SIGNALcurrent_state,next_state:states;...COM:PROCESS(current_state,state_Inputs)--組合邏輯進程BEGINCASEcurrent_stateIS--確定當前狀態(tài)的狀態(tài)值

...

WHENOTHERS=>next_state<=st0;

ENDcase;如:有效狀態(tài)st0~~st4;無效狀態(tài)st_ilg1~

st_ilg3多余狀態(tài)的產(chǎn)生、問題及其處理方法

功能要求:主輔十字路口,分別有紅、黃、綠和左轉(zhuǎn)彎燈,等待時間,系統(tǒng)復位控制。燈持續(xù)時間及其要求如下:主路燈輔路燈持續(xù)時間RYGLRYGL(S)0010100050010010005100110001510000010401000010051000100110狀態(tài)機設計舉例:實用交通燈設計。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.ST

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論