资源描述:
《第五章 有限状态机的设计ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第五章状态机设计有限状态机(FSM)—在一个有限状态下,以目前状态为准,当有时钟脉冲及输入信号到来时,它将以目前状态和输入信号变化状况为依据,产生下一次状态及输出信号。状态机的定义:状态机分类:按输出方式分Mealy型Moore型输出仅为当前状态的函数输出是当前状态和输入的函数按结构分单进程多进程主进程和辅进程合一分时序、组合主进程,辅助进程按状态表达分符号状态机确定编码状态机S0,S1,S2,…000,001,010,…按编码方式分顺序编码一位热码二进制顺序编码等00001,00010,00100,…其它编码格雷码等状态机按照
2、其输入、当前状态、下一次状态、输出信号的变化关系,可分成两大类:摩尔状态机(MooreMachine)米立状态机(MealyMachine)Moore—输出电位只与当前所处的状态有关,而与输入信号无立即的关系。Mealy—输出电位不仅与当前所处的状态有关,而且与输入信号也有关。5.1一般有限状态机设计5.1.1数据类型定义语句TYPE语句的用法如下:TYPE数据类型名IS数据类型定义OF基本数据类型;或TYPE数据类型名IS数据类型定义;TYPEst1ISARRAY(0TO15)OFSTD_LOGIC;TYPEweekIS(su
3、n,mon,tue,wed,thu,fri,sat);5.1一般有限状态机设计5.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子类型名IS基本数据类型RANGE约束范围;SUBTYPEdigitsISINTEGERRA
4、NGE0to9;5.1一般有限状态机设计5.1.2为什么要使用状态机状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点状态机可以定义符号化枚举类型的状态状态机容易构成性能良好的同步时序逻辑模块状态机的VHDL表述丰富多样、程序层次分明,易读易懂在高速运算和控制方面,状态机更有其巨大的优势高可靠性5.1一般有限状态机设计5.1.3一般有限状态机的设计1.说明部分ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;...5.
5、1一般有限状态机设计5.1.3一般有限状态机的设计2.主控时序进程图5-1一般状态机结构框图3.主控组合进程4.辅助进程5.1一般有限状态机设计5.1.3一般有限状态机的设计【例5-1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYs_machineISPORT(clk,reset:INSTD_LOGIC;state_inputs:INSTD_LOGIC_VECTOR(0TO1);comb_outputs:OUTINTEGERRANGE0TO15);ENDs_machine;ARCHI
6、TECTUREbehvOFs_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;
7、ENDPROCESS;COM:PROCESS(current_state,state_Inputs)--主控组合进程BEGINCASEcurrent_stateISWHENs0=>comb_outputs<=5;IFstate_inputs="00"THENnext_state<=s0;ELSEnext_state<=s1;ENDIF;WHENs1=>comb_outputs<=8;IFstate_inputs="00"THENnext_state<=s1;ELSEnext_state<=s2;ENDIF;WHENs2=>com
8、b_outputs<=12;IFstate_inputs="11"THENnext_state<=s0;ELSEnext_state<=s3;ENDIF;WHENs3=>comb_outputs<=14;IFstate_inputs="11"THENnext_s