当前位置:首页 >> >>

有限状态机的VHDL优化设计


http://www.paper.edu.cn

有限状态机的 VHDL 优化设计
洪国玺,董辉
大连海事大学信息工程学院,辽宁大连(116026)
E-mail:guoxih@sina.com

摘 要:在数字逻辑设计中,会经常遇到设计状态机的问题。本文讨论了设计状态机应注意 的事项,比较不同结构方式状态机的优缺点,给出了消除毛刺和优化设计的有效途径。 关键词:有限状态机,VHDL,描述方式,毛刺

1.引言
当前以硬件描述语言为工具、逻辑器件为载体的系统设计越来越广泛。在设计中,状态 机是最典型、应用最广泛的电路模块,其在运行速度的高效、执行时间的确定性和高可靠性 方面都显现出强大的优势。状态机及其设计技术水平决定了系统设计的优劣[1]。如何设计一 个最优化的状态机是我们必须面对的问题。 本文将详细讨论状态机编写的各个步骤对优化状态机所起到的作用。

2.状态机的分类
状态机由状态寄存器和组合逻辑电路构成, 能够根据控制信号按照预先设定的状态进行 状态转移,是协调相关信号动作,完成特定操作的控制中心。 状态机可以分为Moore型和Mealy型两种基本类型。设计时采用哪种方式的状态机要根 据设计的具体情况决定,输出只由当前状态值决定则选用Moore型,输入信号和状态值共同 决定输出则选用Mealy状态机。 设计时在结构上通常遵循一下几点: 各模块只描述一个状态机; 将无关逻辑减至最少; 将状态寄存器从其他逻辑中分离出来
[2]



3.状态值编码方式
通常在设计状态机时,状态编码方式的选择是非常重要的,选得不好,可能会导致速度 太慢或占用太多逻辑资源。实际设计中,必须考虑多方面因素选择最为合适的编码方式。

3.1 枚举类型定义状态值
设计中状态机的状态值定义为枚举类型, 综合时一般转化为二进制的序列, 因此与二进 制编码方式本质上是相同的。 实际需要触发器的数目为实际状态的以2为底的对数。这种编码方式最为简单,综合后 寄存器用量较少,剩余状态最少,其综合效率和电路速度在一定程度上将会得到提高。但在 状态转换过程中, 状态寄存器的高位翻转和低位翻转时间是不一致的, 这样就会出现过渡状 态,若状态机的状态值更多的话,产生过渡状态的概率更大。因此适合复杂度较低的设计。

3.2 格雷码表示状态值
格雷码编码,即相邻两个状态的编码只有一位不同,这使得采用格雷码表示状态值的状 态机,可以较大程度上消除由传输延时引起的过渡状态。 该方式使得在相邻状态之间跳转时,只有一位变化,降低了产生过渡状态的概率,但当 状态转换有多种路径时,就无法保证状态跳转时只有一位变化。所以在一定程度上, 格雷码
-1-

http://www.paper.edu.cn

编码是二进制的一种变形,总体思想是一致的。

3.3“ONE-HOT”状态值编码
One-hot编码方式是使用N个触发器来实现N个状态的状态机,每个状态都由一个触发器 表示,在任意时刻,其中只有1位有效,该位也称为“hot”,触发器为‘1’,其余的触发器置‘0’。 这种结构的状态机其稳定性优于一般结构的状态机, 但是它占用的资源更多。其简单的 编码方式简化了状态译码逻辑,提高了状态转换速度,适合于在 FPGA 中应用。

3.4 剩余状态与容错技术
在状态机设计中,不可避免地会出现大量剩余状态。若不对剩余状态进行合理的处理, 状态机可能进入不可预测的状态,后果是对外界出现短暂失控或者始终无法摆脱剩余状态而 失去正常功能。因此,对剩余状态的处理,即容错技术的应用是必须慎重考虑的问题。但是, 剩余状态的处理要不同程度地耗用逻辑资源, 因此设计者在选用状态机结构、 状态编码方式、 容错技术及系统的工作速度与资源利用率方面需要做权衡比较,以适应自己的设计要求。 剩余状态的转移去向大致有如下几种: a)转入空闲状态,等待下一个工作任务的到来; b)转入指定的状态,去执行特定任务; c)转入预定义的专门处理错误的状态,如预警状态。 对于前两种编码方式可以将多余状态做出定义, 在以后的语句中加以处理。 处理的方法 有2种:①在语句中对每一个非法状态都做出明确的状态转换指示;②利用others语句对未提 到的状态作统一处理。对于One-hot编码方式其剩余状态数将随有效状态数的增加呈指数式 剧增,就不能采用上述的处理方法。 鉴于One-hot编码方式的特点, 任何多于1个触发器为“1” 的状态均为非法状态。 因此, 可编写一个检错程序, 判断是否在同一时刻有多个寄存器为“1”, 若有,则转入相应的处理程序。

4.状态机的描述方法
VHDL对不同的状态机有不同的描述方式, 描述方式不同使得综合出来的门级网表也不 同,因此必须根据数字电路的特性和可综合性选择相应的状态机描述方式。 下面以实践中激光测距仪中心控制器为例,介绍不同描述方法的设计,并给出仿真图。 Ⅰ 将整个状态机写到1个进程模块里, 在该模块中既描述状态转移又描述状态的输入输 出,称为一段式描述方法,即所谓的单进程状态机。其将组合逻辑和时序逻辑在一个进程中 描述, 该方式的唯一优点是可得到锁存后的输出信号。 但在描述当前状态时需考虑下一个状 态的输出,整个代码不清晰,不易于理解、维护,也不利于时序约束、功能更改、调试等, 而且不能很好的表示Mealy状态机的输出,容易导致逻辑功能错误。另外,这种描述相对于 另外两种描述比较冗长。 因此一段式描述是应当避免的描述方式, 这里也不再做进一步讨论。 Ⅱ 采用2个进程模块, 一个模块用同步时序描述状态转移; 另一个模块用组合逻辑判断 状态转移条件、描述状态转移规律及逻辑输出,称为两段式描述方法,这是综合器理解最好 的一种描述方式,也是要求不高的条件下最常用的一种。分析其结构概括为图1所示框图。

-2-

http://www.paper.edu.cn

设计的控制器时序仿真如图2所示。

由图2可以看到direct输出信号出现毛刺,对于精密控制器来说这是不允许的。毛刺多由 组合逻辑导致的,若在输出部分加入一个寄存器节拍,可消除毛刺保证输出信号的稳定性, 但输出就会延迟一个周期,所以当时序允许时该方式是很好的选择。 Ⅲ 使用3个进程模块, 一个模块采用同步时序描述状态转移; 第二个采用组合逻辑判断 状态转移条件,描述状态转移规律;第三个模块使用同步时序电路描述每个状态的输出,该 写法称为三段式写法。分析其结构概括为图3所示框图。

改进后的控制器时序仿真如图4所示。

-3-

http://www.paper.edu.cn

三段式与两段式描述相比, 虽然代码结构复杂了一些, 但是换来的优势是做到了同步寄 存器输出, 消除了组合逻辑输出的不稳定与毛刺的隐患, 而且更利于时序路径分组, 在FPGA 上的综合与布局布线效果更佳。 一般而言,推荐的状态机描述方法是后两种。其原因:设计最好使用同步时序方式,以 提高设计的稳定性,消除毛刺。状态机实现后,状态转移部分是同步时序电路而状态的转移 条件的判断是组合逻辑。 两段式描述方法虽然有很多好处, 但一个明显的弱点就是其输出使 用组合逻辑描述, 易产生毛刺等不稳定因素, 并且在逻辑器件中过多的组合逻辑会影响实现 的速率,而三段式巧妙地根据下一状态的判断,用同步时序逻辑寄存状态机的输出。

5.毛刺和竞争处理
毛刺的产生, 一方面由于状态机中包含有组合逻辑进程, 使得输出信号在时钟的有效边 沿产生毛刺;另一方面当状态信号是多位值的时候,由于传输延迟的存在,各信号线上的值 发生改变的时间会有先后, 使得状态迁移的时候出现临时状态。 当状态机的输出信号作为其 他功能模块的控制信号使用时, 将会使受控模块发生误动作, 造成系统工作混乱。因此,在 这种情况下必须通过改变设计消除毛刺。 消除状态机输出信号的“ 毛刺”一般可从一下几点改进: ①在电路设计时,选用延迟时间较小的器件,且尽可能采用级数少的电路结构;或者把 时钟信号引入组合进程,用时钟来同步状态迁移, 保证了输出信号没有毛刺,但这样增加了 输出寄存器, 硬件开销增大, 这对于一些寄存器资源较少的目标芯片是不利的;而且还会限 制系统时钟的最高工作频率; 由于时钟信号将输出加载到附加的寄存器上, 所以在输出端得 到信号值的时间要比状态的变化延时一个时钟周期。 ②调整状态编码, 使相邻状态间只有1位信号改变,避免毛刺的产生。 ③直接把状态机的状态码作为输出信号,即采用状态码直接输出型状态机, 使状态和输出 信号一致, 使得输出译码电路被优化掉了。这种方案, 占用芯片资源少, 信号与状态变化同 步, 速度快, 是一种较优方案。但在设计过程中对状态编码时可能增加状态向量, 出现多余 状态。 虽然可用CASE语句中WHEN-OTHERS 来安排多余状态, 但有时难以有效控制多余状 态, 运行时可能会出现难以预料的情况。因此它适用于状态机输出信号较少的场合。这种方 式的缺点是削弱了设计的可读性和可维护性[3]。 有限状态机综合中的竞争现象是指由于敏感信号的频繁变化导致状态机在同一个节拍

-4-

http://www.paper.edu.cn

内多次改变状态,影响电路的正常工作。当输出信号反馈回来作为输入信号的时候,就会发 生竞争。 这里要指出的是在综合前模拟的时候往往不能发现描述中潜在的竞争现象, 只有在 综合后, 竞争才会完全暴露出来。 消除竞争的办法是把造成竞争的信号从敏感信号表中除去, 而改成由时钟信号来触发进程,这样就使状态一个节拍只改变一次[4]。

6.状态机的优化
优化的目标主要有两个: 速度和规模,但是速度条件越苛刻, 所需规模就越大, 因此优 化电路结构时, 应综合考虑各方面因素, 选择最优化方案。电路结构分为逻辑电路和时序电 路。逻辑电路的优化包括布尔表达式的优化等, 时序电路包括通常的时序电路和状态机。状 态机优化包括选择合适状态和编码等, 比如合理的归并以及减少状态的数量等都能大大简 化电路, 在编程时应尽量把可归并的逻辑放入同一结构体中, 这样可以有效优化电路结构[5]。

7.结论
有限状态机是数字系统的一个重要组成部分。 本文详细讨论了状态机各部分及应注意的 事项和各种不同写法的优缺点。 以上只是作者在项目设计实践中学习并总结的一些经验与体 会,设计时需根据实际情况做适合的选择。

参考文献
[1] [2] [3] [4] [5] 吴继华,王诚. 《Verilog设计与验证》[M],北京:人民邮电出版社,2006。 王巍,高德远.有限状态机设计策略 [J].计算机工程与应用,1999,7:54-55. 鲁玲,刘大年.消除状态机毛刺策略探讨 [J] .电子技术应用,2006,9:118-119. 李春霞,顾新,王君.有限状态机的 VHDL 描述及综合 [J].计算机工程与应用,2005,6:111-113. 骆珊,黄明达.VHDL 电路结构优化设计探讨 [J] .计算机应用,2001,4:14-15.

VHDL Design Strategy for Finite State Machine
Hong Guoxi, Dong Hui
Information Engineering college, Dalian Maritime University, Dalian, PRC (116026) Abstract
Problem of designing a finite state machine is often met in the digital logic design. This paper discusses some notes in the process of design and does some compare on state machine with different frames. Then it has given the effective approach to remove the burr and optimize the design. Keywords: Finite State Machine, VHDL, Describing Style, Burr

作者简介:洪国玺,男,1981 年生,山东青岛人,研究生,研究方向:电子电路理论与应 用。

-5-


相关文章:
基于VHDL的Mealy状态机设计
基于VHDL的Mealy状态机设计 - 基于 VHDL 的 Mealy 状态机设计 物理与电子信息科学系 姓名: 姓名:孙家芳 指导教师: 指导教师:胡湘娟 电子信息科学与技术专业 学号...
VHDL数据类型
应用 RTL 电路图观察器 4、一般有限状态机的设计 TYPE 语句用法如下: TYPE ...标准逻辑矢量(STD_LOGIC_VECTOR) 9、VHDL 并行 语句结构体中的并行语句主要有...
VHDL状态机程序
VHDL状态机程序_信息与通信_工程科技_专业资料。VHDL状态机程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY FSM IS...
基于VHDL语言状态机编写流水灯
基于VHDL语言状态机编写流水灯_电子/电路_工程科技_专业资料。基于VHDL语言利用状态机编写流水灯 程序采用元件例化方式编写基于VHDL 语言状态机编写流水灯采用元件例化...
状态机设计交通灯
状态机设计交通灯 - 利用有限状态机的交通灯控制系统设计与仿真 时间:2012-03-09 17:09:59 来源:电子科技 作者:冯竞楠 陕西科技大学 摘要:基于硬件电路设计软件...
VHDLFPGA状态机
VHDL 与数字系统设计》课程设计报告 ( 2014 -- 2015 年度第 1 学期) 名题院班学 称: VHDL 与数字系统设计 目: 系: 级: 号: 简单状态机 电气与电子...
10进制加减计数器状态机的VHDL设计
10进制加减计数器状态机的VHDL设计 - 本次设计选用的功能状态为: A. 复位功能 B. 十进制加法计数 C. 十进制减法计数 D. 数码管闪动 E. 8个led灯闪动 F....
实验六VHDL有限状态机设计(ADC0809)
实验预习 1.实验目的: 6 实验名称 实验室 VHDL 有限状态机设计 同析楼 114 2014 年 5 月 30 日 学习用状态机对 A/D 转换器 ADC0809 的采样控制电路的...
VHDL状态机111000
VHDL状态机111000_工学_高等教育_教育专区。图像识别算法与系统设计题目:VHDL 第一次作业给定任一二值图像,从中 串行检测序列 111000 姓名:刘振宇 学号:1502121227 ...
VHDL设计 有限状态机设计
VHDL设计 有限状态机设计 - 南京工程学院 通信工程学院 实验报告 课程名称 实验项目名称 实验学生班级 实验学生姓名 实验时间实验地点 可编程逻辑电路设计A 有限...
更多相关标签: