新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 状态机“毛刺”的产生及消除方法

状态机“毛刺”的产生及消除方法

作者:时间:2010-09-17来源:网络收藏

  if lock1=‘1’ and lock1’event then

  regl=d;

  end if;

  end process;

  q=regl;

  ……

  其时序仿真波形如图1所示。

  


  Moore型机组成框图如图2所示。

  

  因为Moore型机的输出信号来自组合逻辑——输出译码器,输出信号中带有“”,且引起了输出信号Q的误动作,结果从其仿真时序图中可以发现。

  2

  在同步电路中,一般情况下“”不会重大影响。因为“毛刺”仅发生在时钟有效边沿之后的一小段时间内,只要在下一个时钟有效边沿到来之前“毛刺”消失即可。但当机的输出信号作为其他功能模块的控制信号,例如作为异步控制、三态使能控制或时钟信号使用时,将会使受控模块发生误动作,造成系统工作混乱。因此,在这种情况下必须通过改变设计毛刺。

  状态机输出信号的“毛刺”一般可采用三种方案:

  (1)调整状态编码,使相邻状态间只有1位信号改变,从而消除竞争冒险的发生条件,避免了毛刺的。常采用的编码方式为格雷码。它适用于顺序迁移的状态机。

  (2)在有限状态机的基础上采用时钟同步信号,即把时钟信号引入组合进程。状态机每一个输出信号都经过附加的输出寄存器,并由时钟信号同步,因而保证了输出信号没有毛刺,如图3所示。这种存在一些弊端:由于增加了输出寄存器,硬件开销增大,这对于一些寄存器资源较少的目标芯片是不利的;从状态机的状态位到达输出需要经过两级组合逻辑,这就限制了系统时钟的最高工作频率;由于时钟信号将输出加载到附加的寄存器上,所以在输出端得到信号值的时间要比状态的变化延时一个时钟周期。

  

  (3)直接把状态机的状态码作为输出信号,即采用状态码直接输出型状态机,使状态和输出信号一致,使得输出译码电路被优化掉了,因此不会出现竞争冒险。这种方案,占用芯片资源少,信号与状态变化同步,因此速度快,是一种较优方案。但在设计过程中对状态编码时可能增加状态向量,出现多余状态。虽然可用CASE语句中WHENOTHERS来安排多余状态,但有时难以有效控制多余状态,运行时可能会出现难以预料的情况。因此它适用于状态机输出信号较少的场合。

  若对ADC0809的采样控制采用状态码直接输出型状态机方案,其主要程序如下:

  begin

  lock=lock1;

  process(current_state,eoc)

  begin

  case current_state IS

  when st0 => next_state =st1;

  when st1 => next_state =st2;

  when st2 => next_state =st3;

  when st3 => if (eoc =‘1’)then next_state =st3; else next_state =st4;end if;



评论


相关推荐

技术专区

关闭