160 likes | 318 Views
ç¬¬å…«ç« . 有é™çŠ¶æ€æœºçš„ VHDL 设计. 主è¦å†…容. 有é™çŠ¶æ€æœºçš„基本概念 一般有é™çŠ¶æ€æœºçš„设计 摩尔状æ€æœºè®¾è®¡ 米立状æ€æœºè®¾è®¡. 8.1 有é™çŠ¶æ€æœºçš„基本概念. 8.1.1 有é™çŠ¶æ€æœºçš„基本结构和功能 有é™çŠ¶æ€æœºï¼ˆ Finite State Machine ,简称 FSM )是数å—逻辑电路以åŠæ•°å—系统的é‡è¦ç»„æˆéƒ¨åˆ†ï¼Œå°¤å…¶åº”用于数å—ç³»ç»Ÿæ ¸å¿ƒéƒ¨ä»¶çš„è®¾è®¡ï¼Œä»¥å®žçŽ°é«˜æ•ˆçŽ‡é«˜å¯é 性的逻辑控制。 有é™çŠ¶æ€æœºå®žçŽ°äº†ä»¥ä¸‹ä¸¤ä¸ªåŸºæœ¬åŠŸèƒ½ï¼š æ ¹æ®å½“å‰çŠ¶æ€å’Œè¾“å…¥æ¡ä»¶å†³å®šçŠ¶æ€æœºçš„内部状æ€è½¬æ¢ã€‚ æ ¹æ®å½“å‰çŠ¶æ€å’Œè¾“å…¥æ¡ä»¶ç¡®å®šäº§ç”Ÿè¾“出信å·åºåˆ—。. 8.1 有é™çŠ¶æ€æœºçš„基本概念 (ç»ï¼‰.
E N D
第八章 有限状态机的VHDL设计
主要内容 • 有限状态机的基本概念 • 一般有限状态机的设计 • 摩尔状态机设计 • 米立状态机设计
8.1有限状态机的基本概念 8.1.1 有限状态机的基本结构和功能 有限状态机(Finite State Machine,简称FSM)是数字逻辑电路以及数字系统的重要组成部分,尤其应用于数字系统核心部件的设计,以实现高效率高可靠性的逻辑控制。 有限状态机实现了以下两个基本功能: • 根据当前状态和输入条件决定状态机的内部状态转换。 • 根据当前状态和输入条件确定产生输出信号序列。
8.1有限状态机的基本概念(续) 8.1.2状态机的状态编码 有限状态机设计是基于状态描述的,因此首先必须对系统中的每一个工作状态有一个合理的表达。对于设计者而言,为了表达简捷方便通常使用符号化状态机。 • 二进制编码方案:是用N位二进制数,表示M个工作状态,当然必须满足2N大于等于M。 • 一位热码编码方案:用N位二进制数表示N个状态,每一位编码对应一个触发器,状态机中的每个状态都由其中一个触发器的状态来表示。 8.1.3有限状态机的技术优势 • 设计方案相对固定,结构模式简单,可定义符号化枚举类型的状态。 • 状态机的VHDL描述层次分明,结构清晰,易读易懂。 • 基于有限状态机技术设计的控制器其工作速度大大优于CPU。 • 基于有限状态机技术设计的控制器其可靠性也优于CPU。
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(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'EVENTTHEN--出现时钟上升沿时进行状态转换 current_state <= next_state; END IF; END PROCESS;
8.2.2 一般有限状态机的设计示例(续1) 例8.1 二进程一般状态机的描述。 COM: PROCESS(current_state, state_inputs) --组合逻辑进程 BEGIN CASE current_state IS WHEN st0 => comb_outputs <= "00"; --系统输出及其初始化 IF state_inputs = '0' THEN --根据外部输入条件决定状态转换方向 next_state <= st0; ELSE next_state <= st1; END IF; WHEN st1=> comb_outputs <= "01"; IF state_inputs = ‘0’ THENnext_state <= st1; ELSE next_state <= st2; END IF; WHEN st2=> comb_outputs <= "10"; IF state_inputs = ‘0’ THENnext_state <= st2; ELSE next_state <= st3; END IF; WHEN st3=>comb_outputs <= "11"; IF state_inputs = ‘0’ THENnext_state <= st3; ELSE next_state <= st0; END IF; END CASE; END PROCESS; END ARCHITECTURE behv;
8.2.2 一般有限状态机的设计示例(续2) 例8.1 二进程一般状态机的描述。 例8.1的状态转换图 例8.1的时序仿真图 例8.1的RTL图
8.3 摩尔状态机设计 从状态机的信号输出方式上看,可以将状态机分为摩尔型(Moore)和米立型(Mealy)状态机。摩尔型有限状态机输出只与当前状态有关,而与输入信号的当前值无关,是严格的现态函数。 例8.2 四状态摩尔型有限状态机的描述。 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;
8.3 摩尔状态机设计(续1) 例8.2 四状态摩尔型有限状态机的描述。 BEGIN PROCESS (clk, reset) -- 状态转换的时序进程 BEGIN IF reset = '1' THEN state <= s0; ELSIF (clk'EVENT and clk='1') THEN CASE state IS WHEN s0=> IF input = '1' THEN state <= s1; ELSE state <= s0; END IF; WHEN s1=> IF input = '1' THEN state <= s2; ELSE state <= s1; END IF; WHEN s2=> IF input = '1' THEN state <= s3; ELSE state <= s2; END IF; WHEN s3 => IF input = '1' THEN state <= s0; ELSE state <= s3; END IF; END CASE; END IF; END PROCESS; PROCESS (state) -- 输出由当前状态唯一决定的组合逻辑进程 BEGIN CASE state IS WHEN s0 => output <= "00"; WHEN s1 => output <= "01"; WHEN s2 => output <= "10"; WHEN s3 => output <= "11"; END CASE; END PROCESS; END rtl;
8.3 摩尔状态机设计(续2) 例8.2 四状态摩尔型有限状态机的描述。 例8.2 的时序仿真图
8.4 米立状态机设计 米立状态机的输出是现态和所有输入的函数,输出随输入变化而随时发生变化。因此,从时序的角度上看,米立状态机属于异步输出的状态机,输出不依赖于系统时钟,也不存在摩尔状态机中输出滞后一个时钟周期来反映输入变化的问题。 例8.3四状态米立状态机的描述。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY four_state_mealy_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_mealy_state_machine IS --定义枚举类型的状态机 TYPE state_type IS (s0, s1, s2, s3); --定义一个信号保存当前工作状态 SIGNAL state : state_type;
8.4 米立状态机设计(续1) 例8.3四状态米立状态机的描述。 BEGIN REG:PROCESS (clk, reset) BEGIN IF reset = ‘1’ THENstate <= s0; --高电平有效的系统异步复位 ELSIF (rising_edge(clk)) THEN CASE state IS-- 依据当前状态和输入信号同步决定下一个状态 WHEN s0=> IF input = '0' THEN state <= s0; ELSE state <= s1; END IF; WHEN s1=> IF input = '0' THEN state <= s1; ELSE state <= s2; END IF; WHEN s2=> IF input = '0' THEN state <= s2; ELSE state <= s3; END IF; WHEN s3=> IF input = '0' THEN state <= s3; ELSE state <= s0; END IF; END CASE; END IF; END PROCESS;
8.4 米立状态机设计(续2) 例8.3四状态米立状态机的描述。 COM:PROCESS (state, input) -- 依据当前状态和输入信号决定输出信号,与时钟无关 BEGIN CASE state IS WHEN s0=> IF input = '0' THEN output <= "00"; ELSE output <= "01"; END IF; WHEN s1=> IF input = '0' THEN output <= "01"; ELSE output <= "10"; END IF; WHEN s2=> IF input = '0' THEN output <= "10"; ELSE output <= "11"; END IF; WHEN s3=> IF input = '0' THEN output <= "11"; ELSE output <= "00"; END IF; END CASE; END PROCESS; END rtl;
8.4 米立状态机设计(续3) 例8.3四状态米立状态机的描述。 例8.3的时序仿真图 例8.3综合后的RTL图
本章小结 • 有限状态机设计技术是进行数字电路设计的重要手段之一,尤其适合于高速高性能控制器的设计,目前在高速数据采集和数字信号序列检测方面有较多应用。 • 本章就状态机的基本概念、编码方式以及性能优势等问题进行了简要介绍,重点阐述了基于VHDL描述的有限状态机的一般设计方法、摩尔状态机设计方法和米立状态机设计方法。这些设计方法基本上是相同的,需要注意的是要明确希望的输出是同步输出还是异步输出,分别采用摩尔状态机和米立状态机进行设计,然后按照主控时序进程和主控组合进程分层次进行描述,必要时加入辅助进程。