pynq-z1 購入から動作確認まで

### まえがき
Qiitaの[そろそろプログラマもFPGAを触ってみよう！](http://qiita.com/kazunori279/items/a9e97a4463cab7dda8b9)という記事を読んで興味を持ったのでDigilent社製の評価ボード[**pynq-z1**](http://www.pynq.io/home.html)を購入しました。

このボード、[$229.00と少々お高く](http://store.digilentinc.com/pynq-z1-python-productivity-for-zynq/)(とはいえFPGA評価ボードとしては安い部類)、現時点では頼みのスイッチサイエンスさんや秋月電子さんが扱ってなくて送料もかかってしまうため一ヶ月ばかり躊躇したのですがえいや！でポチりました。

今日届いて動作確認を行ったところです。

* 実行環境
 * Windows 10

### 購入
1. [Digilentのサイト](http://store.digilentinc.com/pynq-z1-python-productivity-for-zynq/)から購入できるのですが[アカウントの作成](https://store.digilentinc.com/login.php?action=create_account)が必要でした。メールアドレスがアカウント名になりますがメールアドレス自体はアカウント作成後変更可能です。
2. アクセサリーキットはイーサネットケーブル、マイクロSDカードとACアダプターなのでこれは不要。pynq-z1はmicro USB端子からも給電できるため既にRaspberry Pi用に持ってるものを流用しました[^1]。
3. 支払いはクレジットカードまたはPayPalが使える…はずでしたがなぜかPayPalだと支払いがうまく進まずにぐるぐる回りしてしまいました。ここは**素直にクレカで支払い**ました。
4. 配送はFedexです。今はFedexっておうちまで持ってくるんですね。以前は確かクロネコが持ってきてたと思いましたが。日曜日に購入したので発送は月曜日、そして木曜日には到着したのですが不在につき持ち帰り。その後日本通運(今はここと提携しているらしい)にバトンタッチされて金曜日に来訪、また不在票が…ここでやっと「配達時間指定」ができました。これはちょっと不便です。**2日間ロス**するのでもし週半ばに発注していたら**翌週末にようやく受け取り**になるところでした。

### 開梱

これが箱。Fedexの箱が大きいので「ちっちゃ！」という印象。実際はRaspberry Piのおよそ倍の大きさです。
![外箱](https://qiita-image-store.s3.amazonaws.com/0/46294/b9ad3153-eb5a-f714-f432-6060b19779b1.jpeg)

開けてみると導電性のスチロールに挟まった姿で出てきます。静電防止袋に入ってると思ってたんで一瞬戸惑いました。
![中身](https://qiita-image-store.s3.amazonaws.com/0/46294/4e5dd34c-280d-5209-e11e-b36f1ebf3b24.jpeg)

### 準備とスイッチオン

基本的に[Getting Started](https://pynq.readthedocs.io/en/latest/1_getting_started.html)に従ってやっていけばいいですがUSBシリアル通信を使うやり方の説明が結構あります。ただ、pynqの本来の使い方である「Pythonを使ってFPGAを操作する」であればネットワーク経由で操作する方が絶対楽なので読み飛ばしていいと思います[^2]。

1. [micro SD(8GBあればとりあえず十分)にLinuxのイメージをダウンロードしてきて焼きます](https://pynq.readthedocs.io/en/latest/1_getting_started.html#prerequisites)。Raspberry PiでRaspbianを使う場合と同じです。ドキュメントページにもありますがWindowsなので[Win32DiskImager](https://sourceforge.net/projects/win32diskimager/)を使いました。
2. [Setup the PYNQ-Z1](https://pynq.readthedocs.io/en/latest/1_getting_started.html#setup-the-pynq-z1)に従って 1)ジャンパが**SD側**になってることを確認(最初からそうなっていました) 2) OSイメージ焼いたmicro SDを挿す(基板の裏側にソケットがあります) 3) マイクロUSBに電源をつなぐ 4)イーサネットケーブルを挿す
3. 電源スイッチを入れます…あれ？動かない(;_;) ・・・はい、文章の方には書いてあるんですが電源スイッチの横にあるPowerジャンパー、これを**REG側(買ってきた時点の状態)からUSB側に挿し変える**必要があります。
4. 無事にLEDがチカチカし始めて起動しました

### 動作確認

初期状態ではDHCPでIPアドレスを取得するようになっていますのでpynq-z1のアドレスがわかればsshでログインできますが、ドキュメントページにあるように

```bash
http://pynq:9090
```
をアクセスしてまずはpynqが無事に生きてることを確認しましょう。
![pynqJupyter.png](https://qiita-image-store.s3.amazonaws.com/0/46294/9ef4f150-f8db-7457-a5a6-855fe66014f1.png)

ここで初期パスワード ```xilinx``` を入れてJupyter Notebookの画面が出ればOKです。
![pynqJupyter2.png](https://qiita-image-store.s3.amazonaws.com/0/46294/6bf841a9-5476-527c-e198-369b77e94b57.png)

#### IPアドレスを知るには

[Advanced IP Scanner](http://www.advanced-ip-scanner.com/jp/)を使いました。うまく見つかると**PYNQ**というホスト名でIPが表示されます。

せっかくJupyter Notebook(Python3)が動いているのですから[こちら](http://d.hatena.ne.jp/sigwin/20160131/1454241089)のPythonのプログラムを動かして```eth0```のIPアドレスを読み取る手もありますね。

### sshでログインする

IPがわかればsshでログインしましょう。初期アカウント、パスワードともに**xilinx**です[^3]。

```bash
$ ssh xilinx@192.168.0.10  (IPアドレスは適宜)
```
![pynqlogin.png](https://qiita-image-store.s3.amazonaws.com/0/46294/23eee57e-8b16-2058-23f6-a533573d8762.png)

ログインしてみるとUbuntuの(なぜか)15.10でした。~/scripts以下にいくつか親切そうなスクリプトが用意されています。Linuxに慣れてない人向け？のもありますね。

### pynqをアップデートする

Ubuntuなので ``` sudo apt update && sudo apt upgrade ```しそうになりますが専用コマンドを使わないとpynq(つまりPythonを使ってFPGAを触る部分)のアップデートができません。
``` ~/scripts/update_pynq.sh ```でJupyter関連のexampleとFPGAの中身のプログラムデータ(bitstream)など必要なものが自動的にダウンロード→アップデートされます。
買ってきたものにはpynq 1.0が入っていましたがアップデートすると1.3になりました。

これから少しずついじり始めることにします。

チップが結構熱くなるので**まずはヒートシンクとファン**がいるかな。

-------

[^1]: ただしこのせいで一瞬焦ることに。
[^2]: FPGAを専用プログラミングツール(Vivado HLSなど)からプログラムするときには必要
[^3]: 念のため、動作確認後はパスワードを変えておくのがオススメ