题解 | #输入序列不连续的序列检测#
输入序列不连续的序列检测
https://www.nowcoder.com/practice/f96d0e94ec604592b502b0f1800ed8aa
`timescale 1ns/1ns module sequence_detect( input clk, input rst_n, input data, input data_valid, output reg match ); // 0110 parameter S0 = 4'b1111; parameter S1 = 4'b0000; parameter S2 = 4'b0001; parameter S3 = 4'b0011; parameter S4 = 4'b0110; reg [3:0] sta_now,sta_next; always @(posedge clk or negedge rst_n) begin if (~rst_n) begin sta_now <= S0; end else sta_now <= sta_next; end always @(*) begin case(sta_now) S0: sta_next = (data_valid)? ((~data)?S1:S0):S0; S1: sta_next = (data_valid)? ((~data)?S1:S2):S1; S2: sta_next = (data_valid)? ((data?S3:S1)):S2; S3: sta_next = (data_valid)? ((~data)?S4:S0):S3; S4: sta_next = (data_valid)? (data?S0:S1):S4; endcase end always @(posedge clk or negedge rst_n) begin if (~rst_n) match <= 0; else begin if (sta_now==S3 && data == 0 && data_valid == 1) match <= 1; else match <= 0; end end endmodule
需要使match的时序提前一个时钟周期,判断是判断sta_now为S3状态且下一个时钟周期就变为S4状态。