やまものブログ

メモ書きブログです (^_^;A

Accelerated Image Classification サンプルの Rebuild

こちらのサンプルを手順書通りに動かすことができたので、実際の手順をメモとして残します。

Zynq UltraScale+ MPSoC Accelerated Image Classification via Binary Neural Network TechTip
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841949/Zynq+UltraScale+MPSoC+Accelerated+Image+Classification+via+Binary+Neural+Network+TechTip

このサンプルに着手したのは1年以上前でした。 こちらの記事 Ultra96 ボード - やまものブログ の末尾「おわりに」でその意思表示をしていました。
当時、Ubuntu 18.04 でなんとかしようとしたのが災いでした。 OSやツールのバージョンを厳格に守らなないとどういうことになるかを痛感したのがよい経験になりました。
以降、Ubuntu 16.04.6 LTS を使っています。このサンプルをReBuildするために16.04に戻りました。

サンプルに戻って、現在、サンプルには2つのバージョンあります。 そのうちの古い方で動かすことができました。具体的には下記の2つのファイルを使いました。

ファイル 説明
20180424_zcu102_ultra96_aicdemo.img Image of AIC Demo for ZCU102 and Ultra96
20180424_aicdemo_projectfiles.zip Zip file (Vivado/HLS/Petalinux project)


新しいバージョンはこちらです。実際に試して、こちらは動きませんでした。ブートの途中でとまってしまいます。詳細をいつか解析してみたいですね…

ファイル 説明
20180814_aicdemo_projectfiles_20181.zip Zip file (2018.1 Vivado/HLS/Petalinux project)
20180814_zcu102_ultra96_aicdemo_20181.zip Zip file 2018.1 Image for AIC Demo for ZCU102 and Ultra96


サンプルを実行するボードはこちらに紹介されている Ultra96 です。 www.avnet.com
私の手持ちは Ultra96(V1)で、販売中のUltra96(V2)よりも古い仕様です。このサンプルの2つのバージョンもそれぞれ V1, V2 対応なのかもしれません(憶測)。

いずれのバージョンでもサンプルは2つのファイルからなります。

  1. "〜aicdemo〜" … SDカード(16GB以上)に焼くイメージ
  2. "〜projectfiles〜" ... Vivado/PetaLinux のプロジェクト


とりあえず、1.だけあれば Ultra96 でサンプルを動かすことが出来ます。
このイメージを書き込んだSDカードは2つのパーティションから成ります。

SD-Card will have two partitions: one small one formatted with fat32 containing a BOOT.Bin and image.ub file, and one large one formatted with ext3 containing a root file system.


fat32 に収まる BOOT.Bin と image.ub を自分の環境で作りなおす作業が
6. Rebuilding the Design from sources
の 6.1〜6.6 に記載されています。 以下は、このReBuildを実行したコマンドのメモになります。

ReBuild作業には、下記2つの記事にまとめた Vivado と PetaLinux 2017.3 を使える環境が前提です。

wyamamo.hatenablog.com

wyamamo.hatenablog.com


ビルド済みイメージによるSDカードの準備

20180424_zcu102_ultra96_aicdemo.img ファイルをSDカードに書き込みます。 下記の例で、私の環境では <SDカードのデバイス> は /dev/sde でした。これを間違えるとドライブ丸ごと壊してしまうので、パスの確認は慎重に。

$ sudo dd bs=4M if=20180424_zcu102_ultra96_aicdemo.img of=<SDカードのデバイス> conv=fsync

このSDカードには vfat (fat32)と ext3 の2つのパーティションがありますが、ext3 はそのまま流用します。 以降の作業では、 BOOT.bin と image を作り、それらを fat32パーティションに入れます。

環境の準備(詳細は上述の記事を参照)

<作業ディレクトリ>はすでにmkdirされていて、PetaLinux 2017.3 がインストール済みとします

$ sudo dpkg-reconfigure dash
  "dash"のデフォルトシステムシェル設定に「いいえ」を選択する
$ export PATH=/home/vatarushka/bin:/usr/local/sbin:/usr/bin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ source <Vivado 2017.3インストールパス>/settings64-2017.3.sh
$ source <作業ディレクトリ>/petalinux-v2017.3/settings.sh

PATHの書き換えている理由はPetaLinux 2017.3 のインストール - やまものブログにあります。

サンプルの準備

$ cd <作業ディレクトリ>
$ unzip /home1/Xilinx/download_aic/20180424_aicdemo_projectfiles.zip 


FPGAデザインのReBuild (6.3 Rebuild FPGA Design)

$ cd <作業ディレクトリ>/aic
$ export XILAIC_ROOT=$PWD
$ cd scripts
$ ./make-hw.sh a ultra96

The ouput can be found in aic/output/hls_syn and aic/output/vivado.

とりあえず、以下のファイルを確認しました。.sdk/は次の手順で参照します。

-rw-rw-r-- 1 myaccount myaccount 5568787  1月  2 22:53 ../output/vivado/ultra96/ultra96.sdk/ultra96_wrapper.bit


PetaLinuxプロジェクトのReBuild (6.4 Rebuild Petalinux project)

$ cd <作業ディレクトリ>/aic/src_sw/ultra96-petalinux/
$ petalinux-config --get-hw-description ../../output/vivado/ultra96/ultra96.sdk/
$ make build
$ make package-boot

The output files BOOT.BIN and image.ub can be found in src_sw/-petalinux/images/linux.

images/linux/に以下のファイルができたのを確認しました。

-rw-r--r-- 1 myaccount myaccount  12500024  1月  3 09:16 image.ub
-rw-rw-r-- 1 myaccount myaccount   6324960  1月  3 09:18 BOOT.BIN


この2つのファイルを前出のSDカードの vfat パーティション(名称:BOOT)にコピーします。

$ cp images/linux/{BOOT.BIN,image.ub} /media/myaccount/BOOT


これを使って Ultra96(V1) で AIC サンプルを動作させることができました。