原创 非法状态机

2013-5-26 21:53 1313 13 13 分类: FPGA/CPLD

根据Altera的资料,状态机进入非法状态的原因有两种:
1、状态机的状态转换条件判断信号如果是异步时钟域信号,很容易产生亚稳态,使状态机进入非法状态。
2、FPGA工作于高温或放射线环境下。

我的情况就是第1种,你的也应该是。
解决方法是将异步时钟域信号同步化,我的异步输入信号比我的主时钟频率低得多,于是将其做了两次采样,使用采样后的信号作为判断条件就解决了。

你的程序中将异步信号serial_signal_in 作为状态跳转判断条件,仅将其写入敏感表是不行的,必须对其做同步化处理,对于串口信号来讲,一般情况下能满足比FPGA的时钟慢得多的条件,所以可以使用两次采样的方法。试一试吧。

另外,状态机中的When others(default)语句,作用只是指定了状态机的初始状态,而不能保证将电路状态从非法跳回默认状态。原因是综合工具默认将从非法状态跳回合法状态的电路综合掉了,可以使用安全状态机选项使其不被综合掉。(from Altera) 

安全状态机的设置方法:
Assigments -> settings ->  Analysis & Synthesis Settings -> More Settings, 开启安全状态机模式 
4c4eac77gdd8a52562bcd&690.jpg
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
13
关闭 站长推荐上一条 /3 下一条