其他分享
首页 > 其他分享> > 状态机——序列检测

状态机——序列检测

作者:互联网

  每三个时钟周期中检测输入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

 

标签:reset,高电平,检测,clk,module,状态机,cs,序列,input
来源: https://www.cnblogs.com/x-zstu/p/16320447.html