エミュレーション フローを使用したアプリケーションのシミュレーション - 2023.2 日本語

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

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 日本語

FPGA をターゲットとするアプリケーションおよびハードウェア カーネルの開発には、段階的な開発アプローチが必要です。FPGA、AMD Versal™ アダプティブ SoC、および AMD Zynq™ UltraScale+™ MPSoC はプログラマブル デバイスであるため、ハードウェアのデバイス バイナリの構築には時間がかかります。AMD Vitis™ ツールには、すべてのハードウェア コンパイル フローを経ずに迅速な反復を可能にするため、デザインの C ベースのシミュレーションを実行するソフトウェア エミュレーション ターゲットと、ソフトウェア アプリケーションと PL カーネルの C-RTL 協調シミュレーションを実行するハードウェア エミュレーション ターゲットが含まれています。エミュレーション ターゲットのコンパイルは、実際のハードウェアのコンパイルよりもかなり高速です。また、エミュレーション ターゲットはアプリケーションまたはアクセラレータを完全に可視化するため、デバッグの実行がより簡単になります。デザインがエミュレーションに合格したら、開発後半にハードウェア プラットフォーム上でアプリケーションをコンパイルおよび実行できます。

Vitis ツールには、次の 2 つのエミュレーション ターゲットがあります。

ソフトウェア エミュレーション (sw_emu)
ソフトウェア エミュレーション ビルドは迅速にコンパイルおよびリンクされ、ホストプログラムは x86 プロセッサまたは QEMU エミュレーション環境のいずれかでネイティブに実行されます。PL カーネルはネイティブにコンパイルされ、ホスト マシン上で実行されます。このビルド ターゲットを使用すると、ホスト コードとカーネル ロジックの両方をすばやく反復できます。
ハードウェア エミュレーション (hw_emu)
ホストプログラムは sw_emu を使用して x86 または QEMU でネイティブに実行されますが、カーネル コードは RTL ビヘイビアー モデルにコンパイルされ、AMD Vivado™ シミュレータまたはその他のサポートされているサード パーティ シミュレータで実行されます。この場合、ビルドおよび実行ループにかかる時間は長くなりますが、カーネル ロジックがサイクル精度で表示されます。

どちらのエミュレーション ターゲットのコンパイルおよびリンクも、Vitis コマンド ラインおよび IDE フローにスムーズに統合されています。ソース コードを変更せずに、いずれかのエミュレーション ターゲット用にホストとカーネルのソース コードをコンパイルできます。ホスト コードの場合、同じホストの実行ファイルまたは PS アプリケーションの ELF バイナリをエミュレーションで使用できるため、エミュレーション用に別にコンパイルする必要はありません。エミュレーション ターゲットは、XRT API、バッファー転送、プラットフォーム メモリ SP タグ、カーネル間接続など、ほとんどの機能をサポートします。次のセクションでは、ソフトウェアおよびハードウェア エミュレーション フローの機能と要件について詳しく説明します。

アプリケーションでのプロファイリングのイネーブル で説明するように、エミュレーションの実行中は、デザイン データを取り込むトレース オプションを多数指定できます。実行中に生成されるレポートはすべて xrt.run_summary ファイルに収集されます。このレポートのコレクションは、Vitis アナライザーで run_summary を開くと表示でき、ハードウェア デザインを描くサマリ レポート、システムおよびプラットフォーム図、システム パフォーマンスを改善する提案事項を示す Run Guidance レポート、実行時に xrt.ini ファイルで有効になっている場合は、プロファイル サマリおよびタイムライン トレースを含みます。詳細は、[Analysis] ビュー (Vitis アナライザー) の使用を参照してください。

SW エミュレーションは抽象的なモデルで、Zynq OpenCL (ZOCL)、割り込みコントローラー、デバイス ツリー バイナリ (DTB) などの PetaLinux ドライバーは一切使用しません。これにより、SW エミュレーションでは、QEMU マシン上で sd_card.img を作成し、PetaLinux を起動するオーバーヘッドを回避できます。QEMU は遅く、PetaLinux を必要とするため、SW_EMU の方が速くなります。このため、この方法を使用すると、sysroot、rootfs、sd_Card Image などのフィールドを指定する必要がありません。

注記: ユーザーが環境セットアップ スクリプト ''xilinx-versal-common-v2022.2/environment-setup-cortexa72-cortexa53-xilinx-linux'' をソースとして読み込むと、エンベデッド XRT を実行するために LD_LIBRARY_PATH (設定済み) を解除する必要があることを示す警告またはエラーが表示されることがあります。この環境設定スクリプトは、必要な追加環境変数と共に、arm gcc ツール チェーン パスを設定します。

x86 XRT をインストールすると、自動的に LD_LIBARY_PATH 変数が XRT ライブラリを指定するように設定されます。エンベデッド XRT と x86 XRT を同じセットアップ (ターミナル) で動作させるには、エンベデッド システム用に arm-gcc パスと SYSROOT パスを指定する必要があります。