微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 有限状态机的VHDL优化设计

有限状态机的VHDL优化设计

时间:06-06 来源:互联网 点击:

1.引言

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

本文将详细讨论状态机编写的各个步骤对优化状态机所起到的作用。

2.状态机的分类

状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作,完成特定操作的控制中心。

状态机可以分为Moore型和Mealy型两种基本类型。设计时采用哪种方式的状态机要根据设计的具体情况决定,输出只由当前状态值决定则选用Moore型,输入信号和状态值共同决定输出则选用Mealy状态机。

设计时在结构上通常遵循一下几点:

各模块只描述一个状态机;将无关逻辑减至最少;将状态寄存器从其他逻辑中分离出来[2]。

3.状态值编码方式

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

3.1 枚举类型定义状态值

设计中状态机的状态值定义为枚举类型,综合时一般转化为二进制的序列,因此与二进制编码方式本质上是相同的。

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

3.2 格雷码表示状态值

格雷码编码,即相邻两个状态的编码只有一位不同,这使得采用格雷码表示状态值的状态机,可以较大程度上消除由传输延时引起的过渡状态。

该方式使得在相邻状态之间跳转时,只有一位变化,降低了产生过渡状态的概率,但当状态转换有多种路径时,就无法保证状态跳转时只有一位变化。所以在一定程度上, 格雷码编码是二进制的一种变形,总体思想是一致的。

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所示。

由图2可以看到direct输出信号出现毛刺,对于精密控制器来说这是不允许的。毛刺多由组合逻辑导致的,若在输出部分加入一个寄存器节拍,可消除毛刺保证输出信号的稳定性,但输出就会延迟一个周期,所以当时序允许时该方式是很好的选择。

上一篇:Verilog语言要素
下一篇:什么是VHDL?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top