您好,欢迎访问三七文档
状态机设计及应用本节课应掌握以下知识:1.状态机的概念2.基于VHDL的状态机程序结构3.MOORE型状态机和MEALY型状态机4.组合逻辑电路部分产生输出信号5.时序逻辑电路部分产生输出信号6.枚举数据类型7.使用状态机实现所需要的控制时序LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYztjISPORT(clk,reset:INSTD_LOGIC;input:INSTD_LOGIC;output:OUTSTD_LOGIC);ENDztj;ARCHITECTUREthOFztjISTYPEFSM_STIS(A1,A2);SIGNALcur_st,next_st:FSM_ST;BEGINReg:PROCESS(reset,clk)BEGINIFreset='1'THENcur_st=A1;ELSIFclk'eventANDclk='1'THENcur_st=next_st;ENDIF;ENDPROCESS;Com:PROCESS(cur_st,input)BEGINCASEcur_stISWHENA1=output='1';IFinput='1'THENnext_st=A1;ELSEnext_st=A2;ENDIF;WHENA2=output='0';IFinput='1'THENnext_st=A1;ELSEnext_st=A2;ENDIF;ENDCASE;ENDPROCESS;ENDth;一、状态机的概念所谓状态机,事物存在状态的一种综合描述。一种对数字电路或数字系统建模的方法。例如,单向路口的交通灯二、状态机的一般形式1.状态说明部分用于说明状态机可能的所有状态。TYPEFSM_STIS(A1,A2);SIGNALcur_st,next_st:FSM_ST;注意:说明部分放在结构体的ARCHITECTURE和BEGIN之间。2.主控时序进程主控时序进程是负责状态机状态转化的进程。保证状态的跳变与时钟信号同步,即保证在时钟发生有效跳变时,状态机的状态才发生变化。一般地,主控时序进程负责系统的初始和复位的状态设置,不负责下一状态的具体状态取值。当复位信号到来时,主控时序进程将同步或异步复位状态;当时钟的有效跳变到来时,时序进程只是机械地将代表次态的信号中的内容送入到现态的信号中,而次态信号中的内容完全由其他的进程根据实际情况来决定。Reg:PROCESS(reset,clk)BEGINIFreset='1'THENcur_st=A1;ELSIFclk'eventANDclk='1'THENcur_st=next_st;ENDIF;ENDPROCESS;3.主控组合进程主控组合进程用于实现状态机的状态选择和信号输出。主控组合进程根据当前状态信号的值确定进行相应的操作,处理状态机的输入、输出信号,同时确定下一个状态,即次态的取值。主控组合进程的设计往往需要参考状态机的转移图,通常使用CASE语句或者IF语句实现,根据当前状态进行顺序语句的转移。Com:PROCESS(cur_st,input)BEGINCASEcur_stISWHENA1=output='1';IFinput='1'THENnext_st=A1;ELSEnext_st=A2;ENDIF;WHENA2=output='0';IFinput='1'THENnext_st=A1;ELSEnext_st=A2;ENDIF;ENDCASE;ENDPROCESS;ENDth;4.辅助进程辅助进程指用于配合状态机工作的其他组合进程或时序进程,例如为了完成某种算法的进程或者是为了稳定输出设置的数据锁存器等。辅助进程不是必需的。三、状态机分类1.Moore(摩尔)型输出仅与系统状态有关,与输入信号无关。2.Mealy(米里)型输出与系统状态、输入信号均有关系。图1Moore型状态机的转移图图2Mealy型状态机的转移图……ARCHITECTUREthOFztj2ISTYPEFSM_STIS(A1,A2);SIGNALcur_st,next_st:FSM_ST;BEGINReg:PROCESS(reset,clk)BEGINIFreset='1'THENcur_st=A1;ELSIFclk'eventANDclk='1'THENcur_st=next_st;ENDIF;ENDPROCESS;Com1:PROCESS(cur_st,input)BEGINCASEcur_stISWHENA1=IFinput='1'THENnext_st=A1;ELSEnext_st=A2;ENDIF;WHENA2=IFinput='1'THENnext_st=A1;ELSEnext_st=A2;ENDIF;ENDCASE;ENDPROCESS;Com2:PROCESS(cur_st,input)BEGINCASEcur_stISWHENA1=IFinput='1'THENoutput='0';ELSEoutput='1';ENDIF;WHENA2=IFinput='1'THENoutput='1';ELSEoutput='0';ENDIF;ENDCASE;ENDPROCESS;ENDth;output='0';output='1';四、状态机的设计风格1.组合进程控制输出输出信号不需要与时钟信号同步。2.时序进程控制输出输出信号只有在时钟信号边沿出现时才能更新。LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYztj4ISPORT(clk,reset:INSTD_LOGIC;input:INSTD_LOGIC;a,b:INSTD_LOGIC;output:OUTSTD_LOGIC);ENDztj4;……ARCHITECTUREthOFztj4ISTYPEFSM_STIS(A1,A2);SIGNALcur_st,next_st:FSM_ST;BEGINPROCESS(reset,clk)BEGINIFreset='1'THENcur_st=A1;ELSIFclk'eventANDclk='1'THENcur_st=next_st;ENDIF;ENDPROCESS;PROCESS(cur_st,input)BEGINCASEcur_stISWHENA1=output=a;IFinput='1'THENnext_st=A1;ELSEnext_st=A2;ENDIF;WHENA2=output=b;IFinput='1'THENnext_st=A1;ELSEnext_st=A2;ENDIF;ENDCASE;ENDPROCESS;ENDth;……ARCHITECTUREthOFztj4ISTYPEFSM_STIS(A1,A2);SIGNALcur_st,next_st:FSM_ST;SIGNALtemp:STD_LOGIC;BEGINPROCESS(reset,clk)BEGINIFreset='1'THENcur_st=A1;ELSIFclk'eventANDclk='1'THENcur_st=next_st;output=temp;ENDIF;ENDPROCESS;PROCESS(cur_st,input)BEGINCASEcur_stISWHENA1=temp=a;IFinput='1'THENnext_st=A1;ELSEnext_st=A2;ENDIF;WHENA2=temp=b;IFinput='1'THENnext_st=A1;ELSEnext_st=A2;ENDIF;ENDCASE;ENDPROCESS;ENDth;图3组合进程控制输出仿真波形图图4时序进程控制输出仿真波形图五、状态机应用例1:设计一个序列检测器,要求当检测到连续收到1110010后,输出为1,否则输出为0。解:根据要求,电路需记忆初始状态(S0)、1(S1)、11(S2)、111(S3)、1110(S4)、11100(S5)、111001(S6)、1110010(S7)这8个状态。libraryieee;useieee.std_logic_1164.all;entitystate_machineisport(clk,x:instd_logic;z:outstd_logic);endentitystate_machine;architectureasmofstate_machineistypestateis(s0,s1,s2,s3,s4,s5,s6,s7);signalc_state,n_state:state:=s0;beginreg:process(clk)beginifclk’eventandclk=‘1’thenc_state=n_state;endif;endprocessseq;com:process(c_state,x)beginz='0';casec_stateiswhens0=ifx='0'thenn_state=s0;elsen_state=s1;endif;whens1=ifx='0'thenn_state=s0;elsen_state=s2;endif;whens2=ifx='0'thenn_state=s0;elsen_state=s3;endif;whens3=ifx='0'thenn_state=s4;elsen_state=s3;endif;whens4=ifx='0'thenn_state=s5;elsen_state=s1;endif;whens5=ifx='0'thenn_state=s0;elsen_state=s6;endif;whens6=ifx='0'thenn_state=s7;elsen_state=s2;endif;whens7=ifx='0'thenn_state=s0;elsen_state=s2;endif;z='1';endcase;endprocesscom;endasm;例2:十字路口交通管理器设计交通管理器的设计思路交通管理器的设计控制器模块设计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'THENstate=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
本文标题:状态机设计
链接地址:https://www.777doc.com/doc-3276785 .html