状态机:
状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(Finite State Machine),主要分为2大类:
第一类,若输出只和状态有关而与输入无关,则称为Moore状态机
第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机
基本信息:
状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作,完成特定操作的控制中心。状态机分为摩尔(Moore)型状态机和米莉(Mealy)型状态机。
状态机就是状态转移图。举个最简单的例子,人有三个状态:健康,感冒,康复中。触发的条件有淋雨(t1),吃药(t2),打针(t3),休息(t4)。所以状态机就是健康-(t4)->健康;健康-(t1)->感冒;感冒-(t3)->健康;感冒-(t2)->康复中;康复中-(t4)->健康,等等。就是这样状态在不同的条件下跳转到自己或不同状态的图。
Moore有限状态机:
Moore状态机的输出只与有限状态自动机的当前状态有关,与输入信号的当前值无关。
Moore状态机的输出只与有限状态自动机的当前状态有关,与输入信号的当前值无关。 Moore有限状态机在时钟CLOCK脉冲的有效边沿后的有限个门延后,输出达到稳定值。即使在一个时钟周期内输入信号发生变化,输出也会在一个完整的时钟周期内保持稳定值而不变。输入对输出的影响要到下一个时钟周期才能反映出来。
Moore有限状态机最重要的特点就是将输入与输出信号隔离开来。
Verilog实现代码:
//Moore型状态机
module Moore1a(clk,din,op);
input clk,din;
output op;
reg [1:0]current_state,next_state;
reg op;
parameter S0 = 2'b00,S1 = 2'b01,S2 = 2'b10,S3 = 2'b11;
//第一个always进程--时序逻辑电路
always@(posedge clk)begin
current_state <= next_state;
end
//第二个always进程--组合逻辑电路
always@(current_state or din)begin
case(current_state)
//状态S0
S0:
begin
op = 0;
if(din == 0)
next_state = S0;
else
next_state = S1;
end
//状态S1
S1:
begin
op = 1;
if(din == 1)
next_state = S1;
else
next_state =S2;
end
//状态S2
S2:
begin
op = 0;
if(din == 1)
next_state = S2;
else
next_state = S3;
end
//状态S3
S3:
begin
op = 0;
if(din == 0)
next_state = S3;
else
next_state = S0;
end
default:
begin
op = 0;
next_state = S0;
end
endcase
end
endmodule
运行结果分析:
状态的变化决定输出的变化
tips:
1.欢迎您在评论区留下您宝贵的意见。
2.希望此篇文章有帮助到您。