『Vitis 統合ソフトウェア プラットフォームの資料』 (UG1393) のアプリケーション アクセラレーション開発フローの RTL カーネルのパッケージで説明されているように、Vitis デザイン フローの RTL カーネルは、実行モデルをインプリメントし、ハードウェア インターフェイス要件を満たす必要があります。このチュートリアルで使用される Vector-Accumulate RTL IP は、B[i]=A[i]+B[i]
を実行し、次のような特性を持っています。
プログラマブル レジスタ (制御レジスタ、スカラー引数、およびポインターのベース アドレス) へのアクセスに使用する 1 つの AXI4-Lite スレーブ インターフェイス (
s_axilite
)。オフセット
0x10
: 制御レジスタ: カーネル ステータスを制御および表示します。ビット
0
: start 信号: カーネルがデータ処理を開始できるようになるとホスト アプリケーションによりアサートされます。done 信号がアサートされたときにクリアされる必要があります。ビット
1
: done 信号: カーネルが演算を完了するとアサートされます。読み出しでクリアされます。ビット
2
: idle 信号: データが処理されていないときにアサートされます。done 信号がアサートされると同時に Low から High に遷移する必要があります。
オフセット
0x14
: スカラーsize
引数用のレジスタ。オフセット
0x1c
: ポインター引数A
のベース アドレスを指定するレジスタ。オフセット
0x28
: ポインター引数B
のベース アドレスを指定するレジスタ。
グローバル メモリとの通信に使用する、ポインター引数
A
およびB
に対する 2 つの AXI4 メモリ マップド インターフェイス。AXI4 マスター インターフェイスにはすべて 64 ビット アドレスが必要です。
カーネル引数を指定するためのグローバル メモリ空間の分割は、RTL 開発者が実行します。各パーティションのベース アドレス (メモリ オフセット) は、前述のように、
s_axilite
インターフェイスを介してプログラム可能な制御レジスタにより設定されます。
TIP: 変更前の RTL デザインが別の実行モデルまたはハードウェア インターフェイスを使用する場合、ホスト アプリケーションをカスタマイズし、必要に応じてカーネルをアドレス指定するか、ロジックをカーネルに追加して、デザインが正しく動作するようにする必要があります。
カーネルはホスト アプリケーションから関数シグネチャを呼び出す必要があります。このチュートリアルの RTL カーネルの関数シグネチャは次のようになります。
void vadd_A_B(int *a, int *b, int scalar)