Demo」が提供されています。デモサンプルの内容は、「外部からのHDMI信号をZynqが受信しDDRメモリに格納。その後、DDRメモリを読み出しVGA信号を送信する」というものです。本記事では、デモサンプルをVivadoで読み込み、ハードウェアデザインを作成しました。ビジョンライブラリ)が豊富に用意されています。Vitisビジョンライブラリを試していくことを視野に入れ、筆者はZynqの画像送受信に関係するIPの使い方について勉強しています。これまで、既存のデモサンプルを活用しながら、関連するIPについてまとめました。Demo」を試して、Zyboから外部ディスプレイへ静止画を出力することができるようになりました。【HDMI出力編(3)】静止画をZynqからHDMI出力するVitisアプリケーション本記事では、Vitisを用いてZybo経由で外部ディスプレイに画像を出力するアプリケーションを作成します。アプリケーションでは、ドライバ関数によりIPコアの設定を行った後、読み出すフレームバッファに直接静止画を書き込んでいます。phys-higashi.com2021.03.28ひがしデモサンプルを通じ、以下のXilinxのビデオ送受信に有用なIPコアの理解を深めることができるので、一度デモサンプルを試してみるのをおすすめします。Controller今回の記事では、外部から受信した動画像の映像信号をZynqで受信し、それを外部に出力する、別のデモサンプルを試してみました。前回のデモサンプルに、さらに外部からの信号を受信するモジュールやドライバを追加しており、構成や原理を理解する難易度が少しだけ上がります。徐々にステップアップするという意味で、このデモサンプルはよい教材になると思います。ポイントは以下の通りです。上の図のように、Zynqの内部構成を模式化してみました。Ports(HPポート)を通じてDDRメモリに映像信号を書き込みます。今回の記事では、外部信号にPCからのHDMI信号を用います。Unit)から加工や画像処理、あるいは機械学習などの認識処理などを行うことが可能です。今後、APU内部のドライバ関数の理解が深まれば、いろいろと試してみたいですね。今回は、特に画像処理は行わず、ただ単に受信したままの映像をHPポートを通じて、PL部、そしてVGA出力に変換して外部ディスプレイへと出力します。(GPポート)を通じてAPUへ送受信されます。SoCのテクニカルリフェレンスより、各ポートのスループットと推奨する使用方法については以下の通りです。22.8よりこの比較表によると、以下のように設定するのが良いかと思います。デモサンプルでも基本的に推奨する方法で使用されていました。(PL)部のIP構成もう少しPL内部のIPコアの構成について、詳しく見てみましょう。今回構成するIPは以下の通りです。Access(VDMA):周辺機器から受信した映像信号をDMA方式でDDRメモリに書き込む。逆に、DDRメモリの映像信号を読み出し、出力する。(VTC):タイミング信号を検出・生成する。Out:タイミングコントローラの信号に合わせて、入力されるAXI4-StreamのデータをRGB出力に変換。動画のRGB出力をVGA出力に変換する処理や機能が複雑なVDMAとVTCの2つのIPコアについては、下記の記事で解説していますので、ぜひご覧いただければと思います。Accessの最低限知っておくと良い項目についてまとめました。VDMAは何のために用いるのか、他のIPとはどのように接続すればよいのか、初心者向けに基本的な機能について解説しています。Controllerは、ビデオの入出力を行う上で有用なIPです。初心者向けに動画像におけるタイミング信号のフォーマット、他のIPと接続したときIPの役割など、基本的な機能を解説しています。phys-higashi.com2021.03.21ひがし以上が、動作原理に関する説明です。デモサンプルを読み込んでいきましょう。準備作業(HDMI出力デモサンプルのダウンロード)まずは、HDMI入力のデモサンプルをDigilentのHPからダウンロードしていきましょう。上記HPを開くと、ページの真ん中にDownloadsという項目があります。Repo]から、HDMI入力デモのプログラムをダウンロードします。(https://reference.digilentinc.com/learn/programmable-logic/tutorials/zybo-hdmi-output-demo/start)より抜粋ダウンロードが完了したら解凍し、適当なフォルダに格納しておきます。ハードウェア設計(CPUと周辺回路の構成)の読み込みVivadoのプロジェクトの作成デモサンプルの読み込みは、Tclスクリプトというファイルを走らせることによって行います。Language)と呼ばれるスクリプト言語を用いています。ブロックダイアグラムの作成や論理合成などの処理は、これまでGUI上でコマンドを選択して行っていますが、Tclスクリプトで記載されたコマンドをコンソール上に書き込むことによって動作させることも可能です。今回、この一連のコマンドをまとめて一つのファイルにしたTclスクリプトを走らせることによって、デモサンプルの読み込みを行います。前回の記事と重複する内容になりますので、改めて確認したい方は[+]マークから詳細をご確認ください。Script...]を選択Tclファイルを選択するウィンドウが現れます。先ほどダウンロードし解凍したデモサンプル[Zybo-hdmi-in]の中から、[proj]>[create_project.tcl]を選択し、[OK]をクリック。ブロックデザインの生成とIPのアップデート読み込みが始まり、ブロックダイアグラムが自動で生成される。デモサンプルファイルに含まれる、Digilentが提供する有用なIP類も同時に追加される。生成されたブロックダイアグラムには、多数のIPが配置され、配線も自動で繋がれている。VivadoのバージョンがDigilent社の提供時と異なるため、IPのアップグレードが必要。status]をクリック。Selected]をクリックし、これらのIPをまとめてアップグレード。指示に従い、順に[OK]をクリックしていけば、アップグレードが完了。一連のアップグレードが完了すると、ブロックダイアグラムが完成。ブロックデザインの構成の説明では、デモサンプルの読み込みによって作成されたブロックダイアグラムが、動作原理で説明したような構成になっているかどうかを確認しましょう。View]に切り替えて、IPの構成がわかりやすくなるようにしましょう。View]に変更してください。古いバージョンのVivadoでは確か実装されていなかったと思いますのでご注意ください。View]への切り替えと合わせて、見やすくなるようにIPを並べました。HDMI入出力回路の構成は、2章の動作原理で説明した通りの構成になっていることがわかると思います。PS部との送受信には、HPポートが使われていますね。HPポートのインターコネクトのために、AXIインターコネクトが追加されています。制御信号・ステータス信号を各IPとやり取りするためのバスにはGPポートが用いられ、こちらもAXIインターコネクトが追加されています。VDMAの設定を変更する必要がありましたので、記載しておきます。Engine)と呼ばれる機能を働かせる必要がありました。Transfers]にチェックを入れて、DREをイネーブルしておきましょう。Engine)とはひがしリファレンス・マニュアル(P.9)によると、DREは「メモリへの整列されていないアクセスを可能とし、フレームバッファがメモリ内の任意のアドレスから開始できるようにする機能」とのこと。映像信号がうまく整列していなくても、きれいに再整列してメモリに格納してくれる機能と私は解釈しています。制約ファイルの作成HDMIへの出力信号がFPGAのどのピンから出力されるか、制約ファイル上で定義します。デモサンプルファイル内にはすでに制約ファイル[ZYBO_Master.xdc]が含まれています。(格納先は[src]>>[constraints]です。)、Tclスクリプトを読み込んだときにVivadoのプロジェクト内に制約ファイルは読み込まれています。一部、ブロックデザイン上の端子では大文字になっているにもかかわらず、制約ファイル上では小文字になっていますので、修正が必要になりました。制約ファイル上ではHDMI_DDCなどが小文字になっているので、大文字にしていく作業が必要でしたのでご注意ください。bitstreamファイルの作成、XSAファイルの作成それでは、ブロックデザインの読み込みと制約ファイルの修正が完了したので、論理合成からXSAファイルの作成までを一気に行っていきます。前回の記事と重複する内容になりますので、改めて確認したい方は[+]マークから詳細をご確認ください。読み込んだブロックデザインをもとにHDL(ハードウェア言語)を作成します。bitstreamファイルの作成までを行います。立ち上がった新しいウィンドウ上で、エクスポートの設定を確認していきます。[Next]をクリックします。bitstream]を選択し、[Next]をクリックします。ファイル名とエクスポート先を指定し、[Next]をクリックします。最後に、[Finish]をクリックして完了です。ひがしお疲れさまです。次回、ソフトウェア側のプログラムを読み込んでいきます。HDMI形式で入力した信号がVGA出力されるプログラムを解説していますので、ぜひご覧いただければと思います。最後までご覧いただき、ありがとうございました。次回の記事へのリンク【外部映像送受信(2)】Zynq上で外部映像を送受信するアプリケーション(送信系の作成)本サイトでは、Zynqが外部からのHDMI信号を受信しDDRメモリに格納した後、DDRメモリを読み出しVGA信号を送信するアプリケーションの解説を行っています。VGA信号をディスプレイへ送信する送信系のプログラムについて紹介・解説しました。phys-higashi.com2021.05.23参考文献Xilinx社のリファレンス・マニュアルを参考にしました。(3)カスタムIPを用いたVitisプラットフォームプロジェクトの作成ハードウェア言語で作成したRTLモジュールにIPパッケージャーを使用してAXI4-Liteインタフェースを追加する方法を解説しています。IDEのアプリケーションを作成する方法を具体的に解説しています。本記事ではVitisとVivadoを用いてZybo上のHelloWorldを出力するアプリケーションの作成をめざします。CPU上でHelloWorldプログラムを動かすために、Zynqのハードウェア構成を定めるプロジェクトを作成しました。企業のエンジニアとして働きつつ、FPGAを使ったデジタル回路の設計に興味を持ち、休日に勉強をしています。SoC測距センサとZynqをI2C通信できるようにWireクラスを変更Zynqとレーザー測距センサVL53L0XとをI2C通信できるようにしました。ArduinoのWireクラスをZynqで使えるように修正し、VL53L0XとI2C通信するためのZynqのアプリケーションプロジェクトを作成しました。本記事では、VerilogやVHDLなどのハードウェア言語を用いて作成したRTLモジュールの入出力に、IPパッケージャーを使用してAXI4-Liteインタフェースを楽に追加する方法を解説しています。カスタムIPの作成方法を紹介します。Zynqが外部からのHDMI信号を受信しDDRメモリに格納した後、DDRメモリを読み出しVGA信号を送信するアプリケーションの解説をZyboを使って行っています。ソースコードを例にHDMI信号を受信する際のAPIの使用方法を解説しました。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。@phys_higashiFPGAを使ったデジタル回路の設計に興味を持ち、休日に勉強をしています。初学者の目線から、詰まりやすいポイントとそれを解決した方法について、記事にまとめています。初学者ゆえの間違い等あるとは思いますが、お気づきの際はお問い合わせをいただけますと幸いです。@phys_higashiFPGAを使ったデジタル回路の設計に興味を持ち、休日に勉強をしています。初学者の目線から、詰まりやすいポイントとそれを解決した方法について、記事にまとめています。初学者ゆえの間違い等あるとは思いますが、お気づきの際はお問い合わせをいただけますと幸いです。-掛け算IPをZyboに実装-2021.04.182022.02.13Rustupをインストールするときに発生したエラーの回避方法2021.08.102021.11.07。