状态机(一)

****标准状态机分为摩尔(Moore)状态机和米勒(Mealy)状态机。
摩尔状态机的输出只与当前状态值有关,且只在时钟边沿到来时才会有状态变化。
米勒状态机的输出不但与当前状态值有关而且与当前输入值有关。
状态机(一)_第1张图片
状态机可能会遇到的问题:(1)两个状态转换时,出现过度状态
(2)在运行过程中,进入非法状态
(3)在一个器件上综合处理想结果,移植到另一个器件时,不能得到与之相符的结果。
(4)状态机能够稳定工作,但是占用资源过多。
****摩尔状态机中,输出信号是当前状态值的译码,当状态寄存器的状态值稳定时,输出状态也就随之稳定。经过综合器综合哄一般生成以触发器为核心的状态寄存器电路,其稳定性也是由此决定。如果时钟信号上升沿到达各个触发器的时间严格一致,那状态值也就按照设计会在规定的状态值之间转换。
摩尔机的失效定理:在布局布线之后这些触发器相距较远时,时钟到达各个触发器的延时会出现差异,也就是时钟歪斜,这将会导致状态机在状态转换时产生过度状态,当延时加大时,状态机可能进入非法状态。
****米勒状态机的输出不与时钟同步,所以当状态译码比较复杂的时候就会出现毛刺,在一些特定的系统中毛刺会造成不可预料的后果,但是输入变化可能出现在时钟的周期内的任何时刻,导致米勒状态机对输入响应可以比摩尔状态机对输入的响应要早一个时钟周期。
摩尔状态机的输出与时钟同步,可以在一定程度上剔除抖动,从稳定性角度讲,建议使用摩尔状态机。
****常用的编码方式有三种:
(1)顺序码:状态编码遵循传统的状态二进制序列
(2)格雷码:除了相邻状态机之间只有一个位的变化,其他和顺序码类似
(3)独热码:这种方法是在状态机中为每一种状态分配一个触发器。只有一个触发器当前设置为有效,其余均设置为无效。
****如果使用顺序编码,从状态01到10的转换过程中很可能会出现过度状态11或00.因为中间信号current_state在状态转换过程中,状态寄存器的高位翻转和低位翻转的时间可能不一致,会出现过度状态。假如状态机并未使用全部编码,由于过度状态的反馈作用,将直接导致电路进入非法状态,若此时电路不具备自启动功能,那么电路就会跑飞了。
****格雷码由于相邻两个数据之间只有一位不同,所以在很大程度上消除由延时引起的过度状态,但是如果一个状态到下一个状态有多种转换路径时,就不能保证状态跳转时只有一个位变化,此时可以采样独热码。

你可能感兴趣的:(状态机(一))