`timescale 1ns/1ns

module sequence_test1(
    input wire clk  ,
    input wire rst  ,
    input wire data ,
    output reg flag
);
//*************code***********//
    
    parameter idle                  = 6'b000001;
    parameter test_first_data_done  = 6'b000010;
    parameter test_second_data_done = 6'b000100;
    parameter test_third_data_done  = 6'b001000;
    parameter test_fourth_data_done = 6'b010000;
    parameter test_correct          = 6'b100000;
    
    reg [5:0] c_state;
    reg [5:0] n_state;
    
    always @(posedge clk or negedge rst) begin
        if(!rst)
            c_state <= idle;
        else
            c_state <= n_state;
    end

    always @(*) begin
        case(c_state)
            idle: if( data == 1'b1) 
                     n_state <= test_first_data_done;
                  else 
                     n_state <= idle;
            test_first_data_done: if(data == 1'b0) 
                     n_state <= test_second_data_done;
                  else
                     n_state <= idle;
            test_second_data_done:if(data == 1'b1) 
                     n_state <= test_third_data_done;
                  else
                     n_state <= idle;
            test_third_data_done:if(data == 1'b1) 
                     n_state <= test_fourth_data_done;
                  else
                     n_state <= idle;
            test_fourth_data_done:if(data == 1'b1) 
                     n_state <= test_correct;
                  else
                     n_state <= idle;
            test_correct:if(data == 1'b1) 
                     n_state <= test_first_data_done;
                  else
                     n_state <= idle;
            default: n_state <= idle;
        endcase
    end
    
    always @(posedge clk or negedge rst) begin
        if(!rst)
            flag <= 1'b0;
        else begin
            case(c_state)
                test_fourth_data_done:if(data == 1'b1) 
                         flag <= 1'b1;
                default: flag <= 1'b0;
            endcase
        end
    end
//*************code***********//
endmodule