FPGA を使う (Zybo編)

#FPGA を使う (Zybo編)
FPGA を味見するのに、どんな FPGA 基板(評価ボード)がよいか？と聞かれて CPU を搭載していない FPGA と答えながら、最初に取り上げるのは Zybo です。そして、いま(2018年12月)から買うなら Zybo ではなくそれ以外がベータです(そもそも売ってない?)。Zybo の後継機種？ともいえる Zybo Z7 ロジックスライス(Xilinx の定義する用語)という容量も Zybo より多いものを選択可能です。

でも最初に扱うのはたぶんユーザが現時点で多い Zybo 。そして、今回はチュートリアル道理にプログラムを動かすだけです。Vivado と SDK を屈指していろいろしなければならないことがよくわかると思います。（なので、初心者向けではないかも。難しさを感じて貰えればよいそれで構いません）

## そもそもどう動かしたら？
たぶん、Zybo を持っている人はすでに何らかのプログラムを動かしている事でしょう。だから今更 Lチカでもないかもしれません。と書くともともこもないので、めげずに進めます。

### まずは公式サイトをチェック
https://reference.digilentinc.com/reference/programmable-logic/zybo/start

たぶんここが公式サイト。

ここにはExample として４つ上がっています。
    	
1. [Zybo DMA Audio Demo](https://reference.digilentinc.com/learn/programmable-logic/tutorials/zybo-dma-audio-demo/start)
2. [Zybo HDMI Input Demo](https://reference.digilentinc.com/learn/programmable-logic/tutorials/zybo-hdmi-input-demo/start)
3. [Zybo HDMI Output Demo](https://reference.digilentinc.com/learn/programmable-logic/tutorials/zybo-hdmi-output-demo/start)
4. [Zybo XADC Demo](https://reference.digilentinc.com/learn/programmable-logic/tutorials/zybo-xadc-demo/start)

そのうちの簡単そうな Zybo DMA Audio Demo を見てみることにする。ソースは github にあります。そして Vivado 2016.4 と古めです。
https://github.com/Digilent/Zybo-DMA

簡単そうな XADC はほんとに簡単で top の verilog ソースだけだった。後で使うことにする。

### Vivado を使う
まずは同じバージョンの Vivado をインストールすることが重要。違うバージョンを使うと余計なところではまります。幸い私は Vivado 2016.4 をインストール済みなのでそれを使います。

### この後は、、、
このまま進めると、たんに上の Demo のページを進めるのと何ら変わらないのでここではざっくり書きます。
1. まずは git clone https://github.com/Digilent/Zybo-DMA
2. ボードファイルも git clone https://github.com/Digilent/vivado-boards
3. そしてボードファイル内の new/board_files/zybo を C:Xilinx/Vivado/2016.4/data/boards/board_files へコピー。
4. Vivado 2016.4 起動
5. proj/create_project.tcl を Vivado から実行 <=これが難しいかも(図参照)
6. 合成(Generate Bitstream をクリック)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/07403d87-561f-48f4-533f-a708d459ebc7.png)

### create_project.tcl にあえなく失敗したら
tcl の console をみて原因を調べてリトライしてください。私はボードファイルのコピーを忘れて見事ミスりました。状態を元に戻すために close project して、Vivado 2016.4 を一度閉じて、proj/cleanup.sh(Linux 用) か proj/cleanup.cmd(Windows 用) を実行しましょう

#### 失敗例
つぎは create_project 失敗例(XADCだが)。Design Sources に何もない。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/6d4d0c2c-3db6-0146-5993-c28fe417cd79.png)
tcl コンソールはエラー
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/99f76797-ee9c-0869-8db8-929c19ee7942.png)


### 成功例
うまくいけば次のようになる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/67b936c6-7c61-f02f-3f8b-77a67baaa3c6.png)

### SDK の起動とインポート
1. Vivado から File -> Export -> Export Hardware (include bitsream にチェック)
2. Vivado から File -> Launch SDK
3. SDK か File -> Import -> Existing Project into Workspace で Zybo-DMA\sdk の dma と dma_bsp をインポート（このとき Copy  Project into workspace をチェック。チェックしなくても大丈夫かも)

こで dma 内に勝手に dma.elf が出来る。
### Zybo 起動
ここからは Zybo を起動する

1. ジャンパーを JTAG にする
2. USB を PC に接続する(電源用兼 UART 用)
3. 電源 ON
4. Tera Term などで COMx を開く
5. SDK に戻って dma を右クリックで Debug As -> Launch on Hardware(System Debugger) を選択
6. なぜか FPGA はダウンロードされていないので Vivado にもどり HardWare Manager を選択
7. Auto Connect
8. Program Device で ビットストリームをダウンロード
9. SDK に戻りプログラムを go するとうまくいけば Tera Term にメッセージが出る。

参考までに書くとちゃんと Debug As のコンフィギュレーションで FPGA をダウンロードするにチェックすると Vivado に戻らなくてもいいはずです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/71b081c1-8805-fc6f-71f9-0704b26de1d7.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/99921/648bb813-e3ca-ef0d-11d2-7f1abfc9710f.png)

### でつかってみる
 plug in your microphone or aux input into the respective jack 
だそうなので、ちゃんと mic in か　line in につないでボタン3を押すと Recording, ボタン2で再生になります。（スピーカがなく未確認です）

### 
### おまけ：XADC のソース見てたら
sysclk というのがあった。RTL8211E-VL から CLK125 としてもらっている。これつかえるじゃん。