Moore型状态机和Mealy型状态机的区别
(1)Moore型状态机:输出信号只取决于当前状态。
(2)Mealy型状态机:输出信号不仅取决于当前状态,还取决于输入信号的值。
【数字IC/FPGA设计|Moore型状态机和Mealy型状态机的区别以及各自Verilog的实现细节(为什么Moore型状态机需要多一个状态(怎么选择用哪一种状态机?))】它们的区别就在于输出信号是否与输入信号有关,造成的结果是:
实现相同功能时,Moore型状态机需要比Mealy型状态机多一个状态,且Moore型状态机的输出比Mealy型延后一个时钟周期。
这里举一个HDLBits上的例子:
文章图片
文章图片
这两道题目要求分别用Moore型状态机和Mealy型状态机来实现对输入信号x的二进制补码转换。电路会对输入持续进行转换,直到复位信号到来。从两道题目给出的示例时序图可以看出,同样的输入下,Moore型状态机的输出z比Mealy型状态机延迟了一个时钟周期。
由于第二道题直接给出了状态图,我们就先从第二题的Mealy型状态机做起。
由状态图:复位信号到来,状态机进入A状态。
在A状态中,如果输入的x=0,则输出z=0,下一状态仍是A;如果输入的x=1,则输出z=1,下一个状态为状态B;
在B状态中,如果输入的x=0,则输出的z=1,下一状态仍是B;如果输入的x=1,则输出的z=0,下一个状态还是B。
由以上状态图,很容易就能写出相应的三段式状态机的Verilog代码:
module top_module (
input clk,
input areset,
input x,
output z
);
parameter A = 2'b01;
parameter B = 2'b10;
reg [1:0] state, next_state;
always @ ( posedge clk or posedge areset ) begin
if ( areset )
state <= A;
else
state <= next_state;
endalways @ ( * ) begin
case( state )
A:
next_state = x? B: A;
B:
next_state = B;
endcase
endalways @ ( * ) begin
case( state )
A:
z = x;
B:
z = !x;
endcase
endendmodule
再来考虑第一题,使用Moore状态机来解决这个问题:
首先分析可能的状态,画出状态图:
复位信号到来,同样强制进入A状态;
A状态中,若输入的x=0,保持在A状态,x=1则进入B状态;
B状态中,若输入的x=0,保持在B状态,x=1则进入C状态;
C状态中,若输入的x=1,保持在C状态,x=0则进入B状态。
文章图片
在这里,Moore型状态机比Mealy型多了一个中间状态B:因为Moore型的输出与输入无关,只与当前状态有关,所以需要多出一个状态来产生一个输出。具体而言,在Mealy型状态机中,状态A有两个输出,z=0或z=1,这两个输出的值是由输入的x来决定的(z=x)。而在Moore型状态机中,输出与输入是无关的,不能根据输入的x的值决定输出的z的值(输出的值只跟状态有关,在这里只跟状态B有关,若在状态B,输出1,不在状态B则输出0)。
相应的Verilog代码:
module top_module (
input clk,
input areset,
input x,
output z
);
parameter A = 3'b001;
parameter B = 3'b010;
parameter C = 3'b100;
reg [2:0] state, next_state;
always @ ( posedge clk )
temp <= x;
always @ ( posedge clk or posedge areset ) begin
if ( areset )
state <= A;
else
state <= next_state;
end
always @(*) begin
case ( state )
A: begin
next_state = x? B: A;
end
B: begin
next_state = x? C: B;
end
C: begin
next_state = x? C: B;
end
default: begin
next_state = A;
end
endcase
endassign z = state==B;
endmodule
由于Moore型状态机的输出与输入无关,需要多用一个状态变量产生输出。所以Moore型状态机的输出由此多了一个时钟周期的延迟。换句话说,输入输出的延迟是由于Moore状态机的输出仅仅取决于Moore状态机的当前状态。因此,在编码器使与采样或者检测到的输入相对应的输出有效之前,输入的变化必须首先使状态发生转移!
怎么选择用哪一种状态机:
通常情况下,Mealy状态机的输出容易受到输入比特流中的毛刺影响,如果系统不能承受这种影响,就必须使用Moore状态机。