概要Digilent社提供の画像をHDMI形式で出力するデモサンプルのソースコードを変更し、所定の静止画をディスプレイ上にHDMI出力するアプリケーション・プロジェクトを作成。各種IPを動作させるドライバ関数を用い、制御パラメータを設定。フレームバッファに直接値を代入した後、キャッシュコヒーレンシを保つことによって、所定の静止画を出力することができることを確認。※あえてキャッシュコヒーレンシを保たなくしたところ、黒飛びや白飛びなどノイズが大きく乗った画像が出力された。キャッシュコヒーレンシの整合性確認が必須であることを確認。ビジョンライブラリ)が用意されています。Vitisビジョンライブラリを試すための前準備として、前回の記事ではテスト画像をZynqからHDMIを通じて外部ディスプレイに出力できるようにしました。2020.2上で動作させてみました。今回は、デモサンプルのコードの学習も兼ねて、コードを改造してHDMI出力する画像を変更してみました。本記事では、DDRの内部に含まれている、外部ディスプレイ表示用のテストパターンを変更できるようにします。プロジェクトの作成ハードウェア設計(CPUと周辺回路の構成)の読み込みVivado上のプログラムの設定方法は下記記事で記載した方法と変更ありません。Digilent社のHPからダウンロードしたデモサンプルをそのままプロジェクトとして活用しています。-本記事では、VitisとVivadoを用いてZybo経由で外部ディスプレイに画像を出力するアプリケーションを作成します。DiligentからダウンロードしたHDMI出力デモサンプルをもとに、Zynq内部のハードウェア構成を設計しています。phys-higashi.com2021.02.21Vitisアプリケーションプロジェクトのコードまず、最初にコード例を書いておきます。コアを制御する関数VDMA_settingのコードは長いので省略しています。Controllerの最低限知っておくと良い項目についてまとめました。Controllerを制御するためのドライバの使用方法について初心者向けに解説しています。Accessの最低限知っておくと良い項目についてまとめました。VDMAを制御するためのドライバの使用方法について、初心者向けに解説しています。2020.2のワークスペースは前回の記事と同様に作成しておきます。-プログラムの作成と実行-本記事では、VitisとVivadoを用いてZybo経由で外部ディスプレイに画像を出力するアプリケーションを作成します。CPUで動作するHDMI出力プログラムを読み込み、Zybo上で動作を確認しました。phys-higashi.com2021.03.07HDMI出力プログラムのソースコードは本記事で示したコード例(display_demo_mod.c)を用いました。display_demo_mod.cを[worlkspace]>[hdmi_out_application]>[src]に移動します。[src]フォルダ内の他のファイルの構成は以下のようにしました:“src”フォルダ内のファイルの構成srcフォルダdisplay_demo_mod.c:本記事で作成したソースコードvga_modes.h:Digilent社からダウンロードしたファイルをそのまま活用dynclkフォルダ:Digilent社からダウンロードしたファイルをそのまま活用dynclk.cdynclk.hこのファイルを移動させたらビルドし、実装まで行います。実装までの手順の詳細を改めて[+]マーク以下に記載しておきます。実装方法の詳細1プロジェクトのビルドまず、プラットフォームプロジェクトをビルドしていきます。エクスプローラ内のプラットフォームプロジェクト(hdmi_out_system_wrapper)を選択し、右クリックします。Project]を選択すると、ビルドが始まります。今回、ビルドにかかった時間は11.5秒でした。次に、システムプロジェクトをビルドしていきます。エクスプローラ内のシステムプロジェクト(hdmi_out_application_system)を選択し、右クリックします。Project]を選択すると、ビルドが始まります。2コンフィグレーション回路基板をホストPCにつなぎます。つないで電源を入れたら、PC側からFPGAへのbitstreamファイルの書き込み(コンフィグレーション)とアプリケーションソフトウェアのDDRへの書き込みを実行します。Hardware]を選択すると、コンフィグレーションとソフトウェアの書き込みが実施されます。※今回の記事ではCOMポートの接続は不要です。VMODE_640x480);まず、上記のコードで、Vivadoプロジェクト上に配置したIPに制御パラメータを設定します。プロジェクト上にあるIPのうち、プロセッサ上で設定が必要なものは以下の3つです。(VDMA):データの読み出し。DDR3のSDRAMからデータを取ってきて、AXI4形式(設定では4byte)で出力させる。(VTC):タイミング信号の生成。RGB出力のタイミングの同期信号を生成。ダイナミッククロック・コントローラ。様々な解像度のビデオ出力に対応するため、クロック周波数を動的に変化させることが可能。(VDMA)コアは、メモリとビデオインターフェースとの間に配置して、メモリとの画像の送受信をDMA方式で実行するためのIPコアです。DMA方式は、周辺機器(ペリフェラル)とメモリとを直接接続し、CPUを介さずにデータの書き込み・読み出しをできるようにする方式で、ビデオや音声などの大量かつ継続的にデータをメモリに入出力したい場合には、DMA方式を採用するほうが、結果的に処理性能を向上することが可能です。メモリ上の特定の領域を読み出し続けるので、VDMAコアで指定しているフレームバッファにHDMI出力したい画像を格納すればよいわけです。今回、VDMAで指定しているメモリの領域はframeBufという配列です。そこで、frameBufに適切な値を入れて実験してみました。次のソースコードでは、RGBのうち、赤色の画素値に最大の255を入力し、他の画素値をゼロとしています。赤色一色の画像が出力されれば、実験成功となります。DEMO_MAX_FRAME);最後に、Xil_DCacheFlushRangeという関数を加えています。この関数は、フレームバッファのキャッシュをメモリに書き出し、キャッシュコヒーレンシを保つ役割を果たしています。キャッシュコヒーレンシとはCPUはメモリと読み出し・書き込みを行う際に、一時的にキャッシュと呼ばれるデータアクセスが早い領域に一旦データを溜め込んでおき、処理を行います。このとき、メモリの内容とキャッシュの内容の整合性(コヒーレンシ)をとることを、キャッシュコヒーレンシと呼びます。今回は、Xil_DCacheFlushRangeをあえてコメントアウトして、キャッシュコヒーレンシが保たれなかった場合に、どんな画像になるかも試してみました。実装と動作確認では、実際にコンフィグレーションを行って、ディスプレイ上でHDMI出力を確認しましょう。無事に写真の通り、ディスプレイに想定通りの赤色一色、解像度640×480の画像を出力することができました。赤色一色ではなく好きな静止画を描画する場合には、以下のソースコードのframeBufへ値を代入する箇所を変更すれば良いでしょう。静止画の各画素値の値は、ヘッダファイルなどにまとめておき、それを読み出すようにすると楽です。ビットマップ画像ファイルをヘッダファイルに変換する方法については、以下の記事をご覧ください。VBAのマクロを作成します。作成したヘッダファイルはZybo上のDDRメモリに保存され、静止画をHDMI形式で出力できるようにアプリケーションにも実装してみました。失敗例としてキャッシュを更新しなかった場合のディスプレイ表示も見せておきます。DEMO_MAX_FRAME);ソースコードにおいて、上記の記述をコメントアウトした場合のディスプレイ表示です。写真のように所々、データが黒になっていたり、白飛びしているところが見られますね。キャッシュコヒーレンシが保たれないと、メモリに値を書き込む前のよくわからない画像が出力されます。Xil_DCacheFlushRangeが必要であることがよくわかります。ひがし静止画を自在に変えることができれば、プログラムの幅が広がっていきますね。Terminalをマスター、Zynqをスレーブにして、データを通信する方法を解説。本記事では、I2C通信方式について解説した後、マイコンとZynqの接続の構成について解説しました。-掛け算IPをZyboに実装-本記事では、掛け算を行う関数をハードウェアIPに高位合成し、さらに高位合成の結果を実感するためにLED点滅回路に実装しました。回路実装では、スイッチからの入力を掛け算してLEDに出力して、掛け算IPの動作を確認しています。CPUで動作するLED点滅アプリケーションの作成を通じて、アプリケーションプロジェクトで使用されるインスタンスという概念とGPIOを制御するドライバAPI関数の使用方法について解説しました。TerminalのマイコンとZynqをデータを通信する方法を解説。本記事では、ZynqのMIOとEMIOの違いについて解説した後、Zynq内部のブロックデザインをVivadoで作成しました。(3)カスタムIPを用いたVitisプラットフォームプロジェクトの作成ハードウェア言語で作成したRTLモジュールにIPパッケージャーを使用してAXI4-Liteインタフェースを追加する方法を解説しています。IDEのアプリケーションを作成する方法を具体的に解説しています。Accessの最低限知っておくと良い項目についてまとめました。VDMAは何のために用いるのか、他のIPとはどのように接続すればよいのか、初心者向けに基本的な機能について解説しています。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。@phys_higashiFPGAを使ったデジタル回路の設計に興味を持ち、休日に勉強をしています。初学者の目線から、詰まりやすいポイントとそれを解決した方法について、記事にまとめています。初学者ゆえの間違い等あるとは思いますが、お気づきの際はお問い合わせをいただけますと幸いです。@phys_higashiFPGAを使ったデジタル回路の設計に興味を持ち、休日に勉強をしています。初学者の目線から、詰まりやすいポイントとそれを解決した方法について、記事にまとめています。初学者ゆえの間違い等あるとは思いますが、お気づきの際はお問い合わせをいただけますと幸いです。-掛け算IPをZyboに実装-2021.04.182022.02.13Rustupをインストールするときに発生したエラーの回避方法2021.08.102021.11.07。