PYNQ-Z1のセットアップやってみた

#はじめに
寒風吹きすさぶ東京の空の下、昨夜徹夜で読み込んだ「インターフェース1月号」のP４６の記事
「実験研究：注目AIコンパイラで広がる組み込み人工知能の世界」
の内容が面白く、是非、ピンク色のPYNQ-Z1というFPGAボードを手に入れたくて、秋葉原に行ってきました。
お店の人に聞くと、「FPGA入れとくと聞いているだけで、詳細は分かりません」とのこと。
でも、香港から空輸で調達するしかなかった時代もあると聞くので、地下鉄とJRでその日のうちに入手できるのはとてもありがたいし、エキサイティングです。
#開封の儀
値段はシールが貼ってあるので分かりますが（w）、25,800円でした。ま、もちろんラズパイ（大体、５,８００円くらい）と比べれば、４倍強なので高く感じます。結構、悩んでいる自分が可愛かったです。
でも、ラズパイではひっくり返っても不可能なことが出来ちゃう訳で、それを考えるとワクワクして、高さを和らげてくれますよね。
![pynq-case.jpg](https://qiita-image-store.s3.amazonaws.com/0/327825/4b391fc0-d32a-b4eb-8ace-dd35a142ffcd.jpeg)
おお！ホンマにピンクやんけ。w
可愛い。

![pynq-00.jpg](https://qiita-image-store.s3.amazonaws.com/0/327825/527736f6-083d-a4cb-a42a-79879cac1335.jpeg)

#PYNQ-Z1の概要
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/68a1c8c7-b0a2-cfe5-3019-daecbf3ba7d0.png)

```
1.Set the JP4 / Boot jumper to the SD position by placing the jumper over the top two pins of JP4 as shown in the image. (This sets the board to boot from the Micro-SD card)
2.To power the PYNQ-Z1 from the micro USB cable, set the JP5 / Power jumper to the USB position by placing the jumper over the top two pins as shown in the image. (You can also power the board from an external 12V power regulator by setting the jumper to REG.)
3.Insert the Micro SD card loaded with the PYNQ-Z1 image into the Micro SD card slot underneath the board.
4.Connect the USB cable to your PC/Laptop, and to the PROG - UART / J14 MicroUSB port on the board
5.Connect the board to Ethernet by following the instructions in Ethernet Setup
6.Turn on the PYNQ-Z1 by following the instructions in Turning On the PYNQ-Z1
```

Ethernetの設定（Windows10編）

さてLANケーブルでEthernetに繋げないとだめらしいのですが、今私のPC（Win,Macとも）　LANのポートは無いので、手持ちの　AppleのUSB Ethernet Adapterを使います。ただ、これもすぐには認識してくれませんでした。
調べたところ、
[Windows 10 のマシンでApple純正のUSBEthernetアダプタを使う方法](https://mihochannel.wordpress.com/2016/03/03/windows-10-%E3%81%AE%E3%83%9E%E3%82%B7%E3%83%B3%E3%81%A7apple%E7%B4%94%E6%AD%A3%E3%81%AEusbethernet%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%82%92%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%95/)
を参考に、Boot Camp Support Software 5.1.5621
というのを落とし、その中の、
\BootCamp5.1.5621.zip\BootCamp\Drivers\Asix\AsixSetup64.exe
を実行したところ、【イーサネット】という名前で、認識してくれました。

# イーサネットプロパティの設定
PYNQは、デフォルトで

```
192.168.2.99
```

が自身のIPとしているようで、【イーサネット】も同じIPレンジで以下のように
設定する必要があります。

```
IPv4:192.168.2.1
subnet mask : 255.255.255.0
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/1d1469bf-4397-260e-1125-930cfae881dd.png)
プロパティ設定のダイアログで
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/e881cda7-4ffe-b387-aad1-c8a75cec297c.png)

[インターネットプロトコルバージョン４（TCP/IPv4)]->[詳細設定]
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/4d4f0521-f8a0-0aad-e6de-93de146c66ea.png)
と設定します。
これで、　Apple USB Ethernet Adapterが無事認識されます。



#起動イメージの準備
詳細な原文のチュートリアルはこちらから。
https://pynq.readthedocs.io/en/v2.0/appendix.html#writing-the-sd-card
SDカードのMacでのデバイス名を調べます。
「Appleマーク」->「このMacについて」->「システムレポート」->「USB」
で右欄のBSD名を見ます。私の場合は、disk6でした。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/31af4f81-038e-e183-bfbf-20e581ba2257.png)

```
diskutil list
```

```
/dev/disk6 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *7.9 GB     disk6
   1:             Windows_FAT_32 NO NAME                 104.9 MB   disk6s1
   2:                      Linux                         4.0 GB     disk6s2

```

調べたところ、最低８Gで良いということで、そのようになっていますね。

次にここから、イメージを落とします
[Download the PYNQ-Z1 image](https://files.digilent.com/Products/PYNQ/pynq_z1_v2.0.img.zip)
#microSDカードへの書き込み

そして落としたディレクトリでそれを解凍します。

```
$ unzip pynq_z1_v2.0.img.zip -d ./
Archive:  pynq_z1_v2.0.img.zip
  inflating: ./pynq_v2.0.img         
```

僕の場合は、rdisk#がrdisk6なので

```
$ sudo dd bs=1m if=pynq_v2.0.img of=/dev/rdisk6
3946+1 records in
3946+1 records out
4137779200 bytes transferred in 171.564731 secs (24117889 bytes/sec)
```
イメージをmicroSDカードに書き込みます。

```
sudo dd bs=1m if=image.img of=/dev/rdisk
```
途中進行状況を知りたければ、Ctrl+T

```
load: 2.32  cmd: dd 35469 uninterruptible 0.00u 0.80s
1481+0 records in
1480+0 records out
```
```
sudo dd bs=1m if=image.img of=/dev/rdisk
```
```

```
#電源ON！！
電源スイッチを入れます！カチャ。
あれ？動かない。うんともすんとも。。。
で、よおおく調べてみると、前出の

```
2.To power the PYNQ-Z1 from the micro USB cable, set the JP5 / Power jumper to the USB position by placing the jumper over the top two pins as shown in the image. (You can also power the board from an external 12V power regulator by setting the jumper to REG.)
```

が出来ていなかった。①のジャンパピンは工場出荷時に言われたとおりになっていたので、②もそうだと思い込み、しかも、図を見るとUSB側になっているように見えたから、何もしなかった。正しくは、REG側に出荷時にはなっていたので、USB側に差し替えたら上手く動きました。
（こういうところで時間がとられるんですね）

#Vivadoのインストールと設定
まずは、Vivadoの起動から。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/b4349e07-5aa7-d48c-9e09-0c680efbcf36.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/93f98e4f-a971-bfaf-0148-0e3af25847cf.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/46eefa65-c421-4302-ccd8-94be26bea2cd.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/c5fda43a-67a9-2bf1-1580-ec9b681a48a2.png)
Example Projectを元に、作って行く方法もありそうだが、参考記事のとおり、私も「RTL Project」を選ぶ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/969a5f84-dbd6-2b00-d0d9-5dbdcac10597.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/19aea6f4-00a8-b2a4-762b-0fc9a8e6a7c6.png)
ソースは未だ何も作っていないので、Nextで次へ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/72f18b9b-8227-68b1-2e89-1d410874d4ab.png)
Constarintsでは、PYNQボードの設定ファイルを指定するらしい。「Add Files」から、*.xdcというファイルを選ぶらしい。[こちらの記事](https://yuki-sato.com/wordpress/2014/12/30/zynq4/)
を参考に設定していきます。記事には以下のような説明があるので、PYNQの場合も、PYNQ Board definition fileと、PYNQ XDC fileというが必要そうだということは分かった。

```
DigilentのZYBOのサイトへ行きます。
http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,1198&Prod=ZYBO
ここにはZYBOの回路図などもあるので後々役に立つかもしれません。
今回はVivado用の2つのファイルをダウンロードします

ZYBO Board Definition File for configuring the Zynq Processing System core in Xilinx Platform Studio and Vivado IP Integrator.
ZYBO Master XDC File for Vivado designs.
```

##Boardの設定ファイルの設定
色々調べた結果、PYNQ-Z1の場合は、

https://pynq.readthedocs.io/en/v2.3/overlay_design_methodology/board_settings.html
このページから、　PYNQ-Z1 board files , PYNQ-Z1 master xdc constraintsという２つのファイルを落とすことが判明。
以下２つのファイルを落としますが、どうもPYNQ-Z1_C.zipの方だけでいいみたい。解凍するとPYNQ-Z1_C.xdcというのが現れる。

```
pynq-z1_c.zip
pynq-z1.zip
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/9e747616-e4dd-f5ed-c98f-92f61d5abb6e.png)
ダウンロードした2つのうちpynq-z1_c.xdcというのを選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/846cb4b5-5869-4bd8-2002-40c33a25109e.png)


で、「Default part」ダイアログが重要みたい。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/685f65ba-35f1-d634-05d0-7cb1c7ec96ff.png)
まず、partってなんぞや？





![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/02ab5b84-2a5b-64c8-3f05-99943ce11b54.png)

```
 XC7Z020-1CLG400C
```
というのが、PYNQ-Z1のチップ名のようです。デバイス名の命名則は以下の資料は、
https://japan.xilinx.com/support/documentation/data_sheets/j_ds190-Zynq-7000-Overview.pdf
のP.21に説明があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/794e6bd6-21cc-0232-1e4c-e27dc12277ab.png)

なので、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/1ae9f015-9671-25cb-ebc6-5f75ed597c6e.png)

最後の桁が、１か２か３か？悩んだのですが、チップ名の最後がCなので、
C列で且つ、xc7z020で当てはまるのは、-1ということで下図のように選択しました。どうか、これで合っていて欲しい。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/40d50c69-c97c-546d-08a4-b9b147988ba9.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/4c0f2803-5f80-d3ac-b768-4559f5610069.png)
すると、おお！プロジェクト画面が出てきました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/63d6061d-48d6-e362-db2c-b58b0c4f2fed.png)
ここまでのVivadoのインストール手順は、[こちらの記事](https://wakky.tech/442782234-html/)を参考に、PYNQ-Z1用に調査してみた次第です。

#VivadoでHelloWorldを動かしてみよう
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/bdfaf589-58ae-379a-fb15-cfd7a0e74ffd.png)

＋のアイコンを押すと、IP(Intellectual Property)を追加するダイアログが出てきます。検索でzynqと入れると
[ZYNQ7 Processing System]というのが出てくるので、選択。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/2d1a091a-436f-bf4f-a35e-c85a3936eb3b.png)

Block Diagramウィンドウの中に、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/9d56e85b-b6e3-61f7-c9b8-91e84c6174ad.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/7f70ca66-813f-285a-2a6f-aae6c1ffbd91.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/5e072009-4ad7-5d4f-677a-a25c2e801316.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/59d791ce-ad8f-d3eb-c856-1f5ae6528d74.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/9a398023-cb3b-1d75-d6f0-08e431657e4d.png)


![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/e32c367b-8084-d29a-f547-2599e6b47bd9.png)

Generate Block Design
![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/e846a5c2-c72f-63f5-401d-ff6a65b4d899.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/8b5954ca-fb42-1c50-d028-269e081e604d.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/dd444c2b-936c-442b-e84b-4331e7ccd6a9.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/b95619c5-2e15-a3e6-4551-129124faf926.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/d8d1913a-ad87-1a68-aa33-999fb6e1c461.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/327825/343c12e8-0e20-dacb-9e9f-dceb857066d5.png)

[DeepLearning ハードウェアアクセラレータ：VTAをPYNQ-Z1 で動くようにセットアップしてみた](https://qiita.com/takunkun/items/29e26c03c53c25503188)