VitisのサンプルにあったVector Addのようなプロジェクトを自分で作成する例です。Vector Addは、処理の一部をFPGAで実装しています。Vitisでそのようなプロジェクトを作成してみます。
プロジェクトの作成
vitisを起動します。
workspaceを適当な位置に作成します。Lauchをクリックします。
Create Application Projectをクリックします。
Nextをクリックします。
Addをクリックします。
Platformは、以下の記事作成したPlatformを指定します。
ディレクトリを指定してOKをクリックします。
選択したkv260_customが追加されているので、選択して、Nextをクリックします。
Application Project nameを入力して、Nextをクリックします。
Sysroot PathをBrowでクリックして、以下の記事で作成したPlatformのsysrootを指定します。
Sysrootのディレクトリを指定して、Openをクリックします。
Nextをクリックします。
今回は、Empty Applicationを選択して、Finishをクリックします。
プロジェクトが生成できました。
Kernel関数の追加
FPGA上に実装するKernel関数を追加します。add_kernes->srcで、右クリックをして、New Fileを選択します。
File名は、kernel_add.cppとして、Finishをクリックします。
kernel_add.cppに、FPGAで処理するプログラムを記載します。
今回は、入力した変数を加算する処理を記載します。
#include <stdint.h>
#include "kernel_add.h"
extern "C" {
void krnl_vadd(uint32_t* in1, uint32_t* in2, uint32_t* out, int size) {
int i;
for (i=0;i<size;i++) {
out[i] = in1[i] + in2[i];
}
}
}
加算処理をkernel_add.cppに記載します。
次に、Headerファイルも用意して、同じようにファイルを追加します。Headerファイルの内容は、以下のような感じです。
#ifndef __KERNEL_ADD_H__
#define __KERNEL_ADD_H__
extern "C" {
void krnl_vadd(uint32_t* in1, uint32_t* in2, uint32_t* out, int size);
}
#endif
次に、add_kernels.prjをクリックします。Actve build configurationをHardwareにして、Hardware Functionの右側にある矢印をクリックします。
問題なければ、追加した関数krnl_vaddが選択されていると思います。OKをクリックします。
Host関数の追加
add->srcで、右クリックして、Newを選択して、Fileを追加します。vadd.cppとvadd.hを追加します。
ビルド
Kernel関数をビルドします。add_system_hw_link.prjをクリックします。そして、トンカチマークをクリックしてビルドします。15分ぐらいかかりました。
次に、Host関数をビルドします。add.prjをクリックして、トンカチマークをクリックしてビルドします。
ビルドが完了しました。
データの転送
次に、必要なデータをkv260に転送します。
転送するデータは、以下になる
shell.json
add_system_hw_link/Hardware/binary_container_1.xclbin
add/Hardware/add
pl.dtbo
shell.jsonとpl.dtboは、platformを作成した以下の記事に記載がある
binary_container_1.xclbinは、binary_container_1.binにリレームして転送する
プログラムの実行
kv260上で次のように実行する
chmod +x add
mkdir /lib/firmware/xilinx/add/
sudo cp pl.dtbo binary_container_1.bin shell.json /lib/firmware/xilinx/add/
sudo xmutil listapps
sudo xmutil unloadapp
sudo xmutil loadapp add
./add binary_container_1.bin
コード
使用したVitisのプロジェクトだ