您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > VHDL有限状态机设计
第第77章章有限状态机设计有限状态机设计PDFpdfFactoryPro语句用法如下:TYPE数据类型名IS数据类型定义OF基本数据类型;或TYPE数据类型名IS数据类型定义;以下列出了两种不同的定义方式:TYPEst1ISARRAY(0TO15)OFSTD_LOGIC;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);PDFpdfFactoryPro(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;PDFpdfFactoryPro为什么要使用状态机¨有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。¨状态机的结构模式相对简单。¨状态机容易构成性能良好的同步时序逻辑模块。¨状态机的VHDL表述丰富多样。¨在高速运算和控制方面,状态机更有其巨大的优势。¨就可靠性而言,状态机的优势也是十分明显的。PDFpdfFactoryPro图7-1一般状态机结构框图工作示意图ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;...PDFpdfFactoryPro主控组合进程控组合进程的任务是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其它非主控的组合或时序进程的信号),或(和)当前状态的状态值确定下一状态(next_state)的取向,即:next_state的取值内容,以及确定对外输出或对内部其它组合或时序进程输出控制信号的内容。4.辅助进程PDFpdfFactoryPro【例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)接下页PDFpdfFactoryPro=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;接上页PDFpdfFactoryPro逻辑控制真值表(X表示任意)CECSRCK12/8A0工作状态0XXXX禁止X1XXX禁止100X0启动12位转换100X1启动8位转换1011X12位并行输出有效10100高8位并行输出有效10101低4位加上尾随4个0有效PDFpdfFactoryPro【例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)--决定转换状态的进程下页PDFpdfFactoryPro=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';--其它情况返回初始态接下页PDFpdfFactoryPro: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;接上页PDFpdfFactoryPro【例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;PDFpdfFactoryPro[11..0]AD574Q[11..0]模拟信号输入采样数据输出PDFpdfFactoryPro(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:P
本文标题:VHDL有限状态机设计
链接地址:https://www.777doc.com/doc-5390915 .html