本质上和输入序列连续的序列检测,当data_valid信号有效时,移位寄存器data_r再进行移位即可。
alt 本题的题目要求和Testbench有不相符的地方。题目中要求match在序列匹配的下一个周期拉高,如上图。而Testbench则是在序列匹配的同周期拉高。下面的代码中,被注释掉的部分是符合题目要求的match,没有注释的是符合Testbench的match

`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input data,
	input data_valid,
	output reg match
	);
    reg [3:0] data_r;
    
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n)
            data_r <= 4'b0;
        else
            data_r <= data_valid? {data_r[2:0], data}: data_r;
    end
    
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n)
            match <= 0;
        else
            match <= data_r[2:0]==3'b011 && data==1'b0 && data_valid;
    end
  
//  always@(posedge clk or negedge rst_n) begin
//     if(~rst_n)
//         match <= 0;
//     else
//         match <= data_r==4'b0110;
//  end
    
endmodule