资源描述
,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,6,章 有限状态机设计,EDA,的控制单元,P189-208,一、概述,6.1.1.1,关于状态机,实现高效的、高可靠的逻辑控制;,擅长解决同步时序逻辑问题;,是事物状态的一种综合描述;,是组合逻辑和寄存器逻辑的特殊组合;,基本操作有:内部状态转换、输出序列;,比起,MCU,有独特的优势。,一、概述,6.1.1.2,状态机分类,输出方式:,Moore,(摩尔);,Mealy,(米立);,结构分类:,单进程;,多进程;,状态表达方式:,顺序编码;,一位热码;,其它编码。,一、概述,6.1.2,状态机的特点,克服了纯硬件系统顺序控制不灵活的缺点;,结构模式相对简单,设计方案相对固定;,构成良好的同步时序逻辑模块;,工作速度比,MCU,高,34,个数量级;,具有较高的可靠性。,一、概述,6.1.3,状态机基本结构,状态,译码器,状态,寄存器,输,出,译,码,器,输入,反馈,输出,状态,组合逻辑,组合逻辑,时序逻辑,二、,一般有限状态机的设计,6.2.1,一般有限状态机组成,说明部分;,时序进程;,组合进程;,辅助进程。,二、,一般有限状态机的设计,6.2.1,一般有限状态机组成,说明部分:,TYPE,state_type,IS(,start_state,run_state,error_state,);,SIGNAL state:,state_type,;,注:该数据类型为用户自定义数据类型;,该部分一般放在,ARCHITECTURE,和,BEGIN,之间,;,二、,一般有限状态机的设计,6.2.1,一般有限状态机组成,时序进程:,注:状态寄存器部分;,存储逻辑控制过程中被更新的状态,;,二、,一般有限状态机的设计,6.2.1,一般有限状态机组成,组合进程:,注:状态译码器部分;,判别控制过程中的当前状态,;(,case-when,),决定进入下一个状态,。(,if-then-else,),二、,一般有限状态机的设计,6.2.1,一般有限状态机组成,辅助进程:,状态机,Current_state,Next_state,Comb_output,clk,reset,State_inputs,一般状态机工作示意图,二、,一般有限状态机的设计,【,例,6-1】,一般两进程有限状态机描述,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY,s_machine,IS,PORT(,clk,reset,:IN STD_LOGIC;,state_inputs,:IN STD_LOGIC_VECTOR(0 TO 1);,comb_outputs,:OUT STD_LOGIC_VECTOR(0 TO 1),);,END,s_machine,;,ARCHITECTURE behave OF,s_machine,IS,TYPE states IS(st0,st1,st2,st3);,SIGNAL,current_state,next_state,:states;,BEGIN,REG:PROCESS(,reset,clk,),BEGIN,IF reset=1 THEN,current_state,=st0;,ELSIF,clk,=1 AND,clkEVENT,THEN,current_state,comb_outputs,=“00”;,IF,state_inputs,=00 THEN,next_state,=st0,;,ELSE,next_state,comb_outputs,=“01”;,IF,state_inputs,=00 THEN,next_state,=st1;,ELSE,next_state,comb_outputs,=“10”;,IF,state_inputs,=11 THEN,next_state,=st2;,ELSE,next_state,comb_outputs,=“11”;,IF,state_inputs,=11 THEN,next_state,=st3;,ELSE,next_state,状态转换图,-,逻辑结构框图,-VHDL,代码,二、,一般有限状态机的设计,【,例,6-2】Moore,状态机设计,由,FPGA,控制,AD574,电路(三进程),CECS RC K12/8 A0,工 作 状 态,0,XXXX,禁止,X1XXX,禁止,100,X0,启动,12,位转换,100,X1,启动,8,位转换,1011,X12,位并行输出有效,10100,高,8,位并行输出有效,10101,低,4,位加上尾随,4,个,0,有效,表,6-1 AD574,逻辑控制真值表(,X,表示任意),二、,一般有限状态机的设计,【,例,6-2】Moore,状态机设计,由,FPGA,控制,AD574,电路(三进程),图,6-4 AD574,工作时序,二、,一般有限状态机的设计,【,例,6-2】Moore,状态机设计,由,FPGA,控制,AD574,电路,图,6-5 AD574,工作状态图,二、,一般有限状态机的设计,【,例,6-2】Moore,状态机设计,由,FPGA,控制,AD574,电路(三进程),图,6-6,采样状态机结构框图,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY AD574 IS,PORT(,d:IN STD_LOGIC_VECTOR(11 DOWNTO 0);,clk,status,:IN STD_LOGIC;,-,时钟,CLK,,,状态信号,STATUS,lock0 :OUT STD_LOGIC;,-,内部锁存信号,LOCK,的测试信号,cs,a0,rc,k12x8:OUT STD_LOGIC;,-AD574,控制信号,q:OUT STD_LOGIC_VECTOR(11 DOWNTO 0);,-,输出,END AD574;,ARCHITECTURE behave OF AD574 IS,TYPE states IS(st0,st1,st2,st3,st4);,SIGNAL,current_state,next_state,:states:=st0;,SIGNAL,regl,:STD_LOGIC_VECTOR(11 DOWNTO 0);,SIGNAL lock:STD_LOGIC;,BEGIN,k12x8=1;lock0,next_state,next_state,IF(STATUS=1)THEN,next_state,=st2;,ELSE,next_state,next_state,next_state,next_state,CS=1;A0=1;RC=1;LOCK CS=0;A0=0;RC=0;LOCK CS=0;A0=0;RC=0;LOCK CS=0;A0=0;RC=1;LOCK CS=0;A0=0;RC=1;LOCKCS=1;A0=1;RC=1;LOCK=0;,-,回初始态,END CASE;,END PROCESS COM2;,REG:PROCESS(CLK),-,状态寄存器时序进程,接下页,BEGIN,IF(,clkEVENT,AND,clk,=1)THEN,current_state,=,next_state,;,END IF;,END PROCESS REG;,LATCH1:PROCESS(lock),-,数据锁存器进程,BEGIN,IF lock=1 AND,lockEVENT,THEN,regl,=d;,END IF;,END PROCESS;,q=,regl,;,END behave;,二、,一般有限状态机的设计,【,例,6-3】Moore,状态机设计,同步输出,Moore,型状态机,组合逻辑,寄,存,器,寄,存,器,组合逻辑,inputs,outputs,clk,clk,reset,reset,当前状态,二、,一般有限状态机的设计,【,例,6-4】Mealy,状态机设计,Moore,状态机的输出仅为,当前状态,的函数,Mealy,状态机的输出是,输入和状态,的函数,多进程,Mealy,型状态机,(两进程),:,组合逻辑,寄,存,器,inputs,outputs,clk,reset,当前状态,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY MEALY1 IS,PORT(CLK,DATAIN,RESET :IN STD_LOGIC;,Q:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);,END MEALY1;,ARCHITECTURE behave OF MEALY1 IS,TYPE states IS(st0,st1,st2,st3,st4);,SIGNAL STX:states ;,BEGIN,COMREG:PROCESS(CLK,RESET)BEGIN-,决定转换状态的进程,IF RESET=1 THEN,STX IF DATAIN=1 THEN STX IF DATAIN=0 THEN STX IF DATAIN=1 THEN STX IF DATAIN=0 THEN STX IF DATAIN=1 THEN STX STX IF DATAIN=1 THEN Q=10000;,ELSE Q IF DATAIN=0 THEN Q=10111;,ELSE Q IF DATAIN=1 THEN Q=10101;,ELSE Q IF DATAIN=0 THEN Q=11011;,ELSE Q IF DATAIN=1 THEN Q=11101;,ELSE Q Q next_state next_state IF(STATUS=1)THEN next_state=st2;,ELSE next_state next_state next_state next_state=st0;,END CASE;,OUT4=current_state(4 DOWNTO 1);,END PROCESS COM1;,REG:PROCESS(CLK)-,时序进程,BEGIN,IF(CLKEVENT AND CLK=1)THEN,current_state=next_state;,END IF;,END PROCESS REG;,LK=current_state(1);,LATCH1:PROCESS(LK)-,数据锁存器进程,BEGIN,IF LK=1 AND LKEVENT THEN,REGL=D;,接下页,END IF;,END PROCESS;,Q=REGL;,END,behav,;,接上页,图,6-15,例,6-7,状态机工作时序图,7.4.2,顺序编码,表,7-3,编码方式,【,例,7-8】,.,SIGNAL CRURRENT_STATE,NEXT_STATE:STD_LOGIC_VECTOR(2 DOWNTO 0);,CONSTANT ST0:STD_LOGIC_VECTOR(2 DOWNTO 0):=000;,CONSTANT ST1:STD_LOGIC_VECTOR(2 DOWNTO 0):=001;,CONSTANT ST2:STD_LOGIC_VECTOR(2 DOWNTO 0):=010;,CONSTANT ST3:STD_LOGIC_VECTOR(2 DOWNTO 0):=011;,.,7.4.3,一位热码编码(,One-hot encoding,),图,7-13,一位热码编码方式选择窗,状态机编码方式设置,
展开阅读全文