第八章 有限状态机的VHDL设计
第八章 有限状态机的VHDL设计
主要内容 ·有限状态机的基本概念 ·一般有限状态机的设计 摩尔状态机设计 ·米立状态机设计
主要内容 • 有限状态机的基本概念 • 一般有限状态机的设计 • 摩尔状态机设计 • 米立状态机设计
8.1有限状态机的基本概念 8,1,1有限状态机的基本结构和功能 有限状态机(Finite State Machine,简称FSM)是数字逻辑电路 以及数字系统的重要组成部分,尤其应用于数字系统核心部件的设计, 以实现高效率高可靠性的逻辑控制。 当前状态 CIk 时序逻辑 下一个状态 组合逻辑 输出 Reset 热爽 图8.1有限状态机的基本结构图 有限状态机实现了以下两个基本功能: ·根据当前状态和输入条件决定状态机的内部状态转换。 ·根据当前状态和输入条件确定产生输出信号序列
8.1有限状态机的基本概念 8.1.1 有限状态机的基本结构和功能 有限状态机(Finite State Machine,简称FSM)是数字逻辑电路 以及数字系统的重要组成部分,尤其应用于数字系统核心部件的设计, 以实现高效率高可靠性的逻辑控制。 有限状态机实现了以下两个基本功能: • 根据当前状态和输入条件决定状态机的内部状态转换。 • 根据当前状态和输入条件确定产生输出信号序列。 时序逻辑 组合逻辑 Reset Clk 当前状态 下一个状态 输出 状态 输入 图8.1 有限状态机的基本结构图
8.1有限状态机的基本概念(续) 8,1,2状态机的状态编码 有限状态机设计是基于状态描述的,因此首先必须对系统中的每 一个工作状态有一个合理的表达。对于设计者而言,为了表达简捷方 便通常使用符号化状态机。 ·二进制编码方案:是用N位二进制数,表示M个工作状态,当然必须 满足2N大于等于M。 ·一位热码编码方案:用N位二进制数表示N个状态,每一位编码对应 个触发器,状态机中的每个状态都由其中一个触发器的状态来表示。 8,1.3有限状态机的技术优势 ·设计方案相对固定,结构模式简单,可定义符号化枚举类型的状态。 ·状态机的VHDL描述层次分明,结构清晰,易读易懂。 ·基于有限状态机技术设计的控制器其工作速度大大优于CPU。 ·基于有限状态机技术设计的控制器其可靠性也优于CPU
8.1有限状态机的基本概念(续) 8.1.2状态机的状态编码 有限状态机设计是基于状态描述的,因此首先必须对系统中的每 一个工作状态有一个合理的表达。对于设计者而言,为了表达简捷方 便通常使用符号化状态机。 • 二进制编码方案:是用N位二进制数,表示M个工作状态,当然必须 满足2 N大于等于M。 • 一位热码编码方案:用N位二进制数表示N个状态,每一位编码对应 一个触发器,状态机中的每个状态都由其中一个触发器的状态来表示。 8.1.3有限状态机的技术优势 • 设计方案相对固定,结构模式简单,可定义符号化枚举类型的状态。 • 状态机的VHDL描述层次分明,结构清晰,易读易懂。 • 基于有限状态机技术设计的控制器其工作速度大大优于CPU。 • 基于有限状态机技术设计的控制器其可靠性也优于CPU
8.2一般有限状态机的设计 8,2,1一般有限状态机的VDL组成 。说明部分:主要是设计者使用YPE语句定义新的数据类型,如: TYPE states IS (sto,st1,st2,st3,st4,st5); SIGNAL present_state,next_state:states; ·主控时序逻辑部分:任务是负责状态机运转和在外部时钟驱动下实现 内部状态转换的进程。时序进程的实质是一组触发器,因此,该进程 中往往也包括=些清零或置位的输入控制信号,如Reset信号。 ·主控组合逻辑部分:任务是根据状态机外部输入的状态控制信号(包 括来自外部的和状态机内部的非进程的信号)和当前的状态值 current_state来确定下一状态next_statel的取值内容,以及对外部或 对内部其他进程输出控制信号的内容。 ·辅助逻辑部分:辅助逻辑部分主要是用于配合状态机的主控组合逻辑 和主控时序逻辑进行工作,以完善和提高系统的性能
8.2 一般有限状态机的设计 8.2.1 一般有限状态机的VHDL组成 • 说明部分:主要是设计者使用TYPE语句定义新的数据类型,如: TYPE states IS (st0, st1, st2, st3, st4, st5); SIGNAL present_state, next_state: states; • 主控时序逻辑部分:任务是负责状态机运转和在外部时钟驱动下实现 内部状态转换的进程。时序进程的实质是一组触发器,因此,该进程 中往往也包括一些清零或置位的输入控制信号,如Reset信号。 • 主控组合逻辑部分:任务是根据状态机外部输入的状态控制信号(包 括来自外部的和状态机内部的非进程的信号)和当前的状态值 current_state来确定下一状态next_state的取值内容,以及对外部或 对内部其他进程输出控制信号的内容。 • 辅助逻辑部分:辅助逻辑部分主要是用于配合状态机的主控组合逻辑 和主控时序逻辑进行工作,以完善和提高系统的性能
8.2.2 一般有限状态机的设计示例 例8.1二进程一般状态机的描述。 LIBRARY IEEE USE IEEE.STD LOGIC 1164.ALL; ENTITY two_process_state_machine IS PORT(clk,reset IN STD LOGIC; state_inputs IN STD LOGIC; comb outputs OUT STD_LOGIC_VECTOR(OTO 1)); END ENTITY two_process_state_machine; ARCHITECTURE behv OF two_process_state_machine IS TYPE states IS(st0,st1,st2,st3);-定义states为枚举型数据类型,构造符号化状态机 SIGNAL current_state,next_state:states; BEGIN REG:PROCESS(reset,clk)-时序逻辑进程 BEGIN IF reset='1'THEN-异步复位 current state <sto; ELSIF clk='1 AND CIk'EVENT THEN-出现时钟上升沿时进行状态转换 current_state <next_state; END IF; END PROCESS;
8.2.2 一般有限状态机的设计示例 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY two_process_state_machine IS PORT (clk, reset : IN STD_LOGIC; state_inputs : IN STD_LOGIC; comb_outputs : OUT STD_LOGIC_VECTOR(0 TO 1)); END ENTITY two_process_state_machine; ARCHITECTURE behv OF two_process_state_machine IS TYPE states IS (st0,st1,st2,st3); --定义states为枚举型数据类型,构造符号化状态机 SIGNAL current_state, next_state: states; BEGIN REG: PROCESS (reset, clk) --时序逻辑进程 BEGIN IF reset = '1' THEN --异步复位 current_state <= st0; ELSIF clk = '1' AND clk'EVENT THEN--出现时钟上升沿时进行状态转换 current_state <= next_state; END IF; END PROCESS; 例8.1 二进程一般状态机的描述
8.2,2一般有限状态机的设计示例(续1) 例8.1二进程一般状态机的描述。 COM:PROCESS(current state,state inputs)-组合逻辑进程 BEGIN CASE current_state IS WHEN st(0=>comb_outputscomb outputscomb_outputs comb_outputs<="11"; IF state inputs='0'THEN next_state <=st3; ELSE next_state <sto; END IF; END CASE; END PROCESS; END ARCHITECTURE behv;
8.2.2 一般有限状态机的设计示例(续1) COM: PROCESS(current_state, state_inputs) --组合逻辑进程 BEGIN CASE current_state IS WHEN st0 => comb_outputs comb_outputs comb_outputs comb_outputs <= "11"; IF state_inputs = ‘0’ THEN next_state <= st3; ELSE next_state <= st0; END IF; END CASE; END PROCESS; END ARCHITECTURE behv; 例8.1 二进程一般状态机的描述
8.2,2一般有限状态机的设计示例(续2) 例8.1二进程一般状态机的描述。 1/10 /11 ese 0/1 1 0/00 例8.1的状态转换图 8 160,0n 2400s 0 DI eIe《 2 state_inputs 3 回comb_outputs B00 00 011001X00X01● 10 6 回current_state B10 例8.1的时序仿真图 current_state state_inputs ate inouts clk comb_outputs[0..1] reset 例8.1的RTL图
8.2.2 一般有限状态机的设计示例(续2) 例8.1 二进程一般状态机的描述。 reset st0 st1 st2 st3 1/01 1/10 1/11 0/11 0/00 0/00 0/01 0/10 state_inputs clk reset st0 st1 clk st2 reset state_inputs comb_outputs[0..1] current_state 例8.1的状态转换图 例8.1的时序仿真图 例8.1的RTL图
8.3摩尔状态机设计 从状态机的信号输出方式上看,可以将状态机分为摩尔型(Mooe) 和米立型(Mealy)状态机。摩尔型有限状态机输出只与当前状态有关, 而与输入信号的当前值无关,是严格的现态函数。 例8.2四状态摩尔型有限状态机的描述。 LIBRARY IEEE USE IEEE.STD LOGIC 1164.ALL: ENTITY four state moore state machine IS PORT( Ck:IN STD LOGIC; Input IN STD LOGIC: reset IN STD LOGIC; output:OUT STD LOGIC VECTOR(1 DOWNTO0) END ENTITY: ARCHITECTURE rtl OF four state moore state machine IS 一定义枚举类型的状态机 TYPE state_type IS(sO,s1,s2,s3); 一定义一个信号保存当前工作状态 SIGNAL state:state_type;
8.3 摩尔状态机设计 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY four_state_moore_state_machine IS PORT( Clk : IN STD_LOGIC; Input : IN STD_LOGIC; reset : IN STD_LOGIC; output : OUT STD_LOGIC_VECTOR(1 DOWNTO 0) ); END ENTITY; ARCHITECTURE rtl OF four_state_moore_state_machine IS -- 定义枚举类型的状态机 TYPE state_type IS (s0, s1, s2, s3); -- 定义一个信号保存当前工作状态 SIGNAL state : state_type; 从状态机的信号输出方式上看,可以将状态机分为摩尔型(Moore) 和米立型(Mealy)状态机。摩尔型有限状态机输出只与当前状态有关, 而与输入信号的当前值无关,是严格的现态函数。 例8.2 四状态摩尔型有限状态机的描述
8.3摩尔状态机设计(续1) 例8.2四状态摩尔型有限状态机的描述。 BEGIN PROCESS(ck,reset)一状态转换的时序进程 BEGIN IF reset ='1'THEN state IF input ='1'THEN stateIF input ='1'THEN state IF input ='1'THEN state output output <="11"; END CASE; END PROCESS; END rti;
8.3 摩尔状态机设计(续1) BEGIN PROCESS (clk, reset) -- 状态转换的时序进程 BEGIN IF reset = '1' THEN state IF input = '1' THEN state IF input = '1' THEN state IF input = '1' THEN state IF input = '1' THEN state output output output output <= "11"; END CASE; END PROCESS; END rtl; 例8.2 四状态摩尔型有限状态机的描述