原创 FPGA中状态机跑飞的情况

2010-2-5 21:09 8610 4 7 分类: FPGA/CPLD

    我在一个设计中遇到了这样一个情况,状态机跑飞,(这种情况也不是经常出现,只有在零下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 => 返回初始状态。也应该返回到初始状态,哪位高手能指教一下,谢谢。


 

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户1379880 2011-7-27 14:22

我也遇到同样的问题!

ash_riple_768180695 2010-2-8 09:56

还有,查一查你的时钟信号是否稳定可靠。

ash_riple_768180695 2010-2-8 09:35

有空看看我这个分类下的文章,可能会对你的问题有帮助。 http://blog.ednchina.com/riple/20604/category.aspx 还有,外部输入的一位异步信号需要两级寄存器同步,位数越多越好。多位异步信号需要用双端口ram。
相关推荐阅读
用户232569 2010-02-08 23:31
FSM安全问题
        关于怎样才能使状态机稳定可靠,其实状态机的可靠不取决于状态机编码方式和风格,而是取决于综合工具的选项,开启Safe State Machine选项,这一选项是引入了“Booby Tra...
用户232569 2009-10-15 23:53
关于SignalTap的问题
   刚刚看了一位师兄的关于SignalTap的日志,解决了以前的一些困惑,怕忘记在此记下来。曾经遇到过一个工程中加入SignalTap和去掉SignalTap编译后结果不相同,一直无法解释具体的原因...
用户232569 2009-10-15 23:01
使用QuartusII自带fifo时遇到的问题
     最近做Flash控制器,用到了缓存,为了方便直接使用QuartusII自带异步fifo,但是在使用过程中却出现这样一个问题,输入数据为递增计数器,但是用SignalTap观察却发现在从输出f...
我要评论
3
4
关闭 站长推荐上一条 /2 下一条