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

看《从算法设计到硬件逻辑的实现》这本电子书时,遇到了一个问题,就是有限状态机的编写中,状态编码是采用格雷码还是独热码呢?究竟采用哪一种编码呢?
采用独热码为什么节省许多组合电路?
等等问题,就这些问题我收集了一些说法,觉得很有意思,在这里我们一起讨论下。
还是先简介下有限状态机:
有限状态机是由寄存器组和组合逻辑构成的硬件时序电路,其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只可能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态,究竟转向哪一状态还是留在原状态不但取决于各个输入值,还取决于当前所在状态。这里是指mealy型有限状态机。
moore型有限状态机的状态转移只取决于当前状态,与输入值无关。
在verilog hdl中可以用许多种方法来描述有限状态机,最常用的方法是用always语句和case语句。下面的状态转移图表示了一个有限状态机:
上面的状态转移图表示了一个四状态的有限状态机,它的同步时钟是clock,输入信号是 a 和 rst_n ,输出信号是 f 和 g。状态的转移只能在同步时钟(clock)的上升沿时发生,往哪个状态的转移则取决于目前所在的状态和输入的信号(reset 和 a)。
我们采用两种状态编码方式来实现这个有限状态机:
1)采用格雷码:
在ise中,综合后,得到的rtl schematic:
2)采用独热码:
程序和上面的几乎一样,只需要改下,各个状态对应的编码值即可,还有最后的default:state 《= idle;
还是给出程序吧:
上面两个程序的主要不同点是状态编码,2)采用了独热编码,而1)则采用gray码,究竟采用哪一种编码好要看具体情况而定。对于用fpga实现的有限状态机建议采用独热码,因为虽然采用独热编码多用了两个触发器,但所用组合电路可省下许多,因而使电路的速度和可靠性有显著提高,而总的单元数并无显著增加。采用了独热编码后有了多余的状态,就有一些不可到达的状态,为此在case语句的最后需要增加default分支项,以确保多余状态能回到idle状态。
上面所说的多余状态是:4位编码有16种,独热码只列出了4种,剩下了12种,就是多余的状态。
另一位大牛只说了一句话,但很有启发:
那我把3—8译码器的真值表给出来,确实如此。


心脏支架降价后使用情况如何
什么是模块化电池?锂电池模块包装运输要求
精准导航+定位管理,给室内定位赋予更多可能
中国手机芯片市场需要三星打破局面
承德科胜自动液体灌装机|洗衣液灌装机|河北灌装机
FPGA中有限状态机的状态编码采用格雷码还是独热码?
华阳多媒体亮相2021年第三届车载抬头显示HUD高峰论坛
数字时代下,西部数据打出组合拳,各个击破客户需求
疫情将打破中日韩在半导体领域的合作分工平衡关系
创业公司因腾讯云服务器上数据丢失岌岌可危,腾讯赔偿13万多元敷衍了事
云计算,边缘计算和雾计算:每个计算的实际应用
谷歌Pixel3a系列新机曝光 配备单摄像头支持背部指纹识别
3.5G/4G基站Serial RapidIO架构趋势的解决
Python编码与解码
什么是主板EISA总线/EIDE/DIMM
2019中国(深圳)集成电路峰会 将于8月22日在深圳举办
详解XC866步进电机阀门控制系统
莱尔德推出CM6050 系列DC/DC电源线共模扼流圈
新能源汽车市场下滑 二手车市场也极其尴尬
投影电视怎么操作_投影电视的特点