記事を書く度にやってることが違かったりするんですが、
今回はFPGAプログラム大全の内容をPYNQでやります。(コロナで出掛けられないし)
本書で取り扱っているボードではないですが、PYNQでもできますと書いてあります。
PYNQ向けのファイルも用意されています。(ただしサポート対象外)
本はこちら
FPGAプログラミング大全 Xilinx編
そしてうちにはWindowsがないので、Ubuntuでやります。
さらに(少し湾曲した表現で言えば)Macでもやります。
Vivadoのインストール
本書のAppendix Ⅰに従ってVivadoをインストールします。バージョンは本に従って2016.2です。もちろんLinux版をダウンロードします。
Vivado Design Suite - HLx Edition - 2016.2 Full Product Installation
ダウンロードしたら適当な場所において、実行権限をつけて実行します。
$ chmod 755 Xilinx_Vivado_SDK_2016.2_0605_1_Lin64.bin
$ sh Xilinx_Vivado_SDK_2016.2_0605_1_Lin64.bin
# 実行権限つけたらsh要らないか・・・。
図Ⅰ-4のところ、Linuxには「Install Cable Drivers」がありません。
代わりにNoteが書いてあります。が、全く見ていなくてあとで困りました。
インストール先は/opt/配下にしました。(権限がないと言われたので、/opt/Xilinxを手動で作りました。)
Appendix Ⅰ-2についてですが、PYNQのボードファイルはないのと、
LinuxにはUSBシリアル変換ドライバがデフォルトでインストールされているので不要です。
(FTDIのサイトからのダウンロード、インストールは不要という意味で。)
PNYQ用の設計データの準備
こちらのサポートサイトにPYNQ用の設計データがあるので、
ダウンロードしておきます。
FPGAプログラミング大全 Xilinx編|サポート|秀和システム
ダウンロードしたzipファイルの中にある、「PYNQ-Z1利用時の補足.pdf」というファイルは、
よく目を通して起きましょう。
XQuartzのインストール(Mac)
Ubuntuはちょっと離れた場所にあるので、MacでVivado使いたいなー。
でもMac版はないしなー、ということでXでUbuntuに繋ぎます。
必要なのはXquartzです。
XQuartz
最終更新は2016-10-29ですが、Catalinaでもちゃんと動きました。
インストールしたあとはログアウト→ログインをします。
XQuartz(xterm)を起動したら、
$ ssh -X hoge@hogehoge.local
と、Xオプションをつけてssh接続します。
$ /opt/Xilinx/Vivado/2016.2/bin/vivado &
と起動すれば、MacでVivadoが起動します。(実際にはMacで起動したように見えるだけ。)
実はXQuartzをインストールした環境であれば、
terminal.appでssh -X
しても大丈夫です。
X Windowが必要になったら自動的にXQuartzが起動します。
xtermは日本語対応していないので、地味に不便。
プロジェクトの作成
ここまで準備できたら第2章を進めます。
UbuntuとPYNQを繋ぐときにJP4(boot mode)をJTAGにします。
ボードの選択(図2-4)のところではPartsを選んで、「xc7z020clg400-1」を選択する。
詳細はPYNQ-Z1利用時の補足.pdfを参照。
回路記述ファイル(blink.v)と制約ファイル(blink.xdc)はサポートサイトからダウンロードしたzipファイルに入っているものを使います。
と進んだところで、問題が発生。
【2-1-8】のOpen Target→Auto Connectを選んでも、「There is no current hw_target.」と出て何も出てきません。。。
Cable Driverのインストール
インストール時のNoteをちゃんと読まなかったためにちゃんとZYNQをちゃんと認識できていなかったようです。
ここはTry and Errorでやったので、正しい手順ではないかもしれません。
1. VCP Driver
まずはWindowsと同じように、FTDIのVCP Driverを見てみます。
Virtual COM Port Drivers
Linuxの行を見てみるとドライバーはなくTN-101を見ろって書いてあるので見てみます。
99-usbftdi.rulesというrulesファイルを作れと書いてあるので作ってみます。
ProductID(PID/idProduct/product)はlsusbで確認した値を入れます。
$ lsusb
Bus 001 Device 010: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC
# 上記では6010がProductID。0403はVendorID。
さらにPDFの下の方に
It is not possible to access the Virtual COM port in Ubuntu until the “brltty” port is removed. This is done as
follows:
sudo apt-get remove brltty <CR>
とあるので、brlttyを削除します。
2. Cable Driverのインストール
Appendix Ⅰの「USB-JTAGドライバのトラブル」を参照して、
Cable Driverのインストールをしてみました。
Linux版では、インストーラーは、
/opt/Xilinx/Vivado/2016.2/data/xicom/cable_drivers/lin64/install_script/install_drivers
にあります。
そこにあるinstall_drivers
を実行すると、
同じフォルダにあるinstall_digilent.sh
とsetup_pcusb
が実行されて、
52-xilinx-digilent-usb.rules
と52-xilinx-pcusb.rules
が
/etc/udev/rules.d/
にコピーされるようです。
$ cd /opt/Xilinx/Vivado/2016.2/data/xicom/cable_drivers/lin64/install_script/install_drivers
$ sudo sh install_drivers
$ udevadm control --reload-rules
# 多分これで良いんだと思うけど、よくわからなかったのでOS再起動をしました。
と、ここまでやったらちゃんとボードが認識されるようになりました。
実はボードファイルもある
実はPYNQ-Z1のボードファイルもあります。
こちらを使っても良さそうです。
Board Settings — Python productivity for Zynq (Pynq)
無事にLチカ
なんやかんやありましたが、無事macからリモートで、Ubuntuに接続されたPYNQでLチカするところまでたどり着きました。
で、ここで重要なことに気がついたんですが、リモートなのでLチカしてても見えませんね。。。
Appendix UG973
さて、インストールのときに無視してしまったUG973についてあとから調べました。
UG973とはVivadoのUser Guideのことでした。
そしてそれを見たところ、しっかりとLinuxのCable Driverのインストールについて書いてあります。
手順は上と一緒なので割愛します。
これを見ると52-xilinx-ftdi-usb.rules
もあるみたいだけど、2016.2にはなかったなぁ。
Appendix Macでも
リモートにあるとLチカ見られなくてしょんぼりしてましたが、
Ubuntuでbitファイルを作って、それをJupyter Notebookで実行してあげればよさそうです。(ちょっと面倒だけど。)
順をおっていうと、
- Ubuntuのvivadoでbitファイルを作成
- Ubuntuで作ったbitファイルとtclファイルをPYNQ-Z1に転送
- PYNQのJupyter Notebookで新しいノートを作成
- Overlayでbitファイルを読み込み
- PYNQでLチカ!
という流れです。4では以下のようにOverlayします。
from pynq import Overlay
Overlay("blink.bit")
# ノートとblink.bit(とblink.tcl)が同じフォルダにあります。
Lチカを止めるときはPROGボタンを押します。
これでやっとMacを使って、PYNQでFPGAプログラムの勉強ができそうです。