240 likes | 510 Views
CPLD 技术应用. 第 八 讲 有限状态机的设计. 教 学 目 的. 认识状态机及其特点 学习状态转移图的画法 掌握摩尔( MOORE )型状态机的 VHDL 设计法 掌握米勒( MEALY )型状态机的 VHDL 设计法. 8.1 什么是状态机. 有限状态机 ( 简称状态机 ) 相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状态转换的过程就是实现逻辑功能的过程。. 8.2 为什么使用状态机. 有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。
E N D
CPLD技术应用 第 八讲 有限状态机的设计
教 学 目 的 • 认识状态机及其特点 • 学习状态转移图的画法 • 掌握摩尔(MOORE)型状态机的VHDL设计法 • 掌握米勒(MEALY)型状态机的VHDL设计法
8.1 什么是状态机 有限状态机(简称状态机)相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状态转换的过程就是实现逻辑功能的过程。
8.2 为什么使用状态机 • 有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。 • 状态机的结构模式相对简单。 • 状态机容易构成性能良好的同步时序逻辑模块。 • 状态机的VHDL表述丰富多样。 • 在高速运算和控制方面,状态机更有其巨大的优势。 • 就可靠性而言,状态机的优势也是十分明显的。
8.3 状态机分类 • 根据输出信号产生的机理不同,状态机可以分成两类: • 摩尔(Moore)型状态机--输出信号仅和状态有关 • 米勒(Mealy)型状态机--输出信号和状态与输入信号有关
Si/ZOi Data_INi 8.4 Moore型状态机设计方法 More型状态机输出仅和存储电路的状态有关,与外部输入无关,即: 外部输出是内部状态的函数。 状态转移图描述方式:
8.4 Moore型状态机设计方法 例:设计一个序列检测器。要求检测器连续收到串行码{1101}后,输出检测标志1,否则输出0。 状态机设计步骤: ① 分析设计要求,列出全部可能状态; ② 画出状态转移图; ③ 用VHDL语言描述状态机。
8.4 Moore型状态机设计方法 (1) 分析设计要求,列出全部可能状态:未收到一个有效位(0) :S0收到一个有效位(1) :S1连续收到两个有效位(11) :S2连续收到三个有效位(110) :S3 连续收到四个有效位(1101) :S4
Si/ZOi Data_INi 8.4 Moore型状态机设计方法 (2) 状态转移图: 1101 0 S0/0 1 0 0 S1/0 S4/1 1 0 1 1 1 S3/0 S2/0 0
8.4 Moore型状态机设计方法 (3)用VHDL语言描述状态机 • 说明部分:主要是设计者使用TYPE语句定义新的数据类型,如: TYPE states IS (st0, st1, st2, st3, st4, st5); SIGNAL present_state, next_state: states; • 主控时序逻辑部分:任务是负责状态机运转和在外部时钟驱动下实现内部状态转换的进程。时序进程的实质是一组触发器,因此,该进程中往往也包括一些清零或置位的输入控制信号,如Reset信号。 • 主控组合逻辑部分:任务是根据状态机外部输入的状态控制信号(包括来自外部的和状态机内部的非进程的信号)和当前的状态值current_state来确定下一状态next_state的取值内容,以及对外部或对内部其他进程输出控制信号的内容。 • 辅助逻辑部分:辅助逻辑部分主要是用于配合状态机的主控组合逻辑和主控时序逻辑进行工作,以完善和提高系统的性能。
LIBRARY IEEE; • USE IEEE.STD_LOGIC_1164.ALL; • ENTITY moore IS • PORT( clk, data:IN STD_LOGIC; • zo :OUT STD_LOGIC); • END moore; • ARCHITECTURE a OF moore IS • TYPE STATE IS (S0,S1,S2,S3,S4); • SIGNAL current_state,next_state :STATE; • BEGIN • p1: PROCESS(clk) • BEGIN • IF (clk'EVENT AND clk='1') THEN • current_state<=next_state; • END IF; • END PROCESS p1; 定义状态机
p2:PROCESS(current_state,data) BEGIN CASE current_state is WHEN S0=> IF data='1' THEN next_state<=S1; ELSE next_state<=S0; END IF; WHEN S1=> IF data='1' THEN next_state<=S2; ELSE next_state<=S0; END IF; WHEN S2=> IF data='0' THEN next_state<=S3; ELSE next_state<=S2; END IF; WHEN S3=> IF data='1' THEN next_state<=S4; ELSE next_state<=S0; END IF; WHEN S4=> IF data='1' THEN next_state<=S1; ELSE next_state<=S0; END IF; END CASE; IF current=s4 then Z0<=‘1’; END PROCESS p2; END a; 状态转移描述 输出信号描述
8.4 Moore型状态机设计方法 仿 真 波 形
8.4 Moore型状态机设计方法 练习:位于十字路口的交通灯,在A方向和B方向各有红、黄、绿三盏灯,每10秒变换一次。变换顺序如下表:
8.4 Moore型状态机设计方法 交通灯的全部状态及输出:
8.4 Moore型状态机设计方法 画出状态转移图: S0 ———— 010100 S1 ———— 001100 S3 ———— 100001 S2 ———— 100010
8.4 Moore型状态机设计方法 实体设计 • LIBRARY IEEE; • USE IEEE.STD_LOGIC_1164.ALL; • ENTITY jtd IS • PORT(clk:IN STD_LOGIC; • ZO:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); • END jtd;
定义状态机 • ARCHITECTURE a OF jtd IS • TYPE STATE IS (S0,S1,S2,S3); • SIGNAL pstate :STATE; • BEGIN • PROCESS(clk) • BEGIN • IF (clk’EVENT AND clk=‘1’) THEN • CASE pstate is • WHEN S0=> pstate<=S1; • WHEN S1=> pstate<=S2; • WHEN S2=> pstate<=S3; • WHEN S3=> pstate<=S0; • END CASE; • END IF; • END PROCESS; 状态转换描述 输出信号描述 • ZO<=“010100” WHEN pstate=s0 ELSE • “001100” WHEN pstate=s1 ELSE • “100010” WHEN pstate=s2 ELSE • “100001”; • END a;
Si Data_INi/ZOi 8.5 Mealy型状态机设计方法 Mealy型状态机输出不仅和存储电路状态有关,还和外部输入信号有关,即: 外部输出是内部状态和外部输入的函数 状态图描述方式:
0/0 S0 1/0 0/0 0/0 S1 S4 1/0 0/0 1/0 Si Data_INi/ZOi 1/0 1/1 S3 S2 0/0 8.5 Mealy型状态机设计方法 ③ 状态转移图: 1101
8.5 Mealy型状态机设计方法 实体设计 • LIBRARY IEEE; • USE IEEE.STD_LOGIC_1164.ALL; • ENTITY mealy IS • PORT( clk, data:IN STD_LOGIC; • zo :OUT STD_LOGIC); • END mealy;
ARCHITECTURE a OF mealy IS • TYPE STATE IS (S0,S1,S2,S3,S4); • SIGNAL pstate :STATE; • BEGIN • PROCESS(clk) • BEGIN • IF (clk’EVENT AND clk=‘1’) THEN • CASE pstate is • WHEN S0=> IF data=‘1’ THEN pstate<=S1; ELSE pstate<=S0; • END IF; zo<=0; • WHEN S1=> IF data=‘1’ THEN pstate<=S2; ELSE pstate<=S0; • END IF; zo<=0; • WHEN S2=> IF data=‘1’ THEN pstate<=S2; ELSE pstate<=S3; • END IF; zo<=0; • WHEN S3=> IF data=‘1’ THEN pstate<=S4; zo<=1; ELSE pstate<=S0; zo<=0;END IF; • WHEN S4=> IF data=‘1’ THEN pstate<=S1; ELSE pstate<=S0; • END IF; zo<=0; • END CASE; • END IF; • END PROCESS; • END a; Mealy型 状态机描述
小 结 • 状态机容易构成性能良好的数字系统控制器; • 状态机可以分为摩尔型和米勒型; • 摩尔型状态机的输出只和状态机的状态有关; • 米勒型状态机的输出和状态机的状态及输入信号有关; • 状态机的设计步骤是分析状态、画状态转移图、VHDL描述 • VHDL描述一般使用枚举类型定义状态机。