具体实现上应该定义present state 和next state两个状态,通过对next state操作,然后在时钟沿把next state 传递给present state. 大家还是说说根本原因啊 对状态机是不是只定义了两种状态?若不是则case语句不完整。假设除了idle和s1还有一个状态s2。并假设系统上电后(或者因为干扰造成)状态机进入s2状态,那么系统就死在这个状态了,只好用rst来复位。<br>
另外,我对状态机不怎么明白,我不知道编译软件对状态机的编码是不是能保证不出现无效状态。所以即使是仅仅两种状态,我也建议写成when idle =>... when others => ...;而不是写成when idle =>... when s1 => ...;<br>
<br>
由于对你阐述的环境我无法全面把握,所以不好确定地说到底是那个地方导致了“死机”。 你的状态机的写法是不提倡的,11楼的同仁的建议值得楼主自己学习一下。 没其他状态了,而且我的程序中也用WHEN OTHERS了<br>
我是觉得因为毛刺引起了亚稳态,使状态机死在了一个未知的状态,状态机在这种情况下就跳不出来了<br>
即使有when other =>也是没用的。 楼主不把整个程序贴出来不好回答你,你连“死”的现象都没有陈述出来,整个程序如何运作,或者在仿真,运行上什么现象?有些状态机单独看是没有问题,但是和整个电路联系起来会出问题! 状态机由于干扰跑到非有效的状态中去的问题我经常遇到,我的解决办法是在case的default状态中根据一些正在使用的寄存器的值,再把状态准确地拉回原来地地方 楼主写的这个,好像不是很好。你看看怎么避免产生锁存器吧,有可能是这个问题
页:
1
[2]