Vitisに入門してみる。(4)Acceleration Application作成
やっとこの話題に入れる。本題のAcceleration ApplicationをVitisで作成する。
環境
Vitis 2022.2
Vivado 2022.2
Windows 11
Ubuntu20.04 on WSL2
Arty Z7-20
Vitisの開発フローはこの図が分かりやすい。複雑すぎることがよくわかる。
プラットフォーム
を読んで、プラットフォームとは何か理解したかった。
- 固定プラットフォーム:XRTいらない。べアルメタル/RTOSとかもできる。第3回までの内容はこっち?
- エクステンシブルプラットフォーム:XRT必要。アクセラレーション用はこっち。
という感じで、今までやってたのは固定プラットフォームだけど、エクステンシブルをこれからやっていく感じ。
例によってArtyのHWプラットフォームは提供されてないので自分で作る必要がある。
この辺を参考にしてやっていく。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 */
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とかが入っているディレクトリ・・?
だと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
を参考に解決
update hardware specification
のように.dcpがプロジェクトにあるとだめらしいので、削除してからexportしなおす。
ここまでやって気づいたが
次回は2022.1を入れなおしてやるか、ZynqMPに移行するか。。。
Discussion