文章目录

  • 前言
  • 状态机的模型
    • Moore型状态机
      • Moore 1型
      • Moore 2型
      • Moore 3型
    • Mealy型状态机
      • Mealy 1型
      • Mealy 2型
      • Mealy 3型
    • Mix型状态机

前言

上篇博文讲了状态机的概念,这篇博文同样摘自于《FPGA之道》,一起来看下状态机的模型,和我们所认识的状态机有什么区别?
其实没什么区别,只不过作者更加的细致,对状态机研究的更加的透彻,原来我以为的状态机只是作者提到的其中的一种,来一起学习一下。

状态机的模型

按照状态机的输出与其现态、输入之间的关系,可将FPGA中的状态机抽象为三种基本模型——Moore、Mealy和Mix,即摩尔型、米利型和混合型。分别介绍如下:

Moore型状态机

如果一个状态机的输出仅由现态决定,那么它就是一个Moore型的状态机。而按照驱动输出的数字电路特性,又将Moore型状态机细分为Moore 1型、Moore 2型、Moore 3型,详细介绍如下:

Moore 1型

Moore 1型状态机的原理结构框图入下:

从上图可以看出,Moore 1型状态机的结构可以划分为两大部分——状态转移部分和输出生成部分。
状态转移部分如上图左半部分所示,输入和现态(现态寄存器的输出)通过组合逻辑共同作用产生次态,当下一次时钟有效边沿到来的时候,现态寄存器发生更新,刚才产生的次态即成为了新的现态,而新的现态将和新的输入共同作用产生新的次态,如此往复。
输出生成部分如上图右半部分所示,现态(现态寄存器的输出)直接通过组合逻辑产生当前的输出(这点也是Moore状态机区别于Mealy状态机最显著的特点)。有时候,我们不希望将这部分的组合逻辑的延迟影响到后续模块的处理,那么可以仿照上图通过添加输出寄存器来解决这个问题,但是需要特别注意的一点是,由于输出寄存器的更新需要等到下一次时钟的有效边沿,因此经过输出寄存器寄存后的输出其实对应的是状态机上一个状态。

Moore 2型

Moore 1型状态机的缺点是寄存后的输出并不对应此时的现态,这可能会为后续模块的一些处理带来不便和延迟,除此以外,组合逻辑中存在着竞争,使得即使输出仅为单bit位宽,也可能会发生险象,如果后续模块是对电平敏感的便会导致发生错误,因此,通过对Moore 1型状态机的原理结构框图进行一些简单的修改,可得Moore 2型状态机的原理结构框图如下:


从上图可以看出,Moore 2型状态机的结构仍划分为状态转移和输出生成两大部分。对比Moore 1型状态机的原理结构框图,可以发现不同之处仅仅是输出生成部分的输入端由之前的现态(现态寄存器的输出)变为了次态(由输入和现态通过组合逻辑产生)。这样一来,由于次态和次态决定的输出在同一个时钟周期内变得有效,那么在下一次时钟有效边沿到来时,现态寄存器和输出寄存器将会同时进行更新,至此,次态变成新的现态,次态决定的输出变成新的输出。因此,Moore 2型状态机中经过寄存后的输出是对应于当前状态的。

Moore 3型

相比于Moore 1型,Moore 2型状态机也有其自身的缺点,那就是产生输出的组合逻辑延迟较大,因为它相当于Moore 1型状态机中产生次态的组合逻辑和产生输出的组合逻辑的级联,而这点便会限制状态机本身的时钟工作频率。由此可见,Moore 1型和Moore 2型状态机各有其优缺点。
仔细观察Moore 1型和Moore 2型状态机的原理结构框图,可以发现,它们的本质区别就在于“由状态产生输出”这部分的组合逻辑所处的位置。如果像Moore 1型那样,将该部分逻辑至于现态寄存器之后,那么该组合逻辑的时间延迟将会影响到后续电路的工作;反之,如果像Moore 2型那样,将该部分逻辑至于次态产生逻辑之后,那么该组合逻辑的时间延迟将会影响到状态机自身的工作。因此,为了将Moore 1型和Moore 2型状态机的缺点最小化、优点最大化,便有了Moore 3型状态机,它的原理结构框图如下:


现实中的状态机,输出往往不止一个,通过上图可以看出,Moore 3型状态机就是将那些适合使用组合逻辑的输出采用Moore 1型的方式来处理,而将那些适合使用寄存器的输出采用Moore 2型的方式来处理,因此Moore 3型也叫混合型Moore状态机。
那到底什么样的输出适合采用组合的形式,而什么样的输出适合采用寄存的形式呢?如果后续模块为电平敏感的,那么自然应该选择寄存形式的输出,不过FPGA中一般应该为全同步逻辑设计,所以绝大多数情况下,状态机的前级输入、后级输出及其本身是工作在一个时钟域内的,此时,假设由现态、输入产生次态的组合逻辑时间延迟为T1,由状态(次态、现态都一样)产生输出的组合逻辑的时间延迟为T2,而后续使用该输出的电路中,又会在输出信号到达下一个寄存器前引入时间延迟最大(考虑到会有多个地方使用该输出)为T3的组合逻辑。那么根据短板效应,若T1+T2 T2+T3,则该输出采用Moore 2型的寄存方式处理可以提升整个系统的性能;反之,该输出采用Moore 1型的组合方式处理可以提升整个系统的性能。当然了,上述方法仅仅是帮助大家从理论上去理解该如何进行输出形式选择,其实并不可能严格的参考使用,因为布局布线的不同对T1、T2、T3的取值影响很大,因此实际中我们都是凭经验或者大概估计一下各个组合逻辑的复杂度和级联情况,然后大概估算后做出选择,而更多的时候,是需要根据后续时序分析报告中的结果,来对状态机的输出形式进行调整。

Mealy型状态机

如果一个状态机的输出是由现态和输入共同决定,那么它就是一个Mealy型的状态机。而按照驱动输出的数字电路特性,又将Mealy型状态机细分为Mealy 1型、Mealy 2型、Mealy 3型,详细介绍如下:

Mealy 1型

Mealy 1型状态机的原理结构框图入下:

从上图可以看出,对于Mealy 1型状态机来说,由于次态和输出均由现态和输入通过组合逻辑共同决定,因此可以将状态转移部分和输出生成部分合并成一个部分,兼并产生状态机的次态和输出。当下一次时钟有效边沿到来后,现态寄存器完成刷新,次态成为了新的现态,而新的现态和新的输入共同作用产生新的次态和新的输出,如此往复。
与Moore 1型状态机类似,Mealy 1型状态机的输出也是直接通过组合逻辑产生的,若想通过添加输出寄存器来获得寄存输出的话,经过输出寄存器寄存后的输出其实对应的是状态机上一个状态。

Mealy 2型

Mealy 1型状态机的缺点也是寄存后的输出并不对应此时的现态,因此,通过对Mealy 1型状态机的原理结构框图进行一些简单的修改,可得Mealy 2型状态机的原理结构框图如下:

从上图可以看出,Mealy 2型状态机重新将状态转移部分和输出生成部分分开,并做成级联的形态(Mealy 1型中两者其实是并联的),所以输出生成部分便由次态和输入共同作用产生次态对应的输出。这样一来,由于次态和次态决定的输出在同一个时钟周期内变得有效,那么在下一次时钟有效边沿到来时,现态寄存器和输出寄存器将会同时进行更新,至此,次态变成新的现态,次态决定的输出变成新的输出。因此,Mealy 2型状态机中经过寄存后的输出是对应于当前状态的。

Mealy 3型

与Moore型状态机类似,Mealy 1型和Mealy 2型状态机也各有其优缺点。它们的本质区别仍在于“由状态产生输出”这部分的组合逻辑所处的位置。如果像Mealy 1型那样,将该部分逻辑和次态产生逻辑并联,那么该组合逻辑的时间延迟将会影响到后续电路的工作;反之,如果像Mealy 2型那样,将该部分逻辑和次态产生逻辑串联,那么该组合逻辑的时间延迟将会影响到状态机自身的工作。因此,为了将Mealy 1型和Mealy 2型状态机的缺点最小化、优点最大化,便有了Mealy 3型状态机,它的原理结构框图如下:

现实中的状态机,输出往往不止一个,通过上图可以看出,Mealy 3型状态机就是将那些适合使用组合逻辑的输出采用Mealy 1型的方式来处理,而将那些适合使用寄存器的输出采用Mealy 2型的方式来处理,因此Mealy 3型也叫混合型Mealy状态机。
需要特别注意的一点是,至于到底什么样的输出适合采用组合的形式,什么样的输出适合采用寄存的形式,需要根据具体的功能需求来确定,这点与【Moore型状态机->Moore 3型】小节的讨论不同,因为Mealy 1、2型状态机在功能上并不完全等价,这是由于Mealy型状态机的输出除了与当前状态有关,还与输入有关。对于同样的输入序列,Moore 1、2型状态机的状态变迁都是一样的,因此它们的输出也是完全一致的;但是对于同样的输入序列,Mealy 1、2型状态机的状态变迁虽然一样,但是Mealy 2型的输出实际上是由当前的状态和上一次的输入得出的,这与Mealy 1型的输出是由当前的状态和当前的输入得出的不同。故Mealy 1、2之间不可随意替换。

Mix型状态机

如果一个状态机有多个输出,且其中一些仅由现态决定,而另一些是由现态和输入共同决定,那么它就是一个Mix型的状态机。其实,Mix型状态机就是一个Moore型状态机和Mealy型状态机的组合体,而每一个Moore型状态机可以有Moore 1型、Moore 2型、Moore 3型三种选择,每一个Mealy型状态机也可以有Mealy 1型、Mealy 2型、Mealy 3型三种选择,因此Mix型状态机可以细分为9种类型。由于Mix型状态机的类型较多,所以这里就不一一赘述了,下面给出一类功能最为全面的Mix型状态机的结构原理框图:

上图所示即为“Moore 3型+Mealy 3型”组成的Mix型状态机,它包含了全部四种类型的输出——moore组合、moore寄存、mealy组合、mealy寄存。通常来说,Mix型状态机不一定会拥有全部这四类输出,当Mix型状态机仅具有moore类型的输出时,它就简化为一个Moore型的状态机;而当Mix型状态机仅具有mealy类型的输出时,它就简化为一个Mealy型的状态机;只有当Mix型状态机同时具有moore类型和mealy类型的输出时,它才是一个真正的Mix型的状态机。

FPGA之道(53)状态机的模型相关推荐

  1. FPGA之道(55)状态机的HDL模板

    文章目录 前言 状态机的HDL模板 状态集合的HDL定义 概念层级的定义 实现层级的定义 if or case? 各自特点分析 状态选择 次态及输出选择 状态的HDL描述方式 次态和次中间变量的描述方 ...

  2. FPGA之道(54)状态机的设计

    文章目录 前言 状态机的设计 状态浅析 真正的状态 抽象的状态与中间变量 抽象状态的设计方法 抽象状态与中间变量的权衡 基本状态介绍 初始态 结束态 中继态 分支态 复位态 空闲态 多余态 状态的一些 ...

  3. FPGA之道(67)代码中的约束信息(四)状态机的相关约束

    文章目录 前言 状态机的相关约束 fsm_extract fsm_style fsm_encoding enum_encoding safe_implementation safe_recovery_ ...

  4. FPGA之道(57)状态机的实现方式

    文章目录 前言 状态机的实现方式 基于LUT的实现方式浅析 基于RAM的实现方式浅析 可行性分析 实现思路简介 基于BRAM自行设计状态机的好处 显式状态机与隐式状态机 概念简介 显式状态机的描述示例 ...

  5. FPGA之道(52)状态机的概念

    文章目录 前言 状态机的概念 状态机简介 状态机的组成六要素 状态集合 初态 终态 输入符号集 输出符号集 状态转移函数 状态机的工作四要素 现态 输入 输出 次态 前言 本文摘选自<FPGA之 ...

  6. 【 FPGA 】状态机的模型之Moore型状态机

    上篇博文:状态机,FPGA的灵魂,说到了状态机的基础知识,讲到了状态机的组成六要素,工作四要素. 这篇博文来讲状态机的模型之Moore状态机,从标题也能看出,状态机的知识并没有结束,后面还会提到Mea ...

  7. FPGA之道(51)数据的存储

    文章目录 前言 数据的存储 为什么需要数据存储 数据存储的载体 FPGA芯片内部的载体 触发器 查找表 块存储 FPGA芯片外部的资源 数据存储的形式.实现及应用场合 寄存器 特征简介 实现载体 应用 ...

  8. FPGA之道(79)静态时序分析(五)外部接口的相关时序分析

    文章目录 前言 外部接口相关时序分析 功能仿真对接口分析的帮助 纯输入接口 纯时钟输入接口 纯同步输入接口 纯异步输入接口 同步输入异步采集 纯输出接口 纯时钟输出接口 纯同步输出接口 纯异步输出接口 ...

  9. FPGA之道(75)静态时序分析(一)基本概念介绍

    文章目录 前言 基本概念介绍 常用时间参数介绍 tsu 建立时间要求 建立时间余量 th 保持时间要求 保持时间余量 tco Maximum frequency (or Minimum period) ...

最新文章

  1. OC:数组排序、时间格式化字符串
  2. 《C#高级编程》笔记系列第一弹-开篇
  3. 转-测试用例-基本控件
  4. HashMap的put方法讲解
  5. ABP入门系列(5)——展现层实现增删改查
  6. 【BZOJ4774】修路 [斯坦纳树]
  7. 无浮动IP的虚机出公网流量路径
  8. VC预处理指令与宏定义的妙用
  9. 2020年百度之星程序设计大赛-初赛二(Poker、Distance)
  10. mysql监控工具-PMM,让你更上一层楼(上)
  11. 记一次戴尔灵越7000(7000-7591)的坑爹螺丝设计,中招了保修都没门
  12. Python中numpy库的linspace函数
  13. excel如何把顺序倒过来_在excel中怎么使文字颠倒顺序反过来显示呢?
  14. R数据分析:论文中的轨迹的做法,潜增长模型和增长混合模型
  15. Mysql show profile 详解
  16. android开发笔记之reflect使用
  17. 奢华和生活方式酒店品牌阿丽拉将引入上海;施华洛世奇揭幕全新品牌视觉形象 | 美通企业日报...
  18. 怎么样把计算机桌面的图标改小,怎样将电脑桌面图标变小_三招搞定桌面图标太小问题-系统城...
  19. 服务器返回的14种常见HTTP状态码
  20. 使用 python 写出诗一样的代码 (一)

热门文章

  1. 镜头视场角计算工具_什么是变焦镜头 变焦镜头介绍【详解】
  2. linux 账户安全,在Linux上踢除某个用户和账户安全
  3. java的高级特性_java的高级特性_for
  4. java Date.getTime()返回负数异常情况分析
  5. Java中ArrayList和LinkedList区别
  6. apache禁止访问html,apache 限制目录访问
  7. android 自定义相册选择,Android通过手机拍照或从本地相册选取图片设置头像
  8. java 文件md5校验_Java 获取 文件md5校验码
  9. 相机成像与校正原理:将外部世界进行降维
  10. 2021年春季学期-信号与系统-第七次作业参考答案-第三小题