时序区别"/>
关于Verilog FSM中Mealy型和Moore型状态机的时序区别
一、Moore型状态机和Mealy型状态机在定义上的区别
1:输出只和当前状态有关而与输入无关,则称为摩尔(Moore)状态机;
2:输出不仅和当前状态有关而且和输入有关,则称为米利(Mealy)状态机;
二、Moore型状态机和Mealy型状态机在定义上的区别
以序列检测101为例(允许重叠检测)
- 摩尔型状态机需要s0、s1、s2、s3四种状态,每次检测到101序列,则跳转到s3输qout=1,注意“需要等到下一次的有效边沿来临才会有输出”。
- 米利型状态机则需要s0、s1、s2三种状态,每次检测到101序列,在最后一个1输入的时候就可以输出qout=1,注意“无需等到下一次有效边沿来临就会输出”。
(这就是为什么mealy型状态机比moore型状态机少一个状态输出)
三、Moore型状态机三段式之第三段讨论。
在网上看了很多作者的博客,发现,三段式状态机的第三段描述并不相同,有的使用时序描述,有的使用组合描述。
下面以101序列检测器(允许重叠检测)讨论区别。
如图是Moore型状态机的状态转换图:
第三段采用时序描述或组合描述代码:
module FSM(clk,reset,din,qout);input clk,reset,din;output reg qout;parameter s0 = 2'b00, s1 = 2'b01, s2 = 2'b11, s3 = 2'b10;reg [1:0] ns,cs;always@(posedge clk or posedge reset) beginif(reset) cs <= s0;else cs <= ns;endalways@* beginns = s0;case(cs)s0: ns = din?s1:s0;s1: ns = din?s1:s2;s2: ns = din?s3:s0;s3: ns = din?s1:s2;default: ns = s0;endcaseend//always@(posedge clk or posedge reset) begin// if(reset) qout <= 0;// else begin// case(cs)// s0: qout <= 0;// s1: qout <= 0;// s2: qout <= 0;// s3: qout <= 1;// default: qout <= 0;// endcase// end//endalways@(*) begincase(cs)s0: qout <= 0;s1: qout <= 0;s2: qout <= 0;s3: qout <= 1;default: qout <= 0;endcaseend
endmodule
仿真:
结论:可以看出,组合描述的输出不需要等一个时钟边沿。时序描述需要等一个时钟边沿。导致时序描述的输出无法达到重叠检测的功能。
更多推荐
关于Verilog FSM中Mealy型和Moore型状态机的时序区别
发布评论