Controllerは、ビデオ信号におけるタイミング信号を検出・生成するためのIPコアタイミング信号は例えば以下の5種類で、各信号のアクティブ期間を検出・生成する。※オプション設定次第では、別の信号(field_id_inやactive_chroma_in)を追加したり、削除したりすることも可能。ビデオを出力するときにタイミングを同期するための信号を生成したり、逆に外部から入力されたビデオを解析し、そのビデオのタイミングやフォーマットを検出してくれる、非常に便利なIPです。過去の記事では、「Vitis」でのビジョンライブラリを試す前準備として、Digilent社が提供するHDMI出力デモのサンプルプログラムを読み込みました。Controllerが使用されています。-本記事では、VitisとVivadoを用いてZybo経由で外部ディスプレイに画像を出力するアプリケーションを作成します。DiligentからダウンロードしたHDMI出力デモサンプルをもとに、Zynq内部のハードウェア構成を設計しています。phys-higashi.com2021.02.21ひがし本IPは便利である一方で、使える機能が多様な分、実際に使う上でリファレンスマニュアルを読み込むのに苦労しました。そこで、本記事ではまず最初に使うにあたって、最低限知っておくと良い項目について、筆者なりにまとめてみました。概要ビデオ信号の画像処理や画像認識の高速化に、FPGAの活用を検討しようとしている事例が増えています。カメラで取得した画像から、FPGA上で高速にノイズの多い画像から特定の領域を強調したり、人物や物体を認識させたりといった用途ですね。画像処理を施した生成画像をFPGAから外部のディスプレイに送信することもあると思います。一般に、ビデオ信号は画像信号とそれを適切なタイミングに同期して送信するタイミング信号とを組み合わせて構成されます。画像処理をビデオ信号に対して行うには、FPGA上で一旦、ビデオ信号を画像信号とタイミング信号とに分割して考えます。画像信号に対してのみ、所定の画像処理を行います。最終的に外部に出力する際に、受信したタイミング信号と同じフォーマットになるように、改めてタイミング信号を生成して、画像信号と合わせてビデオ信号を生成します。・ビデオ信号を送信する際に所望のフォーマットになるようにタイミング信号を生成という2つの機能を有するIPコアとなっています。Controllerには制御レジスタが用意されており、そこに書き込まれた設定値に従ってタイミング信号が生成されます。この制御レジスタはVivadoのGUI上で固定値として設定することが可能です。入力してある動画像を特定の決まったフォーマットで外部に送信する場合には、決め打ちでこの固定値を指定してしまえば良いでしょう。オプションでAXI4-Liteのインターフェースを設けることも可能です。このとき、プロセッサユニットから制御信号をAXI4-Lite経由で送信し、設定パラメータを動的に制御します。Controllerで検出したタイミング信号のフォーマットを読み出すことも可能です。制御パラメータの変更が不要であれば、VivadoのGUI上で固定値で設定。ドライバを活用してプロセッサ(MicroblazeやZynqのARMコアなど)からAXI4-Lite経由で制御レジスタを変更し、動的に設定パラメータを変更したり、検出したタイミング信号のフォーマットを読み出すことも可能。ひがしビデオ信号にタイミングの概念は必須ですからね。次に、どういったタイミング信号を用いて、外部のディスプレイにビデオを送信しているのかを確認しておきましょう。Controllerで扱える最大解像度は2021年3月現在8192×8192(ブランキング期間含む)までです。ここまで大きい解像度の画像を扱うことはほとんどないと思いますが、ご注意ください。タイミング信号のフォーマットブランキング期間ディスプレイへの表示では、各画素(ピクセル)ごとに順番に画像を描画していきます。このとき左端から1画素ごとに水平方向に描画し(水平走査)、1ラインの描画が完了したら、また左端に戻り次の1ラインの描画を開始します。水平走査を一番下側のラインに達するまで垂直方向に順次描画していきます(垂直走査)。ディスプレイ機器の代表であったブラウン管のテレビでは、電子ビームを左から右に走査した走査線が、画像を描画していました。ブラウン管では、1ラインの描画が完了し電子ビームを左側や上側に戻す帰線の処理を行うときに、描画ができない期間が発生します。そこで、水平ブランキング期間と垂直ブランキング期間と呼ばれる、描画を行わない非表示期間が設けられています。ディスプレイに画像を表示するとき、送受信側で走査のタイミングを同期させる必要があります。そこで、ブランキング期間の間に走査のタイミングを決めるための同期信号を送る期間を設けています。これが同期期間になります。\)タイミング信号の構成タイミング信号は、基本的には検出と生成のいずれにおいても、次の表に示す5種類を抑えておくと良いと思います(※)。以下では、この5種類の信号がどのようなタイミングで出力されるかを確認します。※オプション設定次第では、別の信号(field_id_inやactive_chroma_in)を追加したり、削除したりすることも可能ですが、まずはこの基本の5つを抑えておくと良いと思います。水平走査におけるブランキング期間のタイミングチャートについて詳しく見ていきましょう。画像の1ラインでの各信号のタイミングチャートは図のとおりです。水平同期信号hsync_inが生成した後、表示期間の前にフロント・ポーチと呼ばれる非表示期間を設けています。その後、1ライン分の描画を行った後、バック・ポーチと呼ばれる非表示期間を設けています。これが水平方向1ライン分の走査になります。この水平走査を全ラインの分だけ繰り返して、1フレームの描画を実行します。垂直同期信号について見ていきましょう。画像全体での各信号のタイミングチャートは図のとおりです。垂直同期信号が生成された後、垂直フロント・ポーチが続きます。垂直フロント・ポーチが完了すると、表示期間が始まります。有効ライン数だけの水平走査が完了すると、次に垂直バック・ポーチが続きます。フロント・ポーチを合わせた期間が、垂直ブランキング期間となり、非表示期間が続きます。この非表示期間の間は、vblank_inがHigh状態に立ち上がります。IPのvtiming_inというバスに入力することによって、フォーマットを検出することができます。vsync_in)が束ねられています。タイミング信号は、IPコア内のカウンタを用いて検出されます。カウントした結果は、ステータス・レジスタに格納され、AXI4-Lite経由で外部のプロセッサで読み出すことが可能です。タイミング信号の検出結果は外部に出力せずに、直接ビデオタイミングの生成に用いることも可能です。検出した信号はそのまま使うこともできますが、少しだけフォーマットを変えた使い方もできます。検出したイメージセンサのデジタル信号の極性とディスプレイの制御信号の極性が反転している場合、タイミング信号の極性を反転させたりといった使い方も可能です。ビデオタイミングの生成タイミング信号の生成では、Vivadoのブロックダイアグラム上で出力タイミングを決めて、特定のフォーマットで出力します。設定値の書き込みは、AXI4-Lite経由で制御レジスタに外部プロセッサから行うこともオプション設定で可能です。Video-out”という別のIPコアで画像信号と合成してディスプレイに出力します。Video-out”からのRGB信号をVGA規格やDVI規格(HDMI出力)に変換するためのIPコアはDiligent社から提供されています。ひがしステータス・レジスタや制御レジスタのアドレスマップについては、リファレンスシートを参照するとよいでしょう。ブロックダイアグラムの設定方法やプロセッサを用いたステータス・レジスタと制御レジスタの参照方法については、長くなりそうなので別記事にまとめていく予定です。ひがしビデオ入出力系のIPは種類が多く、それぞれの奥が深いので、自在に操れるようになるのが楽しみですね。IPの使い方について継続的に記事にまとめていきますので、今後ともご覧いただければと思います。ここまで読んでいただき、ありがとうございました。Controllerの最低限知っておくと良い項目についてまとめました。Controllerを制御するためのドライバの使用方法について初心者向けに解説しています。Controllerの最低限知っておくと良い項目についてまとめました。Controllerを制御するためのドライバの使用方法について初心者向けに解説しています。Terminalをマスター、Zynqをスレーブにして、データを通信する方法を解説。Terminalのマイコンで動作させるArduinoのスケッチを紹介した後、実際にI2C通信した結果を掲載しました。CPUで動作するLED点滅アプリケーションの作成を通じて、アプリケーションプロジェクトで使用されるインスタンスという概念とGPIOを制御するドライバAPI関数の使用方法について解説しました。Zynqが外部からのHDMI信号を受信しDDRメモリに格納した後、DDRメモリを読み出しVGA信号を送信するアプリケーションの解説をZyboを使って行っています。ソースコードを例にHDMI信号を受信する際のAPIの使用方法を解説しました。SoCカスタムIPを含むプラットフォームビルド時のmakefileエラーを修正する方法カスタムIPを含むXSAファイルからVitis2020.2でプラットフォームプロジェクトを生成・ビルドしたところmakefileにおけるエラーが発生しました。本記事では、エラーの修正方法について紹介します。本記事ではVitisとVivadoを用いてZybo上のHelloWorldを出力するアプリケーションの作成をめざします。CPU上でHelloWorldプログラムを動かすために、Zynqのハードウェア構成を定めるプロジェクトを作成しました。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。@phys_higashiFPGAを使ったデジタル回路の設計に興味を持ち、休日に勉強をしています。初学者の目線から、詰まりやすいポイントとそれを解決した方法について、記事にまとめています。初学者ゆえの間違い等あるとは思いますが、お気づきの際はお問い合わせをいただけますと幸いです。@phys_higashiFPGAを使ったデジタル回路の設計に興味を持ち、休日に勉強をしています。初学者の目線から、詰まりやすいポイントとそれを解決した方法について、記事にまとめています。初学者ゆえの間違い等あるとは思いますが、お気づきの際はお問い合わせをいただけますと幸いです。-掛け算IPをZyboに実装-2021.04.182022.02.13Rustupをインストールするときに発生したエラーの回避方法2021.08.102021.11.07。