PYNQ-Z1を始めます2

# PYNQ-Z1全然触っていませんでした。。。
前に[PYNQ-Z1を始めます](https://qiita.com/sachioksg/items/df287e1a9766b07ec56a)という記事を書いたんですが、
それ以降全然PYNQを触っていませんでした。（時間がなかったというのはただの言い訳）

そうこうしているうちに転職したりして、手元にWindowsPCがなくなっちゃったりしたので、
心機一転Macで開発していくことを書くことにしました。

ただ[FPGAプログラミング大全 Xilinx編](https://www.amazon.co.jp/FPGA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%A4%A7%E5%85%A8-Xilinx%E7%B7%A8-%E5%B0%8F%E6%9E%97-%E5%84%AA/dp/4798047538)とか買ったりしてみたんですが、
開発ツールがWindowsかLinuxしかないというね。。。
これは後で何とかするとして、とりあえずPYNQをPYNQらしく使うことから始めようかと。

# それではセットアップ。
またセットアップしちゃいます。Macで。

このページは押さえておいた方がいいですね。
[PYNQ - Python productivity for Zynq - Home](http://www.pynq.io/)
ここのGetting Startedを読むととりあえずのことはできるようになっています。

## イメージをダウンロード。
思った通りイメージが新しくなっていますね。2018/03/16時点で2018/2/21 Releaseでした。
1.2GBあるので、コーヒーでも飲みながら待ちます。:coffee:
ファイル名は**pynq_z1_v2.1.img.zip**でした。

## イメージをmicroSDカードに書き込む。
ダウンロードしたイメージをunzipして、microSDカードに書き込みます。
前も書きましたがmicroSDはFAT32でフォーマットする必要があります。手順は

1. diskutilでmicroSDのフォーマットをする。ディスクユーティリティで見えてないパーティションもあるので要注意。

```shell
$ diskutil list # デバイスファイルを確認。external, physicalって書いてあると思う。
/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.6 GB    disk3
   1:                 DOS_FAT_32 UNTITLED                104.9 MB   disk3s1
   2:                      Linux                         15.5 GB    disk3s2
# disk3s2がディスクユーティリティでは見えてなかった。

$ diskutil eraseDisk FAT32 PYNQ MBR /dev/disk3 # PYNQとか付けてもあとで上書きされる。
Started erase on disk3
Unmounting disk
Creating the partition map
Waiting for partitions to activate
Formatting disk3s1 as MS-DOS (FAT32) with name PYNQ
512 bytes per physical sector
/dev/rdisk3s1: 30518128 sectors in 1907383 FAT32 clusters (8192 bytes/cluster)
bps=512 spc=16 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=2 drv=0x80 bsec=30547966 bspf=14902 rdcl=2 infs=1 bkbs=6
Mounting disk
Finished erase on disk3
```

２. ddコマンドでイメージを書き込む。

```shell:デバイスファイルが/dev/disk3の時
$ diskutil unmountDisk /dev/disk3
Unmount of all volumes on disk3 was successful
$ sudo dd bs=1m if=pynq_z1_v2.1.img of=/dev/rdisk3 # disk3s1とかしてハマった。。。rについては後述。
Password:
4719+1 records in
4719+1 records out
4948463616 bytes transferred in 461.288801 secs (10727474 bytes/sec)
```

また時間がかかるのでドーナツでも食べながら待ちます。:doughnut:
ちなみにddする時に/dev/disk3s1を/dev/rdsik3にすると早くなるらしい。知らなかった。
以下はdisk3(rなし)でやった結果。

```shell:rなしでdd実行
sudo dd bs=1m if=pynq_z1_v2.1.img of=/dev/disk3
4719+1 records in
4719+1 records out
4948463616 bytes transferred in 653.400986 secs (7573395 bytes/sec)
```

まぁ確かに早いといえば早い。。か。。。約30%減。

## ボードのセットアップ。
ジャンパーピンとかなんとかのセットアップをします。
詳細はGetting Startedを参照。
ただし、この日のためにACアダプタを買ったので、
JP5/PowerはUSBではなくて、REGにしています。
PYNQで使えるACアダプタのコネクタ形状は、外径5.5mm/内径2.1mmみたいです。（これがわからなくて苦労した。)

xilinxのサイトには7V-15Vって書いてったので、12V1Aのものを買ってみました。
[ACアダプター 12V 1A スイッチング式 最大出力12W 出力プラグ外径5.5mm(内径2.1mm)PSE取得品](https://www.amazon.co.jp/gp/product/B00WEPP8E2/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1)
今見たらセールで680円になってる・・・。800円で買ったのに。。。

あとはまずシリアル接続をしてみるので、Ethernetはあとでつなぎます。逆にUSBは繋いでおきます。電源はアダプタだけど。

## 電源を入れる。
ここまで準備出来たら電源ONです。
起動するとLD13が赤く光ったり、LD12が緑に光ったりします。
その後はLD4と5が光ったり、LD0-3がチカチカしたりして、LD0-3が点灯したら起動OKです。

## シリアル接続で見てみる。
macでserial接続する時はscreenコマンドを使います。
Getting StartedのOpening a USB Serial Terminalに色々書いてあります。

```shell
$ ls -1 /dev/tty.usbserial*
/dev/tty.usbserial-00001214A
/dev/tty.usbserial-00001214B # こちらを使います。名前は環境により異なります
$ screen /dev/tty.usbserial-00001214B 115200 # ボーレートは115200です。
# 一回enterを押すとプロンプトが返ってきます。
xilinx@pynq:~$ 
```

screenコマンドを終了するときは、`control + a -> k`のあと、
`Really kill this window [y/n]`と聞かれるので`y`で答えます。
あとこの状態で`sudo reboot`をすると起動状況が見えます。デフォルトのパスワードはそのまま`xilinx`です。

前はあった`update_pynq.sh`がなくなっています。。。
一体どうやってupdateすれば。。。

## ネットワークに繋ぐ。
ネットワークに繋がないとJupyter Notebookに繋がらないので、ethernetに繋ぎます。
なぜこれの前にシリアル接続をするかというと、DHCPでどのIPが取ったのかわからないからです。

ethernetを繋いだら`ifconfig`を実行して、IPアドレスを確認してください。
そうすれば、PYNQにどのIPアドレスが割り振られたかわかると思います。

## Jupyter Notebookにアクセスする。
ブラウザで`http://<さっき調べたIPアドレス>:9090`にアクセスすると、
ログイン画面が表示されます。デフォルトのパスワードは先程同様`xilinx`です。

上位階層に`Welcome to Pynq.ipynb`なるものがあって、
まずはgetting_startedから始めたら良いのかなと思うので、今度はそれをやっていこうかと思います。