Cosmo-ZのFPGAソース公開とビルド方法

# はじめに
Cosmo-ZのFPGAのソースをアップロードしました。
下記のURLからダウンロードできます。
[Cosmo-Z 20191209版](https://www.tokudenkairo.co.jp/login2/getfile.php?target=CosmoZFPGA20191209)
※恐れ入りますが、ご購入のお客様のみダウンロードできます。

## 更新点
今回の更新では、

+ ISE版にあったほぼすべての機能をVivadoに移植
+ ユーザがカスタマイズしやすいようにBlock Designを整理し、階層化した
+ ディスクリを負のパルスだけでなく、正のパルスにもかけられるようにした
+ スピードグレード-1版のZYNQでもタイミング制約を満たすようになった
+ オシロモードでは、同時に計測できるのが8ch以下という制約がなくなった
+ ADCの分解能とチャネル数8ch,16ch,24ch,32ch,12bit,14bit,16bitを簡単に変更できるようにした
+ プロジェクト管理にNahiVivaを採用

といった点が更新されました。
今までのものとは全く異なる、完璧なバージョンとお考えください。

# プロジェクトのビルド方法
## 準備するもの
Vivado 2018.3をご用意ください。

## プロジェクトの解凍
Cosmo-Zはそこそこ大きいVivadoプロジェクトなのですが、NahiVivaというツールを使ってソースのサイズは、わずか3.7MBに圧縮されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/5f828070-7218-ac93-6147-3262910ba73b.png)

解凍すると以下のようなフォルダが現れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/be3ea021-bd57-5544-9f23-bab710dc6a94.png)

## Vivado環境に合わせた設定の変更
この中のSETTINGS.CMDを、お使いの環境に合わせて編集してください。

```SETTINGS.CMD:
@SET VIVADO_PATH=D:\Xilinx\Vivado\
@SET VIVADO_VERSION=2018.3
```
変更箇所は、Vivadoへのパスと、Vivadoのバージョンです。
Vivadoのバージョンを2018.3以外に変更する場合には、このSETTINGS.CMDのほか、src/cosmoz_main_bd.tclの23行目にあるscripts_vivado_versionの設定も変更してください。

```src/cosmoz_main_bd.tcl:
################################################################
# Check if script is running in correct Vivado version.
################################################################
set scripts_vivado_version 2018.3
set current_vivado_version [version -short]
```

## プロジェクトの作成
このアーカイブには、Vivadoのプロジェクトファイル(*.xpr)や、BlockDesignファイル(*.bd)などは含まれていません。すべてTCLのソースから自動生成されます。

プロジェクトを作成するには、open_project_gui.cmdをダブルクリックして起動してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/7799b3c2-3f90-2645-34e5-c75be726531e.png)

MS-DOSプロンプトのようなものが立ち上がったかと思うと、Vivadoが起動し、空のBlock Designが作成されて、いろいろなコンポーネントが自動で追加されていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/a2d186ed-c940-59cb-c0d7-fc343170bb0d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/2cb24965-8172-bd04-5d70-d70276746493.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/62e2ee1b-2f78-f8cf-3eef-6c4adddc64ec.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/dbe0e890-0fcd-4e44-f034-735dbdf21e1e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/ff182e84-6cce-a8c2-430b-f618663b680f.png)
# カスタイマイズ(パラメタライズ)
プロジェクトが読み込まれると、上のほうにぐちゃっとした文字列がありますが、これは重要なので、見やすい位置に移動してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/8599e278-8be4-1b03-b613-0fdf93a49023.png)

ここに書いた内容ですべてのIPコアのパラメータがセットされます。
変更可能なパラメータは、MAX_ADCCH=8とADC_BITS=12です。

お使いのCosmo-Zの構成に合わせてADCのチャネル数(8,16,24,32)と、分解能(12,14,16)を設定します。

普通、IPコアのパラメタライズは、BlockDesignのIPをダブルクリックして、IPコアの設定ダイアログを開いて設定を変更するのですが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/f0230813-ed70-8b2f-a3af-a61a30b22d91.png)
たくさんのIPコアがある場合には設定漏れが生じて、バス幅のコンフリクトが発生するなどのケアレスミスが発生するので、**TCLで一括で変更する**ようになっています。その参照元が*CONFIGS:*で始まるこのコメントです。

## 12bit ←→ 14,16bitを切り替えるときの注意
12bitと14/16bitでは、ADCに送っているクロック周波数の逓倍率が異なります。
Cosmo-Zのデザインはデフォルトでは12bitに設定してリリースしていますが、14bitもしくは16bitで使用したい場合には以下の手順を行ってください。

まず、adcblockをEdit in IP Packagerで開くか、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/4ff66ea0-f6a4-5d82-f903-b6d646ba3536.png)
もしくは、TCLコンソールに
```NahiChild adcblock```
と入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/af6ef96f-fc35-9924-94d9-d5daef376fa0.png)

adcblockの子IPが開くので、adcblock/inst_adcclkgen/inst_phase_shifted_clkgenをダブルクリックして開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/6d59db23-5ee1-7eeb-6b42-9cd6c869c7c1.png)

Output clocksのところで
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/40ce6f40-c077-040a-4df5-1f25a9cd9842.png)

CLK_OUT3の周波数が240.000になっているので、これを320にします。
- 12bitの場合は240MHz
- 14/16bitの場合は320MHz
です。

# いざ、論理合成
カスタマイズが終わったら論理合成したいところですが、**Generate Bitstreamは使いません。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/74ec79b6-23a6-60a4-38a8-bc15fccfa107.png)

TCLのコンソールに、
```NahiRun -update```
と入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/c706a122-25d2-930a-ea1b-76565f5e549d.png)
これで

- 全IPのパラメタライズ
- 子IPのUpdate操作

が合わせて行われます。最初の一回目はIPをGenerateするので時間がかかりますが、2回目以降は5分くらいで論理合成がビルドが終わります。

生成されたBitStreamはvivadoのプロジェクトフォルダの一つ上のフォルダにコピーされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/8e62ba65-5c52-7209-2cd2-f2bb4369b99b.png)

Vivadoは生成したBitStreamが深い階層にあるので、TCLで自動的に上のほうに上げてきているわけです。

# 書き込み
Windowsのファイル共有を使ってCosmo-Zにコピーします。
エクスプローラで\\cosmoz\shareを開き、cosmoz_main_wrapper.bitをコピーします。
そして、Cosmo-Z上のLinuxコンソールから、
```# cat /home/share/cosmoz_main_wrapper.bit > /dev/xdevcfg```
とやれば、新しいデザインで起動します。