请教如何找到合适的状态机跳转条件的问题
时间:10-02
整理:3721RD
点击:
几乎所有的教材都会推荐使用3段式状态机的方式写代码,当然具体的3段式有很多灵活的方式
基本上教材中列举的例子都能找到明确的跳转条件,可是往往实际代码中跳转状态是不明确的,
若代码中跳转条件有漏掉则其稳定性肯定就不好。
例如在写某个通讯协议时很多状态就是固定这步完了再执行固定的下一步,
但是若遇到上一步需执行某个运算,而下一步需要用到上一步的运算结果,
理论上跳转条件定为当运算结果OK时跳转到下一状态,
但是实际这个运算在什么时候能稳定输出结果我们是未知的,
那么这个跳转条件也就难定了,
请问对于这种如何找到合适的状态跳转条件?
谢谢!
基本上教材中列举的例子都能找到明确的跳转条件,可是往往实际代码中跳转状态是不明确的,
若代码中跳转条件有漏掉则其稳定性肯定就不好。
例如在写某个通讯协议时很多状态就是固定这步完了再执行固定的下一步,
但是若遇到上一步需执行某个运算,而下一步需要用到上一步的运算结果,
理论上跳转条件定为当运算结果OK时跳转到下一状态,
但是实际这个运算在什么时候能稳定输出结果我们是未知的,
那么这个跳转条件也就难定了,
请问对于这种如何找到合适的状态跳转条件?
谢谢!
这。
既然要用到,那就等到运算结果出来啊。
状态机就是一种流水处理方法的表现形式,如果没误解小编的意思的话,你只需要设置一个标志位,但前一步骤完成计算任务的时候,该标志位起来就行了。然后完成状态跳转。这和你用三段式并不冲突呀
你可以在上一步的计算后面加几级寄存器啊,一个可以避免亚稳态,一个可以用它的输出作为下一步的输入呀、、、
如果LZ是用于计算,并且很多pipeline操作,上一步与下一步之间出数据的时间是固定的话,并且算法也确实下来了,可以考虑不要用FSM,直接写就好。
FSM比较适合控制信号较复杂,且没有严格时间关系的情况,再多加些超时或某控制信号失效就返回到IDLE的状态,安全性应可保证。
实际这个运算在什么时候能稳定输出结果我们是未知的
这种事情要是发生了,你这个系统是不可靠的
感谢大家的回复!
很多时候在FPGA中需要实践串行的步进时序,
总找不到一个比较严密的处理方法来保证这种系统的稳定性。
希望大家能给些建议,谢谢!
首先你肯定得知道啥时候出结果啊,对于每组数据可能需要的拍数不同,但总得有个结束条件不是,所以你这个问题不是状态机的问题
你用来判断计算结束且稳定的机制是什么?要检查哪些条件后觉得计算结果已经出来,可以用来做下一步了?
比如这个信号取名setp1_over,当计算结束时此信号拉高,然后进入下一个状态。如果没有拉高,那状态停留在此,等待此信号来。 同时再来个计时计数器,计算每个状态停留的时间,比如超过1000个时钟还没结束的话,说明是不是算法中途卡死掉了,将状态转到IDLE状态,以保证FSM是安全的,不会出现死的情况。
