2020年12月3日木曜日

ultra96v2のembedded acceleration platformをvitis2020.2で作成してみた話その1

ultra96v2のembedded platformを作成した話。 今回はHW-ComponentとSW-Componentを作成するところまで。 やり方はは2020.1のときと同じ

準備

使用するのは以下のもの。 

  • cmake
  • make
  • repo
  • Vivado 2020.2
  • Vitis 2020.2

cmake と repoが無い場合は以下の通り入手可能。

apt install cmake
curl -k https://storage.googleapis.com/git-repo-downloads/repo > repo
chmod a+x repo
sudo mv repo /usr/local/bin/

HW-Componentの作成

ここを参考にしてブロックデザインを作成している。 日本語ならこちら

なお、Emulation-HWを実行するためにひと手間加えている。 参考にしたのは公式ドキュメントの、 “Enabling Hardware Emulation for Extensible XSA”。
明確にEmbedded環境に関する話は書いていないが、Versal向けの設定をEmbedded環境向けに適用してみたところ、 期待通りにEmulation動作したので採用した。 (公式の記載通りではないので使用する際は自己責任です) 行った内容はブロックデザインを開き以下の通りplatform_stateの設定と、 PS部のSELECTED_SIM_MODELをrtl=>tlmに変更した。 この変更をしないとEmulation-HW実行時にQEMUが動作開始できないのだと思う。

set_property platform.platform_state "pre_synth" [current_project]
set_property SELECTED_SIM_MODEL tlm [get_bd_cells /zynq_ultra_ps_e_0]

 


公式ドキュメントに記載されているwrite_hw_platformのオプション-hw_emuは2020.1以降は多分不要。(どこかで非推奨と書いてあったような気もする。つけて無くても必要なファイルは出力されるっぽい) 

ただ、2019.2だと必要と思われる。(オプションのあるなしでファイルサイズがだいぶ違ったので) 

GUIだと、Vivado File > Export > Export Platform からHardware and hardware emulationを選択すれば問題はなさそう。このときpre_synthの設定もされる。(はず。tclで設定してしまったのでよくわからない。)

以下の手順はすでに実施済のものを生成し、xsa_dirにxsaファイルをコピーする。

cd <work-dir-path>
source <path-to-vivado-installation>/2020.1/settings64.sh
git clone https://github.com/akira-nishiyama/vivado_cmake_helper.git
git clone https://github.com/akira-nishiyama/ultra96v2_4z.git -b v2020.2
source vivado_cmake_helper/setup.sh
mkdir xsa_dir
cd ultra96v2_4z
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=../../xsa_dir
make
make install
cd ../../

buildディレクトリ以下にvivadoのプロジェクトが作られるので、これを操作してカスタマイズも可能。カスタマイズ後はscriptsフォルダにExport Blockdesignをアップデートする必要がある。また、ソース等を編集、追加した場合はsrcフォルダにRTLファイルをコピーしてバージョン管理しないと再生成できない。(ソースファイルなどはプロジェクトにインポートしておかないとxsaファイルが作成できないことが理由)

SW-Componentの作成

mkdir petalinux
mkdir sdk
mkdir boot
cd PetaLinux
repo init -u http://github.com/akira-nishiyama/petalinux-ros2-manifests -b feature-v2020.2
repo sync
source setupsdk
#edit conf/local.conf

conf/local.confを開き、下記の通りHDF設定を修正する。

HDF_EXT_ultra96v2-zynqmp = "xsa"
HDF_BASE_ultra96v2-zynqmp = "file://"
HDF_PATH_ultra96v2-zynqmp = "<work-dir-path>/xsa_dir/ultra96v2_4z/ultra96v2_4z.xsa"

bitbakeする。

MACHINE=ultra96v2-zynqmp bitbake petalinux-image-minimal-ultra96v2ros2
MACHINE=ultra96v2-zynqmp bitbake petalinux-image-minimal-ultra96v2ros2 -c do_populate_sdk

動作のためにQEMUを起動する。

cp <path-to-vitis-installation>/2020.1/data/emulation/dtbs/zynqmp/pmu_rom_qemu_sha3.elf tmp/deploy/image/tmp/deploy/images/ultra96v2-zynqmp/pmu-rom.elf
MACHINE=ultra96v2-zynqmp runqemu

起動したら以下の通り実行して動作を確認する。

root@ultra96v2-zynqmp:~# source ros_setup.sh
root@ultra96v2-zynqmp:~# (sleep 5; ros2 topic pub /chatter std_msgs/String "data: Hello world") &
root@ultra96v2-zynqmp:~# ros2 topic echo /chatter &
publisher: beginning loop
publishing #1: std_msgs.msg.String(data='Hello world')

data: Hello world
---
publishing #2: std_msgs.msg.String(data='Hello world')

data: Hello world
---
publishing #3: std_msgs.msg.String(data='Hello world')

終了するにはpoweroffを入力し、Ctrl-a, Ctrl-x。

sdkを展開する

tmp/deploy/sdk/petalinux-glibc-x86_64-petalinux-image-minimal-ultra96v2ros2-aarch64-ultra96v2-zynqmp-toolchain-2020.1.sh -d ../../sdk/

必要なデータをbootフォルダにコピーしておく。 2020.2ではVitisで絶対パス指定がうまく行かなくなっていたので、 ブートデータ作成に必要なファイルはすべてbootフォルダに保存する。

cp tmp/deploy/images/ultra96v2-zynqmp/fsbl-ultra96v2-zynqmp.elf ../../boot/
cp tmp/deploy/images/ultra96v2-zynqmp/arm-trusted-firmware.elf ../../boot/
cp tmp/deploy/images/ultra96v2-zynqmp/pmu-firmware-ultra96v2-zynqmp.elf ../../boot/
cp tmp/deploy/images/ultra96v2-zynqmp/system.dtb ../../boot/
cp tmp/deploy/images/ultra96v2-zynqmp/u-boot.elf ../../boot/
cp tmp/deploy/images/ultra96v2-zynqmp/boot.scr ../../boot/
cp tmp/deploy/images/ultra96v2-zynqmp/uEnv.txt ../../boot/
cp tmp/deploy/images/ultra96v2-zynqmp/Image ../../boot/

0 件のコメント:

コメントを投稿