バイナリ、グレー、およびワンホットエンコーディングの比較
この記事では、FPGAにステートマシンを実装するためにバイナリ、グレー、およびワンホットエンコーディングを使用した結果の実装の比較を示します。これらのエンコーディングは、多くの場合、合成および実装ツールによって評価および適用されるため、ソフトウェアがこれらの決定を行う理由を知ることが重要です。
有限状態マシン(FSM)は、ほぼすべてのデジタルシステムの非常に一般的な部分です。そのため、合成ツールはコードを検査してFSMを検出し、状態のエンコーディングを変更する可能性のある最適化を実行することがよくあります。ソースコードで状態を実装する値を慎重に選択して指定したかどうかは関係ありません。合成ツールは、それらの値を、元のエンコーディングとはビット長が異なる可能性がある他の値に置き換える場合があります。
Verilogでのステートマシンの実装についてブラッシュアップしたい場合は、Verilogでの有限ステートマシンの作成というタイトルの私の記事を読む必要があります。
状態のエンコーディング:グレーvs.バイナリvs.ワンホット
FSM状態で最も一般的な3つのエンコーディングは、バイナリ、グレー、およびワンホットです。
バイナリエンコーディング
バイナリエンコーディングは、状態に値を順番に割り当てるときに直感的に使用できる簡単な方法です。このように、状態をエンコードするために可能な限り少ないビットを使用しています。
ワンホットエンコーディングの例。スティーブアラーによる画像
グレーエンコーディング
グレイコードは、ある値と次の値の間で1ビットだけが変化するシーケンスで構成されます。最小ビット数を使用することに加えて、このエンコーディングは、状態のシーケンスが最適に守られている場合、動的な電力消費を最小限に抑えます。
グレイコードホイール。マリークリスチアーノからの画像
ワンホットエンコーディング
最後に、ワンホットエンコーディングは、各状態を表す1ビットを使用することで構成されます。そのため、任意の時点で、状態は現在の状態を表すビットでは1、他のすべてのビットでは0としてエンコードされます。使用されるビット数と無効な状態の数が多すぎるため、これは最初はあまり効率的ではないように思われるかもしれません。ただし、ワンホットエンコーディングは、状態をデコードする必要がないため、フリップフロップのスティミュラスロジックを単純化するのに非常に優れています。ビットは 状態。
ワンホットエンコーディングの例。スティーブアラーによる画像
状態エンコーディングの詳細については、SteveArarによる記事「有限ステートマシンの状態をVHDLでエンコードする」を参照してください。
どのエンコーディングが最適ですか?
これは難しい質問です。主に、各エンコーディングには長所と短所があるため、多数の要因に依存する最適化問題になります。
- 非常に単純なシステムでエンコーディング間で非常に類似した結果が得られる場合は、元のエンコーディングが最適です。
- FSMが1つのパス(カウンターなど)で状態を循環する場合は、グレイコードが非常に適しています。
- FSMに任意の状態遷移のセットがある場合、または高周波数で実行されることが予想される場合は、ワンホットエンコーディングが最適です。
さて、これらの主張はすべて知識に基づいた推測であり、最適な状態の割り当てを見つけることは複雑な問題です。このため、私の公式のアドバイスは、コンパイラにあなたに代わって決定させることです。そうは言っても、3つの異なる開発ツールと3つの異なるステートマシンでこれら3つのエンコーディングの結果を比較することにしました。
次の記事では、私の実験の結果について説明します。
埋め込み