题解 | #输入序列不连续的序列检测#
输入序列不连续的序列检测
http://www.nowcoder.com/practice/f96d0e94ec604592b502b0f1800ed8aa
`timescale 1ns/1ns
module sequence_detect(
input clk,
input rst_n,
input data,
input data_valid,
output reg match
);
parameter a = 3'b000, b = 3'b001, c = 3'b010, d = 3'b011, idle = 3'b111;
reg [2:0] sta,nsta;
always @(*) begin
nsta = idle;
case (sta)
a : nsta = data_valid ? (data ? b : a) : a;
b : nsta = data_valid ? (data ? c : a) : b;
c : nsta = data_valid ? (data ? idle : d) : c;
d : nsta = data_valid ? (data ? b : a) : a;
idle : nsta = data_valid ? (data ? idle : a) : idle;
endcase
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
sta <= idle;
match <= 1'b0;
end else if (nsta==d) begin
match <= 1'b1;
sta <= nsta;
end else begin
sta <= nsta;
match <= 1'b0;
end
end
endmodule