📖

Vitisに入門してみる。(4)Acceleration Application作成

2023/04/26に公開

やっとこの話題に入れる。本題のAcceleration ApplicationをVitisで作成する。

環境

Vitis 2022.2

Vivado 2022.2
Windows 11
Ubuntu20.04 on WSL2
Arty Z7-20

https://sweetcafe.jp/?*20210122-230000
Vitisの開発フローはこの図が分かりやすい。複雑すぎることがよくわかる。

プラットフォーム

https://docs.xilinx.com/r/ja-JP/ug1393-vitis-application-acceleration/Vitis-エンベデッド-プラットフォーム
を読んで、プラットフォームとは何か理解したかった。

  • 固定プラットフォーム:XRTいらない。べアルメタル/RTOSとかもできる。第3回までの内容はこっち?
  • エクステンシブルプラットフォーム:XRT必要。アクセラレーション用はこっち。
    という感じで、今までやってたのは固定プラットフォームだけど、エクステンシブルをこれからやっていく感じ。

例によってArtyのHWプラットフォームは提供されてないので自分で作る必要がある。
https://docs.xilinx.com/r/ja-JP/ug1393-vitis-application-acceleration/Vitis-でのエンベデッド-プラットフォームの作成
https://www.acri.c.titech.ac.jp/wordpress/archives/10058
https://proc-cpuinfo.fixstars.com/2019/11/vitis-hls-on-zybo/
この辺を参考にしてやっていく。Zynq7はVitisの情報がなさすぎるため、SDSoC時代の情報を参照する必要がある。

HWプラットフォーム(コンポーネント)作成

サイトに従って

こんな感じのブロックデザインを生成する。

Window -> Platform Interfacesで表示されたウインドウから、高位合成で使用するインタフェースを指示する。

全てのAXIポートをEnableにして

FCLK_CLK0以外をenable, clk_0ut1をdefaultにする。

Tclコンソールに

set_property platform.design_intent.embedded true [current_project]
set_property platform.design_intent.server_managed false [current_project]
set_property platform.design_intent.external_host false [current_project]
set_property platform.design_intent.datacenter false [current_project]
set_property platform.default_output_type "sd_card" [current_project]

を入力する。これは現段階では完全におまじない。とりあえずやる。(必要?)
できたらコンパイルして、Export platform

SWコンポーネント作成

petalinux-create -t project --template zynq -n test_AccelerationApp
cd test_AccelerationApp
petalinux-config --get-hw-description <path to xsa file>

configはとりあえずそのままでいい?

CONFIG_xrt
CONFIG_xrt-dev
CONFIG_zocl
CONFIG_opencl-clhpp-dev
CONFIG_opencl-headers-dev
CONFIG_packagegroup-petalinux-opencv
CONFIG_packagegroup-petalinux-opencv-dev

をproject-spec\meta-user\conf\user-rootfsconfigに追記するとrootfsのユーザーパッケージにこれら(XRT用のAPI)が追加される。

petalinux-config -c rootfs



のように全部選択してsave

またproject-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsiに

&amba {
    zyxclmm_drm {
        compatible = "xlnx,zocl";
        status = "okay";
    };
};

を追記してzoclドライバをデバイスツリーに追加
UG1393によるとこれはcreatedtsコマンドで作るものの模様。
今回は割り込みないのでそのまま記述

petalinux-build
petalinux-build --sdk

(Target?) Platform作成

VitisでCreate Platform Projectを選択し、新規プラットフォームを作成する。

Vivadoでエクスポートした.xsaを選択し、OSはLinuxを選ぶ。

プロジェクトを作成すると

こんな画面になる。
これらを設定してプラットフォーム作成完了となるわけだが、、、さて何なんだろうかこいつら

UG1393を参考にすると

Bifファイル

アプリケーション ビルド プロセスでブート イメージがパッケージされるようにするには、BIF ファイルを指定する必要があります。
BIF で記述されるファイルすべてを含むブート コンポーネント ディレクトリも指定する必要があります。

ということで、パッケージしてBOOT.BINを作るときに含めるファイルを記述するものっぽい。
最小構成がよくわからないが、サイトを参考に

linux.bif
/* linux */
the_ROM_image:
{
    [bootloader] <fsbl.elf>
    <bitstream>
    <u-boot.elf>
}

としておこう

Boot Components Directory

Bifに記述したファイルが全部入っているディレクトリ?
petalinux-buildで生成したimageフォルダをそのまま指定していい?

Linux Rootfs

petalinux-buildで生成されたやつだと思う。アプリケーション開発時でも追加できるので現段階は必須ではないっぽい

FAT32 Partition Directory

UG1393のイメージディレクトのことだと思う?

イメージ ディレクトリは、プラットフォーム作成中に設定する必要があります。このディレクトリのすべてのコンポーネントが最終 SD カード イメージにパックされます。ターゲット ファイル システムが FAT32 の場合、ファイルは SD カードのルート ディレクトリに、Ext4 の場合、ファイルは最初の FAT32 パーティションのルート ディレクトリに含まれます。

つまりBOOT.BINとかが入っているディレクトリ・・?
https://proc-cpuinfo.fixstars.com/2019/11/vitis-hls-on-zybo/
だとImage directoryとBoot component directory同じにしているので、多分それでいいんだろう。不要なものが入っているとFAT32にコピーしたときに重くなるとか?そんなに問題なさそう。

Sysroot Directory

petalinux-build --sdk
./sdk.sh

で生成されるやつ?

ファイルはWSLにおいておくとBuild時にWarningがたくさん出るのでWindows側に置いておく。
これらを設定して左下のAssitant viewからBuild

Acceleration Application作成

プラットフォームができたのでアプリケーションを作成する。
File -> New -> Application Project

ビルドできてるとこのようにカスタムプラットフォームが選べるようになる。

エラー関連

 ERROR: [Common 17-69] Command failed: File '***.dcp' does not exist

https://support.xilinx.com/s/question/0D52E000073xiQCSAY/vitis-cannot-find-the-dcp-file-it-extracted-from-the-xsa?language=ja
を参考に解決


update hardware specification
のように.dcpがプロジェクトにあるとだめらしいので、削除してからexportしなおす。

ここまでやって気づいたが
https://github.com/Xilinx/Vitis-Tutorials/issues/284
Vitis2022.2からZynq7000はサポート外だったっぽい。いろんなエラーが出るのであきらめた。。。
次回は2022.1を入れなおしてやるか、ZynqMPに移行するか。。。

Discussion