オリジナルデザインを作っていきますが、やりたいと思っているのは
カメラモジュール出力を取り込んで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が使えるように用意されています。
TMDS、HDMI_HPD、HDMI_DDCがHDMI用に外部に出るポートになります。
- 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等が入っているというわけではないんですね。
回路図参照
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プロジェクト生成の手順は必須ではありません。
<手順>
- 上記のZybo-hdmi-outリポジトリをローカルにクローンしておきます。
今まで使用したプロジェクトで、Vivadoを立ち上げ、さらにそこからXilinx SDKを立ち上げます。
詳細は今までの手順を参照。
https://nokixa.hatenablog.com/entry/2019/05/30/012916
https://nokixa.hatenablog.com/entry/2019/06/17/021604display_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とします)
display_demoプロジェクトで右クリックして、Build Projectをクリックします。プロジェクトのビルドが実行されます。
下のほうの Console に "Build Finished"が表示されれば完了。
HDMIデモの実行
以前やったのと同じ手順で、Xilinx SDKからdisplay_demoのプログラムを実機で動かしてみます。
参考(前回の手順) :
ZYBOを進める - 9. Xilinx SDKで試しのプログラム - 勉強しないとな~blog
機器の接続
ZYBO、HDMIモニタ、PCを接続します。接続したら、ZYBOとHDMIモニタの電源SWをオンにします。また、TeratermからCOMポートへの接続も行っておきます。
プログラムのデバッグ実行
現状ワークスペースにいくつかのプロジェクトができているので、今回はdisplay_demoプロジェクトの右クリックメニューからデバッグ実行を行います。
プログラムの開始部分で待機状態になるので、Resumeボタンでプログラムを進めます。すると、シリアルコンソールに今回のプログラムのメニューが表示されます。
ここから操作をすることでHDMIモニタにパターンが表示されるはずだったのですが、出ませんでした…
Zybo-hdmi-outのプロジェクトでの実行
Zybo-hdmi-outからVivadoプロジェクトの作成、Xilinx SDKプロジェクトの作成、実行を行うと、HDMIモニタにカラーバーやもう1つのテストパターンも表示されました。
次回へ続く
何かしら違いがあるはずなので、それを確認して現在使用しているFPGAデザインでHDMI出力ができるようにしたいと思います。