1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. Vitis™ AI 3.5環境のKV260向けDPU実装手順のご紹介

TECHブログ

Vitis™ AI 3.5環境のKV260向けDPU実装手順のご紹介

Vitis™ AI 3.5環境のKV260向けDPU実装手順のご紹介

皆さま、こんにちは。
Vitis™ AI 3.5環境でKV260向けにDPUを実装したいけど、チュートリアルがない・・・
そんな経験をお持ちではないでしょうか。

本ブログでは、Vitis™ AI 3.5環境のKV260向けに、DPUを実装する方法の一例を紹介します。

目次

実行環境

以下の環境で設計を行っています。

表1 実行環境

左右にスクロールしてご覧ください
Hardware Host PC
CPU :Intel® Xeon® プロセッサー W-2223 OS :Ubuntu 22.04 LTS
評価ボード Kria™ KV260 Vision AI Starter Kit (Rev.B04)
DPU B1024 2core / 200MHz
AMD Tools Vivado™ 2023.1
Vitis™ 2023.1
PetaLinux 2023.1
AMD Libraries Vitis™ AI 3.5
XRT 2023.1

設計フロー

今回は、図1の設計フローで進めていきます。

図1. 設計フロー

① Vivado™ FPGA設計 ハードウェア設計やユーザーロジックの実装、DPU実装準備を行います。
② PetaLinux Linux設計 Vitis™ AIやXRT、その他パッケージを含んだLinuxを作成します。
③ Vitis™ Platform生成 DPUの実装、デバイスツリーの生成等を行います。
④ 実機確認 実装したDPUやユーザーロジックをロードします。

Vivado™によるハードウェアデザイン設計

スクリーンショットが多く用意されており、進めやすいため、ぜひチュートリアル通りに進めていただければと思います。

チュートリアルを進めると、以下のようなブロックデザインが作成できます。

図2. Vivado™ブロックデザイン

XSAファイルの生成まで進んでいただければ問題ありません。

Vivado™によるハードウェアデザイン設計のポイントとして、DPU実装用の設定が必要になります。

Vivado™プロジェクト作成時等にProject is an extensible Vitis™ platformにチェックを入れる

図3. Vitis™ Platformチェックボックス

DPU実装用のIP(クロックやリセット等)を用意

Platform SetupでIPに対する設定を行う

図4. Platform Setup画面

また、ユーザーデザインの実装もこのタイミングで行います。

PetaLinuxによるLinux OSの作成

Kriaの評価ボードをお持ちの方で「Vitis™でDPU実装を行うとSDイメージが作成されるはずなのに、何故わざわざPetaLinuxでLinux OSを作成する必要があるのか?」と、感じる方がいらっしゃるかもしれません。

他の評価ボード(ex. ZCU102)と異なり、DPU実装後にsd_card.imgというSDイメージファイルは作成されません。
そのため、Linux OSをユーザーで作成する必要があります。

以下、実行手順です。

プロジェクト作成

はじめに、PetaLinuxプロジェクトを作成していきます。プロジェクトはKV260用のBSPから作成します。

KV260 2023.1のBSPをダウンロード

PetaLinuxの環境変数を通す

左右にスクロールしてご覧ください
$ source <PetaLinux_Install_dir>/2023.1/settings.sh

以下のコマンドを実行し、PetaLinuxプロジェクトを作成

左右にスクロールしてご覧ください
$ petalinux-create -t project -s /<BSP_path>/xilinx-kv260-starterkit-v2023.1-05080224.bsp

各種設定

PetaLinuxプロジェクトに、必要なパッケージを追加していきます。

Vitis™ AI 3.5のリポジトリを任意の場所にクローン

左右にスクロールしてご覧ください
$ git clone https://github.com/Xilinx/Vitis-AI.git -b 3.5

Vitis™ AIのレシピをPetaLinuxプロジェクトにコピー

コピー元 /Vitis-AI/src/vai_petalinux_recipes/recipes-vai-kernel
/Vitis-AI/src/vai_petalinux_recipes/recipes-vitis-ai
コピー先 /<PetaLinux project ROOT>/project-spec/meta-user/

図5. レシピコピーのイメージ図

/<PROOT>/project-spec/meta-user/conf/user-rootfsconfigファイルに以下を追加

左右にスクロールしてご覧ください
CONFIG_vitis-ai-library
CONFIG_vitis-ai-library-dev
CONFIG_vitis-ai-library-dbg
CONFIG_dnf
CONFIG_nfs-utils
CONFIG_resize-part
CONFIG_packagegroup-petalinux-self-hosted
CONFIG_cmake
CONFIG_opencl-clhpp-dev
CONFIG_opencl-headers-dev
CONFIG_packagegroup-petalinux-opencv
CONFIG_packagegroup-petalinux-opencv-dev
CONFIG_packagegroup-petalinux-x11
CONFIG_packagegroup-petalinux-v4lutils
CONFIG_packagegroup-petalinux-matchbox
CONFIG_packagegroup-petalinux-gstreamer

追加したパッケージをPetaLinuxの設定で有効にする

有効にするパッケージ上で y を押すと " * " マークが表示され、有効化されます。

左右にスクロールしてご覧ください
$ petalinux-config -c rootfs

    Filesystem Packages -->	
        libs -->	
            xrt  -->	
                [*] xrt	
                [*] xrt-dev	
                [*] xrt-dbg	
            zocl  -->	
                [*] zocl	
                [*] zocl-dev	
                [*] zocl-dbg	
	
    user packages -->	
        [*] cmake	
        [*] dnf	
        [ ] gpio-demo	
        [*] nfs-utils	
        [*] opencl-clhpp-dev	
        [*] opencl-headers-dev	
        [*] packagegroup-petalinux-gstreamer+C26	
        [*] packagegroup-petalinux-kria	
        [*] packagegroup-petalinux-matchbox	
        [*] packagegroup-petalinux-opencv	
        [*] packagegroup-petalinux-opencv-dev	
        [*] packagegroup-petalinux-self-hosted	
        [*] packagegroup-petalinux-v4lutils	
        [*] packagegroup-petalinux-x11	
        [ ] peekpoke	
        [*] resize-part	
        [*] vitis-ai-library	
        [*] vitis-ai-library-dbg	
        [*] vitis-ai-library-dev

図6. xrt有効化画面

図7. zocl有効化画面

図8. user packages有効化画面

Exitでrootfsの設定を抜ける

rootfs typeの設定

左右にスクロールしてご覧ください
$ petalinux-config
    Image Packaging Configuration -->
        Root filesystem type (EXT4 (SD/eMMC/SATA/USB))
	(/dev/mmcblk1p2) Device node of SD device
        (ext4 tar.gz) Root filesystem formats

Root filesystem type を EXT4 に変更

SDカードのEXT4パーティションを、rootfsとして使用するためです。

Device node of SD device を /dev/mmcblk1p2 に変更

恐らくデフォルトでは、/dev/mmcblk0p2 になっていると思います。
Kria™の場合、0p2だとeMMC(KV260は未実装)、1p2だとSDのEXT4パーティションを使用するという設定になります。

Root filesystem formats を ext4 tar.gz に変更

packageを多く含めると、rootfsの容量が大きくなります。
rootfsの容量が大きいと、その容量の大きさに対応していない rootfs type format がビルドの際にエラーを出すため、必要なもののみに設定を変更します。

図9. Image Packaging Configuration設定画面

Kernel Bootargs を root=/dev/mmcblk1p2 に変更

デフォルトでは、root=/dev/ram0になっています。
今回、rootfsはram展開ではなく、SDのEXT4パーティションを使用するため、変更が必要です。

左右にスクロールしてご覧ください
DTG Settings -->	
        Kernel Bootargs -->	
            earlycon console=ttyPS1,115200 clk_ignore_unused root=/dev/mmcblk1p2 rw rootwait cma=900M

図10. Kernel Bootargs設定画面

Exitで設定を抜ける

各イメージビルド

PetaLinuxプロジェクトのビルド

左右にスクロールしてご覧ください
$ petalinux-build

ブートイメージ(BOOT.BIN)の作成

左右にスクロールしてご覧ください
$ petalinux-package --boot --u-boot

SD イメージ(petalinux-sdimage.wic)の作成

左右にスクロールしてご覧ください
$ petalinux-package --wic --bootfiles "boot.scr,Image,system.dtb,system-zynqmp-sck-kv-g-revB.dtb" --rootfs-file "rootfs.tar.gz" --disk-name "mmcblk1"

以下に生成した各イメージが追加されます。
{PROOT}/images/linux

sysrootをビルド

VitisでのDPU実装時に使用します。sdk.shファイルが生成されます。

左右にスクロールしてご覧ください
$ petalinux-build --sdk

Vitis™によるDPU実装

デバイスツリー作成

まずは実機確認の際に必要なデバイスツリーを、XSCTというツールを使用してXSAから作成します。

XSCTの環境変数を設定

左右にスクロールしてご覧ください
$ source <Vitis_Install_dir>/2023.1/settings64.sh

XSCT起動

左右にスクロールしてご覧ください
$ xsct

XSAからpl.dtsiファイルを生成し、XSCTを終了

./dt/dt/kv260/psu_cortexa53_0/device_tree_domain/bsp/ に pl.dtsi が生成されます。

左右にスクロールしてご覧ください
xsct% createdts -hw <XSA_path>/kv260_hardware_platform.xsa -zocl -platform-name kr260 -git-branch xlnx_rel_v2023.1 -overlay -compile -out ./dt
xsct% exit

dtsiファイルをdtboファイルに変換

./dt に pl.dtbo が生成されます。

左右にスクロールしてご覧ください
$ dtc -@ -O dtb -o ./dt/pl.dtbo ./dt/dt/kv260/psu_cortexa53_0/device_tree_domain/bsp/pl.dtsi

xpfm作成

次にxpfmファイルを生成します。
xpfmファイルは、DPU実装の際に必要なファイルで、ハードウェアの情報などが記述されています。
xpfmファイルの中の情報は、platforminfo <path/to/xpfmfile> で参照可能です。

図11. platforminfo出力結果

xpfmファイル生成

コマンドでも生成可能ですが、今回はGithubのリポジトリを使用します。

Githubのリポジトリをクローン

左右にスクロールしてご覧ください
$ git clone --branch xlnx_rel_v2023.1 --recursive https://github.com/Xilinx/kria-vitis-platforms.git

クローンしたリポジトリに、ディレクトリを新規作成、そこに生成したXSAファイルをコピー

左右にスクロールしてご覧ください
$ mkdir -p kria-vitis-platforms/kv260/platforms/vivado/kv260_hardware_platform/project/
$ cp kv260_hardware_platform.xsa kria-vitis-platforms/kv260/platforms/vivado/kv260_hardware_platform/project

コピー先に移動、Makefileを実行

左右にスクロールしてご覧ください
$ cd kria-vitis-platforms/kv260
$ make -C platforms platform PLATFORM=kv260_hardware_platform

kria-vitis-platforms/kv260/platforms/xilinx_kv260_hardware_platform_202310_1/ に kv260_hardware_platform.xpfm が生成されます。

DPU実装

次にDPU実装を行います。

ソースをダウンロードして解凍

左右にスクロールしてご覧ください
$ wget https://www.xilinx.com/bin/public/openDownload?filename=DPUCZDX8G_VAI_v3.0.tar.gz -O DPUCZDX8G_VAI_v3.0.tar.gz
$ tar zxf DPUCZDX8G_VAI_v3.0.tar.gz

DPUを実装する際の設定ファイルを変更

DPUCZDX8G_VAI_v3.0/prj/Vitis/dpu_conf.vh を以下のように変更します。

  • `define B4096 をコメントアウト
  • `define B1024 の定義を有効化
  • `define URAM_DISABLE をコメントアウト
  • `define URAM_ENABLE の定義を有効化
  • URAM の数を B1024 の推奨に合わせる

図12. dpu_conf.vh設定変更

表2 DPUの各サイズのURAMの推奨の数

生成されたファイルを1つのディレクトリに集めるために、Makefileを変更

以下の記述を、DPUCZDX8G_VAI_v3.0/prj/Vitis/Makefile の「package:」内の v++ の記述の下に追加してください。

左右にスクロールしてご覧ください
-@mkdir -p $(BUILD_DIR)/sd_card
cp ./binary_*/link/vivado/vpl/prj/prj.runs/impl_1/*.bit ./binary_*/sd_card
cp ./binary_*/*.xclbin ./binary_*/sd_card

図13. Makefile変更箇所

Makefileを保存して閉じる

DPU実装に必要な環境変数等を設定

環境変数は絶対パスで設定してください。

左右にスクロールしてご覧ください
$ export TRD_HOME=<DPU_TRD_dir>/DPUCZDX8G_VAI_v3.0
$ source <Vitis_Install_dir>/2023.1/settings64.sh
$ source <XRT_build_dir>/build/Release/opt/xilinx/xrt/setup.sh
$ export EDGE_COMMON_SW=<PROOT>/images/linux
$ export SDX_PLATFORM=<xpfm_dir>/kv260_hardware_platform/kria-vitis-platforms/kv260/platforms/xilinx_kv260_hardware_platform_202310_1/kv260_hardware_platform.xpfm

DPU実装

Makefileを実装して、DPUを実装します。実行完了まで1時間ほどかかります。

左右にスクロールしてご覧ください
$ cd $TRD_HOME/prj/Vitis
$ make all KERNEL=DPU DEVICE=kv260

完了後、以下のフォルダに system_wrapper.bit や binary_container_1.xclbin 等が作成されます。
$TRD_HOME/prj/Vitis/binary_container_1/sd_card

ファイルの変換とまとめ

ファイル変換

system_wrapper.bit ファイルを、KV260のLinux上でロード可能な形式の system_wrapper.bitbin に変換します。
bootgenコマンドは、Vitisの環境変数を設定していれば実行可能です。

左右にスクロールしてご覧ください
$ cd $TRD_HOME/prj/Vitis/binary_container_1/sd_card
$ echo 'all:{system_wrapper.bit}' > bootgen.bif
$ bootgen -w -arch zynqmp -process_bitstream bin -image bootgen.bif

ファイルをまとめる

KV260にファイルを転送するために、任意の場所にディレクトリを作成し、その中にファイルをひとまとめにします。
以下、まとめるファイルです。

  • pl.dtbo
  • system_wrapper.bitbin
  • binary_container_1.xclbin

以下コマンドでまとめます。

左右にスクロールしてご覧ください
$ mkdir kv260-dpu
$ cp <dtbo_dir>/ kv260_hardware_platform/dt/pl.dtbo kv260-dpu
$ cp $TRD_HOME /prj/Vitis/binary_container_1/sd_card/system_wrapper.bit.bin kv260-dpu
$ cp $TRD_HOME /prj/Vitis/binary_container_1/sd_card/binary_container_1.xclbin kv260-dpu

まとめたディレクトリは、scpコマンド等でKV260上のLinuxに転送します。

実機確認

KV260のQSPIにブートイメージ(BOOT.BIN)を、SDカードにSDイメージ(pealinux-sdimage.wic)を
書き込む

QSPIの書き込みには、ブートイメージリカバリーツールを、SDの書き込みには、書き込みツールやddコマンドを
使用して書き込んでください。

QSPIにブートイメージを書き込んだKV260を、以下の手順で起動します。

  1. SDイメージを書き込んだSDカードを、KV260のJ11に挿入
  2. micro USBケーブルのmicro-B端子をKV260のJ4に接続、USB-A端子をターミナルに接続可能なPCに接続
  3. KV260のJ10にイーサネットケーブルを接続し、ケーブルの反対側をネットワークに接続可能なハブに接続
  4. 電源端子をJ12に接続し、KV260に電源を投入

図14. KV260接続図

図15. KV260と周辺機器との接続図

Linuxログインの初期ユーザー名と初期パスワードは以下の通りです。

user: petalinux
pass: petalinux

必要に応じてご変更ください。

Linux起動後、ホストPC上から以下コマンドでファイルをまとめたディレクトリを転送可能です。
usernameを変更していた場合、@ の前の petalinux を変更してください。

左右にスクロールしてご覧ください
$ scp -r kv260-dpu petalinux@<device_ip_address>:/home/petalinux

転送されたディレクトリをコピー

KV260上のLinuxで、以下のコマンドを実行します。

左右にスクロールしてご覧ください
$ sudo cp kv260-dpu /lib/firmware/xilinx/

shell.jsonファイルをコピー

KV260上のLinuxで、以下のコマンドを実行します。

左右にスクロールしてご覧ください
$ sudo cp /lib/firmware/xilinx/k26-starter-kits/shell.json /lib/firmware/xilinx/kv260-dpu/

DPUロード

KV260上のLinuxで以下のコマンドを実行します。

左右にスクロールしてご覧ください
$ sudo xmutil unloadapp
$ sudo xmutil loadapp kv260-dpu

DPUロード確認

以下のコマンドでDPUがロードされているか確認可能です。

左右にスクロールしてご覧ください
$ xdputil query

図16. xdputil query実行結果

「Err open idcode file failure」というエラーが出ますが、無視して構いません。

以上でKV260へのDPUの実装、ロードが完了となります。

Kria™ SOMやAMD社製品に関する
お問い合わせはこちらから

最後まで閲覧いただき、ありがとうございました。

関連ブログ