ビルド ターゲット

Vitis ツールのビルド ターゲットは、コンパイルおよびリンクで作成される FPGA バイナリ (.xclbin) の特性と内容を定義します。ビルド ターゲットには、検証およびデバッグに使用する 2 つのエミュレーション ターゲットと、ザイリンクス デバイスに読み込む FPGA バイナリ (.xclbin) を生成するのに使用されるデフォルトのハードウェア ターゲットの 3 つのビルド ターゲットがあります。

エミュレーション ターゲットのコンパイルは、実際のハードウェア用のコンパイルよりもかなり高速です。エミュレーションはシミュレーション環境で実行され、デバッグのための情報が表示されます。アクセラレータ カードは必要ありません。

表 1. エミュレーション フローとハードウェア実行の比較
ソフトウェア エミュレーション ハードウェア エミュレーション ハードウェア実行
ホスト アプリケーションをカーネルの C/C++ または OpenCL モデルを使用して実行。 ホスト アプリケーションをカーネルのシミュレーション済み RTL モデルを使用して実行。 ホスト アプリケーションをカーネルの実際のハードウェア インプリメンテーションを使用して実行。
システムの機能が正しいことを確認。 ホストとカーネルの統合をテスト、パフォーマンス見積もりを取得。 システムが正しく必要なパフォーマンスで実行されることを確認。
ビルド時間が最短であり、デザイン イテレーションを高速に実行可能。 デバッグ機能が最良、コンパイル時間は中程度、カーネルの動作をより良く視覚化。 最終的な FPGA インプリメンテーション、ビルド時間は長いが、実際の正確なパフォーマンスを取得。

ソフトウェア エミュレーション

ソフトウェア エミュレーションの主な目的は、ホスト プログラムとカーネルが正しく動作することを確認することです。ソフトウェア エミュレーションでは、ホスト コードとカーネル コードの両方が x86 プロセッサで実行できるようにコンパイルされます。ホスト プログラムとカーネル コードを一緒に実行するため、v++ コンパイラでは、カーネル コードに最小限の変更を加えて FPGA バイナリを作成します。ソフトウェア エミュレーション フローはアルゴリズムの調整および機能的な問題のデバッグに使用し、コードを向上するために反復作業をすばやく実行できます。高速コンパイルおよび実行ループを使用した開発のプログラミング モデルが保持されます。

Vitis 統合ソフトウェア プラットフォームでは、CPU でのソフトウェア エミュレーションは、CPU/GPU プログラミングに典型的な反復開発プロセスと同じです。この開発スタイルでは、プログラマはアプリケーションを繰り返しコンパイルおよび実行しながら開発していきます。

ヒント: RTL カーネルでは、C モデルが関連付けられている場合にソフトウェア エミュレーションがサポートされます。ソフトウェア エミュレーション フローをサポートするため、RTL カーネル ウィザードのパッケージ段階に、RTL カーネルに C モデル ファイルを関連付けるオプションがあります。
Vitis コンパイラ コマンド で説明されているように、ソフトウェア エミュレーション ターゲットは v++ コマンドで -t オプションを使用して指定します。
v++ -t sw_emu ...

ハードウェア エミュレーション

ハードウェア エミュレーション フローでは、C、C++、または OpenCL カーネル コードから合成された FPGA バイナリの RTL 記述が機能的に正しいかどうかをチェックできます。

各カーネルはハードウェア モデル (RTL) にコンパイルされます。ハードウェア エミュレーション中は、カーネルが Vivado ロジック シミュレータで実行され、波形ビューアーでカーネル デザインを確認できます。また、ハードウェア エミュレーションでは、ハードウェア インプリメンテーションのパフォーマンスおよびリソースの見積もりも示されます。

コンパイルおよび実行時間ソフトウェア エミュレーションよりも長くなりますが、詳細でサイクル精度のカーネル アクティビティが表示されます。ザイリンクスでは、ハードウェア エミュレーションの実行時間を妥当なものに抑えるため、小さなデータ セットを使用することをお勧めします。

重要: ハードウェア エミュレーションで使用される DDR メモリ モデルおよびメモリ インターフェイス ジェネレーター (MIG) モデルは、高位シミュレーション モデルです。これらのモデルでは、シミュレーションのパフォーマンスは良いですが、レイテンシには近似値が使用されるので、カーネルのようにサイクル精度ではありません。そのため、プロファイル サマリ レポートに示されるパフォーマンス値は概算でしかないので、異なるカーネル インプリメンテーション間のパフォーマンスを相対的に比較するためのガイダンスとしてのみ使用してください。
Vitis コンパイラ コマンド で説明されているように、ハードウェア エミュレーション ターゲットは v++ コマンドで -t オプションを使用して指定します。
v++ -t hw_emu ...

システム ハードウェア ターゲット

ビルド ターゲットがシステム ハードウェアの場合、v++ によりデザインに対して合成およびインプリメンテーションが実行され、ザイリンクス デバイス用の FPGA バイナリが生成されます。そのため、このビルド ターゲットは、Vitis IDE でソフトウェアまたはハードウェア エミュレーション ターゲットを生成するよりも時間がかかりますが、最終的な FPGA バイナリはアクセラレータ カードのハードウェアまたはエンベデッド プロセッサ プラットフォームに読み込み、アプリケーションを実際の動作環境で実行できます。

Vitis コンパイラ コマンド で説明されているように、システム ハードウェア ターゲットは v++ コマンドで -t オプションを使用して指定します。
v++ -t hw ...