Vitisなんか勉強したくない(3日目)

今日はアプリケーションレベルで必要なものを探ってみよう。

OpenCLのHostとKernel

Vitis開発環境でアプリケーションはOpenCLのHostとKernelに分かれる。

そういえば、IntelのoneAPIはSDSoCのように関数レベルでシームレスにCPU実行部分とアクセラレーションが切り替えられるけど、その下の階層はKHRONOSのSYCLをみるとOpenCLなのかな?

あぁ、脱線しそうだった。

Vitisでアプリケーションをビルドするときに必要なものを図に描きこんでみる。

まぁ、こんな感じだな。

ソースコード

ソースコードはZYNQのPSで実行するapp_host.cppとPLでアクセラレーションするapp_kernel.cppと分けた。

app_host.cppがOpenCLのHost側で、app_kernel.cppがKernel側である。

ここでいうKernelというのはOpenCLのKernelなのでLinux Kernelではない。

それとアプリケーションの開発環境はx86マシンのUbuntu上としておこう。

app_host.cppのビルド

app_host.cppはZYNQのPSで実行されるのでCortex-A53で実行できるバイナリである必要がある。

今回の開発環境はx86マシンのUbuntu上なのでクロスコンパイラでapp_host.cppをコンパイルする。

実際のところ、このクロスコンパイルはv++の中に隠れていると思ってよいだろう。

成果物はapp.exeとしよう。

app_kernel.cppのビルド

app_kernel.cppはZYNQのPLで動作するアクセラレーションになるので、C++から高位合成されて最終的にPLにロードされるBitStreamになる。

v++でコンパイルして、中間言語に変換されてからVivadoで論理合成される

そして、Vitis各種ライブラリ、Vitis Platform環境と合わせて配置配線が行われBitSrteamが完成する。

完成したBitStreamは実機上でXRTを経由して、ZYNQのPLにロードできるフォーマットXCLBINファイルとしてまとめられる。

クロスコンパイラ

app_host.cppをコンパイルするクロスコンパイラはPetaLinuxのsystrootをビルドする際に生成することが可能である。

しかし、Vitis開発環境はPetaLinuxとともにバージョンロックであり、基本的にクロスコンパイラの入れ替えは認めていない。

これはコンパイラのバージョンはsysroot内にあるライブラリの構成が変わってしまうとVitisの独自ライブラリに影響がでるためだと思われる。

Vitis Platform

Vitis Platformとはアプリケーションを実装するFPGAおよびボードの情報が格納されている。

platformはディレクトリ構成で基本的に次のように構成されている。

・hw
 ・sample.xsa
・ sw
 ・sample_platform
  ・boot
   ・bl31.elf
   ・build_vitis.bif
   ・fsbl.elf
   ・pmufw.elf
   ・u-boot.elf
  ・linux_domain
   ・image(dir)
   ・qemu(dir)
   ・sysroot(dir)
  ・qemu(dir)
 ・ultra96v2_platform.spfm
・ultra96v2_platform.xpfm

hwディレクトリにはFPGAのハードウェア環境、swディレクトリにはソフトウェア環境が格納されている。

bootディレクトリにはBOOT.BINを構成するためのfsbl.elf、pmufw.elf、bl31.elf、u-boot.elfなどが入っている。

v++でBOOT.BINをビルドするけど、BIFファイル(ここではbuild_bitis.bif)にBOOT.BINの構成情報が入っている。

linux_domainのimageディレクトリ

ここにはLinux KernelとDevice Tree Blobが合体したimage.ubが置かれている。

XSAファイル

hwディレクトリに収められているsample.xsaはVivadoで生成する。

本日のまとめ

ひっそりと隠れている人が多い。

だから、VitisとPetaLinuxは難しい。

write: 2021/01/23/ 20:00:00