どのエンコーディングタイプを使用する必要がありますか? FPGAアプリケーションの例
特定のFPGAに適したエンコーディングの種類を決定するプロセスを示す3つの実験に従います。
FPGAにはどのエンコーディングタイプを使用する必要がありますか?前回の記事で説明したように、通常、コンパイラーがこれを決定します。コンパイラーが決定する内容に従うことをお勧めします。
ただし、エンコーディングのタイプの違いと、コンパイラが特定の結論に達する理由を理解することが重要です。このことを念頭に置いて、この記事では、FPGAアプリケーションの例を示し、どのエンコーディングタイプが最適かを段階的に説明する実験について説明します。
このシリーズのこれまでのところ、Verilogを使用して有限状態マシン(FSM)を作成する方法、初期状態とメモリがFPGAエンコーディングに与える影響、およびバイナリとワンホットとグレーのエンコーディングを比較する概要について説明してきました。 。
テスト対象システム
この実験では、ステートマシンを何度もインスタンス化して、バイナリ、グレー、およびワンホットエンコーディングを使用した場合のハードウェアの違いを拡大したいと思いました。
私が最終的に選んだシステムは、ConwayのGame of Lifeです。これは、細胞の長方形の2D配列である、環境内の生きている細胞の動作をシミュレートするセルオートマトンです。コンウェイのライフゲームは、次のサイクルで何が起こるかを決定するために各細胞が従う単純な一連の規則に従って、これらの細胞が生まれ、繁殖し、死ぬことをシミュレートしたものです。それぞれの生きている細胞は生き残るか死ぬかもしれません、そしてそれぞれの死んだ細胞は死んだままでいるか生きているかもしれません。各サイクルのルールは次のとおりです。
- 2つまたは3つの生きている隣人がいる生きている細胞は生き残ります。
- 3人の生きている隣人がいる死んだ細胞が生き返ります。
- 他のすべての細胞は死ぬか、死んだままです。
これらのルールは、コンピュータサイエンスで広く研究されている多くの興味深い行動やパターンを生み出します。
これは、単一のゴスパーのグライダーガンとして知られているものを実行しているときにコンウェイのライフゲームがどのように見えるかです。
ビルゴスパーのグライダーガンとして知られる、コンウェイのライフゲームのバリエーション。 LucasVieiraによって作成されたGIF [CC BY-SA 3.0]
Verilogコード
テストシステムに戻ると、各セルは8つの状態を持つステートマシンとして設計されました。確かに、コンウェイのライフゲームのセルのロジックは1サイクルで解決できますが、異なるエンコーディングを使用する場合に顕著な違いがあるように、8ステートマシンを作成することにしました。状態は、セルの生きている隣人を数えるために使用されます。
次のVerilogコードは、状態の元のバイナリエンコーディングを含む、これらのマシンのセルモジュール構造を示しています。
`define STATE_0 3'b000
`define STATE_1 3'b001
`define STATE_2 3'b010
`define STATE_3 3'b011
`define STATE_4 3'b100
`define STATE_5 3'b101
`define STATE_6 3'b110
`define STATE_7 3'b111
module LifeCell(
input clk、
input nrst、
入力シード、
input [7:0] neighbors、
output reg alive);
reg [2:0] state;
常に@(posedge clk)
if(nrst ==0)
<コード>状態<=`STATE_0;
else
case(state)
`STATE_0:開始
<コード> // ...
<コード>状態<=`STATE_1;
<コード>終了コード>
`STATE_1:開始
<コード> // ...
<コード>状態<=`STATE_2;
<コード>終了コード>
<コード> // ...
`STATE_7:開始
<コード> // ...
<コード>状態<=`STATE_1;
<コード>終了コード>
エンドケース
endmodule
コードを詳しく調べたい場合は、GitHubでプロジェクトを確認してください。
FPGAエンコーディングの実装
このシステムは、23x23セルの世界として、合計27のバリエーションで合成および実装されました。3つの異なるFSMが使用され、すべて上記の3つのエンコーディングが使用され、すべて3つの異なるターゲットFPGAで使用されました。
FSM#1:元のモデル
このマシンの初期状態は1回実行され、その後、残りの7つの状態を循環して実行されます。これはほぼ完全なシーケンスであるため、最初はグレイエンコーディングが有望であるように思われました。
FSM#2:シーケンス
このマシンは3ビットカウンターとして動作するため、Grayエンコーディングが競合他社を打ち負かすことも期待していました。
FSM#3:任意のもつれ
このマシンには、FSM#1と同じクリティカルパスがありますが、生きているネイバーの数が3を超えることがわかっている場合は、任意のパスを通過します。
この任意の状態遷移の動作については、ワンホットエンコーディングが最良の選択であると期待していました。
ターゲットアーキテクチャ
このシステムは、ベンダーの開発ツールを使用して、3つのターゲットFPGAに実装されました。
- Artix 7FPGA用のザイリンクスVivadoSuite
- Intel Quartus Prime、Cyclone VFPGA用
- LatticeXP2FPGA用のLatticeDiamond
結果の比較
2つ以上のシステムのパフォーマンスを比較することは困難です。これは主に、評決が使用するメトリックと、他のシステムよりも重要であると考える側面に依存するためです。この実験では、次のデータを収集して、各実装のスコアを作成しました。
- ロジックユニットの数。 これらは、ザイリンクスおよびラティスFPGAの場合はLUT(ルックアップテーブル)、IntelFPGAの場合はALMです。スコア:1ポイント。
- レジスタの数。 スコア:1ポイント。
- 推定最大頻度。 スコア:2ポイント。
- 推定オンチップパワー。 スコア:2ポイント。
すべての実装について、これらの4つの側面が3つのエンコーディング間で比較されたため、エンコーディング間で、最高、最悪、および中間の結果が得られました。最高の結果は正のスコア、最悪のスコアは負のスコア、中間の結果です。 0を取得します。
各モデルのすべてのスコアを合計すると、次の結果が得られました。
27の実装すべての結果テーブル。各行で、最良のエンコーディングは緑で示され、最悪のエンコーディングは赤で示され、同点がない場合は中央が黄色で示されます。
これは、ワンホットエンコーディングから離れることを示唆しているようです。勝つケースは2つだけで、そのうちの1つは同点です。さらに、当初はワンホットがFSMモデル#3の最高のエンコーディングであると期待していましたが、開発ツールが推奨していないため、最悪のエンコーディングであることが判明しました。とはいえ、主に周波数と電力のメトリックで、ワンホットが残りを上回る場合があります。
全体として、この特定のシステムにはグレーエンコーディングが最良の選択のようです。
この表から勝者を抽出すると、次のようになります。
評決
この比較は、バイナリおよびワンホットよりもグレイエンコーディングを優先しているように見えますが、結果は使用するメトリックに大きく依存し、これらのメトリックは私たちにとって重要なことを反映しています。たとえば、この比較では、使用量(デザイン内のロジックエレメントとレジスタの数)よりも周波数と電力の方が重要であると考えました。周波数よりも使用量を、電力よりも周波数を重視した場合、確かに異なるランキングが得られます。
この比較は、これらのエンコーディングを使用して得られたパフォーマンスに関する決定的な作業を意図したものではありません。代わりに、使用したアーキテクチャでの個人的な好みによって生成されたランキングが表示されます。
繰り返しになりますが、コードを確認したり、27の実装を確認したり、Conwayのライフゲームのシミュレーションを実際に確認したりする場合は、GitHubでプロジェクトを確認してください。
埋め込み