转《明德扬分享》之【状态机的使用】

  • 格式:pdf
  • 大小:419.11 KB
  • 文档页数:8

下载文档原格式

  / 8
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

转《明德扬分享》之【状态机的使用】

(本文档由明德扬精心设计,版权归明德扬科教所有,转载请注明出处,否则明德扬有权追究其法律责任)

1.状态机概述

1.1 状态机的定义及作用

有限状态机FSM(Finite State Machine)简称状态机,通俗地说,状态机就是把全部的情况分成几个场景,这些场景的工作方式明显不同。广义而言,因触发器本身就是若干状态的集合,故只要涉及触发器应用的电路都属于状态机范畴,也即任何时序模型都可以归结为一个状态机。

状态机是数字系统设计的重要组成部分,对于数字系统设计工程师,面对的只要是时序电路设计,状态机的概念则是必须贯穿于整个设计始终的最基本的设计思想和设计方法论。只有从电路状态的角度去考虑,才能从根本上把握可靠、高效的时序逻辑的设计关键。在现代数字系统设计中,状态机的设计对系统的高速性能、高可靠性、高稳定性都具有决定性的作用。

状态机应用广泛(特别是对于操作和控制流程非常明确的系统设计),在数字通信领域、自动化控制领域、CPU设计领域等都拥有不可或缺的重要地位。

1.2 状态机的分类

按照不同的标准,状态机也有多种不同的分类形式,主要有以下几种:

1) 以状态机的信号输出方式分,有Mealy型和Moore型两种状态机。Mealy型状态机输出由当前状态和输入共同确定,Moore型状态机输出则仅取决于当前状态。

2) 以状态机的描述结构上分,有一段式、两段式、三段式三种类型状态机。

l 将整个状态机写到1个进程模块里,在该模块中既描述状态转移又描述状态的输入输出,称为一段式描述方法,即所谓的单进程状态机;

l 一个模块用同步时序描述状态转移,另一个模块用组合逻辑判断状态转移条件、描述状态转移规律及逻辑输出,称为两段式描述方法;

l 一个模块采用同步时序描述状态转移,第二个采用组合逻辑判断状态转移条件,描述状态转移规律,第三个模块使用同步时序电路描述每个状态的输出,该写法称为三段式写法。

3) 以状态机的编码方式上分,有顺序编码状态机、一位热编码状态机等。

2. 状态机设计的优化

满足功能特性和速度要求是状态机设计的基本指标,在基本指标满足的前提下,状态机的安全性和稳定性也是重要的考核内容。

2.1 状态机毛刺的产生与消除

毛刺的产生,一方面由于状态机中包含有组合逻辑进程,使得输出信号在时钟的有效边沿产生毛刺;另一方面当状态信号是多位值的时候,由于传输延迟的存在,各信号线上的值发生改变的时间会有先后,使得状态迁移的时候出现临时状态。当状态机的输出信号作为其他功能模块的控制信号使用时, 将会使受控模块发生误动作, 造成系统工作混乱。因此,在这种情况下必须通过改变设计消除毛刺。

消除状态机输出信号的“ 毛刺”一般可从一下几点改进:

1) 在电路设计时,选用延迟时间较小的器件,且尽可能采用级数少的电路结构;或者把时钟信号引入组合进程,用时钟来同步状态迁移,保证了输出信号没有毛刺,但这样增加了输出寄存器, 硬件开销增大, 这对于一些寄存器资源较少的目标芯片是不利的;而且还会限制系统时钟的最高工作频率; 由于时钟信号将输出加载到附加的寄存器上, 所以在输出端得到信号值的时间要比状态的变化延时一个时钟周期。

2) 调整状态编码, 使相邻状态间只有1位信号改变,避免毛刺的产生。

3) 直接把状态机的状态码作为输出信号,即采用状态码直接输出型状态机, 使状态和输出信号一致, 使得输出译码电路被优化掉了。这种方案, 占用芯片资源少, 信号与状态变化。

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

们明德扬规范的基本要求,只要遵循明德扬规范进行设计,状态机竞

争问题就不会存在。

2.2 明德扬状态机设计准则

状态机设计有很多的标准,明德扬认为好的状态机应有如下的标准: 1) 状态机的设计要满足面积和速度的要求,这也是状态机设计的

基本要求,在满足这一基本要求的前提下,明德扬要求状态机设计要

简洁、高效,比如合理的归并以及减少状态的数量等都能大大简化电路,在编程时应尽量把可归并的逻辑放入同一结构体中, 这样可以有效优化电路结构。

2) 状态机要安全,要求我们的状态机要完备,不能进入死循环,

特别是不能进入非预知的状态。这里就需要我们对状态进行合理的划分,个状态间的转移条件要具体明确,同时遵循明德扬规范进行设计

也能有效避免非预知状态的发生,比如组合逻辑补全条件。

3) 状态机的设计要清晰易懂、易维护,这就要求我们在设计时采

用参数化的设计,同时对状态的命名要做到见名知意。明德扬根据自

身实践经验,也总结了状态机设计的方法步骤,将在下一节中具体讲解。

3.三段式状态机设计

3.1 三段式状态机设计的优点

前面章节中提到了以状态机的描述结构为依据将状态机分为一段式、两段式、三段式三种状态机,那么这三种状态机有何优劣呢?

一段式状态机可得到锁存后的输出信号,输出比较稳定,但其在

描述当前状态时需考虑下一个状态的输出,整个代码不清晰、不易于

理解维护,也不利于时序约束、功能更改、调试等,而且不能很好的

表示Mealy状态机的输出,容易导致逻辑功能错误,因此在进行状态

机设计时,最不建议采用此种描述。

两段式能较好的描述状态机,但其输出为组合逻辑输出,会有毛

刺问题,在精密控制时会有影响,若在输出部分加入寄存器,可有效

消除毛刺,但输出会延迟一个时钟周期。

三段式状态机在代码设计上略为复杂,但其优势也是很明显的,

主要有以下几个方面:

l 能够消除组合逻辑输出的毛刺隐患,同时能够做到同步寄存器输出;