一:什么是状态机?
状态机的基本要素有 3 个,其实我们在第一节的举例中都有涉及,只是没有点明,它们是:状态、输出和输入。
1、状态:也叫状态变量。在逻辑设计中,使用状态划分逻辑顺序和时序规律。比如:设计伪随机码发生器时,可以用移位寄存器序列作为状态;在设计电机控制电路时,可以以电机的不同转速作为状态;在设计通信系统时,可以用信令的状态作为状态变量等。
2、输出:输出指在某一个状态时特定发生的事件。如设计电机控制电路中,如果电机转速过高,则输出为转速过高报警,也可以伴随减速指令或降温措施等。
3、输入:指状态机中进入每个状态的条件,有的状态机没有输入条件,其中的状态转移较为简单,有的状态机有输入条件,当某个输入条件存在时才能转移到相应的状态。
根据状态机的输出是否与输入条件相关,可将状态机分为两大类:摩尔(Moore)型状态机和米勒(Mealy)型状态机。
1.1 状态机的分类:
1、摩尔状态机:摩尔状态机的输出仅仅依赖于当前状态,而与输入条件无关。每个输出仅仅与状态相关,所以它是一个摩尔型状态
机。
2、米勒型状态机:米勒型状态机的输出不仅依赖于当前状态,而且取决于该状态的输入条件。
(老师在上课的时候讲了一个很有趣的例子,一个程序员周一到周五是工作日需要工作,周六周日则休息打游戏,程序员每日的工作状态只是与日期有关,这就是摩尔状态机,如果程序员谈恋爱了,那么他每日的状态还要考虑到对象的问题才能决定自己的状态任务,那这就是米勒型状态机
1.2 状态机的工作原理图
作业:
跑马灯流水灯verilog实现:
一段式状态机:
S1 :begin
if(time1_en)begin
led_out<=4'b1001;
state<=S2;
end
else begin
led_out<=4'b0110;
state<=S1;
end
end
S2 :begin
if(time2_en)begin
led_out<=4'b1111;
state<=S3;
end
else begin
led_out<=4'b1001;
state<=S2;
end
end
S3 :begin
if(time2_en)begin
led_out<=4'b0111;
state<=S4;
end
else begin
led_out<=4'b1111;
state<=S3;
end
end
S4 :begin
if(time1_en)begin
led_out<=4'b1011;
state<=S5;
end
else begin
led_out<=4'b0111;
state<=S4;
end
end
S5 :begin
if(time1_en)begin
led_out<=4'b1101;
state<=S6;
end
else begin