FSM設計

RTL設計

この記事で学べること

  • FSM(有限状態機械)の正確な定義と役割
  • Moore / Mealy など主要なモデルの違い
  • 状態遷移・入力・出力の構造的理解
  • RTL設計における FSM の実務的な使いどころ
  • 設計時に陥りやすい誤解や注意点
  • 状態図を用いた構造的な理解方法

概要(全体像)

FSM(Finite State Machine:有限状態機械)は、「状態」「遷移」 を用いてシステムの振る舞いを記述するモデルであり、デジタル回路設計における制御ロジックの中心的な手法です。

  • 入力に応じて状態が変化する
  • 状態に応じて出力が決まる
  • 時間軸(クロック)に沿って動作する

という特徴を持ち、プロトコル制御、シーケンス制御、ハンドシェイク、エラーハンドリングなど、幅広い場面で利用されます。


なぜ重要なのか(背景・目的)

デジタル回路は大きく「データパス」と「制御」に分かれます。FSMはこのうち 制御ロジックの中核 を担い、以下の目的で利用されます。

  • 複雑な条件分岐を整理し、誤動作を防ぐため
  • シーケンス(順序)を明確に定義するため
  • プロトコル仕様を正確に実装するため
  • 設計レビューや検証での理解を容易にするため

FSMを正しく設計できることは、RTL設計者にとって必須スキルであり、SoC・FPGA・ASIC いずれの分野でも共通して求められます。


基本概念の整理

状態(State)

定義:システムが現在どのような振る舞いをすべきかを表す内部情報。
:IDLE、WAIT、EXEC、ERROR
実務での意味:制御フローの可視化と誤動作防止の基盤。


遷移(Transition)

定義:ある状態から別の状態へ移るルール。
IDLE → WAIT(start=1)
実務での意味:条件分岐の明確化。仕様の曖昧さを排除。


Moore / Mealy モデル

モデル定義出力の決まり方特徴
Moore出力は状態のみで決まるoutput = f(state)安定しやすい、遅延が一定
Mealy出力は状態+入力で決まるoutput = f(state, input)状態数が減る、応答が速い

実務では Moore が主流(検証しやすく、グリッチが少ない)ですが、応答速度が重要な場面では Mealy も使われます。


実務での具体的な利用シーン

プロトコル制御(AXI、I2C、UART など)

  • ハンドシェイク(valid/ready)
  • 読み書きシーケンス
  • エラー処理

データパス制御

  • FIFO 読み出し/書き込み制御
  • パイプラインステージの進行管理

初期化シーケンス

  • リセット後の構成処理
  • 外部デバイスのセットアップ

電源管理・クロック制御

  • Power gating の遷移
  • DVFS のステート管理

エラーハンドリング

  • timeout → recovery
  • retry → abort

FSMは「制御の見える化」を行うため、設計レビューや検証(UVM)でも中心的な役割を果たします。


誤解しやすい点・注意点

状態数が多いほど良いわけではない

状態が増えると可読性が低下し、検証コストも増加。
→ 状態は「振る舞いの違い」で最小限に整理する。

条件分岐を状態に押し込みすぎない

複雑な if 文を状態に変換しすぎると逆に読みにくくなる。
→ 「状態」と「条件」は役割を分ける。

Mealy 出力はグリッチに注意

入力の変化が即座に出力に反映されるため、非同期的な揺らぎが発生しやすい。

状態遷移の抜け漏れ

未定義遷移は LINT や CDC/RDC で問題を引き起こす。
→ default 遷移や safe state を明確に。

リセット後の状態を曖昧にしない

初期状態は必ず 1 つに定義する。


典型的な Moore 型 FSM の例

stateDiagram-v2 %% Moore型FSMの基本構造 [*] --> IDLE IDLE --> WAIT : start WAIT --> EXEC : ack EXEC --> IDLE : done EXEC --> ERROR : timeout ERROR --> IDLE : clear

関連する専門用語の整理

用語定義実務での意味
状態(State)システムの内部的な振る舞いを表す情報IDLE, RUN制御フローの基盤
遷移(Transition)状態が変化する条件RUN→WAIT条件分岐の明確化
Moore出力が状態のみで決まるモデルbusy=1 in RUN安定した制御
Mealy出力が状態+入力で決まるモデルvalid = (RUN & req)応答速度向上
状態符号化状態をビット列に割り当てる方法binary, one-hot面積/速度の最適化
Safe state異常時に戻る安全な状態ERRORフェイルセーフ設計

まとめ

  • FSMは制御ロジックの中心であり、状態と遷移で振る舞いを定義する。
  • Moore / Mealy の違いを理解し、用途に応じて使い分けることが重要。
  • 状態数は最小限に整理し、未定義遷移やリセット状態の曖昧さを避ける。
  • プロトコル制御、初期化、エラーハンドリングなど、実務での利用範囲は広い。
  • 状態図を用いることで、設計レビューや検証が大幅に容易になる。

コメント

タイトルとURLをコピーしました