设计一个序列检测器,检测序列为“11101000”
Design a sequence detector with the detection sequence of "11101000"
module sequ_detect( //检测序列11101000
input clk,
input reset_n,
input data_in,
output check_flag
);
localparam s0 = 0, s1= 1, s2 = 2, s3 = 3,
s4 = 4, s5 = 5, s6 = 6, s7 = 7, s8 = 8;
reg [3:0] c_st,next_st;
always @(posedge clk,negedge reset_n)
if(!reset_n)
c_st <= 0;
else
c_st <= next_st;
always @*
case(c_st)
s0 : if(data_in==1) next_st = s1; else next_st = s0;
s1 : if(data_in==1) next_st = s2; else next_st = s0;
s2 : if(data_in==1) next_st = s3; else next_st = s0;
s3 : if(data_in==0) next_st = s4; else next_st = s3;
s4 : if(data_in==1) next_st = s5; else next_st = s0;
s5 : if(data_in==0) next_st = s6; else next_st = s2;
s6 : if(data_in==0) next_st = s7; else next_st = s1;
s7 : if(data_in==0) next_st = s8; else next_st = s1;
s8 : if(data_in==0) next_st = s0; else next_st = s1;
default : next_st = s0;
endcase
assign check_flag = (c_st == s8) ;
endmodule