Verilog HDL: シンクロナス・ステートマシン

author-image

投稿者:

これは、ステートマシンの実装を示す Verilog 例です。最初の CASE ステートメントは、ステートマシンの変数状態の値に依存する出力を定義します。2 番目の CASE ステートメントは、ステートマシンの遷移と、それらを制御する条件を定義します。

この例をプロジェクトで使用する際の詳細については、Verilog ウェブページの Verilog HDL の使用方法例セクションを参照してください。


statem.v

module statem(clk, in, reset, out);

input clk, in, reset;
output [3:0] out;

reg [3:0] out;
reg [1:0] state;

parameter zero=0, one=1, two=2, three=3;

always @(state) 
     begin
          case (state)
               zero:
                    out = 4'b0000;
               one:
                    out = 4'b0001;
               two:
                    out = 4'b0010;
               three:
                    out = 4'b0100;
               default:
                    out = 4'b0000;
          endcase
     end

always @(posedge clk or posedge reset)
     begin
          if (reset)
               state = zero;
          else
               case (state)
                    zero:
                         state = one;
                    one:
                         if (in)
                              state = zero;
                         else
                              state = two;
                    two:
                         state = three;
                    three:
                         state = zero;
               endcase
     end

endmodule