`timescale 1ns/1ns
module sequence_test2(
input wire clk ,
input wire rst ,
input wire data ,
output reg flag
);
//*************code***********//
parameter idle = 5'b00001;
parameter test_first_data_done = 5'b00010;
parameter test_second_data_done = 5'b00100;
parameter test_third_data_done = 5'b01000;
parameter test_correct = 5'b10000;
reg [4:0] c_state;
reg [4: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_correct;
else
n_state <= idle;
test_correct:if(data == 1'b0)
n_state <= test_second_data_done;
else
n_state <= test_first_data_done;
default: n_state <= idle;
endcase
end
always @(posedge clk or negedge rst) begin
if(!rst)
flag <= 1'b0;
else begin
case(c_state)
test_correct: flag <= 1'b1;
default: flag <= 1'b0;
endcase
end
end
//*************code***********//
endmodule
module sequence_test2(
input wire clk ,
input wire rst ,
input wire data ,
output reg flag
);
//*************code***********//
parameter idle = 5'b00001;
parameter test_first_data_done = 5'b00010;
parameter test_second_data_done = 5'b00100;
parameter test_third_data_done = 5'b01000;
parameter test_correct = 5'b10000;
reg [4:0] c_state;
reg [4: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_correct;
else
n_state <= idle;
test_correct:if(data == 1'b0)
n_state <= test_second_data_done;
else
n_state <= test_first_data_done;
default: n_state <= idle;
endcase
end
always @(posedge clk or negedge rst) begin
if(!rst)
flag <= 1'b0;
else begin
case(c_state)
test_correct: flag <= 1'b1;
default: flag <= 1'b0;
endcase
end
end
//*************code***********//
endmodule