Xilinx SDK上にPynquinoの開発環境を構築する(その1)

新しい記事も参考→
Xilinx SDK上にPynquinoの開発環境を構築する(その2)
http://d.hatena.ne.jp/seinzumtode/20180815/1534292975

A. VivadoのAddress editorでBRAMへの割当てを増やしてGenerate bitstream



B. Xilinx SDKでPynquino対応のBSPを作成する

0. PYNQ用のBSPライブラリとBSPドライバの場所を外部レポジトリに指定する

Xilinx>Repositoriesを起動

Xilinxが提供するPYNQのBSPライブラリ(pynqmb)とドライバ(interrupt_gpioとmailbox_bram)(バージョンはv2.1):
https://github.com/Xilinx/PYNQ/tree/image_v2.1/boards/sw_repo
上のバージョンにはpynqmbライブラリにUARTのバグがあるのでパッチを当てる
以下のように作業する

cd /path/to/sw_repo
cd pynqmb/src/
wget https://raw.githubusercontent.com/shohei/PYNQ/b8928631b1b8b118b046d204b2c2dbeeeb063648/boards/sw_repo/pynqmb/src/uart.c uart.c
wget https://raw.githubusercontent.com/shohei/PYNQ/b8928631b1b8b118b046d204b2c2dbeeeb063648/boards/sw_repo/pynqmb/src/uart.h uart.h

Pynquino用のBSPライブラリ(Arduion APIMicroBlazeへのポーティング):
https://github.com/shohei/pynquino-bsp-library/tree/master/pynquino_v1_0

1. Pynquino BSPライブラリとpynqmb BSPライブラリを適用する

BSPプロジェクトの上で右クリック→Board support pacakage setingsを起動

OverviewのSupported Librariesで、pynqmbとpynquinoにチェックを入れる

standaloneのstdinとstdoutの両者を iop_arduino_lmb_lmb_bram_if_cntlr に変更する

driversでドライバを以下のように変更する
iop_arduino_intr -> intrgpio
iop_arduino_lmb_lmb_bram_if_cntlr -> mailbox_bram

OKを押してダイアログを閉じると、BSPが自動的にビルドされる。

C. アプリケーションプログラムの対応

0. リンカースクリプトを修正する

Xilinx>Generate Linker Scriptでリンカースクリプトをアップデート
(BRAMのサイズ256Kに合うように調整される)
新規にアプリケーションプログラムを作成する場合は必要ない(自動で256Kに合うようなlscript.dが生成される)

1. 自動生成されたmakefileを修正する

この状態ではアプリケーションのコンパイルエラーが出る。
このエラーの原因は、pynqmbはビルドしたあとlibxil.aのアーカイブファイルに固められるのだが、自動生成されたmakefileがlibpynqmb.aを要求してしまうことである。
Debug/objects.mkを開いて手動で削除してやればいい
Debug/objects.mk

- LIBS := -Wl,--start-group,-lxil,-lgcc,-lc,--end-group -Wl,--start-group,\ -llibpynqmb,\ -lxil,-lgcc,-lc,--end-group -Wl,--start-group,-lpynquino,-lxil,-lgcc,-lc,--end-group
+ LIBS := -Wl,--start-group,-lpynquino,-lxil,-lgcc,-lc,--end-group
D. テストアプリケーションのビルド

Zsprinter-Pynquinoをビルドしてみる
ターミナルでSDKフォルダに移動

cd /home/shohei/Downloads/pynq-bsd-2.1/boards/Pynq-Z1/base/base/base.sdk

Zsprinterレポジトリをクローンしてarduino_zsprinterプロジェクトをSDKフォルダに移動

git clone https://github.com/shohei/zsprinter-pynquino
mv zsprinter-pynquino/arduino_zsprinter .

Xilinx SDK上でプロジェクトをインポートする

Run configurationの設定