您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 第6章实用状态机设计技术.
EDA技术及其应用第6章实用状态机设计技术有限状态机(Finite-StateMachine,FSM)FSM简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。传统时序电路的控制流程是顺序的:遵循事先设定的逻辑,从头到尾地执行。很少有事件能改变标准执行流程。FSM能处理任何顺序的事件(输入),并提供有意义的响应(输出)——即使这些事件发生的顺序和预计的不同。什么是状态机?状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动作”和“次态”是果。①现态:指当前所处状态。②条件:又称为“事件”。当一个条件满足,将会触发一个动作,或执行一次状态的转移。③动作:动作执行后,可以转移到新状态,也可以保持原状态。动作不是必需的。④次态:条件满足后创新建立的新状态。“次态”是相对于“现态”而言的;“次态”一旦被激活,就转变成新的“现态”了。状态机的基本要素?案例一:电梯门FSM案例二:接收器FSM按输出Y与现态Qn及输入X的关系分:Moore型:输出只和现态有关,没有输入。Mealy型:输出不仅和现态有关,还和输入有关。(由于输出会受到输入的干扰,可能会产生毛刺(Gitch)现象)Z组合电路触发器CPXYQZ组合电路触发器CPYQFSM的结构分类Moore型:Mealy型:Y=F1(Qn)Y=F1(X,Qn)组合电路输入输出组合电路1DC1CP组合电路输入输出组合电路1DC1CPFSM的结构分类6.1有限状态机设计初步(1)为什么使用状态机(其优势在哪里?)1、克服了纯硬件数字系统顺序方式控制不灵活的缺点。2、由于状态机的结构相对简单,设计方案相对固定。3、状态机容易构成性能良好的同步时序逻辑模块。4、状态机的VHDL表述丰富多样、有其独到的好处。5、在高速运算和控制方面,状态机更有其巨大的优势。6、高可靠性。6.1有限状态机设计初步6.1.2数据类型定义语句(这里将被用于“状态”的定义)TYPE数据类型名IS数据类型定义OF基本数据类型;或TYPE数据类型名IS数据类型定义;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);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';6.1有限状态机设计初步6.1.3一般有限状态机的结构1.说明部分定义新的数据类型;定义状态(信号型)。ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;...6.1有限状态机设计初步6.1.3一般有限状态机的结构2.主控时序进程负责状态机运转和在时钟驱动下实现状态转换,称为“驱动泵”。图6-1一般状态机结构图comb_outputsstate_inputsresetclkFSM:s_machineCOMnext_statecurrent_statePROCESSREGPROCESS6.1有限状态机设计初步6.1.3一般有限状态机的结构3.主控组合进程即状态译码进程,根据现态和输入确定次态和输出。4.辅助进程不是必需的。常用来配合主控时序或组合进程,以实现数据锁存、算法完成等功能。6.1有限状态机设计初步6.1.3一般有限状态机的结构【例6-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;6.1有限状态机设计初步6.1.3一般有限状态机的结构图6-2例6-1的工作时序6.1有限状态机设计初步6.1.3一般有限状态机的结构图6-3通过StateMachineViewer观察到的例6-1的状态图6.2Moore型有限状态机设计6.2.1多进程有限状态机图6-4ADC0809工作时序特点:·CMOS电路·8路模拟输入,8bit输出(3S门)·与常用μP兼容·采用逐次比较法,转换时间约100μsADC0809—集成逐次比较型ADCADC0809ADC0809原理图数字系统和FSM在集成电路设计时,通常可以将系统划分为两部分,一部分是数据单元,另一部分是控制单元。数据单元包含保存运算数据和运算结果的数据寄存器,也包括完成数据运算的组合逻辑。数据单元要产生输出信号,数据运算状态等有用信号。控制单元用来产生信号序列,以决定何时进行何种数据运算,控制单元要从数据单元得到条件信号,以决定继续进行那些数据运算。数据单元和控制单元中,有两个非常重要的信号,即复位信号和时钟信号。复位信号保证了系统初始状态的确定性,时钟信号则是时序系统工作的必要条件。状态机通常在复位信号到来的时候恢复到初始状态,每个时钟到来的时候内部状态发生变化。FSM要点(1)moore和mealy的区别在于输出是否只和当前状态有关。(2)状态机的两种基本操作:一是状态机内部状态的转换,另一是产生输出信号序列。(3)状态机的分析可以从状态图入手,状态机的设计也可以从状态图入手。6.2Moore型有限状态机设计6.2.1多进程有限状态机图6-5控制ADC0809采样状态图6.2Moore型有限状态机设计6.2.1多进程有限状态机图6-6采样状态机结构框图6.2Moore型有限状态机设计6.2.1多进程有限状态机【例6-2】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYADCINTISPORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);--来自0809转换好的8位数据CLK:INSTD_LOGIC;--状态机工作时钟EOC:INSTD_LOGIC;--转换状态指示,低电平表示正在转换ALE:OUTSTD_LOGIC;--8个模拟信号通道地址锁存信号START:OUTSTD_LOGIC;--转换开始信号OE:OUTSTD_LOGIC;--数据输出3态控制信号ADDA:OUTSTD_LOGIC;--信号通道最低位控制信号LOCK0:OUTSTD_LOGIC;--观察数据锁存时钟Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--8位数据输出ENDADCINT;ARCHITECTUREbehavOFADCINTISTYPEstatesIS(st0,st1,st2,st3,st4);--定义各状态子类型SIGNALcurrent_state,next_state:states:=st0;SIGNALREGL:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALLOCK:STD_LOGIC;--转换后数据输出锁存时钟信号接下页BEGINADDA='1';--当ADDA='0',模拟信号进入通道IN0;当ADDA='1',则进入通道IN1Q=REGL;LOCK0=LOCK;COM:PROCESS(current_state,EOC)BEGIN--规定各状态转换方式CASEcurrent_stateISWHENst0=ALE='0';START='0';LOCK='0';OE='0';next_state=st1;--0809初始化WHENst1=ALE='1';START='1';LOCK='0';OE='0';Next_state=st2;--启动采样WHENst2=ALE='0';START='0';LOCK='0';OE='0';IF(EOC='1')THENnext_state=st3;--EOC=1表明转换结束ELSEnext_state=st2;ENDIF;--转换未结束,继续等待WHENst3=ALE='0';START='0';LOCK='0';OE='1';Next_state=st4;--开启OE,输出转换好的数据WHENst4=ALE='0';START='0';LOCK='1';OE='1';next_state=st0;WHENOTHERS=next_state=st0;ENDCASE;ENDPROCESSCOM;REG:PROCESS(CLK)BEGINIF(CLK'EVENTANDCLK='1')THENcurrent_state=next_state;ENDIF;ENDPROCESSREG;--由信号current_state将当前状态值带出此进程REGLATCH1:PROCESS(LOCK)--此辅助进程中,在LOCK的上升沿将转换好的数据锁入BEGINIFLOCK='1'ANDLOCK'EVENTTHENREGL=D;ENDIF;ENDPROCESSLATCH1;ENDbehav;6.2Moore型有限状态机设计6.2.1多进程有限状态机图6-7ADC0809采样状态机工作时序6.2Moore型有限状态机设计6.2.1多进程有限状态机【例6-3】例6-2中组合进程的拆分COM1:PROCESS(current_state,EOC)--确定状态转换方式BEGINCASEcurrent_stateISWHENst0=next_state=st1;WHENst1=next_state=st2;WHENst2=IF(EOC='1')THENnext_state=st3;ELSEnext_state=st2;ENDIF;WHENst3=next_state=st4;--开启OEWHENst4=next_state=st0;WHENOTHERS=next_state=st0;ENDCASE;ENDPROCESSCOM1;COM2:PROCESS(current_state)--状态译码BEGINCASEc
本文标题:第6章实用状态机设计技术.
链接地址:https://www.777doc.com/doc-2111122 .html