0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA中有限状态机的状态编码采用格雷码还是独热码?

FPGA研究院 来源:FPGA之家 2023-04-07 09:52 次阅读

看《从算法设计到硬件逻辑的实现》这本电子书时,遇到了一个问题,就是有限状态机的编写中,状态编码是采用格雷码还是独热码呢?究竟采用哪一种编码呢?

采用独热码为什么节省许多组合电路?

等等问题,就这些问题我收集了一些说法,觉得很有意思,在这里我们一起讨论下。

还是先简介下有限状态机:

有限状态机是由寄存器组和组合逻辑构成的硬件时序电路,其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只可能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态,究竟转向哪一状态还是留在原状态不但取决于各个输入值,还取决于当前所在状态。这里是指Mealy型有限状态机。

Moore型有限状态机的状态转移只取决于当前状态,与输入值无关。

Verilog HDL中可以用许多种方法来描述有限状态机,最常用的方法是用always语句和case语句。下面的状态转移图表示了一个有限状态机:

9d4a5008-d4d3-11ed-bfe3-dac502259ad0.png

上面的状态转移图表示了一个四状态的有限状态机,它的同步时钟是Clock,输入信号是 A 和 rst_n ,输出信号是 F 和 G。状态的转移只能在同步时钟(Clock)的上升沿时发生,往哪个状态的转移则取决于目前所在的状态和输入的信号(Reset 和 A)。

我们采用两种状态编码方式来实现这个有限状态机:

1)采用格雷码:

9d6a23ba-d4d3-11ed-bfe3-dac502259ad0.png

9d91226c-d4d3-11ed-bfe3-dac502259ad0.png

9da1abbe-d4d3-11ed-bfe3-dac502259ad0.png

在ISE中,综合后,得到的RTL Schematic

9db84f40-d4d3-11ed-bfe3-dac502259ad0.png

2)采用独热码:

程序和上面的几乎一样,只需要改下,各个状态对应的编码值即可,还有最后的default:state 《= Idle;

还是给出程序吧:

9dcce13a-d4d3-11ed-bfe3-dac502259ad0.png

9ddff3a6-d4d3-11ed-bfe3-dac502259ad0.png

9df319ae-d4d3-11ed-bfe3-dac502259ad0.png

9e0cb08a-d4d3-11ed-bfe3-dac502259ad0.png

上面两个程序的主要不同点是状态编码,2)采用了独热编码,而1)则采用Gray码,究竟采用哪一种编码好要看具体情况而定。对于用FPGA实现的有限状态机建议采用独热码,因为虽然采用独热编码多用了两个触发器,但所用组合电路可省下许多,因而使电路的速度和可靠性有显著提高,而总的单元数并无显著增加。采用了独热编码后有了多余的状态,就有一些不可到达的状态,为此在CASE语句的最后需要增加default分支项,以确保多余状态能回到Idle状态。

上面所说的多余状态是:4位编码有16种,独热码只列出了4种,剩下了12种,就是多余的状态。

9e2428a0-d4d3-11ed-bfe3-dac502259ad0.jpg

9e435c3e-d4d3-11ed-bfe3-dac502259ad0.png

另一位大牛只说了一句话,但很有启发:

9e5682a0-d4d3-11ed-bfe3-dac502259ad0.png

那我把3—8译码器的真值表给出来,确实如此。

9e6960d2-d4d3-11ed-bfe3-dac502259ad0.png

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • fpga
    +关注

    关注

    1548

    文章

    20248

    浏览量

    588452
  • 寄存器
    +关注

    关注

    30

    文章

    4393

    浏览量

    116070
  • 输出信号
    +关注

    关注

    0

    文章

    83

    浏览量

    11511
收藏 人收藏

    评论

    相关推荐

    FPGA Verilog HDL 设计实例系列连载--------有限状态机设计

    状态图中每条转移边需要包含输入和输出的信息。状态编码  数字逻辑系统状态机设计中常见的编码方式有:二进制(Binary)、(Gray)、
    发表于 03-09 10:04

    FPGA有限状态机

    发表于 09-08 08:45

    为什么相对于来说,会使用更多的触发器和更少的组合逻辑???

    有限状态机时,为什么采用会占用更多的触发器和更少的组合逻辑?从FPGA内部结构和数电知识基础上怎样理解???求大神们不吝赐教,多谢。
    发表于 03-02 00:33

    FPGA开源教程连载】第七章 状态机设计实例

    状态,这也就分支出一种情况如何对状态进行有效的编码编码格式,最简单的就是直接使用二进制进行表示,除此之外还有使用。假设有八个状态从A到R,利用不同的编码格式分别如表8-1所
    发表于 12-26 00:17

    fpga Default Latch FPGA设计的的使用和调试技巧的详细概述

    状态机里面使用比价广泛,这一块有些人爱用,有些人嫌烦,有时候可以用用跳转,不过只支持那种一步到底的,中间有分支就不好做了,所以后来还是回到了
    发表于 06-07 17:57

    有限状态机有什么类型?

    有限状态机是否使用输入信号,设计人员经常将其分为Moore型有限状态机和Mealy型有限状态机两种类型。
    发表于 04-06 09:00

    有限状态机的建模与优化设计

    有限状态机设计 介绍了 有限状态机的建模原则 并通过一个可综合的实例 验证了 该方法设计的有限状态机在面积和功耗上的优势。
    发表于 03-22 15:19 1次下载

    VHDL有限状态机设计-ST

    有限状态机,广义而言是指只要涉及触发器的电路,无论电路大小都可以归结为状态机有限状态机设计在学习EDA时是很重要的一章。
    发表于 06-08 16:46 3次下载

    如何使用FPGA实现序列检测有限状态机

    有限状态机是绝大部分控制电路的核心结构, 是表示有限状态以及在这些状态之间转移和动作等行为的数学模型。有限状态机是指输出取决于过去输入部分和当前输入部分的时序逻辑电路。一般来说, 除了输入部分和
    发表于 11-04 17:17 12次下载
    如何使用<b>FPGA</b>实现序列检测<b>有限状态机</b>

    如何以面向对象的思想设计有限状态机

    有限状态机又称有限状态自动机,简称状态机,是表示有限状态以及在这些状态之间的转移和动作等行为的数学计算模型,用英文缩写也被简...
    发表于 02-07 11:23 4次下载
    如何以面向对象的思想设计<b>有限状态机</b>

    初学者对有限状态机(FSM)的设计的认识

    有限状态机(FSM)是一种常见的电路,由时序电路和组合电路组成。设计有限状态机的第一步是确定采用Moore状态机还是采用Mealy状态机
    发表于 02-11 13:51 3710次阅读

    FPGA设计的的使用和调试技巧的详细概述

    状态机里面使用比价广泛,这一块有些人爱用,有些人嫌烦,有时候可以用用跳转,不过只支持那种一步到底的,中间有分支就不好做了,所以后来还是回到了
    的头像 发表于 05-05 10:15 7485次阅读

    基于事件驱动的有限状态机介绍

    有限状态机),是一个基于事件驱动的有限状态机,主要应用于嵌入式设备的软件系统中。 EFSM的设计原则是:简单
    的头像 发表于 11-16 15:29 1805次阅读

    FPGA有限状态机编写如何选择状态编码

    有限状态机,最常用的方法是用always语句和case语句。
    发表于 03-23 14:06 127次阅读