1500円ZYNQ基板でFPGAプログラミング大全Xilinx編(第2版)の実習 その1:準備

#はじめに
前の投稿で紹介した安価な ZYNQ 基板は、これから FPGA 入門したいなーという人にも向いてます。
Xilinx FPGA での開発をイチから解説されているとても良い本が発売されましたので、これに沿って学習したいと思います。

FPGAプログラミング大全 Xilinx編 第2版 (税込 4,180円)
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-%E7%AC%AC2%E7%89%88-%E5%B0%8F%E6%9E%97-%E5%84%AA/dp/4798063266
![14_大全.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/8a332970-7380-40d1-3785-a090be33d266.png)

EBAZ4205 は、この辺りから購入します。
https://ja.aliexpress.com/item/1005001855904220.html
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/7e140e8e-5190-f407-3104-e54bf9ab2e67.png)

microSD カードのソケットと、JTAG/UART の 2 種類のヘッダピンが添付されますので、自分ではんだ付けして使います。

もっと安いところがあるかもしれませんが、基板そのものには microSD ソケットは実装されていません。
ソケットが添付されてる物を買うのが良いと思います。
(秋月でも microSD ソケットを売ってますが、フットプリントとか穴位置が微妙に違うかもしれない)

~~壊した~~壊れた時の事も考えて、何枚か買っておきましょう :)


#Digilent 製品と EBAZ4205 の比較
FPGAプログラミング大全は、Diglent 社の下記 4 製品のどれでも使えるように記述されています。

>Cora Z7-07S
>Cora Z7-10
>ZYBO Z7-10
>ZYBO Z7-20

EBAZ4205 でも、XC7Z010 が搭載されています。
各基板の仕様を比較してみます。
![2_比較表.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/6f0eab02-84ee-9b1a-0fd6-4ababf031439.png)


最も仕様が近い Cora Z7-10 をベースにして、EBAZ4205 で同じ事ができるように進めたいと思います。

#ダウンロードケーブル
FPGA のダウンロードは、Digilent 製品だと USB から行えますが、EBAZ4205 ではできません。
Xilinx 用ダウンロードケーブルが別途必要になります。

純正 HW-USB-II-G (DLC10) は Digi-key で3万円ですが、ali で互換品が $25 ぐらいで買えます。
秋月でも Digilent JTAG-HS3 が 6350 円で買えます。
![15_dl_cable.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/75ca1745-2c67-50ef-c231-7cfdd3560f6c.png)

中華品は DLC9(旧)と DLC10(新)の2種類見つかりますが、新しい方がよさそうです。
私は Xilinx 純正品を持っていますので、これで進めます。


#EBAZ4205 基板の改造
実習を進めるにあたり、EBAZ4205 で不足しているものを追加します。
多少、はんだ付けのテクニックが必要です。

参考: EBAZ4205 回路図、基板情報など(英語)
https://github.com/xjtuecho/EBAZ4205/tree/d41c46c1b50a12b513990dcb102a621e5fdcfe08

##1. 電源供給線の準備
PCIe グラボ用の 6pin 電源コネクタ(Ainex PX-005B)を改造して、電源ハーネスを作成します。

別途用意する電源の容量は、5～12V で 4～5W 程度あれば十分です。
(5V 1A とか、12V 400mA の AC アダプタでよい)
黄色に+、黒に-を接続します。
![4_ainex.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/198f1a7e-a395-b64c-4d61-0661336ab4af.jpeg)

##2. 電源ジャンパの取り付け
J4 から電源を供給したいので、非実装になっているはんだ面の D24 をショートしておきます。
例では、はんだ吸い取り線の切れ端でつなぎました。
![4_D24ショート.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/0cc0978d-28ae-9662-51e5-85943a501d3c.jpeg)

面倒でしたら、回路図の "IN" と書かれている電源ラインに、直接 5～12V を入力してもよいです。
この場合、D24 はつけなくて構いません。
![3_電源供給.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/9e0d0666-fee9-7135-ac83-13a28b7b79ea.png)


##3. microSD カードソケットの取り付け (U7)
ソケットが添付されてきましたので、先につけておきます。
J8(JTAG) を付けた後では、作業がやりにくくなります。
![5_SD_socket.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/62f093b2-6dd4-db0c-053e-979f1f63fc62.jpeg)


##4. JTAG 端子の取り付け (J8)
J8 に 2.54mm ピッチの 2x7P ピンヘッダをはんだ付けします。
信号名を書いておくと、わかりやすいです。
写真で手前側の列が各信号、奥側の列はすべて GND です。
![6_JTAG.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/e685f7ef-0c04-f28a-76ef-e61dfaf683e1.jpeg)

Xilinx 純正ケーブルと互換品は 2.0mm ピッチの 2x7P のコネクタがついてますので、そのままでは挿さりません。
純正なら先バラケーブルが付属していますので、それが使えます。
互換品は適当な方法で 2.54mm ピッチに変換してください。

##5. UART 端子の取り付け (J7)
J7 に 2.54mm ピッチの 4P ピンヘッダをはんだ付けします。
![7_UART.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/22125d77-5b30-b86d-97c0-b5ec12bf5822.jpeg)

##6. プッシュスイッチの追加
空いている U67, U68 を利用してスイッチを追加します。
周辺の抵抗を、いくつか変更する必要があります。
R1345, R1362 から外した33Ωは、次で使いますので、どちらか1つとっておきます。
![12_SW設置.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/d13cb879-dc7c-6787-ea28-706f5bfe6b93.png)

>1. R2552, R2553 の 33Ω を取り外す (回路図ではNCですが、実機では33Ωついてます)
>2. U67, U68 の pin2-4 間に、タクトスイッチを取り付け
>3. U67, U68 の pin3-4 間に、10KΩを取り付け (1608 または 2012 サイズ)
>4. R1344, R1361 の 10KΩ を取り外す
>5. R1345, R1362 から 33Ω を取り外し、R1344, R1361 へ取り付け<br>
>⇒ R1345, R1362 は NC に、R1344, R1361 は 33Ω になります。

![8_PUSH_SW.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/2f6a517b-2c8e-dbb5-8dd1-f3142ef2b43e.jpeg)
![10_SW_ura.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/bd8babdf-4b89-05ca-4318-f8eddfaf9d55.jpeg)

##7. クロック供給線の追加
EBAZ4205 では、PL 側で使えるクロックが用意されていません。
PS のマスタークロックで使われている 33.333 MHz を PL 側へ伝えるジャンパ配線を追加します。
発振器の出力に 33Ω を設置して分岐させ、R1372 の ZYNQ 側へ接続します。
N18(IO_L13P_T2_MRCC_34)ピンに 33.333 MHz が供給されます。
![13_クロック配線.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/f745e100-6aa8-c84e-749e-60e1eab1f83f.png)
![9_CLOCK.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/4239fa1a-64c8-5cb9-5704-08a73f9218ff.jpeg)

Cora Z7-10 基板では H16(IO_L13P_T2_MRCC_35)ピンに 125MHz が供給されています。
ピンの違いは .XDC ファイルに記述して、周波数の違いは RTL で吸収します。
設計をそのまま流用すると 33.33/125 = 0.27 倍でスロー動作になりますので、カウンタ分周数を 1/4 ぐらい削減するとだいたい同じにできます。


#まとめ
安価な ZYNQ 基板をきっかけに、FPGA を学習する準備ができました。
Pmod VGA または HDMI 出力を使う例題以外は、これで動かせます。

別途、拡張コネクタへ接続する基板を用意して、HDMI 出力も実現したいと思います。
![11_matome.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/955220/208dc9e1-ede6-0570-c20d-96e434561784.jpeg)