如果状态机里的一个状态在一个时钟周期里没有执行完会怎样呢?
本帖最后由 fpgaw 于 2010-11-18 16:23 编辑如果一个状态要执行的时间超过了系统的时钟周期,那么下一个时钟周期还是重新执行这个状态吗?那么不是进入死循环了?还是接着上次没执行完的语句继续执行?还是不管这个状态有没有执行完都将执行下一个状态? 状态机的状态是用时钟周期分成一段一段的,如果你说的"一个状态要执行的时间超过了一个时钟周期",那也就是在下一个时钟周期来后,仍是上一状态啊,这在状态机里是很常见的情况,<br>
比如IDLE状态,在没有触发信号来的时候,维持IDLE状态,<br>
至于是继续执行还是执行下一个状态,那就要看你的状态机的设计了 如果状态机里有的电路只完成一半(电路延时比较长,我用的是阻塞赋值)这时下一个时钟信号又来了,那么又要从状态机的头开始执行吗?那么不是进入死循环了,因为永远没有结束啊。还是用没有完成的地方开始呢? 看是怎么设计的了,同步更新state的话就到下一个状态,如果是组合部分和时序部分分开的话i可能死循环了。 你可以在这个状态里加上一个flag指示,运算完成后flag有效,转到下一个状态,没有运算完的话,维持当前状态。 原帖由 summerxyh 于 2007-1-26 16:40 发表<br>
你可以在这个状态里加上一个flag指示,运算完成后flag有效,转到下一个状态,没有运算完的话,维持当前状态。 不错的办法! 如果一个状态要执行的时间超过了系统的时钟周期??<br>
那就把这个状态分成几个小状态行不:) 可以分成几个状态来写吧 时间不够就拆分啊 原帖由 ffffffff 于 2007-1-25 14:26 发表<br>
如果一个状态要执行的时间超过了系统的时钟周期,那么下一个时钟周期还是重新执行这个状态吗?那么不是进入死循环了?还是接着上次没执行完的语句继续执行?还是不管这个状态有没有执行完都将执行下一个状态? 如果组合逻辑延迟时间太大,那么会导致状态机时序逻辑的建立时间不足,从而导致状态机进入非法状态(触发器处于亚稳态)。
页:
[1]
2