请教fpga高手:状态机状态不稳定的原因
本帖最后由 fpgaw 于 2010-11-18 16:16 编辑最近的项目中用到了状态机,用内置的signaltap II 逻辑分析仪查看工作过程,有时各状态转换正常,有时状态机会出现不在任何一个状态的现象,而且改变逻辑分析仪的信号通道数量会对其有影响。
状态机是用的三段式,信号敏感表等问题也注意了。时序分析的fmax也比我的系统实际时钟高40MHz以上。不知道是怎么回事?
请高手指教。 看下,你的采样频率之类的设置是否符合需求 是不是有未定义的状态,跑到其他未定义状态就跳不回来了 感谢大家的帮助。<br>
我的signaltap II 逻辑分析仪采样时钟使用的是系统中的频率最高的一个时钟,状态机各状态持续时间最小的1个时钟周期,长的几百个周期,从外接示波器输出波形来看系统确实异常。<br>
<br>
状态机的所有状态都在process中,而且最后也加了一句when others =>..........。<br>
<br>
另外系统上电后在程序中也对各个模块进行了一段时间的复位。<br>
<br>
在逻辑分析仪中去掉了一个观测信号,跑了一下午也没事,加上这个信号就不对。<br>
<br>
真是没办法了,太头疼了,还劳烦各位继续提供帮助。 还有个问题请大家帮忙:<br>
开发环境:quartus II 6.0,状态机类型选项使用的是one-hot编码,<br>
状态机的部分代码:<br>
process(clk,rst)<br>
begin<br>
if clk'event and clk='1' then<br>
if rst='0' then<br>
state<=s0;<br>
else<br>
state<=next_state;<br>
end if;<br>
end if;<br>
end process;<br>
<br>
<br>
process(state,........)<br>
begin<br>
case state is<br>
........<br>
when s5 =><br>
next_state<=s0;<br>
when others =><br>
next_state<=s0;<br>
end case;<br>
end process;<br>
<br>
这个状态机综合出来以后查看state machine viewer发现从s5到s0的转换条件是(!rst),<br>
这样的话是不是把(rst=1)的条件给综合掉了?综合的结果是否正确?<br>
出现该问题的原因是代码的原因还是综合的某个开关选项不对。<br>
<br>
[ 本帖最后由 thunder9999 于 2007-2-27 13:56 编辑 ] 综合的结果没有正确不正确之分, QII只是忠实于你的代码, 并相应地进行一定的优化, 出现与你的设想不相符的情况时, 请回头检查代码.<br>
<br>
设计状态机是对FPGA设计人员思维能力, 分析能力, 以及逻辑思维是否严密的一个考验; 可以确定的是, 工具只能分析解释代码, 而不能理解设计者的意图, 这通常是问题所在; 另一方面, 工具已经非常成熟, 不会出现不忠实于代码而任意综合的问题.<br>
<br>
最后, 任何设计人员都要切记: 工具只能帮助我们实现我们的思路, 而问题的解决只能依靠设计人员根据具体问题提出的具体的解决问题的思路! 逻辑不完备吧 综合工具综合出的结果肯定是你代码的表述,如果综合结果与你的设计思路有冲突,首先应该考虑是自己在代码表述时候是否有错,看了你的代码,感觉综合工具没出问题,因为你低电平复位,所以每个状态转到s0都会有(!rst)这个条件的 现在我也不怀疑综合工具的结果,但是根据代码来看<br>
s5到s0应该有两个条件:rst='1' 或rst='0'也就是不论rst为高还是低都应该跳转,<br>
可是综合结果却只给了rst='0'这一个跳转条件,这是为什么? thunder9999,lz你好!不知道 你的问题解决了没有,我遇到了和你同样的问题。<br>
根据情况我可以断定是state 处在了亚稳态,导致哪一个状态都没有执行!但我加了<br>
一句后,state就再也不到亚稳态了(详细问题请见我的
http://www.edacn.net/bbs/viewthread.php?tid=83758&pid=721644&page=1&extra=page%3D1
),串口接收机,状态机出了奇怪问题!)<br>
这句如下:<br>
assign flag = starting^state;<br>
能交流交流吗??<br>
113634707我的qq号!<br>
<br>
[ 本帖最后由 youhui 于 2007-3-31 13:02 编辑 ]
页:
[1]
2