(1)主代码
`timescale 1ns / 1ns
//状态机之序列检测 welcom
module FSM(
Clk, //时钟
Rst_n, //复位
Dv, //数据开始有效
Din, //数据输入
Num //检测出的符合数据的个数
);
input Clk,Dv,Rst_n;
input [7:0] Din; //字符的位数是8位
output reg [3:0] Num; //64个字符检测有效的字符为连续的7位,则最多有9个,用4位数据可以表示
reg [2:0] state; //连续7位则总共有8个状态,4位可表示
//功能实现,序列检测
localparam CHECK_W =3'd0; //宏定义,便于使用
localparam CHECK_E = 3'd1;
localparam CHECK_L = 3'd2;
localparam CHECK_C = 3'd3;
localparam CHECK_O = 3'd4;
localparam CHECK_M = 3'd5;
always @ (posedge Clk or !Rst_n)
if (!Rst_n)
begin
state <= 3'b000;
Num <= 4'd0;
end
else
begin
case (state)
CHECK_W: //开始检测第一个字符
if (Dv)
begin
if (Din == "w")
state <= CHECK_E;
else
state <= CHECK_W;
end
CHECK_E:
if (Dv)
begin
if (Din == "e")
state <= CHECK_L;
else if (Din == "w")
state <= CHECK_E;
else
state <=CHECK_W;
end
CHECK_L:
if (Dv)
begin
if (Din == "l")
state <= CHECK_C;
else if (Din == "w")
state <= CHECK_E;
else
state <= CHECK_W;
end