`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input a,
	output reg match
	);

	parameter IDEL = 0, S0 = 1, S1 = 2, S2 = 3, S3 = 4, S4 = 5, S5 = 6, S6 = 7, S7 = 8;
	reg [3:0] cstate,nstate;
	always@(posedge clk or negedge rst_n) begin
		if(!rst_n) begin
			cstate <= IDEL;
		end
		else begin
			cstate <= nstate;
		end
	end
	always@(*) begin
		case(cstate)
			IDEL: nstate = a?IDEL:S0;
			S0:	  nstate = a?S1:S0;
			S1:	  nstate = a?S2:S0;
			S2:   nstate = a?S3:S0;
			S3:   nstate = a?IDEL:S4;
			S4:   nstate = a?S1:S5;
			S5:   nstate = a?S1:S6;
			S6:   nstate = a?S7:S0;
			S7:   nstate = a?IDEL:S0;
			default: nstate = IDEL;
		endcase
	end
	always@(posedge clk or negedge rst_n) begin
		if(!rst_n) begin
			match <= 1'b0;
		end
		else begin
			match <= (cstate==S7);
		end
	end
  
endmodule