我有一个有 5 个州的 FSM。其中3个是通过子FSM(UML模式)设计的。
对于 VHDL 中的实现,恕我直言,有两种方法可以做到这一点:
将它们总结为一个,这样我就有了一份包含子 FSM 的文档和一个包含一个大 FSM 的产品。
与所有州建立一个 FSM。对于每个具有子 FSM 的状态,使用来自大状态机的使能信号构建一个独立的 FSM。
这不存在什么更好的问题,我认为两种方式都有其优点和缺点。但对于 VHDL 实现来说,哪种方式更“干净”呢?
type my_big_one is (ONE,TWO_one, TWO_two, THREE_one, THREE_two, FOUR,FIVE);
vs.
type my_one is (ONE, TWO, THREE, FOUR, FIVE);
type two_fsm is (TWO_one, TWO_two);
type three_fsm is (THREE_one, THREE_two);
分层 FSM 也是一种可行的解决方案;例如
type main_state is (ONE, TWO, THREE, FOUR, FIVE);
type inner_state is (inner_one, inner_two);
signal main : main_state;
signal inner : inner_state;
...
case main is
when ONE => something_simple;
main <= TWO;
inner <= inner_one; -- reset inner SM
when TWO => case inner is
when inner_one => ...
when inner_two => ...
end case;
when THREE => case inner is ...
如果走向极端,这将变得难以控制。但是,如果内部状态机相对简单,则这可能比三个单独的状态机及其握手更清晰、更简洁,而握手除了同步之外没有任何作用。
我有时会使用这种模式,例如 SM 必须向 UART 发送一系列消息,而“内部”状态则处理驱动 UART 的细节(可能使用消息中字符的计数器)。
我不会教条地认为总体上哪个是更好的解决方案,这取决于上下文......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)