2022/12/11

vitisのプロジェクトをゼロから作ってみる カーネル関数を含む

XILINX   

Hong daewoongによるPixabayからの画像

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のプロジェクトだ

https://github.com/y38y38/hls_kernel_add_myself

Prev:«

Next: »