FPGAステートマシンのためのバイナリ、グレイ、ワンホットエンコーディング実践ガイド
FPGA上で有限状態マシン(FSM)を実装する際のバイナリ、グレイ、ワンホットエンコーディングを詳細比較。合成ツールがこれらをどう評価・変換するかを理解することは、最適なパフォーマンスと電力効率を達成するために不可欠です。
有限状態マシンはデジタル設計に遍在します。合成ツールはRTLを定期的に分析してFSMを検出し、タイミング、面積、電力目標を達成するためにステートエンコーディングを書き換えることがあります。手動でステートコードを割り当てても、ツールが最適化戦略に基づいて異なる値—時には異なるビット幅で—を置き換える可能性があります。
VerilogでのFSM構築の復習には、拙記事『Verilogでの有限状態マシンの作成』を参照してください。
エンコーディングオプション:バイナリ、グレイ、ワンホット
最も一般的な3つのFSMエンコーディングはバイナリ、グレイ、ワンホットです。それぞれ異なるトレードオフを提供します。
バイナリエンコーディング
バイナリエンコーディングは、すべての状態を表現するために最小限のビット数を割り当てます。最もスペース効率の良い選択ですが、状態遷移で複数ビットが変化する可能性があり、動的電力を増加させる恐れがあります。

バイナリエンコーディングの例。Steve Arar作
グレイエンコーディング
グレイコードは、連続する状態間で1ビットのみが変化することを保証します。FSMが予測可能なシーケンスをたどる場合、グレイエンコーディングはスイッチングアクティビティを削減し、動的電力を低減できます。

グレイコードホイール。Marie Christiano作
ワンホットエンコーディング
ワンホットエンコーディングは、各状態を専用のフリップフロップビットで表現。より多くのロジックリソースを消費し、多くの無効な組み合わせを導入しますが、ステートデコーディングが不要になり、組み合わせロジックを簡素化し、高クロック周波数でタイミングを改善することが多いです。

ワンホットエンコーディングの例。Steve Arar作
VHDLでのステートエンコーディングの更なる洞察については、Steve Ararの『VHDLでの有限状態マシンのステートエンコーディング』を参照してください。
適切なエンコーディングの選択
最適なエンコーディングの決定は文脈依存であり、面積、タイミング、電力のバランスを取る必要があります。一般的なガイドラインには以下が含まれます:
- 設計が小さくパフォーマンス差が無視できる場合、指定した元のエンコーディングを維持
- カウンタのように固定された順序でステートを巡回するFSMでは、グレイコードが有利なことが多い
- 任意の遷移を持つFSMや高周波数動作が必要な場合、ワンホットエンコーディングが最良のタイミングクロージャを提供する可能性
トレードオフは微妙なため、合成ツールにエンコーディング選択を任せることを推奨します。それでも、3つの主要開発ツールと3つの異なるステートマシンで比較実験を行い、各エンコーディングが実際にどう振る舞うかを解説しました。結果は次回の記事で議論します。
埋め込み