当前位置:首页 >> 理学 >>

第六章VHDL有限状态机设计


VHDL有限状态机设计 有限状态机设计

教授内容
有限状态机的基本概念 状态机的基本描述方式 VHDL语言描述状态机 语言描述状态机 Moore型状态机举例 型状态机举例 三种进程描述状态机方式对比 ASM图法状态机设计 图法状态机设计

1 有限状态机的基本概念
状态机是一种思想方法
状态机的本质就是对具有逻辑顺序或时序规律 事件的一种描述方法。 事件的一种描述方法。具有逻辑顺序和时序规 律的事件都适合用状态机描述。 律的事件都适合用状态机描述。

1 有限状态机的基本概念
某学生在学校的学习生活可以简单地概括为宿 教室、食堂之间的周而复始。 舍、教室、食堂之间的周而复始。

1 有限状态机的基本概念
右图也是一张标准 的状态转移图, 的状态转移图,通过 状态机的方式我们再 次清晰地描述另一个 学生的在校生活方式。 学生的在校生活方式。

1 有限状态机的基本概念
状态机的优势: 状态机的优势:
状态机克服了纯硬件数字系统顺序方式控制不 灵活的缺点; 灵活的缺点; 状态机的结构相对简单,设计方案相对固定; 状态机的结构相对简单,设计方案相对固定; 状态机容易构成性能良好的同步时序逻辑块; 状态机容易构成性能良好的同步时序逻辑块; 与VHDL的其他描述方式相比,状态机的VHDL 的其他描述方式相比,状态机的 的其他描述方式相比 描述丰富多样、程序层次分明,结构清晰, 描述丰富多样、程序层次分明,结构清晰,易 读易懂;在排错、 读易懂;在排错、修改和模块移植方面也有其 独到之处; 独到之处; 在高速运算和控制方面, 在高速运算和控制方面,状态机更有其巨大的 优势。 优势。

1 有限状态机的基本概念
有限状态机的定义
所谓有限状态机是指那些输出取决于过去输入 部分和当前输入部分的时序逻辑电路。 部分和当前输入部分的时序逻辑电路。
input Combinationa l logic output

Pr_state

Nx_state

Sequential logic

clock reset

1 有限状态机的基本概念
状态机的本质
对具有“逻辑顺序” 对具有“逻辑顺序”和“时序规律”事件的一 时序规律” 种描述方法。 种描述方法。

应用思路
从状态变量入手,分析每个状态的输入,状态 从状态变量入手,分析每个状态的输入, 转移和输出,从而完成电路的功能。 转移和输出,从而完成电路的功能。 首先明确电路的输出关系, 首先明确电路的输出关系,这些输出相当于状 态的输出, 态的输出,回溯规划每个状态和状态转移条件 与状态输入。 与状态输入。

1 有限状态机的基本概念
有限状态机的组成
组合逻辑
组合逻辑又可分为次态逻辑和输出逻辑两个部分。 组合逻辑又可分为次态逻辑和输出逻辑两个部分。其 中:次态逻辑的功能是用来确定有限状态机的下一个 状态;输出逻辑是用来确定有限状态机的输出。 状态;输出逻辑是用来确定有限状态机的输出。

寄存器逻辑
寄存器逻辑的功能:用来存储有限状态机的内部状态。 寄存器逻辑的功能:用来存储有限状态机的内部状态。

1 有限状态机的基本概念
状态机的基本要素
状态:也叫状态变量。在逻辑设计中, 状态:也叫状态变量。在逻辑设计中,使用状 态划分逻辑顺序和时序规律。 态划分逻辑顺序和时序规律。 输出:输出指在某一个状态时特定发生的事件。 输出:输出指在某一个状态时特定发生的事件。 输入:指状态机中进入每个状态的条件, 输入:指状态机中进入每个状态的条件,有的 状态机没有输入条件, 状态机没有输入条件,其中的状态转移较为简 有的状态机有输入条件, 单,有的状态机有输入条件,当某个输入条件 存在时才能转移到相应的状态。 存在时才能转移到相应的状态。

1 有限状态机的基本概念
有限状态机的类型
从信号输出方式上分
Mealy型状态机 型状态机 Moore型状态机 型状态机

从结构上分
单进程状态机 两进程状态机 三进程状态机

从表达方式上分
符号化状态机 确定状态编码的状态机

从编码方式上分
顺序编码状态机 独热码状态机 格雷码状态机

1 有限状态机的基本概念
Moore型有限状态机 型有限状态机
是指那些输出信号仅与当前状态有关的有限状 态机,即可以把Moore型有限状态机的输出看 态机,即可以把 型有限状态机的输出看 成是当前状态的函数。 成是当前状态的函数。 Moore型有限状态机框图: 型有限状态机框图: 型有限状态机框图

1 有限状态机的基本概念
Mealy型有限状态机 型有限状态机
是指那些输出信号不仅与当前状态有关, 是指那些输出信号不仅与当前状态有关,而且 还与所有的输入信号有关的有限状态机, 还与所有的输入信号有关的有限状态机,即可 以把Mealy有限状态机的输出看作当前状态和 以把 有限状态机的输出看作当前状态和 所有输入信号的函数。可见, 所有输入信号的函数。可见,Mealy有限状态 有限状态 机要比Moore有限状态机复杂一些。 有限状态机复杂一些。 机要比 有限状态机复杂一些 Mealy有限状态机框图: 有限状态机框图: 有限状态机框图

1 有限状态机的基本概念
Moore型和 型和Mealy型有限状态机的区别: 型有限状态机的区别: 型和 型有限状态机的区别
Moore型有限状态机仅与当前状态有关,而与 型有限状态机仅与当前状态有关, 型有限状态机仅与当前状态有关 输入信号无关; 输入信号无关; Mealy型有限状态机不但与当前状态有关,而 型有限状态机不但与当前状态有关, 型有限状态机不但与当前状态有关 且还与状态机的输入信号有关。 且还与状态机的输入信号有关。

1 有限状态机的基本概念
采用何种有限状态机的判别条件: 采用何种有限状态机的判别条件:
Moore型有限状态机可能要比相应的 型有限状态机可能要比相应的Mealy型 型有限状态机可能要比相应的 型 有限状态机需要更多的状态。 有限状态机需要更多的状态。 Moore型有限状态机的输出与当前的输入部分 型有限状态机的输出与当前的输入部分 无关, 无关,因此当前输入产生的任何效果将会延迟 到下一个时钟周期。可见, 到下一个时钟周期。可见,Moore型状态机的 型状态机的 最大优点就是可以将输入部分和输出部分隔离 开。 对于Mealy型有限状态机来说,由于它的输出 对于 型有限状态机来说, 型有限状态机来说 是输入信号的函数, 是输入信号的函数,因此如果输入信号发生改 那么输出可以在一个时钟周期内发生改变。 变,那么输出可以在一个时钟周期内发生改变。

1 有限状态机的基本概念
单进程状态机
整个状态机的描述在一个进程中完成 整个状态机的描述在一个进程中完成

双进程状态机
将组合逻辑部分和时序逻辑部分分开秒速, 将组合逻辑部分和时序逻辑部分分开秒速,放 在结构体的说明部分

三进程状态机
将组合逻辑部分再分为产生次态的组合逻辑部 分和产生输出的组合逻辑部分, 分和产生输出的组合逻辑部分,与时序逻辑部 分一起放在结构体的说明部分

1 有限状态机的基本概念
符号化状态机
所谓符号化状态机, 所谓符号化状态机,就是在程序的说明部分使 语句定义枚举类型, 用TYPE语句定义枚举类型,其元素用状态机 语句定义枚举类型 的状态名来定义。状态变量( 的状态名来定义。状态变量(如状态机的现态 和次态)定义为变量或信号, 和次态)定义为变量或信号,并将状态变量的 数据类型定义为含有既定状态元素的枚举类型。 数据类型定义为含有既定状态元素的枚举类型。 在使用多进程时,为便于信息传递, 在使用多进程时,为便于信息传递,要将状态 变量定义为信号。 变量定义为信号。

1 有限状态机的基本概念
类型定义语句
TYPE 数据类型名 IS 数据类型定义 OF 基本数 据类型; 据类型 或 TYPE 数据类型名 IS 数据类型定义; 数据类型定义 例:
TYPE st1 IS ARRAY (0 TO 15) OF STD_LOGIC; TYPE week IS (sun, mon, tue, wed, thu, fri, sat);

符号化状态机应用
TYPE m_state IS (st0, st1, st2, st3, st4, st5); SIGNAL present_state, next_state : m_state;

1 有限状态机的基本概念
确定状态编码的状态机
使用符号化定义的枚举类型, 使用符号化定义的枚举类型,枚举类型文字元 素的编码通常是自动设置的, 素的编码通常是自动设置的,综合器根据优化 情况、 情况、优化控制的设置或设计者的特殊设定来 确定各元素具体编码的二进制位数、 确定各元素具体编码的二进制位数、数值及元 素间编码的顺序。 素间编码的顺序。 也可以在程序中指明编码方式。 也可以在程序中指明编码方式。 常用的编码方式
2进制编码 进制编码 格雷码编码 One-hot编码 编码

1 有限状态机的基本概念
2进制编码 进制编码
状态机的每一个状态用二进制位来编码 实现4状态的状态机 状态的状态机, 例:实现 状态的状态机,其其二进制编码可 为 状态1=“00”状态2=“01”状态3=“10” 状态 “ ”状态 “ ”状态 “ ” 状态4=“ ” 状态 “11” 需要的寄存器数量最少, 需要的寄存器数量最少,有n个寄存器就可以 个寄存器就可以 个状态进行编码。 对2^n个状态进行编码。 个状态进行编码 需要更多的外部辅助逻辑,并且速度较慢。 需要更多的外部辅助逻辑,并且速度较慢。

1 有限状态机的基本概念
格雷码状态机编码
格雷码编码每次仅一个状态位的值发生变化 实现4状态的状态机 状态的状态机, 例:实现 状态的状态机,其格雷码编码可为 状态1=“00”状态2=“01”状态3=“11”状 状态 “ ”状态 “ ”状态 “ ” 态4=“10” “ ” 特点:触发器使用较少,速度较慢, 特点:触发器使用较少,速度较慢,不会产生 两位同时翻转的情况。 两位同时翻转的情况。当状态位的输出被异步 应用时,格雷码编码是有益的。 应用时,格雷码编码是有益的。

1 有限状态机的基本概念
One-hot状态机编码 状态机编码
One hot的编码方案对每一个状态采用一个触 的编码方案对每一个状态采用一个触 发器, 个状态的状态机需4个触发器 发器,即4个状态的状态机需 个触发器。同一 个状态的状态机需 个触发器。 时间仅1个状态位处于有效电平 如逻辑“ ” 个状态位处于有效电平( 时间仅 个状态位处于有效电平(如逻辑“1”) 实现4状态的状态机 状态的状态机, 例:实现 状态的状态机,其one hot编码可为 编码可为 状态1=“ 状态 “0001”状态 “0010”状态 ”状态2=“ ” 3=“0100”状态 “1000” “ ”状态4=“ ” 特点:触发器使用较多,但逻辑简单,速度快。 特点:触发器使用较多,但逻辑简单,速度快。

1 有限状态机的基本概念
关于one-hot、gray-code、binary编码使 、 关于 、 编码使 用说明
Binary、gray-code编码使用较少的触发器, 、 编码使用较少的触发器, 编码使用较少的触发器 较多的组合逻辑, 编码反之。 较多的组合逻辑,而one-hot编码反之。由于 编码反之 CPLD更多的提供组合逻辑,而FPGA更多的 更多的提供组合逻辑, 更多的提供组合逻辑 更多的 提供触发器资源,所以CPLD多使用 多使用gray提供触发器资源,所以 多使用 code,而FPGA多使用 多使用one-hot编码。 编码。 , 多使用 编码 对于小型设计使用gray-code和binary编码更 对于小型设计使用 和 编码更 有效,而大型状态机使用one-hot编码更有效。 编码更有效。 有效,而大型状态机使用 编码更有效

1 有限状态机的基本概念
程序中指明编码方式
ARCHITECTURE BEHAV OF BINARY IS TYPE STATE_TYPE IS(S1, S2, S3, S4, S5, S6, S7); Binary编码 ATTRIBUTE ENUM_ENCODING: STRING; ATTRIBUTE ENUM_ENCODING OF STATE_TYPE: TYPE IS "001 010 011 100 101 110 111"; ARCHITECTURE BEHAV OF ONE_HOT IS TYPE STATE_TYPE IS(S1, S2, S3, S4, S5, S6, S7); One-hot编码 ATTRIBUTE ENUM_ENCODING: STRING; ATTRIBUTE ENUM_ENCODING OF STATE_TYPE: TYPE IS "00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000";

1 有限状态机的基本概念

2 状态机的基本描述方式
状态转移图
状态转移图是状态机描述的最自然的方式, 状态转移图是状态机描述的最自然的方式,下 图是使用HDL Designer设计的一个简单的状 图是使用 设计的一个简单的状 态转移图。 态转移图。

2 状态机的基本描述方式
状态转移列表
状态转移列表使用列表的方式描述状态机, 状态转移列表使用列表的方式描述状态机,是 数字逻辑电路常用的设计方法之一, 数字逻辑电路常用的设计方法之一,经常被用 于对状态化简,对于可编程逻辑设计, 于对状态化简,对于可编程逻辑设计,由于可 用逻辑资源比较丰富, 用逻辑资源比较丰富,而且状态编码要考虑设 计的稳定性、安全性等因素, 计的稳定性、安全性等因素,所以并不经常使 用状态转移列表优化状态。 用状态转移列表优化状态。
状态 \ 输入 S0 S1 S2 a=‘1’ S1 S2 b=‘1’ S2 S0 S0 default

2 状态机的基本描述方式
HDL语言描述状态机 语言描述状态机
使用HDL语言描述状态机有一定的灵活性,但 语言描述状态机有一定的灵活性, 使用 语言描述状态机有一定的灵活性 是决不是天马行空,而是有章可循的。 是决不是天马行空,而是有章可循的。通过一 些规范的描述方法,可以使HDL语言描述的状 些规范的描述方法,可以使 语言描述的状 态机更安全、稳定、高效、易于维护。 态机更安全、稳定、高效、易于维护。下面是 使用“ 使用“HDL Designer”软件,通过以上的状 ”软件, 态转移图自动生成的VHDL描述的状态机代码。 描述的状态机代码。 态转移图自动生成的 描述的状态机代码 自动生成的代码的形式, 自动生成的代码的形式,是严格按照三进程状 态机描述风格实现的。 态机描述风格实现的。

ENTITY smtest IS PORT( a : IN b : IN clk : IN rst : IN x : OUT y : OUT ); -- Declarations END smtest ;

std_logic; std_logic; std_logic; std_logic; std_logic; std_logic

LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; ARCHITECTURE fsm OF smtest IS TYPE STATE_TYPE IS ( s0, s1, s2 ); -- Declare current and next state signals SIGNAL current_state : STATE_TYPE; SIGNAL next_state : STATE_TYPE; BEGIN

状 态 类 型 定 义 时 序 逻 辑 进 程

---------------------------------------------------------------nextstate_proc : PROCESS ( a, b, current_state ) -------------------------------------------------------------BEGIN CASE current_state IS WHEN s0 => IF (b='1') THEN next_state <= s2; ELSIF (a='1') THEN next_state <= s1; ELSE next_state <= s0; END IF; WHEN s1 => IF (a='1') THEN next_state <= s2; ELSIF (b='1') THEN next_state <= s0; ELSE next_state <= s1; END IF; WHEN s2 => next_state <= s0; WHEN OTHERS => next_state <= s0; END CASE; END PROCESS nextstate_proc;

输 入 组 合 逻 辑 进 程

---------------------------------------------------------------clocked_proc : PROCESS ( clk, rst ) ---------------------------------------------------------------BEGIN IF (rst = '0') THEN current_state <= s0; ELSIF (clk'EVENT AND clk = '1') THEN current_state <= next_state; END IF; END PROCESS clocked_proc;

-------------------------------------------------------------output_proc : PROCESS ( current_state ) -------------------------------------------------------------BEGIN -- Combined Actions CASE current_state IS WHEN s1 => x<='1'; WHEN s2 => y<='1'; WHEN OTHERS => NULL; END CASE; END PROCESS output_proc; END fsm;

输 出 组 合 逻 辑 进 程

3 VHDL语言描述状态机 语言描述状态机
RTL级FSM描述评判标准 级 描述评判标准
安全, 安全,稳定性高
所谓FSM安全是指 安全是指FSM不会进入死循环,特别是不会进入非 不会进入死循环, 所谓 安全是指 不会进入死循环 预知状态,而且由于某些扰动进入非设计状态,也能很快的恢 预知状态,而且由于某些扰动进入非设计状态, 复到正常的状态循环中来。这里面有两层含义,第一: 复到正常的状态循环中来。这里面有两层含义,第一:要求该 FSM的综合实现结果无毛刺等异常扰动;第二:要求状态机 的综合实现结果无毛刺等异常扰动; 的综合实现结果无毛刺等异常扰动 第二: 要完备,即使收到异常扰动进入非设计状态, 要完备,即使收到异常扰动进入非设计状态,也能很快恢复到 正常状态。 正常状态。

速度快, 速度快,满足设计的频率要求
任何RLT设计都应该满足设计的频率要求。 设计都应该满足设计的频率要求。 任何 设计都应该满足设计的频率要求

面积小, 面积小,满足设计的面积要求
任何RTL设计都应该满足设计的面积要求。 设计都应该满足设计的面积要求。 任何 设计都应该满足设计的面积要求

FSM设计要清晰易懂、易维护 设计要清晰易懂、 设计要清晰易懂
不规范的FSM写法上很难让其他人解读,甚至过一段时间后 写法上很难让其他人解读, 不规范的 写法上很难让其他人解读 设计者也发现很难维护。 设计者也发现很难维护。

3 VHDL语言描述状态机 语言描述状态机
时序逻辑设计
由右图可知, 由右图可知,clock和reset 和 作为时序逻辑部分的输入, 作为时序逻辑部分的输入, Nx_state也使输入之一。 也使输入之一。 也使输入之一 Pr_state作为其输出。可以 作为其输出。 作为其输出 描述如下
input Combinationa l logic output

Pr_state

Nx_state

PROCESS (reset, clock) BEGIN IF (reset = '1') THEN pr_state <= state0; ELSIF (clock'EVENT AND clock = '1') THEN pr_state <= nx_state; END IF; END PROCESS;

Sequential logic

clock reset

3 VHDL语言描述状态机 语言描述状态机
组合逻辑设计
input output Combinationa l logic

右图所示的上部分是 完全组合逻辑电路, 完全组合逻辑电路, 所以可以很好的应用 并行特性来设计。 并行特性来设计。不 过,在下面给出的示 例代码中, 例代码中,使用了顺 序编码的方式, 序编码的方式,主要 使用VHDL语言中的 使用 语言中的 CASE语句进行设计。 语句进行设计。 语句进行设计 下页给出示例代码。 下页给出示例代码。

Pr_state

Nx_state

Sequential logic

clock reset

3 VHDL语言描述状态机 语言描述状态机
PROCESS (input, pr_state) BEGIN CASE pr_state IS WHEN state0 => IF (input=...) THEN outpur <= <value>; nx_state <= state1; ELSIF ... END IF; WHEN state1 => IF (input=...) THEN output <= <value>; nx_state <= state2; ELSIF ... END IF; WHEN state2 => IF (input=...) THEN outpur <= <value>; nx_state <= state3; ELSIF ... END IF; ... END CASE; END PROCESS;
input Combinationa l logic output

Pr_state

Nx_state

Sequential logic

clock reset

3 VHDL语言描述状态机 语言描述状态机
通过以上分析,我们在这里给出使用 通过以上分析,我们在这里给出使用VHDL 语言描述状态机的两个一般性的“套路” 语言描述状态机的两个一般性的“套路” 。

3 VHDL语言描述状态机 语言描述状态机

模板一
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ----------------------------------------ENTITY <entity_name> IS PORT (input: IN<data_type>; reset, clock: IN STD_LOGIC; output: OUT<data_type>); END <entity_name>; ----------------------------------------ARCHITECTURE <arch_name>OF<entity_name>IS TYPE state IS (state0, state1, state2, state3, ...); SIGNAL pr_state, nx_state: state; BEGIN ------------Lower section---------------PROCESS (reset, clock) BEGIN IF (reset = '1') THEN pr_state <= state0; ELSIF (clock'EVENT AND clock = '1') THEN pr_state <= nx_state; END IF; END PROCESS; ------------Upper section----------------PROCESS (input, pr_state) BEGIN CASE pr_state IS WHEN state0 =>

IF (input=...) THEN outpur <= <value>; nx_state <= state1; ELSI ... END IF; WHEN state1 => IF (input=...) THEN output <= <value>; nx_state <= state2; ELSI ... END IF; WHEN state2 => IF (input=...) THEN outpur <= <value>; nx_state <= state3; ELSI ... END IF; ... END CASE; END PROCESS; END <arch_name>;

3 VHDL语言描述状态机 语言描述状态机

模板二
LIBRARY ieee; USE ieee.std_logic_1164.all; ------------------------------------------ENTITY <ent_name> IS PORT (input: IN <data_type>; reset, clock: IN STD_LOGIC; output: OUT <data_type>); END <ent_name>; -----------------------------------------ARCHITECTURE <arch_name>OF<ent_name>IS TYPE states IS (state0, state1, state2, state3, ...); SIGNAL pr_state, nx_state: states; SIGNAL temp: <data_type>; BEGIN ---------------Lower section:----------PROCESS (reset, clock) BEGIN IF (reset = '1') THEN pr_state <= state0; ELSIF (clock'EVENT AND clock = '1') THEN output <= temp; pr_state <= nx_state; END IF; END PROCESS; ---------------Upper section:---------PROCESS (pr_state) BEGIN

CASE pr_state IS WHEN state0 => temp <= <value>; IF (condition) THEN nx_state <= state1; ... END IF; WHEN state1 => temp <= <value>; IF (condition) THEN nx_state <= state2; ... END IF; WHEN state2 => temp <= <value>; IF (condition) THEN nx_state <= state3; ... END IF; ... END CASE; END PROCESS; END <arch_name>;

3 VHDL语言描述状态机 语言描述状态机
举例(模板一) 举例(模板一)
-----------------------------------------------LIBRARY ieee; USE ieee.std_logic_1164.all; ----------------------------------------------ENTITY simple_fsm IS PORT (a, b, d, clk, rst: IN BIT; x: OUT BIT); END simple_fsm; ----------------------------------------------ARCHITECTURE simple_fsm OF simple_fsm IS TYPE state IS (stateA, stateB); SIGNAL pr_state, nx_state: state; BEGIN ----------Lower section: ---------------------PROCESS (rst, clk) BEGIN IF (rst = '1') THEN pr_state <= stateA; ELSIF (clk'EVENT AND clk = '1') THEN pr_state <= nx_state; END IF; END PROCESS; -------------Upper section: -------------------PROCESS (a, b, d, pr_state) BEGIN CASE pr_state IS WHEN stateA => x <= a; IF (d = '1') THEN nx_state ELSE nx_state END IF; WHEN stateB => x <= b; IF (d = '1') nx_state ELSE nx_state END IF; END CASE; END PROCESS; END simple_fsm; <= stateB; <= stateA;

THEN <= stateA; <= stateB;

仅一个 寄存器

使用synplify综合后的RTL图

3 VHDL语言描述状态机 语言描述状态机
举例(模板二) 举例(模板二)
-----------------------------------------------LIBRARY ieee; USE ieee.std_logic_1164.all; ----------------------------------------------ENTITY simple_fsm IS PORT (a, b, d, clk, rst: IN BIT; x: OUT BIT); END simple_fsm; ----------------------------------------------ARCHITECTURE simple_fsm OF simple_fsm IS TYPE state IS (stateA, stateB); SIGNAL pr_state, nx_state: state; SIGNAL temp: BIT := '0'; BEGIN ----------Lower section: ---------------------PROCESS (rst, clk) BEGIN IF (rst = '1') THEN pr_state <= stateA; ELSIF (clk'EVENT AND clk = '1') THEN x <= temp; pr_state <= nx_state; END IF; END PROCESS; -------------Upper section: -------------------PROCESS (a, b, d, pr_state) BEGIN CASE pr_state IS WHEN stateA => temp <= a; IF (d = '1') nx_state ELSE nx_state END IF; WHEN stateB => temp <= b; IF (d = '1') nx_state ELSE nx_state END IF; END CASE; END PROCESS; END simple_fsm; THEN <= stateB; <= stateA;

THEN <= stateA; <= stateB;

多出一 个输出 寄存器

使用synplify综合后的RTL图

3 VHDL语言描述状态机 语言描述状态机
两种方式的仿真结果对比

模板一方式实现的Mealy型状态机, 其输出结果与时钟不同步。

模板二方式实现的同样的状态机, 其输出结果与时钟是同步的。

3 VHDL语言描述状态机 语言描述状态机
结论
从形式上看:模板一只存储了 从形式上看:模板一只存储了pr_state;而模 ; 板二同时存储了output。 板二同时存储了 。 对于Mealy型状态机,为了时序同步,必须采 对于 型状态机,为了时序同步, 型状态机 用模板二的方式。 用模板二的方式。 型状态机, 而moore型状态机,则不需要使用模板二的描 型状态机 述方式。 述方式。

模板一

模板二

4 Moore型状态机举例 型状态机举例
上例是一个Mealy型状态机。下面我们来 型状态机。 上例是一个 型状态机 设计一个Moore型状态机。 型状态机。 设计一个 型状态机
例:设计一个串行数据流检测器。要求:输入 设计一个串行数据流检测器。要求: 连续的二进制数,当检测到连续“ ” 连续的二进制数,当检测到连续“1”的个数 大于2个的时候 输出“ ” 个的时候, 大于 个的时候,输出“1”;其他状态输出 “0”。 ” 分析:确定所需的状态数, 分析:确定所需的状态数,取决于数据流中出 现连续“ ”的个数,应该为4个状态 个状态。 现连续“1”的个数,应该为 个状态。

4 Moore型状态机举例 型状态机举例
画出状态转移图
d=0 d=1

rst

zero (q=0) d=0 d=0 d=0 three (q=0) d=1

one (q=0) d=1

two (q=0)

d=1

4 Moore型状态机举例 型状态机举例
根据状态转移图, 根据状态转移图, 写出VHDL代码 写出 代码
--------------------------------------LIBRARY ieee; USE ieee.std_logic_1164.all; --------------------------------------ENTITY string_detector IS PORT (d, clk, rst: IN BIT; q: OUT BIT); END string_detector; -------------------------------------ARCHITECTURE my_arch OF string_detector IS TYPE state IS (zero, one ,two, three); SIGNAL pr_state, nx_state: state; BEGIN -----------Lower section;---------PROCESS (rst, clk) BEGIN IF (rst = '1') THEN pr_state <= zero; ELSIF (clk'EVENT AND clk = '1') THEN pr_state <= nx_state; END IF; END PROCESS; -----------Upper section:----------PROCESS (d, pr_state) BEGIN CASE pr_state IS WHEN zero => q <= '0';

4 Moore型状态机举例 型状态机举例
IF (d = '1') THEN three; nx_state <= one; ELSE ELSE nx_state <= zero; nx_state <= zero; END IF; END IF; WHEN three => WHEN one => q <= '1'; q <= '0'; IF (d = '1') THEN IF (d = '1') THEN nx_state <= three; nx_state <= two; ELSE ELSE nx_state <= zero; nx_state <= zero; END IF; END IF; END CASE; WHEN two => END PROCESS; q <= '0'; END my_arch; IF (d = '1') THEN nx_state <=

4 Moore型状态机举例 型状态机举例
设计后使用synplify生成的状态转移图如下 生成的状态转移图如下 设计后使用

4 Moore型状态机举例 型状态机举例
功能仿真后的结果

虽然使用的是模板一的风格描述的状态机, 但是输出依然可以保持与时钟上升沿同步。

可见,对于 状态机, 可见,对于Moore状态机,不需要对输出进行 状态机 同步。 同步。

4 Moore型状态机举例 型状态机举例
使用synplify综合之后,可以看出默认的 综合之后, 使用 综合之后 编码方式是one-hot编码。 编码。 编码方式是 编码

综合后是one-hot编码方式

4 Moore型状态机举例 型状态机举例
如果将在原来的程序的基础上通过 attribute语句指定编码方式,即将结构体 语句指定编码方式, 语句指定编码方式 的声明部分添加如下代码, 的声明部分添加如下代码,可将编码方式 改为二进制编码: 改为二进制编码:
ATTRIBUTE enum_encoding: string; ATTRIBUTE enum_encoding OF state : TYPE IS "00 01 10 11";

综合后是binary码编码方式

4 Moore型状态机举例 型状态机举例
以上两种情况是在默认综合的情况下生成 即没有将“ 的,即没有将“FSM Explorer”的选项勾 ” 选。 如果将“ 如果将“FSM Explorer”选项勾选,那么 ”选项勾选, 即使是在程序中指定了编码方式, 即使是在程序中指定了编码方式,其综合 后的状态编码也是one-hot编码。 编码。 后的状态编码也是 编码 因此,在状态机设计的时候, 因此,在状态机设计的时候,大家要注意 软件的使用细节, 软件的使用细节,应当有意识的通过软件 进行性能优化。 进行性能优化。
没有勾选“FSM Explorer”

5 三种进程描述状态机方式对比
单进程描述
它就是将状态机的三个逻辑单元(状态寄存器、 它就是将状态机的三个逻辑单元(状态寄存器、 下状态产生逻辑、输出逻辑)合并起来, 下状态产生逻辑、输出逻辑)合并起来,采用 一个进程描述。 一个进程描述。 适用于简单的设计; 适用于简单的设计; 对于复杂的状态机,可读性差,易出错, 对于复杂的状态机,可读性差,易出错,不利 软件优化。 于EDA软件优化。 软件优化

5 三种进程描述状态机方式对比
单进程描述
时序逻辑
SET

D

寄存输 出逻辑
输出

CLR

下一状态输出

下一状态 组合逻辑

输出寄 存器

输入 组合逻辑 时序逻辑
SET

D

CLR

下一状态 下一状态转 移逻辑 状态 Clock 当前状态 时序逻辑 状态

当前状态 时序逻辑

单进程描述
时序逻辑
SET

D

寄存输 出逻辑
输出

CLR

下一状态输出

下一状态 组合逻辑

输出寄 存器

输入 组合逻辑 时序逻辑
SET

D

CLR

下一状态 下一状态转 移逻辑 状态 Clock 当前状态 时序逻辑 状态

当前状态 时序逻辑

5 三种进程描述状态机方式对比
双进程描述
将输出进程和状态转移进程合并起来, 将输出进程和状态转移进程合并起来,采用一 个组合逻辑来描述。 个组合逻辑来描述。 通常情况下, 通常情况下,综合工具可以较好地识别这两部 逻辑并进行优化, 逻辑并进行优化,但建议如果不是输出逻辑非 常简单,还是采用两个不同的进程来描述, 常简单,还是采用两个不同的进程来描述,这 样综合工具可以明确下状态转移逻辑, 样综合工具可以明确下状态转移逻辑,优化效 果较好。 果较好。 另一种双进程描述——将下状态转移逻辑和当 另一种双进程描述 将下状态转移逻辑和当 前状态寄存器描述结合,省略中间变量。 前状态寄存器描述结合,省略中间变量。

5 三种进程描述状态机方式对比
双进程描述
一般情况是组合逻辑输出,如果时 序允许,尽量插入寄存器输出。

第二个进程(纯组合逻辑), 描述状态转移条件的判断。

第一个进程(同步时序),格式 化地描述次态到现态的转移。

5 三种进程描述状态机方式对比
三进程描述
一般可以采用三个进程来描述状态机: 一般可以采用三个进程来描述状态机:
描述状态寄存器的时序进程 描述下状态产生逻辑的组合进程 定义输出的组合逻辑进程

5 三种进程描述状态机方式对比
三进程描述
第一个进程(同步时序) 格式化描述次态寄存器迁 移到现态寄存器 第二个进程(纯组合逻辑), 描述状态转移条件判断

第三个进程(同步时序),格式 化描述次态的寄存器输出。

5 三种进程描述状态机方式对比
举例: 举例:
分别使用单进程、双进程、 分别使用单进程、双进程、三进程描述方式如 下状态转移图所示的状态机: 下状态转移图所示的状态机:

5 三种进程描述状态机方式对比
单进程描述的VHDL代码 代码 单进程描述的
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY s_machine1 IS PORT ( clk, reset : IN STD_LOGIC; state_inputs : IN STD_LOGIC_VECTOR (0 TO 1); comb_outputs : OUT INTEGER RANGE 0 TO 15 ); END s_machine2; ARCHITECTURE behv OF s_machine1 IS TYPE FSM_ST IS (s0, s1, s2, s3); VARIABLE state: FSM_ST; BEGIN PROCESS (reset, clk, state, state_inputs) BEGIN IF reset = '1' THEN state <= s0; ELSIF clk = '1' AND clk'EVENT THEN CASE state IS THEN state <= s0; ELSE state <= s1; END IF; WHEN s0 => comb_outputs <= 5; IF state_inputs = "00"

5 三种进程描述状态机方式对比
IF state_inputs = (续上页)WHEN s1 => 续上页) "11" THEN comb_outputs <= 8; state <= s3; IF state_inputs = "00" THEN ELSE state <= s1; state <= s0; ELSE END IF; state <= s2; END IF; END CASE; WHEN s2 => END IF; comb_outputs <= 12; IF state_inputs = END PROCESS; "11" THEN END behv; --(完) ( state <= s3; ELSE state <= s0; END IF; WHEN s3 => comb_outputs <= 14;

5 三种进程描述状态机方式对比
单进程描述RTL图 图 单进程描述

5 三种进程描述状态机方式对比
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 INTEGER RANGE 0 TO 15 ); END s_machine;

双进程描述的VHDL BEGIN PROCESS 双进程描述的 REG: BEGIN 代码 IF reset

(reset, clk)

ARCHITECTURE behv OF s_machine IS TYPE FSM_ST IS (s0, s1, s2, s3); SIGNAL current_state, next_state : FSM_ST;

= '1' THEN current_state <= s0; ELSIF clk = '1' AND clk'EVENT THEN current_state <= next_state; END IF; END PROCESS; COM: PROCESS (current_state, state_inputs) BEGIN CASE current_state IS WHEN s0 => comb_outputs <= 5; IF state_inputs = "00" THEN next_state <= s0; ELSE

5 三种进程描述状态机方式对比
next_state <= s1; END IF; THEN WHEN s1 => comb_outputs <= 8; IF state_inputs = "00" THEN next_state <= s1; ELSE next_state <= s2; END IF; WHEN s2 => comb_outputs <= 12; IF state_inputs = "11" THEN next_state <= s3; ELSE next_state <= s0; END IF; WHEN s3 => END CASE; END PROCESS; END behv; next_state <= s3; ELSE next_state <= s0; END IF; comb_outputs <= 14; IF state_inputs = "11"

5 三种进程描述状态机方式对比
双进程描述产生的RTL图 图 双进程描述产生的

5 三种进程描述状态机方式对比
三进程描述的VHDL 三进程描述的 代码
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY s_machine2 IS PORT ( clk, reset : IN STD_LOGIC; state_inputs : IN STD_LOGIC_VECTOR (0 TO 1); comb_outputs : OUT INTEGER RANGE 0 TO 15 ); END s_machine2; ARCHITECTURE behv OF s_machine2 IS TYPE FSM_ST IS (s0, s1, s2, s3); SIGNAL current_state, next_state: FSM_ST; BEGIN REG: PROCESS (reset, clk) BEGIN IF reset = '1' THEN current_state <= s0; ELSIF clk = '1' AND clk'EVENT THEN current_state <= next_state; END IF; END PROCESS; COM_STATE: PROCESS(current_state, state_inputs) BEGIN CASE current_state IS WHEN s0 => IF state_inputs = "00" THEN next_state <= s0; ELSE next_state <= s1; END IF; WHEN s1 => IF state_inputs = "01" THEN next_state <= s1;

5 三种进程描述状态机方式对比
ELSE next_state <= s2; END IF; WHEN s2 => WHEN s0 => comb_outputs WHEN s1 => comb_outputs WHEN s2 => IF state_inputs = "10" THEN comb_outputs next_state <= s3; WHEN s3 => ELSE comb_outputs next_state <= s0; END CASE; END IF; END PROCESS; WHEN s3 => END behv; IF state_inputs = "11" THEN next_state <= s3; ELSE next_state <= s0; END IF; END CASE; END PROCESS; COM_OUT: PROCESS (current_state) BEGIN CASE current_state IS <= 5; <= 8; <= 12; <= 14;

5 三种进程描述状态机方式对比
三进程描述产生的RTL图 图 三进程描述产生的

5 三种进程描述状态机方式对比
从以上一个很简单的状态机设计的对比上, 从以上一个很简单的状态机设计的对比上, 可以看出, 可以看出,采用单进程方式描述的状态机 其RTL电路相对于另外两种描述方式多产 电路相对于另外两种描述方式多产 生了一个寄存器。 生了一个寄存器。 对于简单的设计, 对于简单的设计,采用双进程和三进程综 合结果没有差别。 合结果没有差别。 建议描述状态机时使用双进程或者三进程 的方式。 的方式。

6 ASM图法状态机设计 图法状态机设计
ASM简介 简介
ASM本质上是一个有限状态机,主要用于同步 本质上是一个有限状态机, 本质上是一个有限状态机 系统。 系统。 ASM精确地表示出状态转换的时间关系。 精确地表示出状态转换的时间关系。 精确地表示出状态转换的时间关系 从形式上看, 从形式上看,这种流程图类似于描述软件程序 的流程图, 的流程图,但它能和实现它的硬件很好的对应 起来。 起来。

6 ASM图法状态机设计 图法状态机设计
ASM图的组成 图的组成
状态框
用一个矩形框来表示一个状态。 用一个矩形框来表示一个状态。状态的名称写在左 上角;状态的二进制编码写在右上角; 上角;状态的二进制编码写在右上角;操作内容写 在矩形框内。在同步系统中, 在矩形框内。在同步系统中,状态经历的时间至少 是一个时钟周期,也可以是几个周期。 是一个时钟周期,也可以是几个周期。

状态名 二进制码 寄存器操作 或输出

T1

001

R 0 C=‘1’

6 ASM图法状态机设计 图法状态机设计
ASM图的组成 图的组成
判断框
用单入口双出口的菱形或单入口多出口的多边形符 号表示。在菱形和多边形框内写检测条件, 号表示。在菱形和多边形框内写检测条件,在分支 出口处注明各分支所满足的条件。 出口处注明各分支所满足的条件。 判断框必须跟着状态框。 判断框必须跟着状态框。判断框的执行与状态框在 同一时钟周期内。 同一时钟周期内。
0 条件 1

引出分支 引出分支

6 ASM图法状态机设计 图法状态机设计
ASM图组成 图组成
条件框
用椭圆框表示。 用椭圆框表示。条件框一定是与判断框的一个转移 分支相连接, 分支相连接,仅当判断框中判断变量满足相应的转 移条件时,才进行条件框中标明的操作和信号输出。 移条件时,才进行条件框中标明的操作和信号输出。 虽然条件框和状态框都能执行操作和输出信号, 虽然条件框和状态框都能执行操作和输出信号,但 二者有很大区别。 二者有很大区别。

寄存器操作或输出

6 ASM图法状态机设计 图法状态机设计
ASM图的组成 图的组成
状态单元
状态框 虚线框部分就是一个状态单元,条件 框中R 0也在这个状态单元内执行。

状态单元由一个状态框或 条件框组成。 条件框组成。状态单元的 入口必须是状态框的入口, 入口必须是状态框的入口, 出口可以有几个, 出口可以有几个,但必须 判断框 指向状态框。 指向状态框。 仅包含一个状态框, 仅包含一个状态框,无判 断框和条件框的ASM块是 断框和条件框的 块是 一个简单块。 一个简单块。 条件框 每个状态单元表示一个时 钟周期内系统所处的状态, 钟周期内系统所处的状态, 在该状态下完成快内的若 干操作。 干操作。

S1

00 R 0 C=’1'

条件

R 0 S3 10 S2 11

经过状态分配的ASM图

6 ASM图法状态机设计 图法状态机设计
图描述一个系统控制器时, 用ASM图描述一个系统控制器时,实际上 图描述一个系统控制器时 是描述了该控制器的硬件结构和时序工作 过程,因此ASM图与硬件有很好的对应关 过程,因此 图与硬件有很好的对应关 图的硬件实现有以下几种方法: 系,ASM图的硬件实现有以下几种方法: 图的硬件实现有以下几种方法
用计数器实现ASM图 图 用计数器实现 用多路选择器实现ASM图 用多路选择器实现 图 每个状态一个触发器(定序型) 每个状态一个触发器(定序型) 基于ROM法实现 法实现ASM图(微程序型) 基于 法实现 图 微程序型)

ASM图的硬件实现一共有 中方法,这里 图的硬件实现一共有4中方法 图的硬件实现一共有 中方法, 我们重点介绍用计数器实现ASM图的方法。 图的方法。 我们重点介绍用计数器实现 图的方法

6 ASM图法状态机设计 图法状态机设计
ASM图的状态分配 图的状态分配
N个状态变量可以描 个状态变量可以描 个状态。 述2^n个状态。该 个状态 ASM图中有 个状态, 图中有3个状态 图中有 个状态, 所以需要两个状态 变量。 变量。设两个状态 变量为Q2Q1,我们 变量为 , 选用2个 触发器 触发器。 选用 个D触发器。 用二进制计数序列 依次表示状态。 依次表示状态。

6 ASM图法状态机设计 图法状态机设计
状态转换表
因为10和 状态与输入 无关,所以X值可作任意值处 状态与输入X无关 因为 和11状态与输入 无关,所以 值可作任意值处 理。 表中01未指定状态 采用计数器实现, 未指定状态, 表中 未指定状态,采用计数器实现,因此需考虑因 偶然因素出现01状态时 应强迫其次态为00, 状态时, 偶然因素出现 状态时,应强迫其次态为 ,所以一 旦出现01状态后 状态后, 旦出现 状态后,经过一个时钟周期就可以自动回到 有用状态循环。
现态 Q2 0 0 0 1 1 Q1 0 0 1 0 1 X 0 1 X X X 1 1 0 0 0 次态 Q2n+1 Q1n+1 0 1 0 0 0 Z1 1 1 0 0 0 输出 Z2 1 0 0 0 0

6 ASM图法状态机设计 图法状态机设计
由状态转换表推导触发器的驱动方程
对于复杂的ASM图和相应的状态表可用 图和相应的状态表可用 对于复杂的 卡诺图对次态进行化简, 卡诺图对次态进行化简,得到简化的驱 动方程。 动方程。
n Q2 +1 = D2 = Q2 贩 1 X + Q2 贩 1 X = Q2   1 Q Q Q

Q1n +1 = D1 = Q2 贩 1 X Q

ASM图除了可以得到状态表和驱动方程 图除了可以得到状态表和驱动方程 外,还可以得到输出方程

Z1 = ( P) = Q2   1 Q Z 2 = ( P ) = Q2 贩 1 X Q

6 ASM图法状态机设计 图法状态机设计
ASM图的硬件实现 图的硬件实现
采用计数器法实现ASM图, 图 采用计数器法实现 一旦ASM图有很小的改动, 图有很小的改动, 一旦 图有很小的改动 就需要重新设计与次态相关 的组合电路部分。此外, 的组合电路部分。此外,当 系统的状态超过8个时 个时, 系统的状态超过 个时,ASM 图的硬件实现也很复杂。 图的硬件实现也很复杂。

学习ASM图的硬件实现有助 图的硬件实现有助 学习 于我们更好的理解后续的内 容,下面我们将学习如何使 实现ASM图。 用VHDL实现 实现 图

6 ASM图法状态机设计 图法状态机设计
MDS( Mnemonic Documented State ) (
1. MDS图符号
MDS图与状态图十分相似,且扩展了状态图的功能,又简练了 只要时钟CP的有效沿到来, 表示状态Si无条件转换到 S状态图。MDS图表现设计过程时,方便清晰,具有较大的灵活性。 i 表示状态图 只要时钟CP的有效沿到来,状态Si在条件E下转换到状态Sj

状态Sj。 E可以是积项, 布尔表达式等。

E

Si Z↑ Si Z↓ Si Z↑↓

表示进入状态Si时,输出Z变成有效。

表示进入状态Si时,输出Z变成无效。 表示进入状态Si时,输出Z有效;退出时,输出Z无效。 如果条件E满足,进入状态Si时,输出Z有 效;退出时,输出Z无效。

Si

Sj

Si

Sj

Si Z↑↓=Si?E

6 ASM图法状态机设计 图法状态机设计
这是一个莫尔型电路,三个状态A、B、 状态图到MDS图 图 状态图到
A/01

C和输出Z1Z2依次为01、11、00。说明: A态到B态时,Z1由0变1,Z1有效; B态到C态时,Z1由1变0,Z1无效。
C/00

B/11

同理: C态到A态时,Z2由0变1,Z2有效; B态到C态时,Z2由1变0,Z2无效。
X1 A Z2 X3X1 C Z2

A

Z2↑ Z2↓
X2 X1 B Z1

Z1↑↓

B

C

加了三个输入X1、X2、 X3的情况。

X2

X3+X1

6 ASM图法状态机设计 图法状态机设计
状态图到MDS图 图 状态图到
有条件输出的情况
A 1/1 B 0/0 Z =A·X X C

A

到MDS图
C

X B

有三个状态A、B、C,当 输入为1时,输出为1,A→B; 当输入为0时,输出为0,A→C (输入/输出) 。

6 ASM图法状态机设计 图法状态机设计
ASM图到 图到MDS图的 图到 图的 转换
ASM图的状态框对 图的状态框对 图中的S 应MDS图中的 i。 图中的 ASM图的判断框构 ASM图的判断框构 MDS图的分支 成MDS图的分支 控制器的输出是为 实现状态框的操作 而发出的信息, 而发出的信息,对 应MDS图中状态圈 图中状态圈 外侧的输出。 外侧的输出。
ASM图 MDS图
START

(A) 计数器复位
NO
START?

A

CR↑↓

START

YES

(B)

执行

B

OPR↑↓

6 ASM图法状态机设计 图法状态机设计
ASM图的条件输出与 图的条件输出与MDS图的条件输出相对应 图的条件输出与 图的条件输出相对应
(A) X A RUN =A·X ·CP NO NO CP YES RUN X? YES (B)

到MDS图
X B

注:A态返回到A态时,有一条件输出: 当X=0,CP=0时,RUN有效。

6 ASM图法状态机设计 图法状态机设计
举例
要求设计一套交叉路口交通信号灯, 要求设计一套交叉路口交通信号灯,该路口有一条交通干线与支 支线上装有传感器,当支线有车通过时, 线,支线上装有传感器,当支线有车通过时,传感器输出信号 CAR=1。正常的工作状态时干线亮绿灯,支线亮红灯;当 。正常的工作状态时干线亮绿灯,支线亮红灯; CAR=1时,干线亮红灯,支线亮绿灯,并开始计时, 时 干线亮红灯,支线亮绿灯,并开始计时, START_TIEMR=1,当计时结束,即信号 ,当计时结束,即信号TIMED=1时,重新回到 时 正常工作状态(干线亮绿灯,支线亮红灯)。 正常工作状态(干线亮绿灯,支线亮红灯)。

6 ASM图法状态机设计 图法状态机设计
设计步骤
根据设计要求,我们先确定系统的输入: 根据设计要求,我们先确定系统的输入:
clock, car, timed.

然后确定系统的输出: 然后确定系统的输出:
start_timer; major_green, minor_green. (枚举类型 枚举类型) 枚举类型

分析系统所有可能出现的状态: 分析系统所有可能出现的状态:
state = G major_green = 1, minor_green = 0; state = R major_green = 0, minor_green = 1;

根据题意,画出ASM图: 根据题意,画出 图

6 ASM图法状态机设计 图法状态机设计
单进程状态机
PROCESS (clock, timed, car) TYPE state_type IS (G, R); VARIABLE state: state_type; BEGIN IF (rising_edge(clock)) THEN CASE state IS WHEN G => major_green <= ‘1’; minor_green <= ‘0’; IF (car = ‘1’) THEN start_timer <= ‘ 1’; state := R; END IF;

6 ASM图法状态机设计 图法状态机设计
单进程状态机
WHEN R => major_green <= ‘0’; minor_green <= ‘1’; IF (timed= ‘1’) THEN start_timer <= ‘ 1’; state := G; END IF; END CASE; END IF END PROCESS;

6 ASM图法状态机设计 图法状态机设计
单进程状态机: 单进程状态机:
单进程状态变量可以定义为变量类型, 单进程状态变量可以定义为变量类型,放在进程的说 明部分 一般在进程的开头写上时钟有效边沿的检测语句 注意在这里进程敏感参数表中的car和timed可省去 注意在这里进程敏感参数表中的 和 可省去 rising_edge(clock)也可以写成 也可以写成clock’event and 也可以写成 clock=‘1’ 条件涵盖不完整的if语句会产生寄存器 条件涵盖不完整的 语句会产生寄存器 这是将时序电路和组合电路混合的系统, 这是将时序电路和组合电路混合的系统,有时会引入 不必要的寄存器。 不必要的寄存器。如果将描述时序的部分放在具有边 沿检测条件的if语句或 语句或wait语句的进程中,而将描述组 语句的进程中, 沿检测条件的 语句或 语句的进程中 合电路的语句放在普通的进程中, 合电路的语句放在普通的进程中,这样可以有效控制 寄存器的引入。 寄存器的引入。

6 ASM图法状态机设计 图法状态机设计
双进程状态机
ARCHITECTURE asm2 OF traffic IS TYPE state_type IS (G, R); SIGNAL pr_state, next_state : state_type; BEGIN seq: PROCESS (clock) BEGIN IF(rising_edge(clock)) THEN pr_state <= next_state; --次态是寄存器的输入 次态是寄存器的输入 END IF; --条件涵盖不完整的 语句产生状态寄存器 条件涵盖不完整的if语句产生状态寄存器 条件涵盖不完整的 END PROCESS seq; --产生状态寄存器的进程 产生状态寄存器的进程

6 ASM图法状态机设计 图法状态机设计
双进程状态机
com: PROCESS (pr_state, car, timed) BEGIN start_timer <= ‘0’; CASE pr_state IS WHEN G => major_green <= ‘1’; minor_green <= ‘0’; IF (car = ‘1’) THEN start_timer <= ‘1’; nx_state <= R; ELSE nx_state <= G; END IF;

6 ASM图法状态机设计 图法状态机设计
双进程状态机
WHEN R => major_green <= ‘0’; minor_green <= ‘1’; IF (timed= ‘1’) THEN nx_state <= G; ELSE nx_state <= R; END IF; END CASE; END PROCESS com; --产生次态和输出逻辑的进程 产生次态和输出逻辑的进程 END asm2;

6 ASM图法状态机设计 图法状态机设计
双进程状态机: 双进程状态机:
双进程中状态变量要定义为SIGNAL类型,用于进 类型, 双进程中状态变量要定义为 类型 程间信息的传递 可以在产生寄存器的进程中加上异步复位语句, 可以在产生寄存器的进程中加上异步复位语句,用 于确定初始状态 注意在seq进程中 语句要写完整 进程中if语句要写完整 注意在 进程中 语句要写完整if-else
seq: PROCESS (clock) BEGIN IF reset=‘1’ THEN pr_state <= G; IF(rising_edge(clock)) THEN pr_state <= next_state; END IF; END PROCESS seq;

6 ASM图法状态机设计 图法状态机设计
三进程状态机
ns: PROCESS (car, timed, pr_state) BEGIN CASE pr_state IS WHEN G => IF (car = ‘1’) THEN nx_state <= R; ELSE nx_state <= G; WHEN R => IF (timed = ‘1’) THEN nx_state <= G; ELSE nx_state <= R; END IF; END CASE; END PROCESS ns; --产生次态逻辑进程 产生次态逻辑进程

6 ASM图法状态机设计 图法状态机设计
三进程状态机
op: PROCESS (car, pr_state) –Mealy State Machine BEGIN start_timer <= ‘0’; IF (pr_state = G) THEN major_green <= ‘1’; minor_green <= ‘0’; IF (car = ‘1’) THEN start_timer <= ‘1’; END IF; ELSE major_green <= ‘0’; minor_green <= ‘1’; END IF; END PROCESS op; --产生输出逻辑的进程 产生输出逻辑的进程

6 ASM图法状态机设计 图法状态机设计
op进程也可以用并行语句改写: 进程也可以用并行语句改写: 进程也可以用并行语句改写
start_timer <= ‘1’ WHEN (pr_state = G AND car = ‘1’) ELSE ‘0’; major_green <= ‘1’ WHEN (pr_state = G) ELSE ‘0’; minor_green <= ‘1’ WHEN (pr_state = R) ELSE ‘0’;

注意:用并行语句改写, 注意:用并行语句改写,不能再使用进程

6 ASM图法状态机设计 图法状态机设计
关联状态机
通过信号互相连接的两个或两个以上的状态机成为关联状态机 要求设计一套交叉路口交通信号灯, 要求设计一套交叉路口交通信号灯,该路口有一条交通干线与支 线,支线上装有传感器,当支线有车通过时,传感器输出信号 支线上装有传感器,当支线有车通过时, CAR=1。正常的工作状态时干线亮绿灯,支线亮红灯;当CAR=1时, 。正常的工作状态时干线亮绿灯,支线亮红灯; 时 干线亮红灯,支线亮绿灯,并开始计时, 干线亮红灯,支线亮绿灯,并开始计时,START_TIEMR=1,当计时 , 结束,即信号TIMED=1时,重新回到正常工作状态(干线亮绿灯, 结束,即信号 时 重新回到正常工作状态(干线亮绿灯, 支线亮红灯)。 支线亮红灯)。

6 ASM图法状态机设计 图法状态机设计
关联状态机
仍以交通灯为例,根据题意可知, 仍以交通灯为例,根据题意可知,系统可以分 为信号控制器和定时器两个部分
定时器:当接收到信号 定时器:当接收到信号CAR=‘1’时,定时器启动计 时 时,计数结束后输出信号给控制器 信号控制器:控制器的状态机共有G, 两种状态 两种状态。 信号控制器:控制器的状态机共有 ,R两种状态。 输入信号为CAR,TIMED,输出信号为计数使能信 输入信号为 , , 号ENABLE

6 ASM图法状态机设计 图法状态机设计
关联状态机

交通灯例子的ASM图——使用关联状态机

6 ASM图法状态机设计 图法状态机设计
数据处理器的功能常由寄存器操作完成, 数据处理器的功能常由寄存器操作完成,而系统的处 关联状态机 输入 理功能通常由数据处理器完成, 理功能通常由数据处理器完成,所以也可以从寄存器 传送操作的观点来描述一个系统。 传送操作的观点来描述一个系统。

控制信号

控制器
状态信号

数据处理器

Clock,Reset 在交通灯例子中,可以 将交通灯信号控制部分 划分成控制器,而将定 时器划分成数据处理器。

输出 数据处理器可以方便的看做一个时序系统, 数据处理器可以方便的看做一个时序系统, 其中的一些功能元件可以复用以前设计好的 一些功能模块基本的控制架构设计为状态机 控制器。控制器输出控制信号给数据处理器, 控制器。控制器输出控制信号给数据处理器, 数据处理器反馈状态型号给控制器。 数据处理器反馈状态型号给控制器。

6 ASM图法状态机设计 图法状态机设计
如下条件涵盖不完整的if语句产生 如下条件涵盖不完整的if语句产生D触发器 语句产生D
process(clk,a) if rising_edge(clk) then y<=1; end if; end process;
1 D Q clk y

如下条件涵盖完整的if语句产生了组合逻辑电路 如下条件涵盖完整的if语句产生了组合逻辑电路
process(clk,a) if rising_edge(clk) then y <=1; else y <=0; end if; end process;
1 & clk y

7 非法状态处理

8 数字方式排除毛刺信号


相关文章:
VHDL状态机的设计
VHDL状态机设计 - 状态机电路设计 状态机(STATE MACHINE)可以说是一个广义时序电路,触发器, 计数器,移位寄存器都算是它的特殊功能的一种.在电子设计自动化 ...
状态机VHDL讲解
状态机VHDL讲解 - VHDL 的结构非常适合编写状态机, 而且编写方式不唯一, 电路的集成也会随着编写的方式 而改变。状态机设计主要用到 case when 和 if else ...
状态机设计交通灯
2)用 VHDL 设计有限状态机,设计流程和方案相对固定,程序层次分明,程序结构简单清晰, 特别是可以定义符号化枚举类型的状态,使 VHDL 综合器对状态机具有强大的优化...
VHDL设计 有限状态机设计
基于VHDL的有限状态机设计 4页 2财富值 第六章VHDL有限状态机设计 101页 1财富...有限状态机FSM设计 10页 1财富值如要投诉违规内容,请到百度文库投诉中心;如要...
VHDLFPGA状态机
VHDL 与数字系统设计》课程设计报告 ( 2014 -- 2015 年度第 1 学期) 名题院班学 称: VHDL 与数字系统设计 目: 系: 级: 号: 简单状态机 电气与电子...
基于EDA的VHDL语言设计的交通灯
基于EDA的VHDL语言设计的交通灯_计算机软件及应用_IT/计算机_专业资料。用有限状态机设计一个交通灯控制器,设计要求:A路和B路,每路都有红、黄、绿三种灯,持续时...
VHDL数据类型
应用 RTL 电路图观察器 4、一般有限状态机设计 TYPE 语句用法如下: TYPE ...VHDL数据类型和运算符 50页 1下载券 4第四章VHDL语言的数据类... 29页 ...
自动售货机控制系统VHDL有限状态机实现
自动售货机控制系统VHDL有限状态机实现 - 自动售货机控制系统 VHDL 有限状态机实现 1 引言 有限状态机 FSM(Finite State Machine)及其设计技术是实用数字系统设计....
10进制加减计数器状态机的VHDL设计
10进制加减计数器状态机VHDL设计 - 本次设计选用的功能状态为: A. 复位功能 B. 十进制加法计数 C. 十进制减法计数 D. 数码管闪动 E. 8个led灯闪动 F....
VHDL状态机111000
第二部进行状 态机的设计, 根据要求设计七个状态来完成六位序列的状态循环,...第7章 VHDL有限状态机设... 71页 1下载券 第五章 VHDL 状态机 43页 免费...
更多相关标签: