FSM Example (Verilog) - 2022.1 English

Vivado Design Suite User Guide: Synthesis (UG901)

Document ID
UG901
Release Date
2022-06-06
Version
2022.1 English

Filename: fsm_1.v

// State Machine with single sequential block

//fsm_1.v

module fsm_1(clk,reset,flag,sm_out);

input clk,reset,flag;

output reg sm_out;

 

parameter s1 = 3'b000;

parameter s2 = 3'b001;

parameter s3 = 3'b010;

parameter s4 = 3'b011;

parameter s5 = 3'b111;

 

reg [2:0] state;

 

always@(posedge clk)

 begin

   if(reset)

     begin

       state <= s1;

       sm_out  <= 1'b1;

     end

 else

   begin

    case(state)

       s1: if(flag)

            begin

              state <= s2;

             sm_out <= 1'b1;

           end

          else

           begin

             state <= s3;

             sm_out <= 1'b0;

           end

      s2: begin state <= s4; sm_out <= 1'b0; end

      s3: begin state <= s4; sm_out <= 1'b0; end

      s4: begin state <= s5; sm_out <= 1'b1; end

      s5: begin state <= s1; sm_out <= 1'b1; end

    endcase

   end

end

endmodule