Moore型状态机和Mealy型状态机

  一、状态机的定义

    状态机就是能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定动作的控制中心。状态机简写为 FSM (Finite  State  Machine),分为两类:

    1:输出只和当前状态有关而与输入无关,则称为摩尔(Moore)状态机;

    2:输出不仅和当前状态有关而且和输入有关,则称为米利(Mealy)状态机;

  二、两种状态机的区别

    1:在波形上区别:以一个序列检测器为例,检测到输入信号11时输出z为1,其他时候为0。用摩尔型FSM实现需要用到三个状态(A,B,C)。而用米利型FSM实现则需要两个状态(A,B)。摩尔型FSM输出函数的输入只由状态变量决定,要想输出z=1,必须C状态形成,即寄存器中的两个1都打进去后才可以。输出z=1会在下一个有效沿到来的时候被赋值。而米利型FSM输出函数是由输入和状态变量共同决定的。状态在B的时候如果输入为1,则直接以组合电路输出z=1,不需要等到下个有效沿到来。从而也就不需要第三个状态C。

    2:摩尔状态机更安全:输出在时钟边沿变化(总是在一个周期后)。在Mealy机器中,输入更改可能会在逻辑完成后立即导致输出更改, 当两台机器互连时出现大问题 ,如果不小心,可能会发生异步反馈

    3:Mealy状态机对输入的反应更快在相同的周期内反应 - 不需要等待时钟。在Moore机器中,可能需要更多逻辑来将状态解码为输出 - 在时钟边沿之后更多的门延迟。并非所有时序电路都可以使Mealy模型实现。 一些时序电路只能作为摩尔机器实现。

  三、经典三段式状态机模板

 1 reg        [:]            current_state           ;
 2 reg        [:]            next_state               ;    
 3 
 4 wire        [:0]            IDLE                    ;
 5 wire        [:0]            S0                ;
 6 wire        [:0]            S1                ;
 7 wire        [:0]            S2                ;
 8 
 9 //=============================================================================\
10 //****************************     State Machine    *******************************
11 //=============================================================================\
12     
13 always @(posedge sclk or negedge s_rst_n) begin
14     if(!s_rst_n)
15         current_state <= IDLE;
16     else
17         current_state <= next_state;
18 end
19 
20 always @(*) begin
21     next_state = IDLE;
22     case(current_state)
23         IDLE:begin
24             if(idle2s0 == 1'b1)
25                 next_state = S0;
26             else
27                 next_state = current_state;
28         end
29         
30         S0:begin
31             if(s02s1 == 1'b1)
32                 next_state = S1;
33             else
34                 next_state =current_state;
35         end
36         
37         S1:begin
38             if(s12s2 == 1'b1)
39                 next_state = S2;
40             else
41                 next_state = current_state;
42         end
43         
44         S2:begin
45             if(s22idle == 1'b1)
46                 next_state = IDLE;
47             else
48                 next_state = current_state;
49         end
50         
51         default:begin
52             next_state = IDLE;
53         end
54     endcase
55 end
56 
57 assign        idle2s0        =    current_state == IDLE    && 
58 assign        s02s1        =    current_state == S0            && 
59 assign        s12s2        =    current_state == S1            && 
60 assign        s22idle        =    current_state == S2        && 
61 
62 always @(posedge sclk or negedge s_rst_n) begin
63     if(!s_rst_n) begin
64 
65     end
66     else begin
67         case(next_state)
68             
69     end
70 end    
View Code

  四、摩尔型状态机

  举例说明摩尔型状态机,非重叠检测 1001 

猜你喜欢

转载自www.cnblogs.com/571328401-/p/13193815.html