我在一个设计中遇到了这样一个情况,状态机跑飞,(这种情况也不是经常出现,只有在零下10度左右会出现这个情况)。当我用
type state is s0,s1,s2,s3;
signal c_state :state;
这种方式定义状态机的时候就会出现死在一个我没有定义的状态中(非s0,s1,s2,s3),我在状态机中也写了When others则返回s0,可是也没有返回s0,而是死在一个没有的状态中。
起初我怀疑是状态机的写法导致的,所以我改了一种状态机的写法,用
signal state :std_logic_vector(3 downto 0);
constant s0 :std_logic_vector(3 downto 0):=x"0"
..........
用这种方法写的状态机则不会出现“死”的状态,但是也会出现我没有定义的状态,出现抖动。
我查阅了一些资料,说是若是引起状态变化的信号如果与状态机中的时钟不同步的话就会引起状态机跑飞的情况,但是我写的代码中没有这个问题,引起状态跳转的信号是被时钟同步了的,而且即使是跑到一个没有定义的状态中,由于我写了When others => 返回初始状态。也应该返回到初始状态,哪位高手能指教一下,谢谢。
用户1379880 2011-7-27 14:22
ash_riple_768180695 2010-2-8 09:56
ash_riple_768180695 2010-2-8 09:35