<Verilog实现状态机>FSM(finite state machine)的简化型独热式(Simplified one hot)设计

本文探讨了有限状态机(FSM)的优化方法,从三段式状态机结构出发,通过引入独热码编码,提出简化型独热式(Simplified One Hot)设计,以提高状态切换的稳定性和减少高速电路的可靠性问题。该方法在保证电路性能的同时,减少了比较器电路的位宽,特别适用于复杂状态机的设计。
摘要由CSDN通过智能技术生成

一、FSM的独热结构改进设计

在数字电路设计中,我们经常需要设计不同的状态机。
很多现有的书中介绍了一些常用的状态机结构,并且介绍了一些这些状态机的优缺点。
比如一段式,适用于简单的状态机,优点是写在一起代码量少,缺点包括不限于可读性差、适用范围小等。。。
两段式将一段式的代码进行了拆分,分为状态的跳变和每个状态的信号变化两个部分。
优点在于相对于一段式,进一步优化了可读性和设计的灵活性,代码的复用性也得到了一些提高。
三段式就是书中介绍的最优结构状态机。三段式用一个时序逻辑描述状态的跳变。另一个时序逻辑描述状态指针的变化情况。一个组合逻辑来具体描述每一个状态中我们进行怎样的电路变化。三段式相对于一段式和二段式来说进一步优化了电路的可读性和修改设计时的便利性,而且也提高了代码的复用性。
那么问题来了,FSM的优化到这里就结束了吗?我们是不是就不能继续做优化了呢?
当然不是。

二、FSM的独热结构初级优化

针对上面的三段式,我们还可以进一步优化。我们都知道,在电路中,状态机的变化是一组寄存器的赋值,这一组寄存器的赋值未必是准确的。事实上如果状态机太过复杂,比如一个状态机有128个状态,那么考虑到最坏的情况,显示状态机状态的寄存器存在一个周期同时改变16bit数值的可能性。在高速电路中,这样的设计会降低电路的可靠性。
基于这个考虑,有些人想出了一个非常简单的方式:使用独热码来作为状态机状态标识电路。比如我可以这样:

parameter IDLE = 8'b0;
parameter rx   = 8'b1;
parameter tx   = 8'b10;
...
parameter error = 8'b1000_0000;

这样我们的状态切换稳定性就得到了保障,任意状态之间的切换最坏也只需要改变两个bit,在高速电路中这个优化是非常有必要的。
那么问题来了,是不是状态机我们只能优化到这样呢?
当然不是,我们可以顺着这个思路进一步优化我们的FSM。

三、FSM的独热结构进阶优化

简单的分析一个常用的三段式:

parameter IDLE = 6'b000_001; parameter STA0 = 6'b000_010; 
parameter STA1 = 6'b000_100; parameter STA2 = 6'b001_000;
parameter STA3 = 6
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值