インテル® Quartus® Prime プロ・エディションのユーザーガイド: デザインの推奨事項

ID 683082
日付 8/03/2023
Public
ドキュメント目次

1.6.4.2.2. SystemVerilogのステートマシン・コーディング例

次のコーディング・スタイルを使用して、SystemVerilogでステートマシンを記述します。

列挙型を使用するSystemVerilogステートマシン

モジュール enum_fsm は、列挙型を使用するSystemVerilogステートマシンの実装例です。

インテル® Quartus® Prime プロ・エディション の合成では、ステートマシンのステートを定義する列挙型を符号なし整数型にする必要があります。列挙型を int unsigned として指定しないと、合成ではデフォルトで符号付き int 型が使用されます。この場合、 インテル® Quartus® Prime開発ソフトウェアはデザインを合成しますが、ロジックをステートマシンとして推論または最適化しません。

module enum_fsm (input clk, reset, input int data[3:0], output int o);
enum int unsigned { S0 = 0, S1 = 2, S2 = 4, S3 = 8 } state, next_state;
always_comb begin : next_state_logic
	  next_state = S0;
	  case(state)
		S0: next_state = S1;
		S1: next_state = S2;
		S2: next_state = S3;
		S3: next_state = S3;
	  endcase
end
always_comb begin
	  case(state)
		 S0: o = data[3];
		 S1: o = data[2];
		 S2: o = data[1];
		 S3: o = data[0];
	  endcase
end
always_ff@(posedge clk or negedge reset) begin
	  if(~reset)
		 state <= S0;
	  else
		 state <= next_state;
end
endmodule