longtime 发表于 2010-6-26 00:33:29

状态机有问题

本帖最后由 fpgaw 于 2010-11-18 16:25 编辑

我编了一个状态机,用onehot,出现了这样一个问题,就是当某一个状态执行到时,其中的语句执行了,但状态机的状态却变为"undefined",接着就一直保持为"undefined"再也不走了,不明白为什么语句执行对了,状态改变却错了,而且我设了default状态,按理说应该可以跑回去的呀

CHA 发表于 2010-6-26 00:48:59

一个状态机

CHANG 发表于 2010-6-26 02:07:18

不好意思,由于代码较长,我将出错的那段贴出来<br>
<br>
RCYCAL1:<br>
&nbsp; &nbsp;&nbsp;&nbsp;begin<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if(rear + 1==front)<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;Rstate &lt;= RCYCAL1;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;else<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;begin<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;temp &lt;= 16'h0010;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;rear &lt;= rear + 1;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if(EF)<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Rstate &lt;= STATE_START;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;else if(empty==0)<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Rstate &lt;= RCYCAL2;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;else <br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Rstate &lt;= RCYCAL3;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;end&nbsp; &nbsp;&nbsp; &nbsp;<br>
&nbsp; &nbsp; end&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br>
&nbsp; &nbsp;&nbsp; &nbsp; <br>
&nbsp;&nbsp;temp 是我设的存储器变量,我把它做成环行数组,front,rear是两个指针,<br>
EF,empty是状态标记&nbsp;&nbsp;,程序的执行状况是这样的:front比rear大1,状态停留在RCYCAL1,<br>
front加1后,在下一个时钟沿往temp环行数组写数据,再根据情况转移状态<br>
前几次运行都好,状态成功转移到RCYCAL2,但突然有一次在执行完给temp写数据,rear加1后,状态变为undefined,就不走了,请大侠帮忙看看!

CHANG 发表于 2010-6-26 02:37:15

你的Rstate不完整啊,光看这个可能还没有用,并不能确定是否从这个状态跑飞的.不过你这个状态机也很怪.尤其temp有风险.

FFT 发表于 2010-6-26 03:23:20

状态机每次都是运行到RCYCAL1,再向下一个状态转移时发生错误的,还有请问对环形数组操做还有其他办法吗,temp有什么风险?

interig 发表于 2010-6-26 04:57:50

呵呵,学习一下

VVC 发表于 2010-6-26 06:18:50

EF是什么信号?<br>
我以前遇到过一种情况:如果判断条件有z或x,状态机就会跑到0状态。

Sunlife 发表于 2015-6-17 10:58:17


你的Rstate不完整啊,光看这个可能还没有用,并不能确定是否从这个状态跑飞的.不过你这个状态机也很怪.尤其temp有风险.
页: [1]
查看完整版本: 状态机有问题