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

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2022-03-29
Version
2021.1 Japanese

ソフトウェア エミュレーション (sw_emu) の主な目的は、ホスト プログラムとカーネルが正しく動作することを確認することです。ソフトウェア エミュレーションは、タイミング遅延やレイテンシのモデリングをせずに、純粋関数の実行を提供します。アクセラレータのパフォーマンスを示すものではありません。

カーネル コードは常にコンパイルされ、ネイティブに実行されます。アプリケーションコードは、次のいずれかになります。

  • x86 プロセッサでネイティブにコンパイルおよび実行されます (データセンタープラットフォーム)
  • Arm® プロセッサとのクロスコンパイラで、エミュレーターで実行されます (エンベデッド プラットフォーム)

つまり、ソフトウェア エミュレーションは通常アルゴリズムの調整や機能的な問題のデバッグに使用し、開発者がコードの反復作業をすばやく実行してコードを改善できるようにします。高速コンパイルおよび実行反復を使用したソフトウェア プログラミング モデルが保持されます。

ホスト プログラムとカーネル コードを一緒に実行するため、v++ コンパイラでは、カーネル コードに最小限の変更を加えて FPGA バイナリを作成します。ソフトウェア エミュレーションは、C ベースのカーネル コードを取得し、GCC でコンパイルします。各カーネルを別々の C スレッドとして実行します。1 つのカーネルに複数の計算ユニットがある場合、各 CU は別々のスレッドとして実行されます。このため、ハードウェアの並列実行モデルを模倣します。ただし、各カーネル内では、実行は順番にモデル化されますが、ハードウェア上で実行する場合は、カーネル内に並列処理が存在する可能性があります。ソフトウェア エミュレーション ドライバーは、XRT API をインプリメントし、XRT を実行するユーザー アプリケーションとハードウェア コンポーネントをモデル化するデバイスプロセス間のブリッジとして機能します。

ヒント: RTL カーネルでは、C モデルが関連付けられている場合にソフトウェア エミュレーションがサポートされます。RTL カーネルの開発フロー には、ソフトウェア エミュレーション フローをサポートするため、RTL カーネルに C モデル ファイルを関連付けるオプションが示されています。

次に、ソフトウェア エミュレーションの制限について説明します。

  • グローバル メモリの制限は 16 GB で、シミュレーション目的のため、超過しないようにする必要があります。
  • ソフトウェア エミュレーションは AI エンジン カーネルではサポートされません。
  • ソフトウェア エミュレーションでは、サイド チャネルなしの AXI4-Stream インターフェイス ( 『Vitis 高位合成ユーザー ガイド』 (UG1399) を参照) はサポートされません。
Vitis コンパイラ コマンド で説明されるように、ソフトウェア エミュレーション ターゲットは v++ コマンドで -t オプションを使用して指定します。
v++ -t sw_emu ...

GDB デバッガーでは、ホスト アプリケーションとカーネル コードの両方に使用できるほか、ブレーク ポイントを設定したり、printf() を使用して情報やチェックポイントを表示したりできます。ソフトウェア エミュレーション中にホスト アプリケーションまたはカーネルをデバッグする方法は、ソフトウェア エミュレーションでのデバッグ を参照してください。