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

皆さま、こんにちは。
Vitis™ AI 3.5環境でKV260向けにDPUを実装したいけど、チュートリアルがない・・・
そんな経験をお持ちではないでしょうか。
KV260用のVitis™ AI 3.5環境を構築したい場合は、ユーザーが環境構築する必要があると、
以下URLのGithubに記載されています。
https://xilinx.github.io/Vitis-AI/3.5/html/docs/workflow.html#supported-evaluation-targets
本ブログでは、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™によるハードウェアデザイン設計
Vivado™の設計は、以下のチュートリアルに沿って進めていきます。
https://github.com/Xilinx/Vitis-Tutorials/blob/2023.1/Vitis_Platform_Creation/Design_Tutorials/01-Edge-KV260/step1.md
スクリーンショットが多く用意されており、進めやすいため、ぜひチュートリアル通りに進めていただければと思います。
チュートリアルを進めると、以下のようなブロックデザインが作成できます。
図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をダウンロード
以下のURLからダウンロード可能です。
https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools/2023-1.html
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コマンドを
使用して書き込んでください。
ご参考までに、ブートイメージリカバリーツールの使用方法は、以下のWikiに記載があります。
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1641152513/Kria+SOMs+Starter+Kits#Boot-Image-Recovery-Tool
QSPIにブートイメージを書き込んだKV260を、以下の手順で起動します。
- SDイメージを書き込んだSDカードを、KV260のJ11に挿入
- micro USBケーブルのmicro-B端子をKV260のJ4に接続、USB-A端子をターミナルに接続可能なPCに接続
- KV260のJ10にイーサネットケーブルを接続し、ケーブルの反対側をネットワークに接続可能なハブに接続
- 電源端子を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実行結果
以上でKV260へのDPUの実装、ロードが完了となります。
Kria™ SOMやAMD社製品に関する
お問い合わせはこちらから
最後まで閲覧いただき、ありがとうございました。