根据Altera的资料,状态机进入非法状态的原因有两种:
1、状态机的状态转换条件判断信号如果是异步时钟域信号,很容易产生亚稳态,使状态机进入非法状态。
2、FPGA工作于高温或放射线环境下。
我的情况就是第1种,你的也应该是。
解决方法是将异步时钟域信号同步化,我的异步输入信号比我的主时钟频率低得多,于是将其做了两次采样,使用采样后的信号作为判断条件就解决了。
你的程序中将异步信号serial_signal_in 作为状态跳转判断条件,仅将其写入敏感表是不行的,必须对其做同步化处理,对于串口信号来讲,一般情况下能满足比FPGA的时钟慢得多的条件,所以可以使用两次采样的方法。试一试吧。
另外,状态机中的When others(default)语句,作用只是指定了状态机的初始状态,而不能保证将电路状态从非法跳回默认状态。原因是综合工具默认将从非法状态跳回合法状态的电路综合掉了,可以使用安全状态机选项使其不被综合掉。(from Altera)
文章评论(0条评论)
登录后参与讨论