状态机有问题
本帖最后由 fpgaw 于 2010-11-18 16:25 编辑我编了一个状态机,用onehot,出现了这样一个问题,就是当某一个状态执行到时,其中的语句执行了,但状态机的状态却变为"undefined",接着就一直保持为"undefined"再也不走了,不明白为什么语句执行对了,状态改变却错了,而且我设了default状态,按理说应该可以跑回去的呀 一个状态机 不好意思,由于代码较长,我将出错的那段贴出来<br>
<br>
RCYCAL1:<br>
begin<br>
if(rear + 1==front)<br>
Rstate <= RCYCAL1;<br>
else<br>
begin<br>
temp <= 16'h0010;<br>
rear <= rear + 1;<br>
if(EF)<br>
Rstate <= STATE_START;<br>
else if(empty==0)<br>
Rstate <= RCYCAL2;<br>
else <br>
Rstate <= RCYCAL3;<br>
end <br>
end <br>
<br>
temp 是我设的存储器变量,我把它做成环行数组,front,rear是两个指针,<br>
EF,empty是状态标记 ,程序的执行状况是这样的:front比rear大1,状态停留在RCYCAL1,<br>
front加1后,在下一个时钟沿往temp环行数组写数据,再根据情况转移状态<br>
前几次运行都好,状态成功转移到RCYCAL2,但突然有一次在执行完给temp写数据,rear加1后,状态变为undefined,就不走了,请大侠帮忙看看! 你的Rstate不完整啊,光看这个可能还没有用,并不能确定是否从这个状态跑飞的.不过你这个状态机也很怪.尤其temp有风险. 状态机每次都是运行到RCYCAL1,再向下一个状态转移时发生错误的,还有请问对环形数组操做还有其他办法吗,temp有什么风险? 呵呵,学习一下 EF是什么信号?<br>
我以前遇到过一种情况:如果判断条件有z或x,状态机就会跑到0状态。
你的Rstate不完整啊,光看这个可能还没有用,并不能确定是否从这个状态跑飞的.不过你这个状态机也很怪.尤其temp有风险.
页:
[1]