状态机——序列检测

  每三个时钟周期中检测输入w,若w的高电平个数恰好为2,则输出一个高电平。

 

 

module top_module (
    input clk,
    input reset,   // Synchronous reset
    input s,
    input w,
    output z
);
    reg [3:0]cs,ns;
    parameter A=4'b0001,B=3'b0010,C=3'b0100,D=4'b1000;
    reg [1:0]cnt;
    
    always@(posedge clk)
        if(reset)
            cs<=A;
        else
            cs<=ns;
    
    always@(*)begin
        case(cs)
            A:ns=s?B:A;
            B:ns=C;
            C:ns=D;
            D:ns=B;
            default:ns=A;
        endcase
    end
    
    always@(posedge clk)begin
        if(reset)
            cnt<=0;
        else case(cs)
            B:cnt<=w;
            C,D:cnt<=cnt+w;
            default:cnt<=0;
        endcase
    end
    
    assign z=(cs==B&&cnt==2);
        
endmodule

 

posted @ 2022-05-28 13:17  Real马锥  阅读(51)  评论(0编辑  收藏  举报