ヘテロジニアス エンベデッド システム デザインの要素が揃ったので、Vitis ツールを使ってシステムを構築する準備が整いました。v++ --link
コマンドは、v++ --package
コマンドと同様、システム構築の重要な役割を担っています。次の図は、この 2 つのコマンドにより、システムのさまざまな要素、およびそれらがどのように組み合わされるかを示しています。図の上部には、ヘテロジニアス システムの要素であるエクステンシブル プラットフォーム (.xpfm) またはハードウェア .xsa ファイル、エンベデッド ソフトウェア プログラム (.elf)、PL カーネル (.xo)、AI エンジン グラフ (libadf.a) が示されています。その下が、システムを構築するためのリンク コマンドとパッケージ コマンドです。
システム リンク
エンベデッド システム デザインのさまざまな要素が使用可能になったら、少なくとも一部の初期状態で、v++ --link
コマンドを使用してシステムを構築できます。Vitis コンパイラは、PL カーネルのカーネル .xo
ファイルと AI エンジン の libadf.a を、2 つの方法のいずれかでエクステンシブル プラットフォーム (.xpfm) またはハードウェア デザイン (.xsa) にリンクします。
-
Vitis 統合フローでは、
v++ --link
コマンドがシステムのエレメントをリンクし、デザインを合成し、配置配線されたハードウェアを構築し、AMD Kria™ SOM、Zynq MPSoC デバイスの場合はデバイス実行ファイル (.xclbin) を、Versal アダプティブ SoC デバイスの場合は固定プラットフォーム (.xsa) を作成します。Alveo データセンターのアクセラレータ カードや、vck190_base
などのエンベデッド システム プラットフォームなど、標準的なプラットフォームをベースにしたデザインの場合は、この統合フローが必要です。 -
Vitis を Vivado にエクスポートするフローでは、
v++ --link --export_archive
コマンドを使用してリンクされたシステム デザインを作成し、Vivado Design Suite にインポートして今後のデザインに使用できるように、それを Vitis MetaData Archive (.vma) ファイルにエクスポートします。Vitis を Vivado にエクスポートするフローは、このフローを利用するために特別に設計されたカスタム Versal プラットフォーム上のシステム デザインでのみサポートされます。
前述のどちらのフローでも、リンクされたシステム デザインの合成とインプリメンテーションに Vivado Design Suite を使用します。Vitis 統合フローでは、リンク プロセスの一部として、合成および配置配線が自動で開始されます。Vitis を Vivado にエクスポートするフローでは、リンクされたシステム デザインが .vma ファイルとしてエクスポートされます。このファイルを Vivado プロジェクトにインポートすると、設計を続行して、Vivado ツール内で直接タイミング クロージャを達成できます。
Vitis 統合フローは、システムのリンク で説明されるように、自動化されていますが、手動で介入することもできます。リンク、合成、インプリメンテーション プロセスは一連の主なステップップに分かれており、Vitis 統合フローでの Vivado の使用 で説明されるように、中断してカスタマイズできます。
Vivado へエクスポートするフローでは、Vitis を Vivado にエクスポートするフロー で説明されるように、経験豊富な RTL 設計者にとってより実践的なアプローチがサポートされます。これは、カスタム Versal プラットフォームを扱う開発者に推奨されるアプローチです。Vitis ツールを使用して AI エンジン グラフ アプリケーションを開発してリンクし、PL カーネルを接続し、Vivado ツールを使用してシステムの配置、配線、タイミング解消をより制御できます。
この 2 つのフローの後は、次に説明するパッケージのステップです。
システムのパッケージ
Vitis ツールでは、v++ --package
コマンドでシステム デザインの最後に最終ファイルをパッケージし、デバイスのブート システムを設定します。システムのパッケージ で説明するように、v++ --package
コマンドは、Versal プラットフォームのデザイン用にデバイス バイナリ (.xclbin) も生成します。
package コマンドは、完成したシステムのいくつかの側面を制御します。たとえば、AI エンジン デザインの場合、--package.defer_aie_run
コマンドは、libadf.a のグラフ アプリケーションをブート時に起動せず、ソフトウェア アプリケーションから明示的に呼び出されるまで待機させます。--package.boot_mode
は、システムが SD カードから起動していること、または QSPI/OSPI であることを示し、パッケージ プロセスで生成される出力は、それに応じて生成されます。すべてのオプションのリストは、--package オプション を参照してください。
--package
コマンドを使用すると、すべてのプラットフォームに必要なファイルが定義され、ソフトウェアまたはハードウェア エミュレーション用にエンベデッド システム デザインを起動して実行したり、ハードウェアでシステムを実行する SD カードを作成したりできるようになります。エンベデッド システム デザインの場合、このプロセスは エンベデッド プラットフォームのパッケージ で説明されています。
システムの起動と実行
アプリケーションを実行する際は、ソフトウェア エミュレーション、ハードウェア エミュレーションを実行するか、実際の物理的なプラットフォームで実行できます。エンベデッド プロセッサ プラットフォームでのアプリケーションの実行は、データセンター アクセラレータ カードでの実行とは異なります。詳細は、ハードウェア上でのシステムの実行 または エミュレーション フローを使用したアプリケーションのシミュレーション を参照してください。
- ビルド ターゲットがソフトウェアまたはハードウェア エミュレーションの場合、QEMU 環境がハードウェア デバイスをモデル化します。Vitis コンパイラは、デバイス バイナリ内にカーネルのシミュレーション モデルを生成し、アプリケーション実行をシステムの QEMU モデルで実行します。ビルド ターゲットでの作業 で説明されるように、エミュレーション ターゲットを使用すると、デザインをビルドおよび実行して比較的速いサイクルで反復実行し、アプリケーションをデバッグしてパフォーマンスを評価できます。
- ビルド ターゲットがハードウェア システムの場合、ターゲット プラットフォームは物理デバイスです。Vitis コンパイラは Vivado Design Suite を使用して合成およびインプリメンテーションを実行してからタイミングを解決し、.xclbin を生成します。アプリケーションを実行すると、ハードウェア上でシステムが実行されます。