状态机跑飞的解决办法
近期调试程序,对状态机的逻辑梳理没什么问题,但是实际运行时,总感觉状态机不是按照设定逻辑跳转运行,甚至出现了,没有A条件符合的情况,也跳转到只能条件A才能进入的状态机。
以前不相信FPGA的状态机也会有跑飞的情况,用 Modelsim 仿真和用 State Machine Viewer查看发现确实是跑飞了。
从夏宇闻老师那里搜到跑飞的可能原因:
两种可能:
(1)状态机的输入信号与本地时钟不同步,出现了冒险竞争现象,造成状态机死锁。
(2)状态机综合后没有生成一旦进入非有效状态便立即复位,然后进入某个有效状态的电路。
解决办法:
(1)把外部引入的异步输入信号,做同步处理,作为本状态机的输入。
(2)用综合指令或者约束,强行规定综合后必须生成一旦进入非有效状态便立即复位随即进入有效状态的电路。
输入信号是指除了从当前状态反馈信号以外的信号,即从状态机外部输入的信号。
是否会产生一旦进入非有效状态立即进行强制复位的电路,并不会因为你在状态机中加入when others=> state1 综合后就一定生成这样的电路。若想生成这样的电路,必须在综合时要通过综合指令(约束)命令综合器强制生成,才会生成的。
原文链接:https://blog.csdn.net/xiaoxiao_rabbit/article/details/102751545