您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > VHDL有限状态机设计
第7章有限状态机设计7.1一般有限状态机的设计7.1.1用户自定义数据类型定义语句TYPE语句用法如下:TYPE数据类型名IS数据类型定义OF基本数据类型;或TYPE数据类型名IS数据类型定义;以下列出了两种不同的定义方式:TYPEst1ISARRAY(0TO15)OFSTD_LOGIC;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);7.1.1用户自定义数据类型定义语句TYPEm_stateIS(st0,st1,st2,st3,st4,st5);SIGNALpresent_state,next_state:m_state;布尔数据类型的定义语句是:TYPEBOOLEANIS(FALSE,TRUE);TYPEmy_logicIS('1','Z','U','0');SIGNALs1:my_logic;s1='Z';子类型SUBTYPE的语句格式如下:SUBTYPE子类型名IS基本数据类型RANGE约束范围;SUBTYPEdigitsISINTEGERRANGE0to9;7.1.2为什么要使用状态机有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。状态机的结构模式相对简单。状态机容易构成性能良好的同步时序逻辑模块。状态机的VHDL表述丰富多样。在高速运算和控制方面,状态机更有其巨大的优势。就可靠性而言,状态机的优势也是十分明显的。7.1.3一般有限状态机的设计1.说明部分2.主控时序进程comb_outputsstate_inputsresetclkFSM:s_machineCOMnext_statecurrent_statePROCESSREGPROCESS图7-1一般状态机结构框图工作示意图ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;...3.主控组合进程控组合进程的任务是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其它非主控的组合或时序进程的信号),或(和)当前状态的状态值确定下一状态(next_state)的取向,即:next_state的取值内容,以及确定对外输出或对内部其它组合或时序进程输出控制信号的内容。4.辅助进程【例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_machineISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;BEGINREG:PROCESS(reset,clk)BEGINIFreset='1'THENcurrent_state=s0;ELSIFclk='1'ANDclk'EVENTTHENcurrent_state=next_state;ENDIF;ENDPROCESS;COM:PROCESS(current_state,state_Inputs)接下页BEGINCASEcurrent_stateISWHENs0=comb_outputs=5;IFstate_inputs=00THENnext_state=s0;ELSEnext_state=s1;ENDIF;WHENs1=comb_outputs=8;IFstate_inputs=00THENnext_state=s1;ELSEnext_state=s2;ENDIF;WHENs2=comb_outputs=12;IFstate_inputs=11THENnext_state=s0;ELSEnext_state=s3;ENDIF;WHENs3=comb_outputs=14;IFstate_inputs=11THENnext_state=s3;ELSEnext_state=s0;ENDIF;ENDcase;ENDPROCESS;ENDbehv;接上页图7-2例7-1状态机的工作时序图仿真波形7.2Moore型有限状态机的设计7.2.1三进程有限状态机表7-1AD574逻辑控制真值表(X表示任意)CECSRCK12/8A0工作状态0XXXX禁止X1XXX禁止100X0启动12位转换100X1启动8位转换1011X12位并行输出有效10100高8位并行输出有效10101低4位加上尾随4个0有效图7-3AD574工作时序图7-4AD574工作时序图7-5采样状态机结构【例7-2】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYAD574ISPORT(D:INSTD_LOGIC_VECTOR(11DOWNTO0);CLK,STATUS:INSTD_LOGIC;--状态机时钟CLK,AD574状态信号STATUSLOCK0:OUTSTD_LOGIC;--内部锁存信号LOCK的测试信号CS,A0,RC,K12X8:OUTSTD_LOGIC;--AD574控制信号Q:OUTSTD_LOGIC_VECTOR(11DOWNTO0));--锁存数据输出ENDAD574;ARCHITECTUREbehavOFAD574ISTYPEstatesIS(st0,st1,st2,st3,st4);SIGNALcurrent_state,next_state:states:=st0;SIGNALREGL:STD_LOGIC_VECTOR(11DOWNTO0);SIGNALLOCK:STD_LOGIC;BEGINK12X8='1';LOCK0=LOCK;COM1: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;ENDPROCESSCOM1;COM2:PROCESS(current_state)--输出控制信号的进程BEGINCASEcurrent_stateISWHENst0=CS='1';A0='1';RC='1';LOCK='0';--初始化WHENst1=CS='0';A0='0';RC='0';LOCK='0';--启动12位转换WHENst2=CS='0';A0='0';RC='0';LOCK='0';--等待转换WHENst3=CS='0';A0='0';RC='1';LOCK='0';--12位并行输出有效WHENst4=CS='0';A0='0';RC='1';LOCK='1';--锁存数据WHENOTHERS=CS='1';A0='1';RC='1';LOCK='0';--其它情况返回初始态接下页ENDCASE;ENDPROCESSCOM2;REG:PROCESS(CLK)--时序进程BEGINIF(CLK'EVENTANDCLK='1')THENcurrent_state=next_state;ENDIF;ENDPROCESSREG;LATCH1:PROCESS(LOCK)--数据锁存器进程BEGINIFLOCK='1'ANDLOCK'EVENTTHENREGL=D;ENDIF;ENDPROCESS;Q=REGL;ENDbehav;接上页图7-6AD574采样状态机工作时序【例7-3】COM:PROCESS(current_state,STATUS)BEGINCASEcurrent_stateISWHENst0=next_state=st1;CS='1';A0='1';RC='1';LOCK='0';WHENst1=next_state=st2;CS='0';A0='0';RC='0';LOCK='0';WHENst2=IF(STATUS='1')THENnext_state=st2;ELSEnext_state=st3;ENDIF;CS='0';A0='0';RC='0';LOCK='0';WHENst3=next_state=st4;CS='0';A0='0';RC='1';LOCK='0';WHENst4=next_state=st0;CS='0';A0='0';RC='1';LOCK='1';WHENOTHERS=next_state=st0;ENDCASE;ENDPROCESSCOM;PROCESSREG时序进程PROCESSCOM组合进程PROCESSLATCH锁存器current_statenext_stateLOCK状态机FSMFPGA/CPLDCLKCSA0RCK12/8STATUSD[11..0]AD574Q[11..0]模拟信号输入采样数据输出LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYAD574ISPORT(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;BEGINCOM:PROCESS(current_state,STATUS)BEGINCASEcurrent_stateISWHENst0=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')THENcurrent_state=next_state;ENDIF;ENDPROCESSREG;LATCH:PROCESS(LOCK)BEGINIFLOCK='1'ANDLOCK'EVENTTHENREGL=D;ENDIF;ENDPROCESS;Q=REGL;K12X8=‘1’;ENDbehav;状态机VHDL源程序状态机RTL电路图状态机
本文标题:VHDL有限状态机设计
链接地址:https://www.777doc.com/doc-4923613 .html