1、第6章 有限状态机设计,EDA 的控制单元 P189-208,一、概述,6.1.1.1 关于状态机 实现高效的、高可靠的逻辑控制; 擅长解决同步时序逻辑问题; 是事物状态的一种综合描述; 是组合逻辑和寄存器逻辑的特殊组合; 基本操作有:内部状态转换、输出序列; 比起MCU有独特的优势。,一、概述,6.1.1.2 状态机分类 输出方式: Moore(摩尔); Mealy(米立); 结构分类: 单进程; 多进程; 状态表达方式: 顺序编码; 一位热码; 其它编码。,一、概述,6.1.2 状态机的特点 克服了纯硬件系统顺序控制不灵活的缺点; 结构模式相对简单,设计方案相对固定; 构成良好的同步时序逻
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;,注:该数据类型为用户自定义数据类型;该部分一般放在 ARC
3、HITECTURE 和 BEGIN 之间;,二、一般有限状态机的设计,6.2.1 一般有限状态机组成 时序进程:,注:状态寄存器部分;存储逻辑控制过程中被更新的状态;,二、一般有限状态机的设计,6.2.1 一般有限状态机组成 组合进程:,注:状态译码器部分;判别控制过程中的当前状态;(case - when)决定进入下一个状态。 (if - then - else),二、一般有限状态机的设计,6.2.1 一般有限状态机组成 辅助进程:,二、一般有限状态机的设计,【例 6-1 】一般两进程有限状态机描述,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENT
4、ITY 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 ISTYPE states IS (st0, st1, st2, st3); SIGNAL current_state, next_state: states; BEGIN REG: PROCESS (reset,clk) B
5、EGINIF reset = 1 THEN current_state = st0; ELSIF clk=1 AND clkEVENT THEN current_state = next_state; END IF;END PROCESS; COM: PROCESS(current_state, state_Inputs),BEGINCASE current_state IS WHEN st0 = comb_outputs comb_outputs comb_outputs comb_outputs = “11”;IF state_inputs = “11“ THEN next_state =
6、 st3; ELSE next_state = st0; END IF;END case;END PROCESS; END behave;,二、一般有限状态机的设计,【例 6-2 】Moore状态机设计 Moore状态机的输出仅为当前状态的函数 Mealy状态机的输出是输入和当前状态的函数 在控制AD574模数转换器方面,FPGA要比MCU8051快1000倍,状态机控制电路设计思路:AD转换器工作时序-状态转换图-逻辑结构框图-VHDL代码,二、一般有限状态机的设计,【例 6-2 】Moore状态机设计 由FPGA控制AD574电路(三进程),二、一般有限状态机的设计,【例 6-2 】Moo
7、re状态机设计 由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 ISPORT (d : IN STD_LOGIC_VECTOR(11 DOWNTO 0); clk,status : IN STD_LOGIC
8、; -时钟CLK,状态信号STATUSlock0 : 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 ISTYPE states IS (st0, st1, st2, st3,st4); SIGNAL current_state, next_state: states :=st0 ;SIGNAL regl : STD_LOGIC_VE
9、CTOR(11 DOWNTO 0);SIGNAL lock : STD_LOGIC; BEGINk12x8 = 1; lock0 = lock ; COM1: PROCESS(current_state, status) -决定转换状态的进程接下页,BEGIN CASE current_state IS WHEN st0 = next_state next_state IF (STATUS=1) THEN next_state next_state next_state next_state CS CS CS CS CSCS=1; A0=1;RC=1;LOCK=0; -回初始态 END CAS
10、E ; END PROCESS COM2 ; REG: PROCESS (CLK) - 状态寄存器时序进程 接下页,BEGINIF ( clkEVENT AND clk=1) THEN current_state = next_state; END IF; END PROCESS REG; LATCH1 : PROCESS (lock) - 数据锁存器进程 BEGINIF lock=1 AND lockEVENT THEN regl = d ;END IF; END PROCESS ; q = regl; END behave;,二、一般有限状态机的设计,【例 6-3 】Moore状态机设计
11、同步输出Moore型状态机,二、一般有限状态机的设计,【例 6-4 】Mealy状态机设计 Moore状态机的输出仅为当前状态的函数 Mealy状态机的输出是输入和状态的函数 多进程Mealy型状态机(两进程):,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 ISTYPE state
12、s IS (st0, st1, st2, st3,st4); SIGNAL STX : states ; BEGIN COMREG : PROCESS(CLK,RESET) BEGIN -决定转换状态的进程IF RESET =1 THENSTX = ST0;ELSIF CLKEVENT AND CLK = 1 THEN,CASE STX IS WHEN st0 = 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 S
13、TX IF DATAIN = 1 THEN Q IF DATAIN = 0 THEN Q IF DATAIN = 1 THEN Q IF DATAIN = 0 THEN Q = “11011“ ;ELSE Q=“01001“ ;END IF ;,WHEN st4= IF DATAIN = 1 THEN Q Q=“00000“ ; END CASE ; END PROCESS COM1 ; END behave;,二、一般有限状态机的设计,6.5 状态编码 状态位直接输出型编码,每一位的编码值都赋予了实际的控制功能,即:CS = current_state(4) ; A0 = current_s
14、tate(3) ;RC = current_state(2) ; LOCK = current_state(1) 。,【例6-7】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY AD574A ISPORT ( D : IN STD_LOGIC_VECTOR(11 DOWNTO 0);CLK ,STATUS : IN STD_LOGIC;OUT4 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);Q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0) ); END AD574A; ARCHITECTUR
15、E behav OF AD574A IS SIGNAL current_state, next_state: STD_LOGIC_VECTOR(4 DOWNTO 0 );CONSTANT st0 : STD_LOGIC_VECTOR(4 DOWNTO 0) := “11100“ ;CONSTANT st1 : STD_LOGIC_VECTOR(4 DOWNTO 0) := “00001“ ;CONSTANT st2 : STD_LOGIC_VECTOR(4 DOWNTO 0) := “00000“ ;CONSTANT st3 : STD_LOGIC_VECTOR(4 DOWNTO 0) :=
16、“00100“ ;CONSTANT st4 : STD_LOGIC_VECTOR(4 DOWNTO 0) := “00110“ ;SIGNAL REGL : STD_LOGIC_VECTOR(11 DOWNTO 0);SIGNAL LK : STD_LOGIC; BEGIN COM1: PROCESS(current_state,STATUS) -决定转换状态的进程,接下页,BEGIN CASE current_state IS WHEN st0 = next_state next_state IF (STATUS=1) THEN next_state next_state next_stat
17、e next_state = st0; END CASE ;OUT4 = current_state(4 DOWNTO 1);END PROCESS COM1 ;REG: PROCESS (CLK) - 时序进程 BEGINIF ( CLKEVENT AND CLK=1) THEN current_state = next_state; END IF;END PROCESS REG; LK = current_state(1) ;LATCH1 : PROCESS ( LK ) - 数据锁存器进程BEGINIF LK=1 AND LKEVENT THEN REGL = D ;,接下页,END I
18、F;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 一位热码编码方式选择窗,状态机编码方式设置,