PYNQ-Z1 > HDMI > TMDSを使ったHDMI出力 (Tutorialの実行) > カラーパターンの表示

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


### 概要

- HDMI出力を試す
- PYNQ-Z2のTutorialをPYNQ-Z1で試した
- XSDKでC実装の記載だが、Pythonで実行できた

### Tutorial

- [Video Series 23: Generate a video output on Pynq-Z2 HDMI out](https://forums.xilinx.com/t5/Design-and-Debug-Techniques-Blog/Video-Series-23-Generate-a-video-output-on-Pynq-Z2-HDMI-out/ba-p/932553)

配線についてはRun Automation...ではなく、手作業で接続していき、最終的にtclファイルで残りをつなげる。

### Block Design

完成したBlock Designは以下となった。

![コメント 2020-06-14 143153.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/f18361e6-2795-8e8a-d1d5-648c1c7b7097.png)


### I/O Ports

![コメント 2020-06-14 200108.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/9c69d1e1-d19b-0038-9305-6294cea78e7d.png)



### Pythonコード

XSDKで実行ではなく、ブラウザ接続でPythonで動かした。
上記のTutorialのコメントにあるコードで動いた。
bitstreamの指定だけ違うので、以下のようにした。

```py
from pynq import Overlay
from pynq import PL
OL = Overlay("/home/xilinx/pynq/overlays/base/HDMIout_PYNQZ2_2020_06_14.bit")
OL.download()
```

```py
ov = OL
tpg = ov.v_tpg_0
vtc = ov.v_tc_0
tpg.write(0x10,600)  # height
tpg.write(0x18,800)  # width
tpg.write(0x40,0)  # Set color space to RGB
tpg.write(0x20,9)  # set pattern to color bar
tpg.write(0x00,0x81)

vtc.write(0x00,0x01)
```

参考にしているScriptがマジックナンバーだらけでよくはない。
XSDK実装を参考に上記のコメントを追加した。

### 結果

縦置きの27インチモニタで以下のように表示された。
![03cc9b9a5e3852cb.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/23735c43-9a0a-9e20-7ff9-6d48ed6f7b6a.jpeg)

### 補足

HDMI出力に関しては様々な方法が見つかったが、PYNQを使うのであれば、上記のTutorialでとりあえず試してみるのがいいと思った。

もう少し自由度の高いことをする場合は、学習を進めてから。
まだまだ理解は浅い。

### 関連

以下は上記にたどり着くまでにHDMI出力について調べて気になった記事 (+ 後で見つけて気になった記事)。

- [なひたふJTAG日記: 特電Spartan-6ボードでHDMI出力に成功](http://nahitafu.cocolog-nifty.com/nahitafu/2013/08/spartan-6hdmi-a.html)
    - 2013.08.16
    - XAPP495での実装例
- [FPGAの部屋: ZYBOのHDMI入力をVGA出力に出力する1（プロジェクトの作製）](https://marsee101.blog.fc2.com/blog-entry-3208.html)
- [FPGAでHDMI出力（Full-HD）：その①同期信号/画素データ生成](https://qiita.com/cyebu1103/items/c8682b3799d959a14b38)
    - @cyebu1103 さん
    - 1から3まであります
- [FPGA(Pynq Z1)を用いたHDMI動画出力(verilogHDL)](https://qiita.com/RotaryKer/items/0b59cd8a234340f59507)
    - @RotaryKerさん
- [aster_ismの工作室: BASYS3でディスプレイ出力](http://aster-ism.hatenablog.com/entry/2014/11/26/204009)
    - こちらのBlock Designはよりシンプルかもしれない

皆様、情報感謝です。


### 関連資料

- [Video Test Pattern Generator v8.0 > LogiCORE IP Product Guide](https://www.xilinx.com/support/documentation/ip_documentation/v_tpg/v8_0/pg103-v-tpg.pdf)
    - PG103 December 17, 2019
    - p19. BACKGROUND_PATTERN_ID (0x0020) Register にカラーパターンの値が記載されている
   
- [AXI4-Stream Video IP and System Design Guide](https://www.xilinx.com/support/documentation/ip_documentation/axi_videoip/v1_0/ug934_axi_videoIP.pdf)
    - UG934 October 30, 2019
    - p33
        - Frame Buffer Read/Write
        - high-bandwidth direct memory access between memory and AXI4-Stream video type target pheripherals
        - 下記のIPがVivadoで使える
            - Video Frame Buffer Read
            - Video Frame Buffer Writer

### 関連キーワード

Block Designで使っているIPなど。

- Video Test Pattern Generator
- Video Timing Controller
- AXI4-Stream to Video Out
- rgb2dvi
    - RGB to DVI Video Encoder