Xilinx の PYNQ 環境が手軽に ZYNQ を使う環境として素敵で便利なので積極的に利用しています。公式で提供されているボード以外で利用する場合には自分でビルドする必要がありますが、そんなに手間でもありません。私はZYBO Z7-20向けにビルドして利用しています。
この記事では、PYNQのZYBO Z7-20向けのビルド方法を簡単に紹介します。
PYNQ とは
PYNQ は,Xilinx が提供する ZYNQ 上の Linux + Jupyter Notebook の実行環境です。通常の Jupyter Notebook 同様に、Web ブラウザを使って ZYNQ PS 上の Python プログラムを実行することができる他、Python プログラムで動的に PL 上の回路を書き換えることができます。
移植も簡単
PYNQ の動作する Linux イメージが公開されいてるボードに PYNQ-Z1、PYNQ-Z2、Ultra96 などがあります。これらのボードを使う場合には,提供されているイメージファイルを SD カードに書き込むだけで PYNQ 環境を利用できます。
提供されていない場合には、自分で移植する必要があります。といっても、GitHub でソースコードが公開されていて簡単なビルドスクリプトまで用意されているので、怯む必要はまったくありません。
詳細は、公式のドキュメント
- https://pynq.readthedocs.io/en/v2.3/pynq_sd_card.html
- https://github.com/Xilinx/PYNQ/tree/master/sdbuild
の通りなのですが、大まかなな作業手順は、
- PetaLinux 向けの設定ファイルを用意
- ターゲットボード用の bit ファイルを作る(PS が動く最小の構成でいい)
- SDK 向けの HDF(ハードウェア定義ファイル)を抽出する
- ビルドしてできたファイルを SD カードに書き込む
です。これで、ZYNQ 向けの Linux 環境,しかも PL の内容を実行時に書き換えられる環境を手に入れることができます。
ZYBO Z7-20 への移植事例
具体例として Digilent の ZYBO Z7-20 向けに環境構築した例を紹介します。
必要な環境の準備とリソースの取得
作業は Ubuntu 16.04 で行ないます。VirtualBox などの VM 上でも問題ありません。OS に
は、ZYNQ 開発環境として Vivado SDSoC 2018.2 とPetaLinux 2018.2 をインストールして
おきます。Vivado ではなくて Vivado SDSoC が必要なので注意が必要です。ただしSDSoC
のライセンスは必要ありません。ビルドスクリプトがツールのバージョンの確認にディレクト
リ名を使用するので、どちらも 2018.2 という名前のディレクトリ以下にインストールする必要
があります。また、Digilent が提供する Vivado 向けのボードマスターファイルも用意・インス
トールしておきましょう。私の場合は、以下のようにインストールしました。
- Vivado SDSoC — /opt/Xilinx/ 以下にインストール
- /opt/Xilinx/SDx/2018.2 と /opt/Xilinx/Vivado/2018.2 にインストールされる
- PetaLinux 2018.2 — /home/miyo/tools/petalinux-v2018.2 にインストール
- ダウンロードしたボードマスターファイルの一式を Vivado をインストールした
- /opt/Xilinx/Vivado/2018.2/data/boards/board_files/ 以下にコピー
PYNQ のソースコード一式は GitHub からダウンロード(clone)できます。
$ cd $HOME
$ git clone https://github.com/Xilinx/PYNQ
clone が終わったら、追加で必要なツールをセットアップスクリプトを使ってインストールします。
$ cd $HOME/PYNQ/sdbuild/scripts
$ ./setup_host.sh
ビルドスクリプトの用意
作業用に、$HOME/PYNQ/myboards/Z7-20 というディレクトリを用意して、次のような内容の Z7-20.spec という名前のファイルを用意します。
ARCH_Z7-20 := arm
BSP_Z7-20 :=
BITSTREAM_Z7-20 := base.bit
STAGE4_PACKAGES_Z7-20 := pynq ethernet
ターゲットボード向けの bit ファイルを作る
いつもどおり Vivado でプロジェクトを作成,ターゲットとして、ZYBO Z7-20 を選択します(Digilent のボードマスターファイルがインストールされていれば選択できるはず)。適当に IPIで PS のインスタンスを生成し,あとは自動で配線してしまえば OK です。下の図が完成した状態です。
このボードデザインのラッパーファイルをツールで作ってビルドすれば、bit ファイルの準備はおしまいです。
デフォルトのままであれば、design_1_wrapper.bit ができあがるはずです。このできあがったファイルをbase.bit という名前で$HOME/PYNQ/myboards/Z7-20の下に配置します。
SDK 向けの HDF ファイルを抽出する
Vivado のメニューの File から Export→Export Hardware…と SDK 向けにデザインをエクスポートします。SDK フォルダの下に design_1_wrapper. hdf が作られます。これを base.hdfという名前で、$HOME/PYNQ/myboards/Z7-20/petalinux_bsp/hardware_project の下に配置します。
ビルド
最後は PetaLinux でビルド。次のように環境変数をセットしたあとで make します。
$ cd $PYNQ/sdbuild/
$ source /opt/Xilinx/SDx/2018.2/setting64.sh
$ source /home/miyo/tools/petalinux-v2018.2/settings.sh
$ export PATH=/opt/qemu/bin:/opt/crosstool-ng/bin:$PATH
$ make BOARDDIR=/home/miyo/PYNQ/myboards BOARDS=Z7-20
しばらく待つとファイルセット一式ができあがります。途中 Ubuntu のユーザランドをダウン
ロードするなどネットワークにアクセスするので、ビルド時間はネットワークアクセス環境に
よっても変わりますが、私の環境では2時間程度でビルドが完了しました。
ピンバック: ZYBO Z7-10/Z7-20用のPYNQ環境の構築 | わさらぼ