ZYBO (Zynq) 初心者ガイド (1) 開発環境の準備

- __[1回目: 開発環境の準備](https://qiita.com/take-iwiw/items/966f252f6ca954aff08b) <--- 今回の内容__
- [2回目: Hello Worldプロジェクト](https://qiita.com/take-iwiw/items/24a8a94741fdbb80f62a)
- [3回目: PSのGPIOでLチカ](https://qiita.com/take-iwiw/items/39d2ed00fa88a1204fce)
- [4回目: PLのAXI GPIOでPSからLチカ](https://qiita.com/take-iwiw/items/a3b935a4e4dbd41593e1)
- [5回目: PLだけでLチカ](https://qiita.com/take-iwiw/items/efcdfca1866b9941fd2a)
- [6回目: 自作IPでLチカ](https://qiita.com/take-iwiw/items/b0f2ce7b4653bc6f32b9)
- [7回目: ブートイメージを作る](https://qiita.com/take-iwiw/items/ece0cdf83e6e1908fad8)
- [8回目: Linux起動する](https://qiita.com/take-iwiw/items/6e6915f7318689818368)
- [9回目: Linuxカーネルを少しカスタマイズする](https://qiita.com/take-iwiw/items/6f2644d16cbfdb021d07)
- [10回目: LinuxのRootFSをカスタマイズする / PythonでHello World](https://qiita.com/take-iwiw/items/94a90047978664159681)
- [11回目: LinuxユーザアプリケーションでLチカ](https://qiita.com/take-iwiw/items/5e4ab9a106acfda2c866)
- [12回目: LinuxカーネルモジュールでLチカ](https://qiita.com/take-iwiw/items/e7efc48d92d7b979efdc)
- [13回目: LAN(Ethernet 0)を使う](https://qiita.com/take-iwiw/items/ac489acaca1ab54d7ce8)
- [14回目: Linuxユーザアプリをデバッグする / RootFSに取り込む](https://qiita.com/take-iwiw/items/8134ca7098622219b177)
- [15回目: Linux起動時にアプリケーションを自動実行させる](https://qiita.com/take-iwiw/items/50065df6cdd1ba8bcbd6)
- [16回目: Linuxから自作IPをUIOで制御する](https://qiita.com/take-iwiw/items/da91ce4dc2a8a8df3c0a)
- [17回目: Linuxで自作IPのデバイスドライバを作る](https://qiita.com/take-iwiw/items/05eb1204cb51ce0a5c03)
- [18回目: IoT化してスマホからLチカ](https://qiita.com/take-iwiw/items/e9311292c5078d785699)

# この記事について
2018年になったので、何か新しいことをやろうと思い、ZYBO(Z7-20)を購入しました。自分のメモ代わりにやったことをまとめていこうと思います。初心者用のガイド記事ではなく、初心者によるガイド記事です。
まずは、開発環境の準備です。

## 簡単な事前説明
こんな記事を見ているということは、既に事前知識がある程度あると思うのですが、簡単に用語説明です。

- Zynq
	- Xilinxから販売されているFPGA SoC。Programmable Logic部(FPGA)とProcessing System部(CPUと、UART/GPIOなどのペリフェラルIP) から成る
- Zybo
	- Digilentから販売されている、Zynqを搭載した開発ボード
- Zybo Z7-20
	- ZYNQ-7020を搭載した開発用ボード。CPUはCortex-A9 x 2個
- Vivado Design Suite
	- 複数のツールから構成される、Xilinxの設計開発環境。主に使うのは、以下の2つ
	- Vivado: RTLを書いたり、配置配線をする。これでハードウェアを作る
	- Xilinx SDK: Vivadoが吐き出したハードウェア情報を基に、CPU上で動作するソフトウェアを作る (EclipseベースのIDE)

![01.png](https://qiita-image-store.s3.amazonaws.com/0/214268/79250783-5d49-fe1b-6430-f1e3b1f18351.png)

## 環境
- 開発用PC: Windows 10 64-bit
	- Vivado 2017.4 WebPACKライセンス
	- Xilinx SDK 2017.4
- ターゲットボード: ZYBO (Z7-20)
	- DIGILENT (http://store.digilentinc.com/zybo-z7-zynq-7000-arm-fpga-soc-development-board/)
		- せっかくなのでケチらずに「Zybo Z7-20 with SDSoC Voucher」にしました
		- SDSoCは、C/C++/OpenCLで開発が出来るツールのようです。直近は使いません。ただし、無印の「Zybo Z7-20」を購入した時に、Vivado WebPackのライセンスがついてくるかは不明
		- 秋月でも購入できます。秋月だと、SDSoCのライセンス付きのようです

# 購入後の確認
## ボードの動作確認
購入時点で、動作確認用のプログラムが書き込まれています。ジャンパやスイッチもデフォルトでOKなのですが、念のため以下設定を確認してください。

- JP5: QSPI (QSPIからコンフィギュレーションする)
- JP6: VV5VD-USB (電源はUSB給電)

HDMI TXにHDMIケーブルを接続する。J12（電源スイッチの下）のマイクロUSB端子にUSBケーブルを接続する。これは電源供給のためなので、USBチャージャでもPCでもOK。電源スイッチをONにして、HDMIを接続した先のディスプレイに以下のように出力されればOKです。
__動作確認が出来たら、インストール前にUSBケーブルは抜いておいてください__

![02.jpg](https://qiita-image-store.s3.amazonaws.com/0/214268/735ddb8f-0c65-a166-1995-93b91deb29b2.jpeg)


## ライセンス番号の書かれたバウチャーを確認する
以下のような紙が同梱されているはずです。ここに、ライセンス番号が記載されています。数字4桁、ハイフン、数字6桁、ハイフン、英語4桁、ハイフン、数字9桁。 
バウチャーの見た目や配布方法は変わるかもしれませんが、ライセンス付きを買ったにもかかわらず、ライセンス情報がどこにもなかったら、販売元に確認してください。

![03.jpg](https://qiita-image-store.s3.amazonaws.com/0/214268/dbb57a0d-a9a7-01f1-05dc-59f3f266ac18.jpeg)

# Vivadoのインストール
## ツールのダウンロード
Xilinxのサイト(https://japan.xilinx.com/support/download.html )から、開発ツール(Vivado Design Suite)をダウンロードします。ダウンロードしようとしたら、ユーザ登録や会社情報の入力を求められると思いますが、素直に入力しましょう。個人の場合、会社名は「Individual」で良いと思います。ウェブインストーラとイメージ全部入り(16GByte)がありますが、ひとまずイメージ全部入りがおすすめです。

![04.jpg](https://qiita-image-store.s3.amazonaws.com/0/214268/a668f60b-9348-ff58-7572-2907bca7ffc2.jpeg)

__追記(2018/1/23)__
将来的にSDSoCを使用する可能性がある方は、下記インストーラを使用して、SDSoCもまとめてインストールした方が楽だと思います。Vivado、Xilinx SDK、Vivadl HLSに加えて、SDSoCもセットになったインストーラです。
https://japan.xilinx.com/support/download/index.html/content/xilinx/ja/downloadNav/sdx-development-environments.html

## ライセンスのアクティベート
ダウンロードを待っている間にでも、ライセンスのアクティベートを行います。まず、Xilinxのサイト(http://www.xilinx.com/getlicense )に行きます。再度ログインを求められて、以下のようなページに飛ばされます。  

![05.jpg](https://qiita-image-store.s3.amazonaws.com/0/214268/e92b2142-a911-fd62-1748-c9fb73e4afb9.jpeg)

「enter voucher code」の所に、先ほど確認したライセンスをハイフン付きで入力して「Redeem Now」をクリックします。その後、Certificate Based Licensesのリストから「Vivado Design Suite: HL WebPACK...」をチェックします。そして、「Generate Node-Locked License」をクリックします。すると、画面が変わり、ライセンスファイルをメールしたという旨のメッセージが表示されます。

1分後くらいにメールが届き、ライセンスファイル(Xilinx.lic)が添付されているので、それをダウンロードしておきます。次に、Vivado License Managerを起動します。Windowsだと、基本的にツールは全部、スタートメニュー->Xilinx Design Toolsの下にあります。

Load Licenseを選択し、Copy Licenseをクリックします。そして、先ほど入手したラインセンスファイル(Xilinx.lic)を選択すれば、ライセンス設定が完了します。

![06.jpg](https://qiita-image-store.s3.amazonaws.com/0/214268/d1e95b7e-b8da-eb55-fb86-3e3c1e5ed14f.jpeg)

### SDSoCもインストールする場合
SDSoCを使うレベルにまで達せるか分かりませんが、せっかくライセンス付きを買ったので、こちらのライセンスも有効にしようと思います。Certificate Based Licensesのリストから「Vivado Design Suite: HL WebPACK...」と「SDSoC Environment,...」をチェックしてください。この場合は、固定のノード(パソコン)でしかツールを起動できないようになります。そのため、パソコンを特定するための情報を設定する必要があります。下記の図はハードディスクのシリアル番号にする場合の例です。Host ID TypeにDisk Serial Numberを選択します。入力するシリアル番号は、コマンドプロンプトから`vol c:`で確認できます。後は、先ほどと同じです。

![07.jpg](https://qiita-image-store.s3.amazonaws.com/0/214268/13aed8b6-cb4c-ab6a-9e66-eede6f418fe8.jpeg)


### ライセンスの対象製品と有効期限について
何故か分かりませんが、Certificate Based Licenses上では、Vivado WebPACKは2015かそれ以前、SDSoCが評価期間60日、のように表示されていました。しかし、実際には以下のように、SDSoCのライセンスは無期限だし、Vivado 2017.4に対してもライセンスを使うことが出来ています。ただし、2019.1以降のバージョンに対しては使えないっぽいです。

![08.jpg](https://qiita-image-store.s3.amazonaws.com/0/214268/c5c6f9d9-c05e-6e7c-3323-d89c98760a0f.jpeg)

## インストール
全イメージダウンロードしたとして説明します。ダウンロードしたXilinx_Vivado_SDK_2017.4_1216_1.tar.gzを解凍してxsetup.exeを実行します。基本的には全部デフォルト設定でOKです。エディションは「Vivado HL WebPACK」を選択します。インストール内容で、SDKもちゃんと選択されていることを確認してください(デフォルトでチェックついていると思いますが)。

![09.jpg](https://qiita-image-store.s3.amazonaws.com/0/214268/df441d26-f6c9-f72e-343a-c205cc51b0b2.jpeg)
![10.jpg](https://qiita-image-store.s3.amazonaws.com/0/214268/4e64d7df-610d-0c19-aa11-81cff5907cb4.jpeg)
![11.jpg](https://qiita-image-store.s3.amazonaws.com/0/214268/a6a1d6f8-6509-3d8a-1d97-8470fefaa275.jpeg)

## Vivadoを起動してみる
インストール後、デスクトップにVivadoのアイコンが作られるので、ダブルクリックして起動します。以下のような画面が出ればOKです。Vivado HLSのアイコンも同時に作られますが、直近は使わないので無視してOKです。(Vivado HLSはC等の高級言語からハードウェアを作る、高位合成ツールというものらしいです)

![12.jpg](https://qiita-image-store.s3.amazonaws.com/0/214268/b850a69a-1eee-3340-04f1-c30b86c5af64.jpeg)

# ZYBOボードファイルの取得
今回は、ZYBOのボードを使用して開発を行います。そのため、ボード固有の接続情報等が必要になります。例えば、どのピンがLEDにつながっているか、等です。LEDくらいなら自分で設定することもできそうですが、DDRなんかは自分でやるのは厳しいです。そこらへんの情報をxmlで定義してあるものがボードファイルです。クロック設定なんかも入っていると思います。ZYBOはDigilentから販売されているため、DigilentのGithub(https://github.com/Digilent/vivado-boards/archive/master.zip )から取得できます。

標準のインストール先だと、ボードファイルは`C:\Xilinx\Vivado\2017.4\data\boards\board_files`に保存されています。先ほどダウンロードしたファイルを解凍し、`new`というフォルダの中にある`board_files`をコピーします。すると、後でVivado上でZYBOボードを使った開発が出来るようになります。

# 参考
https://reference.digilentinc.com/reference/software/vivado/board-files

# おわりに
この記事は、組み込みソフトウェアエンジニアである自分がZynqを勉強した形跡です。ZynqもFPGAも素人です。調べながらやった内容を、自分のメモ代わりにほぼノータイムで、推敲なしに記載しています。そのため、間違いがあったり、後から記事の内容が修正される可能性がありますので、ご容赦ください。もしも間違っている内容等ありましたら、ぜひご指摘ください。