嵌入式开发 > 详情

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

发布时间:2020-06-13 发布时间:
|

随着EDA技术的高速发展, 以大规模和超大规模器件FPGA/CPLD为载体、以VHDL(硬件描述语言)为工具的电子系统设计越来越广泛。有限状态机(简称状态机)作为数字系统控制单元的重要设计方案之一,无论与基于VHDL语言的其他设计方案相比,还是与可完成相似功能的CPU设计方案相比,在运行速度的高效、执行时间的确定性和高可靠性方面都显现出强大的优势。因此状态机在数字电子系统设计中的地位日益凸显。


1 状态机“毛刺”的产生

状态机通常包含主控时序进程、主控组合进程和辅助进程三个部分。其中,主控组合进程的任务是根据外部输入的控制信号和当前状态的状态值确定下一状态的取向,并确定对外输出内容和对内部其他组合或时序进程输出控制信号的内容。一方面,由于有组合逻辑进程的存在,状态机输出信号会出现毛刺——竞争冒险现象;另一方面,如果状态信号是多位值的,则在电路中对应了多条信号线。由于存在传输延迟,各信号线上的值发生改变的时间则存在先后,从而使得状态迁移时在初始状态和目的状态之间出现临时状态——毛刺

例如,采用Moore型有限状态机方案对ADC0809采样过程实现控制,其主要程序如下:

begin

lock =lock1;

process(current_state,eoc)

begin

case current_state IS

when st0=>ale=‘0’;start=‘0’;oe=‘0’;lock1=‘0’;

next_state =st1;

when st1=>ale=‘1’;start=‘0’;oe=‘0’;lock1=‘0’;

next_state =st2;

when st2=>ale=‘0’;start=‘1’;oe=‘0’;lock1=‘0’;

next_state =st3;

when st3=>ale=‘0’;start=‘0’;oe=‘0’;lock1=‘0’;

if (eoc=‘1’) then next_state =st3;

else next_state =st4;

end if;

when st4=> ale =‘0’;start =‘0’;OE=‘0’;lock1=‘0’;

if (eoc =‘0’) then next_state =st4;

else next_state =st5;

end if;

when st5=> ale =‘0’; start =‘0’;oe=‘1’;lock1=‘0’;

next_state =st6;

when st6=> ale =‘0’; start =‘0’; oe =‘1’;lock1=‘1’;

next_state =st0;

when others=> ale =‘0’; start =‘0’;oe =‘0’;lock1=‘0’;

next_state =st0;

end case;

end process;

process (clk)

begin

if (clk’event and clk =‘1”) then

current_state =next_state;

end if;

end process;

process(lock1)

begin



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
什么是总线压限