有限状态机FSM,今天又重新回顾了一下状态机,对Morre型状态机和Mealy型状态机有了重新认识,感觉以前学习就是囫囵吞枣,一点都不细致。要想真正掌握一门技术,要细扣,不放过任何一点疑问。
前言
之前学习也只是了解到了概念,并没有理解实质,甚至连自己后面写的状态机是什么类型的都不知道,今天就深耕一下,写下这篇学习记录,以便之后自己回顾。
一、Moore型FSM
首先说moore型状态机——输出只与当前状态有关,个人理解,在某个状态下,专门设置输出信号,而进入这个状态,也是由某个输入信号决定的,但我们说是至于当前状态有关,因为只要进入了这个状态,输出就确定下来了。举个例子;序列检测10100,检测到该序列时,输出dout为1,其余情况输出dout为0;要进行这样的序列检测,其中一种方法就是用 状态机实现。
下图是verilog代码和仿真结果,可以看出,只有在状态s5的情况下,才会输出dout为1,其他情况,dout都为0;在S5的状态下,不管din输入为多少,都不影响dout的输出值。下面分别是输出为时序逻辑和输出为组合逻辑的代码;
可以看出,时序逻辑输出延迟一个时钟周期输出,组合逻辑在进入s5时立刻响应。
二、Mealy型FSM
接下来看看mealy型状态机,mealy型状态机与当前状态和当前输入都有关;在状态为s4且输入为0的时候才dout才响应;
|
总结
在写FSM时,moore与mealy的最大区别就在判断输出的时候的条件,如何选择这两种没有和明确的规定,一般写状态机输出的时候,都是时序逻辑,为的是后续好处理,所以,不管是摩尔还是米莉,输出逻辑最好都打一拍。