`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
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