有限状态机的设计
1、有限状态机的基本概念
有限状态机是时序电路的通用模型,任何时序电路都可以表示为有限状态机。在由时序电路表示的有限状态机中,各个状态之间的转移总是在时钟的触发下进行的,状态信息存储在寄存器中。因为状态的个数是有限的,所以称为有限状态机。
有限状态机是由两部分组成:存储电路和组合逻辑电路。存储电路用来生成状态机的状态,组合逻辑电路用来提供输出以及状态机跳转的条件。
其电路结构如图所示:
有限状态机可以分为同步和异步两种,
- 状态机的同步置位与复位:
always@(posedge clk )
if(!rst)
…
- 状态机的异步置位与复位:
always@(posedge clk or negedge rst)
…
当然,我们主要学习的是有限同步状态机。
2、有限状态机的分类
根据输出信号的产生方式,有限状态机可以分为:Mealy型和Moore型两类。
- Mealy型状态机的输出信号不仅与当前状态有关,而且还与输入信号有关,即可以把Mealy型有限状态机的输出看成是当前状态和输入信号的函数。结构如图所示:
- Moore型状态机的输出仅与当前状态有关,即可以把Moore型有限状态的输出看成是当前状态的函数。
##/3、举个栗子
完成检测连续接收“1111”的Moore型和Mealy型有限状态机设计。
解题思路:
(1)画出相应状态机类型的状态转移图;
(2)编写Verilog代码
(3)开始仿真,观察波形图是否和测试代码一致
- Moore型
(1)状态转移图:
(2)实验代码:
module machine_moore(input wire clk,input wire clr,input wire din,output reg dout);
reg[2:0] c_state,n_state;
parameter s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100;
always @(posedge clk or posedge clr)
begin
if(clr==1) c_state<=s0;
else c_state<=n_state;
end
always@(*)
begin
case(c_state)
s0