题解 | 不重叠序列检测
不重叠序列检测
https://www.nowcoder.com/practice/9f91a38c74164f8dbdc5f953edcc49cc
//不重叠序列检测,舍去之前结果
`timescale 1ns/1ns
module sequence_detect(
input clk,
input rst_n,
input data,
output reg match, // Match output
output reg not_match // Not match output
);
reg [5:0] reg_a;
reg [2:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
reg_a <= 'b0; // Reset the register
cnt <= 3'b0; // Reset the counter
end else begin
reg_a <= {reg_a[5:0], data}; // Shift in the new bit 'a'
if (cnt < 3'd6) begin
cnt <= cnt + 1; // Increment the counter until it reaches 7
end else begin
cnt <= 3'b1; // Keep the counter at 7 after reaching it
end
end
end
always @(*) begin
if (!rst_n) begin
match <= 1'b0;
not_match <= 1'b0; // Initialize not_match flag
end else if(reg_a == 6'b011100 && cnt == 'd6)begin //左边高位,右边低位
match <= 1'b1; // Match found for the sequence "011xxx001"
not_match <= 1'b0; // Reset not_match flag
end else if(reg_a != 6'b011100 && cnt == 'd6)begin
match <= 1'b0; // No match
not_match <= 1'b1; // Set not_match flag
end else begin
match <= 1'b0; // No match
not_match <= 1'b0; // Set not_match flag
end
end
endmodule

