`timescale 1ns/1ns
module fsm1(
input wire clk ,
input wire rst ,
input wire data ,
output reg flag
);
//*************code***********//
reg[1:0]state,next_state;
localparam S0=0,S1=1,S2=2,S3=3;
always@(posedge clk or negedge rst)
begin
if(~rst)
state <= S0;
else
state <= next_state;
end
always@(*)
begin
case(state)
S0:next_state = data?S1:S0;
S1:next_state = data?S2:S1;
S2:next_state = data?S3:S2;
S3:next_state = data?S0:S3;
default:next_state = S0;
endcase
end
always@(posedge clk or negedge rst)
begin
if(~rst)
flag <= 0;
else begin
if(state == S3 && data)
flag <= 1;
else
flag <= 0;
end
end
//*************code***********//
endmodule
`timescale 1ns/1ns
module fsm2(
input wire clk ,
input wire rst ,
input wire data ,
output reg flag
);
//*************code***********//
reg[2:0]state,next_state;
localparam S0=0,S1=1,S2=2,S3=3,S4=4;
always@(posedge clk or negedge rst)
begin
if(~rst)
state <= S0;
else
state <= next_state;
end
always@(*)
begin
case(state)
S0:begin
next_state = data?S1:S0;
flag =0;
end
S1:begin
next_state = data?S2:S1;
flag =0;
end
S2:begin
next_state = data?S3:S2;
flag =0;
end
S3:begin
next_state = data?S4:S3;
flag =0;
end
S4:begin
next_state = data?S1:S0;
flag = 1;
end
default:begin
next_state = S0;
flag =0;
end
endcase
end
//*************code***********//
endmodule