`timescale 1ns/1ns module fsm2( input wire clk , input wire rst , input wire data , output reg flag ); //*************code***********// parameter s0=0; parameter s1=1; parameter s2=2; parameter s3=3; parameter s4=4; reg[2:0]state; reg[2:0]next_state; //1 always@(posedge clk or negedge rst) begin if(!rst) state<=0; else state<=next_state; end //2 always@(*) begin if(!rst) begin next_state=0; flag=0; end else begin case(state) s0:if(data==1) begin next_state=s1; flag=0;end else begin next_state=s0;flag=0;end s1:if(data==1) begin next_state=s2; flag=0;end else begin next_state=s1;flag=0;end s2:if(data==1) begin next_state=s3; flag=0;end else begin next_state=s2;flag=0;end s3:if(data==1) begin next_state=s4;flag=0;end else begin next_state=s3;flag=0;end s4:if(data==1) begin next_state=s1; flag=1;end else begin next_state=s0;flag=1;end default:begin next_state=s0; flag=0;end endcase end end //*************code***********// endmodule