`timescale 1ns/1ns module fsm1( 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; reg [1:0]state; reg [1:0]next_state; //1 always@(posedge clk or negedge rst) begin if(!rst) state<=0; else state<=next_state; end //2 always@(*) begin case(state) s0: if(data) next_state=s1; else next_state=s0; s1: if(data) next_state=s2; else next_state=s1; s2: if(data) next_state=s3; else next_state=s2; s3: if(data) next_state=s0; else next_state=s3; endcase end //3 always@(posedge clk or negedge rst) begin if(!rst) flag<=0; else if((next_state==s0)&(data==1)) flag<=1; else flag<=0; end //*************code***********// endmodule