この記事で学べること
- 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 の例
関連する専門用語の整理
| 用語 | 定義 | 例 | 実務での意味 |
|---|---|---|---|
| 状態(State) | システムの内部的な振る舞いを表す情報 | IDLE, RUN | 制御フローの基盤 |
| 遷移(Transition) | 状態が変化する条件 | RUN→WAIT | 条件分岐の明確化 |
| Moore | 出力が状態のみで決まるモデル | busy=1 in RUN | 安定した制御 |
| Mealy | 出力が状態+入力で決まるモデル | valid = (RUN & req) | 応答速度向上 |
| 状態符号化 | 状態をビット列に割り当てる方法 | binary, one-hot | 面積/速度の最適化 |
| Safe state | 異常時に戻る安全な状態 | ERROR | フェイルセーフ設計 |
まとめ
- FSMは制御ロジックの中心であり、状態と遷移で振る舞いを定義する。
- Moore / Mealy の違いを理解し、用途に応じて使い分けることが重要。
- 状態数は最小限に整理し、未定義遷移やリセット状態の曖昧さを避ける。
- プロトコル制御、初期化、エラーハンドリングなど、実務での利用範囲は広い。
- 状態図を用いることで、設計レビューや検証が大幅に容易になる。

コメント