不知道拿data_valid当使能行不行,当data_valid无效时,当前状态不转移开始保持
`timescale 1ns/1ns
module sequence_detect(
    input clk,
    input rst_n,
    input data,
    input data_valid,
    output reg match
    );
    parameter IDLE = 3'b000,
    S1=3'b001,
    S2=3'b010,
    S3=3'b011,
    S4=3'b100;
    reg [2:0] sta,nsta;
    always@(posedge clk or negedge rst_n)
        if(!rst_n)
            sta <= IDLE;
    else if(data_valid)
        sta <= nsta;
    else
        sta <= sta;
    
    always@(*)begin
        if(data_valid)
            case(sta)
            IDLE:nsta = !data?S1:IDLE;
                S1:nsta = data?S2:S1;
                S2:nsta = data?S3:S1;
                S3:nsta = !data?S4:IDLE;
                S4:nsta = data?S2:S1;
                default:nsta = IDLE;
            endcase
          else
             nsta = IDLE;

        
    end
    
    always@(posedge clk or negedge rst_n)
        if(data_valid)
            if(!data&&sta==S3)
                match <= 1;
            else
                match <= 0;
        else
            match <= 0;
        
endmodule