第6章有限狀態(tài)機設計_第1頁
第6章有限狀態(tài)機設計_第2頁
第6章有限狀態(tài)機設計_第3頁
第6章有限狀態(tài)機設計_第4頁
第6章有限狀態(tài)機設計_第5頁
已閱讀5頁,還剩80頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章有限狀態(tài)機設計

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

易構成性能良好的時序邏輯模塊結構模式簡單、層次分明、易讀易懂、易排錯運行模式類似于CPU,易于進行順序控制

利用同步時序和全局時鐘線可實現高速FSM高可靠性,非法狀態(tài)易控制

為什么要使用狀態(tài)機?一、概述(4)輔助進程

用于配合狀態(tài)機工作的組合進程或時序進程,例如為了完成某種算法的進程;或用于配合狀態(tài)機工作的其他時序進程,例如為了穩(wěn)定輸出設置的數據鎖存器等。二、一般有限狀態(tài)機的設計1、一般有限狀態(tài)機的組成

(1)說明部分說明部分中使用TYPE語句定義新的數據類型,此數據類型一般為枚舉類型例如:TYPEstate_typeIS(start_state,run_state,error_state);SIGNALstate:state_type;說明部分一般放在結構體的ARCHITECTURE和BEGIN之間。(2)時序進程時序進程是指負責狀態(tài)機運轉和在時鐘驅動下負責狀態(tài)轉換的進程。作為狀態(tài)機的“驅動泵”。(3)組合進程組合進程的任務是根據外部輸入的控制信號,和當前狀態(tài)的狀態(tài)值確定下一狀態(tài)的去向,以及確定對外輸出或對內部其他組合或時序進程輸出控制信號的內容?!纠?-1】 --一般狀態(tài)機描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYs_machineISPORT(clk,reset:INSTD_LOGIC;state_inputs:INSTD_LOGIC_VECTOR(0TO1);comb_outputs:OUTSTD_LOGIC_VECTOR(0TO1));ENDs_machine;ARCHITECTUREbehaveOFs_machineISTYPEstatesIS(st0,st1,st2,st3);--定義states為枚舉型數據類型SIGNALcurrent_state,next_state:states;BEGINREG:PROCESS(reset,clk)--時序邏輯進程BEGINIFreset='1'THEN--異步復位current_state<=st0;ELSIF(clk='1'ANDclk'EVENT)THENcurrent_state<=next_state;--當檢測到時鐘上升沿時轉換至下一狀態(tài)

ENDIF;ENDPROCESS;--由current_state將當前狀態(tài)值帶出此進程,進入進程COMCOM:PROCESS(current_state,state_inputs)--組合邏輯進程BEGINCASEcurrent_stateIS--確定當前狀態(tài)的狀態(tài)值WHENst0=>comb_outputs<="00";--初始態(tài)譯碼輸出IFstate_inputs="00"THEN--根據外部的狀態(tài)控制輸入“00”next_state<=st0;--在下一時鐘后,進程REG的狀態(tài)維持為st0ELSEnext_state<=st1;--否則,在下一時鐘后,進程REG的狀態(tài)將為st1ENDIF;WHENst1=>comb_outputs<="01";--對應st1的譯碼輸出“01”IFstate_inputs="00"THEN--根據外部的狀態(tài)控制輸入“00”next_state<=st1;--在下一時鐘后,進程REG的狀態(tài)將維持為st1ELSEnext_state<=st2;--否則,在下一時鐘后,進程reg的狀態(tài)將為st2ENDIF;WHENst2=>comb_outputs<="10";--以下依次類推IFstate_inputs="11"THENnext_state<=st2;ELSEnext_state<=st3;ENDIF;WHENst3=>comb_outputs<="11";IFstate_inputs="11"THENnext_state<=st3;ELSEnext_state<=st0;ENDIF;ENDCASE;ENDPROCESS;--由信號next_state將下一狀態(tài)值帶出此進程,進入進程regENDbehave;進程間一般是并行運行的,但由于敏感信號的設置不同以及電路的延遲,在時序上進程間的動作是有先后的。三、Moore型狀態(tài)機的設計

Moore型狀態(tài)機框圖

以下介紹Moore型狀態(tài)機的另一個應用實例,即用狀態(tài)機設計一個A/D采樣控制器。對A/D器件進行采樣控制

RCSTATUSD[11..0]AD574啟動時序20usZ/CS對AD574初始化st0st1st2st3st4打開片選,啟動12位轉換采樣周期中等待STATUS=‘1’:正在轉換!STATUS=‘0’:轉換結束!12位轉換數據輸出有效由LOCK發(fā)數據鎖存信號PROCESSREG時序進程PROCESSCOM組合進程PROCESSLATCH鎖存器current_statenext_stateLOCK狀態(tài)機FSMFPGA/CPLDCLKCSA0RCK12/8STATUSD[11..0]AD574Q[11..0]模擬信號輸入采樣數據輸出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;

狀態(tài)機VHDL源程序狀態(tài)機工作時序圖狀態(tài)2:等待四、Mealy型有限狀態(tài)機的設計

Mealy狀態(tài)機的框圖

【例6-4】 LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.all;ENTITYmealy1ISPORT(clk,datain,reset:INstd_logic;q:OUTstd_logic_vector(4DOWNTO0));ENDmealy1;ARCHITECTUREbehaveOFmealy1ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALstx:states;BEGINcomreg:PROCESS(clk,reset)--決定轉換狀態(tài)的進程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)--輸出控制信號進程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;ENDbehave;例6-4狀態(tài)機工作時序圖

可以從該狀態(tài)機的工作時序圖6-11上清楚看到,輸出信號有許多毛刺。為了解決這個問題,可以考慮將輸出信號q值由時鐘信號鎖存后再輸出,也可用時鐘同步輸出信號…一位熱碼編碼方式就是用n個觸發(fā)器來實現具有n個狀態(tài)的狀態(tài)機,狀態(tài)機中的每一個狀態(tài)都由其中一個觸發(fā)器的狀態(tài)表示,即當處于某狀態(tài)時,對應的觸發(fā)器為‘1’,其余的觸發(fā)器都置‘0’。一位熱碼編碼方式盡管用了較多的觸發(fā)器,但其簡單的編碼方式大為簡化了狀態(tài)譯碼邏輯,提高了狀態(tài)轉換速度,這對于含有較多的時序邏輯資源,較少的組合邏輯資源的FPGA器件是好的解決方案。

五、狀態(tài)編碼

1、狀態(tài)位直接輸出型編碼

將狀態(tài)編碼直接輸出作為控制信號,即output=state;要求對狀態(tài)機各狀態(tài)的編碼作特殊的選擇,以適應控制時序的要求。這種狀態(tài)機稱為狀態(tài)碼直接輸出型狀態(tài)機。

2、順序編碼順序編碼方式就是利用若干個觸發(fā)器的編碼組合來實現n個狀態(tài)的狀態(tài)機,這種編碼方式最為簡單,且使用的觸發(fā)器數量最少,剩余的非法狀態(tài)最少,容錯技術最為簡單。3一位熱碼編碼(2)利用OTHERS語句中對未提到的狀態(tài)作統一處理。...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...WHENOTHERS=>next_state<=st0;ENDCASE;

六、狀態(tài)機剩余狀態(tài)處理

(l)在語句中對每一個非法狀態(tài)都作出明確的狀態(tài)轉換指示,如在原來的CASE語句中增加諸如以下語句:WHENst_ilg1=>next<=st0;WHENst_ilg2=>next<=st0;WHENst_ilg3=>next<=st0;

VHDL基本語法小結6

狀態(tài)編碼符號化,用戶數據類型和子類型定義:

TYPE,SUBTYPE定義FSM的現態(tài)和次態(tài):current_state,next_state

可設置多個進程:至少含一個主控時序進程和一個主控組合進程主控時序進程作為FSM的驅動泵;主控組合進程控制FSM的工作順序組合進程中使用CASE語句其它輔助進程可以有時序和組合進程配合FSM主機工作可以有多個FSM并行工作對于多個FSM,采用單一時鐘同步時序容易協調控制所有FSM的工作EDA技術及應用第6章作業(yè)1、6第7章數字電子系統設計實踐

EDA應用示例介紹一、移位相加8位硬件乘法器電路設計

硬件乘法器的功能--實現兩個8位二進制數的乘法運算硬件乘法器的設計思路硬件乘法器的乘法運算可以通過逐項移位相加原理來實現,從被乘數的最低位開始,若為1,則乘數左移后與上一次的和相加;若為0,左移后以全零相加,直至被乘數的最高位。

硬件乘法器的設計

右移寄存器模塊設計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYsreg8bIS--8位右移寄存器PORT(clk:INSTD_LOGIC;LOAD:INSTD_LOGIC;din:INSTD_LOGIC_VECTOR(7DOWNTO0);qb:OUTSTD_LOGIC);ENDsreg8b;ARCHITECTUREbehaveOFsreg8bISSIGNALreg8:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(clk,load)BEGINIFload='1'THENreg8<=din;--裝載新數據ELSIFCLK'EVENTANDCLK='1'THENreg8(6DOWNTO0)<=reg8(7DOWNTO1);--數據右移ENDIF;ENDPROCESS;qb<=reg8(0);--輸出最低位ENDbehave;8位加法器模塊設計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYadder8ISPORT(b,a:INSTD_LOGIC_VECTOR(7DOWNTO0);s:OUTSTD_LOGIC_VECTOR(8DOWNTO0));ENDadder8;ARCHITECTUREbehavOFadder8ISBEGIN s<='0'&a+b;ENDbehave;選通與門模塊設計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYandarithISPORT(abin:INSTD_LOGIC;din:INSTD_LOGIC_VECTOR(7DOWNTO0);dout:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDandarith;ARCHITECTUREbehaveOFandarithISBEGINPROCESS(abin,din)BEGINFORIIN0TO7LOOP--循環(huán),完成8位與1位運算DOUT(I)<=DIN(I)ANDABIN;ENDLOOP;ENDPROCESS;ENDbehave;16位鎖存器模塊設計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYreg16bISPORT(clk,clr:INSTD_LOGIC;d:INSTD_LOGIC_VECTOR(8DOWNTO0);q:OUTSTD_LOGIC_VECTOR(15DOWNTO0));ENDreg16b;ARCHITECTUREbehaveOFreg16bISSIGNALR16S:STD_LOGIC_VECTOR(15DOWNTO0);BEGINPROCESS(clk,clr)BEGINIFclr='1'THENR16S<=(OTHERS=>'0');--清零信號ELSIFCLK'EVENTANDCLK='1'THEN--時鐘到來時,鎖存輸入值,--并右移低8位R16S(6DOWNTO0)<=R16S(7DOWNTO1);--右移低8位R16S(15DOWNTO7)<=D;--將輸入鎖到高8位ENDIF;ENDPROCESS;q<=R16S;ENDbehave;波形仿真

交通管理器的功能二、十字路口交通管理器設計交通管理器的設計思路交通管理器的設計控制器模塊設計LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtraffic_controlISPORT(clk:INSTD_LOGIC;c1,c2,c3:OUTSTD_LOGIC;--各定時計數器的使能信號w1,w2,w3:INSTD_LOGIC;--各定時計數器的工作信號r1,r2:OUTSTD_LOGIC;--兩個方向的紅燈信號y1,y2:OUTSTD_LOGIC;--兩個方向的黃燈信號g1,g2:OUTSTD_LOGIC;--兩個方向的綠燈信號reset:INSTD_LOGIC);--復位信號ENDtraffic_control;ARCHITECTUREbehaveOFtraffic_controlISTYPEstate_spaceIS(s0,s1,s2,s3);SIGNALstate:state_space;BEGINPROCESS(clk)BEGINIFreset='1'THENstate<=s0;ELSIF(clk'EVENTANDclk='1')THENCASEstateISWHENs0=>IFw1='1'THEN--條件信號賦值語句state<=s1;

ENDIF;WHENs1=>IFw2='1'THENstate<=s2;ENDIF;WHENs2=>IFw3='1'THENstate<=s3;ENDIF;WHENs3=>IFw2='1'THENstate<=s0;ENDIF;ENDCASE;ENDIF;ENDPROCESS;c1<='1'WHENstate=s0ELSE'0';c2<='1'WHENstate=s1ORstate=s3ELSE'0';c3<='1'WHENstate=s2ELSE'0';r1<='1'WHENstate=s1ORstate=s0ELSE'0';y1<='1'WHENstate=s3ELSE'0';g1<='1'WHENstate=s2ELSE'0';r2<='1'WHENstate=s2ORstate=s3ELSE'0';y2<='1'WHENstate=s1ELSE'0';g2<='1'WHENstate=s0ELSE'0';ENDbehave;

定時器設計LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL;ENTITYcount30ISPORT(clk:INSTD_LOGIC;enable:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDcount30;ARCHITECTUREbehaveOFcount30ISBEGINPROCESS(clk)VARIABLEcnt:INTEGERRANGE30DOWNTO0;BEGINIF(clk'EVENTANDclk='1')THENIFenable='1'ANDcnt<30THENcnt:=cnt+1;

ELSEcnt:=0;ENDIF;ENDIF;IFcnt=30THENc<='1';ELSEc<='0';ENDIF;ENDPROCESS;ENDbehave;

波形仿真三、可編程定時/計數器設計

可編程定時/計數器的功能硬件定時就是利用可編程定時/計數器,在簡單軟件控制下產生準確的延時時間。其基本原理是通過軟件確定定時/計數器的工作方式、設置計數初值并啟動計數器工作,當計數到給定值時,便自動產生定時信號。可編程定時/計數器設計思路

可編程定時/計數器工作過程

同定時/計數器1。模型結構包含1個時鐘輸入,1個清零信號輸入,1個寫入信號輸入,1個3位的控制字輸入,1個2位的選通信號輸出,1個計數器1載入控制輸出,1個計數器2載入控制輸出。(1)

控制字寄存器(2)

定時/計數器1包含1個時鐘輸入,1個載入控制輸入,1個門控制輸入,1個2位選通方式輸入,1個8位數據輸入,1個8位數據輸出,1個波形輸出。(3)

定時/計數器2SC2M1M0定義控制字格式為:對應功能:SC2=0,計數器1; M1M0=01,頻率發(fā)生器方式SC2=1,計數器2; M1M0=10,計數結束中斷方式計數器的模式輸入為2位,可自定義最多四種模式;數據輸入8位,計數范圍為0~256;每個計數器各有一個門控信號和對應門控信號的波形輸出,在門控信號作用下,計數/定時延時??刂谱侄x內部結構所設計定時/計數器的內部結構圖如圖所示可編程定時/計數器頂層電路

可編程定時/計數器仿真波形

四、智能函數發(fā)生器設計

函數發(fā)生器總體框圖

遞增斜波

遞減斜波

三角波

方波

正弦波

階梯波

五、數據采集系統設計

數據采集系統示意圖

數據輸入單元

數據采集系統總體框圖

數據輸出單元

fun值為3的仿真波形

fun值為0的仿真波形

fun值為1,k3值為0的仿真波形

循環(huán)檢測報警模式

(3)比賽用11分為一局來進行,甲乙雙方都應設置各自的記分牌,任何一方先記滿11分,該方就算勝了此局。當記分牌清零后,又可開始新的一局比賽。

六、乒乓游戲機設計

乒乓游戲機的功能(1)

使用乒乓球游戲機的甲乙雙方各在不同的位置發(fā)球或擊球。(2)

乒乓球的位置和移動方向由燈亮及依次點燃的方向決定,球移動的速度為0.1~0.5s移動一位。游戲者根據球的位置發(fā)出相應的動作,提前擊球或出界均判失分。

乒乓游戲機頂層電路圖

乒乓球仿真波形一

乒乓球仿真波形二

乒乓球仿真波形三

乒乓球仿真波形四

乒乓球仿真波形五(6)

增加測周期功能,就是當時鐘頻率低于0.99kHz的時候,顯示的數值變成周期,以毫秒為單位。七、數字頻率計設計3位數字頻率計是用3個十進制數字顯示的數字式頻率計,其頻率測量范圍為1MHz。為了提高測量精度,量程分別為10KHz、100KHz和1MHz三擋,即最大讀數分別為9.99kHz,99.9kHz和999kHz。要求量程自動換擋。具體功能如下:(1)

當讀數大于999時,頻率計處于超量程狀態(tài),下一次測量時,量程自動增大一擋。(2)

當讀數小于099時,頻率計處于欠量程狀態(tài),下一次測量時,量程自動減少一擋。(3)

當超出頻率測量范圍時,顯示器顯示溢出。(4)

采用記憶顯示方法,即測量過程中不顯示數據,待測量過程結束以后,顯示測頻結果,并將此結果保持到下次測量結束。顯示時間不小于1秒。(5)

小數點位置隨量程變化自動移位。測試信號是頻率為5kHz脈沖時的仿真波形圖

第一次仿真中的換檔情況

測試信號是頻率為250kHz脈沖時的仿真波形圖

測試信號是頻率為25kHz脈沖時的仿真波形圖

測試信號是周期為6ms脈沖時的仿真波形圖

(7)電梯初始狀態(tài)為一層開門狀態(tài)。八、三層電梯控制器設計

三層電梯控制器的功能(1)每層電梯入口處設有上下請求開關,電梯內設有顧客到達層次的停站請求開關。(2)設有電梯入口處位置指示裝置及電梯運行模式(上升或下降)指示裝置。(3)電梯每秒升(降)一層樓。(4)電梯到達有停站請求的樓層,經過1秒電梯門打開,開門指示燈亮,開門4秒后,電梯門關閉(開門指示燈滅),電梯繼續(xù)進行,直至執(zhí)行完最后一個請求信號后停留在當前層。(5)能記憶電梯內外所有請求,并按照電梯運行規(guī)則按順序響應,每個請求信號保留至執(zhí)行后消除。(6)電梯運行規(guī)則:當電梯處于上升模式時,只響應比電梯所在位置高的上樓請求信號,由下而上逐個執(zhí)行,直到最后一個上樓請求執(zhí)行完畢;如果高層有下樓請求,則直接升到由下樓請求的最高樓層,然后進入下降模式。當電梯處于下降模式時則與上升模式相反。有上升請求的仿真波形

有下降請求的仿真波形

同時有上升和下降請求的仿真波形

復雜請求的仿真波形

(2)

計算器的輸入包括:0~9十個數字按鍵,加減乘除四則運算的運算符按鍵,一個等號按鍵,一個清零按鍵。計算器的輸出采用七段譯碼器來顯示計算結果。

九、計算器設計計算器的功能計算器所要實現的功類似于我們日常生活中所用的計算器,即可以實現加、減、乘、除以及連加和連減功能,并且要正確顯示計算結果。具體如下:(1)

要求實現8位二進制數的加減法,實現兩個4位二進制數的乘法運

溫馨提示

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

評論

0/150

提交評論