勉強しないとな~blog

ちゃんと勉強せねば…な電気設計エンジニアです。

ZYBOを進める - 21. HDMI制御

オリジナルデザインを作っていきますが、やりたいと思っているのは

  カメラモジュール出力を取り込んでHDMIモニタに出力

です。

使うもの

  • カメラモジュール
    これを買いました。

    CMOSカメラモジュール(OV9655)[M9655B18P]
    www.aitendo.com
    解像度 : SXGA (1280x1024)
    フレームレート : 15fps
    制御インターフェース : SCCB

    一度OV7670という似たようなカメラモジュールを使ったことがあるので、比較的とっつきやすいかと思っています。

  • 小型HDMIモニタ
    OSOYOO HDMI 3.5インチLCDディスプレイ モニター タッチスクリーン
    https://www.amazon.co.jp/gp/product/B01N5HW3BP/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1

    HDMIインターフェースの小型のモニターです。
    解像度Full HD (1920x1080)で、Raspberry Pi向けに作られたもののようです。
    USBで給電します。

これらを使いますが、まずはHDMI出力ができるようにしたいと思います。

FPGAハードウェア

現状のFPGAデザインでHDMIが使えるように用意されています。

f:id:nokixa:20200321015922p:plain

TMDS、HDMI_HPD、HDMI_DDCHDMI用に外部に出るポートになります。

  • TMDS
    データ3レーンと、クロック1レーンが含まれます。いずれも差動信号です。
  • HDMI_HPD
    Hot Plug Detectピンです。HDMI接続のSINK側でプルアップ、SOURCE側でプルダウンして、SOURCE側でレベルを検出、SINK側デバイスが準備完了したことを確認するというようです。
  • HDMI_DDC
    Display Data Channelです。I2Cタイプのバスとなっています。今回のFPGAデザインでは、PS部に入っているI2Cコントローラに接続されています。

TMDS参考 TMDS(Transition Minimized Differential Signaling) – HDMI-NAVI.com HPD、DDC参考
https://www.analog.com/media/jp/reference-design-documentation/design-notes/jdn394.pdf

これらがHDMIコネクタに直結されています。(TMDSポートは、回路図上ではHDMI_*という名前になっています。)
PHY等が入っているというわけではないんですね。

f:id:nokixa:20200321012735p:plain

回路図参照
https://reference.digilentinc.com/_media/reference/programmable-logic/zybo/zybo_sch.pdf

ソフトウェア

Digilent社のGitHubに、ZYBOでのHDMI出力のデモデザインがあります。

GitHub - Digilent/Zybo-hdmi-out

このデザインでも、HDMI周りは今回のものと同様の構成になっています。
PS部CPUコア上でベアメタル環境でHDMIを動かすようになっているので、とりあえずこれを持ってきて動くことを確認したいと思います。
その後で、Linux上のアプリケーションとして動くようにしてみたいかと。

※このHDMIデモデザインは現状Vivado バージョン2016.4で作成されています。
クローンしてきた後にVivadoを立ち上げてcreate_project.tclを実行するとVivadoプロジェクトが生成されますが、その際にはVivado 2016.4を使用する必要があります。
Vivado 2017.4等でやるとどうなるかは確認していませんが…

※今回はCPU用コードをコピーしたいだけなので、Vivadoプロジェクト生成の手順は必須ではありません。

<手順>

  1. 上記のZybo-hdmi-outリポジトリをローカルにクローンしておきます。
  2. 今まで使用したプロジェクトで、Vivadoを立ち上げ、さらにそこからXilinx SDKを立ち上げます。
    詳細は今までの手順を参照。
    https://nokixa.hatenablog.com/entry/2019/05/30/012916
    https://nokixa.hatenablog.com/entry/2019/06/17/021604

  3. Xilinx SDKで、"display_demo"という名前でプロジェクトを作成します。
    これも今まで通りの手順。
    f:id:nokixa:20200321034046p:plain:w300
    f:id:nokixa:20200321034050p:plain:w300

  4. display_demoプロジェクトに、Zybo-hdmi-outプロジェクトからソースコードをインポートします。
    display_demoプロジェクトで右クリック
    → Import... をクリック
    → General を開けて File System を選択、Next をクリック
    → From Directory : で (Zybo-hdmi-outリポジトリ)\sdk\displaydemo\src を選択
    → その下のウィンドウで、src フォルダの左にチェックを入れる
    → Into folder : でdisplay_demo\src を選択、Finishをクリック
    (ldscript.ldを上書きしますか?というダイアログが出ますが、OKとします) f:id:nokixa:20200321135421p:plain:w500
    f:id:nokixa:20200321135425p:plain:w300
    f:id:nokixa:20200321135752p:plain:w300

  5. display_demoプロジェクトで右クリックして、Build Projectをクリックします。プロジェクトのビルドが実行されます。
    f:id:nokixa:20200321140846p:plain

  6. 下のほうの Console に "Build Finished"が表示されれば完了。
    f:id:nokixa:20200321141012p:plain

HDMIデモの実行

以前やったのと同じ手順で、Xilinx SDKからdisplay_demoのプログラムを実機で動かしてみます。
参考(前回の手順) : ZYBOを進める - 9. Xilinx SDKで試しのプログラム - 勉強しないとな~blog

  1. 機器の接続
    ZYBO、HDMIモニタ、PCを接続します。接続したら、ZYBOとHDMIモニタの電源SWをオンにします。また、TeratermからCOMポートへの接続も行っておきます。
    f:id:nokixa:20200322175621j:plain:w500

  2. Xilinx SDKからProgram FPGAを実行(前の手順の通り)
    f:id:nokixa:20200322180726p:plain:w300 f:id:nokixa:20200322180749p:plain:w300

  3. プログラムのデバッグ実行
    現状ワークスペースにいくつかのプロジェクトができているので、今回はdisplay_demoプロジェクトの右クリックメニューからデバッグ実行を行います。
    f:id:nokixa:20200322181046p:plainf:id:nokixa:20200322181105p:plain

  4. プログラムの開始部分で待機状態になるので、Resumeボタンでプログラムを進めます。すると、シリアルコンソールに今回のプログラムのメニューが表示されます。
    f:id:nokixa:20200322181227p:plain

ここから操作をすることでHDMIモニタにパターンが表示されるはずだったのですが、出ませんでした…

Zybo-hdmi-outのプロジェクトでの実行

Zybo-hdmi-outからVivadoプロジェクトの作成、Xilinx SDKプロジェクトの作成、実行を行うと、HDMIモニタにカラーバーやもう1つのテストパターンも表示されました。

f:id:nokixa:20200322183050j:plain f:id:nokixa:20200322183054j:plain

次回へ続く

何かしら違いがあるはずなので、それを確認して現在使用しているFPGAデザインでHDMI出力ができるようにしたいと思います。