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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

就可靠性而言,狀態(tài)機(jī)的優(yōu)勢也是十分明顯的?;貞浻?jì)數(shù)器設(shè)計(jì)設(shè)計(jì)一電路,包含模4計(jì)數(shù)器,和譯碼輸出模塊。計(jì)數(shù)器的輸出(Present_value)從0到3循環(huán);當(dāng)計(jì)數(shù)值為2時(shí),譯碼輸出(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擴(kuò)展一個(gè)輸入端din,當(dāng)din=1時(shí)計(jì)數(shù)器遞增計(jì)數(shù);當(dāng)din=0時(shí)計(jì)數(shù)器遞減計(jì)數(shù)。dinDin=1Din=1Din=1Din=1Din=0Din=0Din=0Din=0Regs+/-1ClkPresent_valueQ(n)Next_valueQ(n+1)譯碼DataOutZ(n)再將計(jì)數(shù)器修改成一個(gè)狀態(tài)轉(zhuǎn)換器,狀態(tài)為S0,S1,S2,S3。每個(gè)狀態(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)再將計(jì)數(shù)器修改成一個(gè)狀態(tài)轉(zhuǎn)換器,狀態(tài)為S0,S1,S2,S3。每個(gè)狀態(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)在我們得到了一個(gè)比較通用的時(shí)序電路,這種電路統(tǒng)稱為狀態(tài)機(jī)(StateMachine)。語音信箱控制系統(tǒng)用于控制對語音信箱的有關(guān)操作,允許用戶發(fā)送信息、重閱信息、存儲(chǔ)信息和擦除信息,狀態(tài)轉(zhuǎn)移圖如圖。狀態(tài)機(jī)的應(yīng)用1、語音信箱控制系統(tǒng)設(shè)計(jì)一個(gè)空調(diào)系統(tǒng)的有限狀態(tài)自動(dòng)機(jī),它的兩個(gè)輸入端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的值來判斷當(dāng)前的狀態(tài)(太熱TOO_HOT,太冷TOO_COLD或適中JUST_RIGHT),并決定HEAT和COOL的輸出值。狀態(tài)機(jī)的應(yīng)用2、空調(diào)系統(tǒng)狀態(tài)機(jī)(STATEMACHINE)可以說是一個(gè)廣義時(shí)序電路,觸發(fā)器,計(jì)數(shù)器,移位寄存器都算是它的特殊功能的一種.

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

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

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

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

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

...

IS

TYPE

ST

IS(s0,s1,s2,s3);

SIGNALcurrent_state,next_state:

ST;...3.組合進(jìn)程在時(shí)鐘信號(hào)的作用下,負(fù)責(zé)狀態(tài)的轉(zhuǎn)換。4.輔助進(jìn)程根據(jù)輸入信號(hào)和當(dāng)前狀態(tài)的取值(current_state)確定下一狀態(tài)(next_state)的取值,確定輸出或產(chǎn)生內(nèi)部其它組合進(jìn)程或時(shí)序進(jìn)程所需的控制信號(hào)。配合時(shí)序進(jìn)程或組合進(jìn)程工作的數(shù)據(jù)鎖存器等進(jìn)程。有限狀態(tài)機(jī)的程序構(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)機(jī)的設(shè)計(jì)舉例例子:設(shè)計(jì)一個(gè)二進(jìn)制序列檢測器,當(dāng)檢測到10110序列時(shí),就輸出1(一個(gè)時(shí)鐘周期的脈沖)。其他情況下輸出0。規(guī)定檢測到一次之后,檢測器復(fù)位到最初始的狀態(tài),重新從頭檢測。如下所示:輸入:01101101101100輸出:00000001000001狀態(tài)轉(zhuǎn)換圖設(shè)計(jì)(Moore)10110S0/0S1/0S2/0S3/0S4/0S5/1Reset11001101001010110s1s2s3s4s5s0問題1:如何保證狀態(tài)機(jī)在初始時(shí)狀態(tài)為s0?問題2:在狀態(tài)機(jī)跑飛,即脫離有效狀態(tài)(s0—s5)時(shí),如何使?fàn)顟B(tài)機(jī)能恢復(fù)工作Sx/0波形波形如下圖所示問題:如果需要將輸出脈沖往前推一個(gè)時(shí)鐘周期,該如何修改設(shè)計(jì)?1011010110s1s2s3s4s5s0輸入時(shí)鐘輸出當(dāng)前狀態(tài)發(fā)現(xiàn)當(dāng)當(dāng)前壯態(tài)為s4,并且輸入為0時(shí),輸出為1。狀態(tài)轉(zhuǎn)換圖設(shè)計(jì)(Mealy)S0S1S2S3S4S5Reset100110100101sX/0/0/0/0/0/0/0/0/0/1/0/01011010110s1s2s3s4s5s0/00/1s0狀態(tài)機(jī)的代碼實(shí)現(xiàn)狀態(tài)定義ArchitecturertlofSynis…-- 其他信號(hào)定義。TypeSynFsmStateis(s0,s1,s2,s3,s4,s5);SignalSynCst,SynNst:SynFsmState;Begin…--結(jié)構(gòu)體。Endrtl;狀態(tài)機(jī)的代碼實(shí)現(xiàn)狀態(tài)寄存器進(jìn)程描述狀態(tài)寄存器輸出譯碼下一狀態(tài)譯碼clk狀態(tài)機(jī)的代碼實(shí)現(xiàn)狀態(tài)寄存器進(jìn)程描述狀態(tài)寄存器輸出譯碼下一狀態(tài)譯碼當(dāng)前狀態(tài)輸出下一狀態(tài)輸入時(shí)鐘clk狀態(tài)寄存器進(jìn)程描述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)機(jī)的代碼實(shí)現(xiàn)狀態(tài)轉(zhuǎn)換進(jìn)程描述狀態(tài)寄存器輸出譯碼下一狀態(tài)譯碼當(dāng)前狀態(tài)輸出下一狀態(tài)輸入時(shí)鐘clk狀態(tài)轉(zhuǎn)換進(jìn)程描述Process(SynCst,din)BegincaseSynCstiswhens0=>whens1=>…

whens5=>…Endcase;Endprocess;

if(din=‘1’)then

SynNst<=s1;else

SynNst<=s0;endif;

whenothers=>

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

whens1=>…whens5=>…whenothers=>

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

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

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

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

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

1.

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

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時(shí),輸出”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)--第二個(gè)進(jìn)程確定轉(zhuǎn)換時(shí)刻為上升沿

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.單進(jìn)程狀態(tài)機(jī)結(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)編碼描述風(fēng)格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角零錢的自動(dòng)售貨機(jī)。根據(jù)需求列寫狀態(tài)圖。S0/00S2/00S1/00S3/10S4/11011000000110000110000110000110狀態(tài)/輸出輸入信號(hào)狀態(tài):S0、S1、S2、S3、S4;輸入:state_inputs輸出:comb_outputs;輸出僅與狀態(tài)有關(guān)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;

時(shí)序進(jìn)程狀態(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;組合進(jìn)程Moore型狀態(tài)機(jī)

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清零信號(hào)Si→S0自動(dòng)售貨機(jī)moore1.vhd仿真波形:St0St2St1St31/000000/010101/001000/011101/000100/01100St40/000011/010110/000111/01101單端輸入1→0→1→0→1時(shí),狀態(tài)依次改變,5位輸出依次從0→1→2→3→4變化,否則對應(yīng)輸出為10,11,12,13,14。輸出與狀態(tài)和輸入有關(guān)。狀態(tài)輸入/輸出例2實(shí)現(xiàn)給定Mealy型狀態(tài)機(jī)的狀態(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)的進(jìn)程

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--決定輸出信號(hào)的進(jìn)程

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)機(jī)系統(tǒng)復(fù)位輸出隨輸入改變時(shí)鐘到來,狀態(tài)及輸出改變仿真波形看出:輸出信號(hào)不穩(wěn)定。可以在程序中將輸出信號(hào)鎖存后再輸出,參考程序mealy2.vhd。Mealy型狀態(tài)機(jī)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)的進(jìn)程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)--決定輸出信號(hào)的進(jìn)程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;輸出信號(hào)鎖存系統(tǒng)復(fù)位輸出只在時(shí)鐘邊沿處改變從仿真波形看到輸出信號(hào)穩(wěn)定。Mealy型狀態(tài)機(jī)修改程序mealy2.vhd仿真波形:mealy2.vhd比mealy1.vhd的描述滯后一個(gè)時(shí)鐘周期。用文字符號(hào)定義狀態(tài)變量的符號(hào)化狀態(tài)編碼。例如:moore.vhd、mealy1.vhd、mealy1.vhd根據(jù)設(shè)計(jì)需要,人為設(shè)定非符號(hào)狀態(tài)編碼,且將狀態(tài)編碼作為輸出信號(hào)。例如:ad574a.vhd由綜合器自動(dòng)選擇編碼狀態(tài)編碼通常可以有幾種方式:

CE CSRCK12/8A0 工作狀態(tài)

0 X X X X 禁止

X 1 X X X 禁止

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

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

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

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

1 0 1 01 低4位加上尾隨4個(gè)0有效AD574時(shí)序圖AD574真值表

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

CSA0RCK12/8STATUSD[11..0]AD574模擬信號(hào)輸入PROCESSREG時(shí)序進(jìn)程PROCESSCOM組合進(jìn)程PROCESSLATCH鎖存器current_statenext_stateLKCLKQ[11..0]采樣數(shù)據(jù)輸出AD574采樣控制狀態(tài)機(jī)結(jié)構(gòu)圖AD574采樣控制狀態(tài)圖狀態(tài)狀態(tài)編碼out4(3~0)功能說明STCSA0RCLKBST011100初態(tài)ST100001啟動(dòng)轉(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)--時(shí)序進(jìn)程

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

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)機(jī)編碼方式設(shè)置一位熱碼編碼(One-hotencoding)的設(shè)置打開編譯窗口,選擇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)--組合邏輯進(jìn)程BEGINCASEcurrent_stateIS--確定當(dāng)前狀態(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)彎燈,等待時(shí)間,系統(tǒng)復(fù)位控制。燈持續(xù)時(shí)間及其要求如下:主路燈輔路燈持續(xù)時(shí)間RYGLRYGL(S)0010100050010010005100110001510000010401000010051000100110狀態(tài)機(jī)設(shè)計(jì)舉例:實(shí)用交通燈設(shè)計(jì)。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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論