题解 | #输入序列不连续的序列检测#
输入序列不连续的序列检测
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
// );
// parameter s0 = 5'b00001;
// parameter s1 = 5'b00010;
// parameter s2 = 5'b00100;
// parameter s3 = 5'b01000;
// parameter s4 = 5'b10000;
// reg [4:0]statue;
// always@(posedge clk or negedge rst_n)
// if (rst_n == 1'b0)
// statue <= s1;
// else if (data_valid == 1'b1)
// begin
// case (statue)
// s0 : if (data == 1'b1)
// statue <= s0;
// else
// statue <= s1;
// s1 : if (data == 1'b1)
// statue <= s2;
// else
// statue <= s1;
// s2 : if (data == 1'b1)
// statue <= s3;
// else
// statue <= s1;
// s3 : if (data == 1'b1)
// statue <= s0;
// else
// statue <= s4;
// s4 : if (data == 1'b1)
// statue <= s2;
// else
// statue <= s1;
// default : statue <= s0;
// endcase
// end
// always@(*)
// if (rst_n == 1'b0)
// match <= 1'b0;
// else if (statue == s4 && data_valid == 1'b1)
// match <= 1'b1;
// else
// match <= 1'b0;
// endmodule
`timescale 1ns/1ns
module sequence_detect(
input clk,
input rst_n,
input data,
input data_valid,
output reg match
);
reg [3:0]data_reg;
always@(posedge clk or negedge rst_n)
if (rst_n == 1'b0)
data_reg <= 4'b0;
else if (data_valid == 1'b1)
data_reg <= {data_reg[2:0],data};
always@(*)
if (rst_n == 1'b0)
match <= 1'b0;
else if (data_valid == 1'b1 && data_reg == 3'b0110)
match <= 1'b1;
else
match <= 1'b0;
endmodule

