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
    +关注

    关注

    1626

    文章

    21674

    浏览量

    601930
  • 寄存器
    +关注

    关注

    31

    文章

    5322

    浏览量

    120024
  • 输出信号
    +关注

    关注

    0

    文章

    275

    浏览量

    11849

原文标题:FPGA中有限状态机的状态编码采用格雷码还是独热码?

文章出处:【微信号:FPGA研究院,微信公众号:FPGA研究院】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

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

    状态机里面使用比价广泛,这一块有些人爱用,有些人嫌烦,有时候可以用用
    的头像 发表于 05-05 10:15 8212次阅读

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

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

    FPGA有限状态机

    FPGA有限状态机
    发表于 09-08 08:45

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

    在编写有限状态机时,为什么采用会占用更多的触发器和更少的组合逻辑?从FPGA内部结构和数电
    发表于 03-02 00:33

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

    各种状态,这也就分支出一种情况如何对状态进行有效的编码编码格式,最简单的就是直接使用二进制进行表示,除此之外还有使用
    发表于 12-26 00:17

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

    状态机里面使用比价广泛,这一块有些人爱用,有些人嫌烦,有时候可以用用
    发表于 06-07 17:57

    有限状态机有什么类型?

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

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

    本文提出一种优秀 、高效的 Verilog HDL 描述方式来进行有限状态机设计 介绍了 有限状态机的建模原则 并通过一个可综合的实例 验证了 该方法设计的有限状态机在面积和功耗上的优势。
    发表于 03-22 15:19 1次下载

    VHDL有限状态机设计-ST

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

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

    有限状态机(FSM)是一种常见的电路,由时序电路和组合电路组成。设计有限状态机的第一步是确定采用Moore状态机还是
    发表于 02-11 13:51 4274次阅读
    初学者对<b class='flag-5'>有限状态机</b>(FSM)的设计的认识

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

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

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

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

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

    EFSM(event finite state machine,事件驱动型有限状态机),是一个基于事件驱动的有限状态机,主要应用于嵌入式设备的软件系统中。
    的头像 发表于 02-11 10:17 1023次阅读

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

    在Verilog HDL中可以用许多种方法来描述有限状态机,最常用的方法是用always语句和case语句。
    发表于 03-23 14:06 597次阅读

    有限状态机分割设计

    有限状态机分割设计,其实质就是一个状态机分割成多个状态机
    的头像 发表于 10-09 10:47 613次阅读