Vitis™ アプリケーション アクセラレーション開発フロー チュートリアル

RTL カーネル入門

バージョン: Vitis 2021.2

チュートリアルの概要

Vitis アプリケーション アクセラレーション開発フローでは、カーネル プロパティで説明されているように、RTL カーネルは、実行制御用の ap_ctrl_chain または ap_ctrl_hs 制御プロトコルの XRT 要件に準拠する XRT 管理カーネルにしたり、この要件には準拠しないが RTL デザインで指定されたユーザー定義の制御スキームをインプリメントするユーザー管理カーネルにしたりできます。既存の RTL デザインの既存の実行メカニズムを使用しても、XRT 制御スキームをサポートするように RTL を設計してもかまいません。

このチュートリアルでは、ユーザー管理の制御スキームを使用する既存の RTL デザインを RTL カーネルにパッケージするプロセスと、そのカーネルをアクセラレーション アプリケーションに統合するためのホスト アプリケーション要件を確認します。

このチュートリアルには、B[i] = A[i]+B[i] 演算を実行する単純なベクター累算の例を含む RTL デザインが含まれています。これは、Vitis フローで使用するためにザイリンクスのコンパイル済みオブジェクト ファイル (.xo) にビルドします。また、XRT ネイティブ API を使用するホスト アプリケーションも含まれています。これは、カーネルと通信します。ホスト アプリケーションは次を実行します。

  1. デバイス実行ファイル (.xclbin) をアクセラレータ プラットフォームのザイリンクス デバイスにロードする

  2. カーネルを識別し、ユーザー設計の制御構造をおインプリメントする

  3. グローバル メモリとザイリンクス デバイス間のデータ転送用の読み出し/書き込みバッファーを作成する

  4. レジスタに書き込むことによってアクセラレータ ターゲットで RTL カーネルを開始し、レジスタを読み出すことによってカーネルが完了を示すのを待機する

  5. データを読み出し、結果を確認する

チュートリアルではこれらのリファレンス ファイルを使用して、プロジェクトをビルドして実行するプロセスを説明します。

開始前の確認事項

このチュートリアルでは、次を使用します。

  • BASH Linux シェル コマンド

  • 2021.2 Vitis コア開発キット リリースおよび xilinx_u200_gen3x16_xdma_1_202110_1 プラットフォーム。

  • 必要であれば、ほかのバージョンおよびプラットフォームを使用するようにチュートリアルを変更することもできます。

重要:

  • 例を実行する前に、インストールの手順に従って Vitis コア開発キットをインストールしておく必要があります。

  • ザイリンクス Alveo™ データセンター アクセラレータ カードでアプリケーションを実行する場合は、Alveo ポートフォリオ ページの手順に従って、カードとソフトウェア ドライバーを正しくインストールしてください。

チュートリアル リファレンス ファイルの入手

  1. リファレンス ファイルを入手するには、ターミナルに git clone https://github.com/Xilinx/Vitis-Tutorials と入力します。

  2. Vitis-Tutorials/Hardware_Acceleration/Feature_Tutorials/01-rtl_kernel_workflow/reference-files ディレクトリに移動します。

RTL カーネルとして RTL デザインを使用するための要件

Vitis IDE 内で RTL カーネルを使用するには、『Vitis 統合ソフトウェア プラットフォームの資料』 (UG1393) のアプリケーション アクセラレーション開発フローの RTL カーネルに記述されている Vitis コア開発キット実行モデルおよびハードウェア インターフェイス要件を満たす必要があります。

RTL カーネルは、C/C++ ソフトウェア関数と同じソフトウェア インターフェイスおよび実行モデルを使用できます。ホスト アプリケーションでは、RTL カーネルは void 戻り値、スカラー引数、およびポインター引数を持つ関数として認識されます。

  • 呼び出されたときに開始。

  • データを処理して必要な結果を生成。

  • 処理が終了したら、通知を送信。

たとえば、このチュートリアルにおける RTL カーネルの関数シグネチャは次のとおりです。

void vadd_A_B(int *a, int *b, int scalar)

Vector-Accumulate RTL IP

B[i]=A[i]+B[i] を実行する Vector-Accumulate RTL IP は、上記の要件すべてを満たしており、次のような特性を持っています。

  • プログラマブル レジスタ (制御レジスタ、スカラー引数、およびポインターのベース アドレス) へのアクセスに使用する 1 つの AXI4-Lite スレーブ インターフェイス (s_axilite)。

    • オフセット 0x00 - 制御レジスタ: カーネル ステータスを制御および表示します。

      • ビット 0: start 信号: カーネルがデータ処理を開始できるようになるとホスト アプリケーションによりアサートされます。done 信号がアサートされたときにクリアされる必要があります。

      • ビット 1: done 信号: カーネルが演算を完了するとアサートされます。読み出しでクリアされます。

      • ビット 2: idle 信号: データが処理されていないときにアサートされます。done 信号がアサートされると同時に Low から High に遷移する必要があります。

    • オフセット 0x10 - スカラー size 引数のレジスタ。

    • オフセット 0x18 - ポインター引数 A のベース アドレスを指定するレジスタ。

    • オフセット 0x24 - ポインター引数 B のベース アドレスを指定するレジスタ。

  • グローバル メモリとの通信に使用する、ポインター引数 A および B に対する 2 つの AXI4 メモリ マップド インターフェイス。

    • AXI4 マスター インターフェイスにはすべて 64 ビット アドレスが必要です。

    • カーネル引数を指定するためのグローバル メモリ空間の分割は、RTL 開発者が実行します。各パーティションのベース アドレス (メモリ オフセット) は、前述のように、s_axilite インターフェイスを介してプログラム可能な制御レジスタにより設定されます。

ヒント: 変更前の RTL デザインが別の実行モデルまたはハードウェア インターフェイスを使用する場合、ホスト アプリケーションをカスタマイズし、必要に応じてカーネルをアドレス指定するか、ロジックをカーネルに追加して、デザインが正しく動作するようにする必要があります。

次の手順

このチュートリアルでは、RTL IP を Vitis カーネル (.xo) としてパッケージし、Vitis コア開発キットで使用する方法を説明します。また、このチュートリアルでは、IP/XO パッケージ フローを使用して、既存の RTL モジュールを Vivado IP としてパッケージし、その IP を Vitis カーネル (.xo) としてパッケージします。



メイン ページに戻る

Copyright© 2021 Xilinx