PYNQ-Z1 > H16 (the 125 MHz external reference clock)を使ってみる > Clock Divider IPで分周して1.25HzをAnalog Discovery 2で測定

```txt:動作環境
Windows 10 Pro (v1909) 
PYNQ-Z1 (Digilent) (以下、PYNQと表記)
Vivado v2019.1 (64-bit)
Analog Discovery 2 (以下、AD2)
```

## the 125 MHz external reference clock

https://reference.digilentinc.com/reference/programmable-logic/pynq-z1/reference-manual#clock_sources

11 Clock Sources

![コメント 2020-06-14 093915.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/ce1ef734-f48c-d506-734e-4f614d538101.png)

> The PL of the Zynq-Z7020 also includes 4 MMCM’s and 4 PLL’s that can be used to generate clocks with precise frequencies and phase relationships. Any of the four PS reference clocks or the 125 MHz external reference clock can be used as an input to the MMCMs and PLLs. For a full description of the capabilities of the Zynq PL clocking resources, refer to the “7 Series FPGAs Clocking Resources User Guide” available from Xilinx. 

自分が理解したのは以下。

- H16には125MHzのクロックが入る
- そのクロックはPLで動く
    - PSがないときにも動く

これをVivado Block Designで使おうとしたが、よくわからなかった。
いろいろ調べて思ったのは、H16はBlock Designでは指定せず、I/O Port設定(もしくはXDC設定）で指定する、ということ。

それを確認する回路を作ってみた。

## Clock Dividerで分周して測定

### Clock Divider IP (myIP_clockDiv)

- [PYNQ-Z1 > VHDL > Clock Divider IPの実装と使用 (ZYBOでの実装を参考として)](https://qiita.com/7of9/items/5a01506b226466b27c55)

上記で使ったIPを今回も使う。
プロジェクトSettingのIPに追加しておく。

![コメント 2020-06-14 094532.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/0bd71101-128e-f68f-b41d-0c53c7f396be.png)


### Block Design

以下のようにした。

![コメント 2020-06-14 095816.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/9f7ee83b-a519-02dd-411c-d3496bdc5ae0.png)



M_AXI_GP0_ACLKはFCLK_CLK0へ手作業で接続した。
myIP_clockDiv_0のclk_125MHzとclk_1p25HzはMake Externalで作成してラベルをそれぞれのものにした。

xlconstant_0は以下の設定としている。
125MHz入力が1.25Hzになるはず。

![コメント 2020-06-14 094625.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/cdd4e06a-9b6d-8089-3e13-b02dae30728b.png)

- Const Width: 29
- Const Val: 100000000

### XDCファイル

```
set_property PACKAGE_PIN H16 [get_ports clk_125MHz]
set_property IOSTANDARD LVCMOS33 [get_ports clk_125MHz]
set_property PACKAGE_PIN Y18 [get_ports clk_1p25Hz]
set_property IOSTANDARD LVCMOS33 [get_ports clk_1p25Hz]
```

今回はPMODAの1ピンを使う。PYNQの回路図でPMODAのJA1_PがY18に接続されていることを確認して、上記とした。
H16の指定は、冒頭に掲載した125MHzのピンがH16であることから指定している。

- [PYNQ回路図](https://reference.digilentinc.com/_media/reference/programmable-logic/pynq-z1/pynq-z1_sch.pdf)

Run simulationしたときのI/O Portsを参考までに掲載しておく。

![コメント 2020-06-14 095339.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/d9a3f53c-ee48-bf3d-4078-9660df2a1548.png)





## 動作確認

### 接続

Analog Discovery 2 (AD2)との接続は以下とした。

- PYNQ PmodA GND <=> AD2 GND
- PYNQ PmodA 1ピン <=> AD2の1+ (Scopeで使うピンのプラス側)

### 測定

WaveFormsのScopeで測定した。

![コメント 2020-06-14 100439.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/3a9f1403-714f-9e63-0ed4-b4ff438d845b.png)

1クロックがdelta time 793.8 msである。

1/793.8 * 1000
1.2597 Hzと確認できた。



### 関連

- [FPGAの部屋さん: ZYBOのHDMI入力をVGA出力に出力する3（バグフィックス？）](http://fpga.blog.jp/archives/2015-07.html?p=2)
    - clk125の記載があある
    - clock wizardにして使用
- [What is the use of CLK125 on Ethernet PHY?](https://electronics.stackexchange.com/questions/325552/what-is-the-use-of-clk125-on-ethernet-phy) @ StackExchange
    - Block Designで接続しなくていい、という記載がある
- [ZYBO (Zynq) 初心者ガイド (5) PLだけでLチカ](https://qiita.com/iwatake2222/items/efcdfca1866b9941fd2a#%E3%83%94%E3%83%B3%E3%82%A2%E3%82%B5%E3%82%A4%E3%83%B3%E3%81%AE%E6%B1%BA%E3%82%81%E6%96%B9)
    - 125MHzがK17に入っている、という記載あり

皆様、情報感謝です。