概要Vitisビジョンライブラリから高位合成したIPをエクスポートし、画像処理した結果をディスプレイに表示するZynqアプリケーションを紹介する。用例のcustomconvに含まれるFilter2D_accelを例にラプラシアンフィルタを実装する。本記事では、Vivadoで設計したZynq上のブロックデザインを紹介する。Xilinxの統合ソフトウェア開発環境では、Vitisビジョンライブラリ(以下、ビジョンライブラリ)をインクルードすることによって、画像処理の機能を持つIPを高位合成することができます。本サイトでは、ビジョンライブラリのFilter2D_accel関数を例に、ラプラシアンフィルタを行う画像処理IPの高位合成を行いました。これまでの記事では、IPの構成やタイミングチャートを解説しています。Csim】Vitisビジョンライブラリでテストベンチ関数を使ったCシミュレーションの方法を解説。用例のcustomconvに含まれるFilter2D_accelを例にラプラシアンフィルタの高位合成と実装をめざす(本記事はCシミュレーションのみを行う)phys-higashi.com2022.01.22画像処理IPを静止画出力のアプリケーションと組み合わせて、実際にZynq上で画像処理した結果をディスプレイに表示しようと思います。静止画出力のアプリケーションの実装方法は以下の記事に掲載しています。-本記事では、VitisとVivadoを用いてZybo経由で外部ディスプレイに画像を出力するアプリケーションを作成します。DiligentからダウンロードしたHDMI出力デモサンプルをもとに、Zynq内部のハードウェア構成を設計しています。phys-higashi.com2021.02.21高位合成したIPをエクスポートし、Zynq上でブロックデザインを設計しましたので、本記事で紹介いたします。この記事の対象読者Vitisビジョンライブラリを初めて扱うビジョンライブラリで高位合成したIPを使って、ブロックデザインの設計・実装する方法を知りたいIPのエクスポートとVivadoへのインポートIPのエクスポート前回の記事で、ビジョンライブラリを利用して画像処理を行うIPを高位合成しました。高位合成したRTLをIPの形でエクスポートし、Vivadoのブロックデザインで利用していきます。ビジョンライブラリを使った高位合成の方法【(3)C/RTL協調シミュレーション】Vitisビジョンライブラリを使った高位合成で、C/RTL協調シミュレーションを行う方法、確認するポイントを解説。Filter2D_accelを例に、本記事ではビジョンライブラリから高位合成した画像処理IPのタイミングチャートをまとめました。phys-higashi.com2022.01.30前記事では、高位合成の完了後、その結果をC/RTL協調シミュレーションで確認しました。高位合成したRTL記述をIPにエクスポートしました。RTL]を選択します。RTL]ダイアログボックスが立ち上がります。出力フォーマットなどの設定を行い、[OK]をクリックします。今回、特に変更するところはなかったので、そのままOKしました。Y2K22問題により、出力エラーが発生する方は、以下の記事の通り修正パッチを当てて対応ください。RTLが実行できなくなる」という問題について、現状報告されている対処方法をまとめています。phys-higashi.com2022.01.0211秒程度でRTL出力が完了しました。エクスポートされたIPは以下のパスにあります。エクスポートされたIPはPROJECT\solution1\impl\ipにZipファイルで存在します。HLSプロジェクトを作成したパス。VivadoへのインポートVivadoを立ち上げて、このIPをプロジェクトにインポートします。私の環境のVivado2021.1以降では、以下のフォーラムに報告されている問題が発生し、プロジェクトの処理を完了することができないので、バージョン2020.2のVivadoでブロックデザインを作成しました。https://support.xilinx.com/s/question/0D52E00006tdCiISAU/vivado-hangs-a-lot-while-waiting-for-child-processes?language=jasupport.xilinx.comIPのインポートの方法は以前の記事にも記載していますので、関係する記述箇所のみを抜粋しておきます。-掛け算IPをZyboに実装-本記事では、掛け算を行う関数をハードウェアIPに高位合成し、さらに高位合成の結果を実感するためにLED点滅回路に実装しました。回路実装では、スイッチからの入力を掛け算してLEDに出力して、掛け算IPの動作を確認しています。phys-higashi.com2021.04.18IPのインポート方法Vivadoプロジェクトを作成し、先程高位合成したハードウェアIPを読み込みます。Managerから選択し、クリックします。Repositiory...]を選択します。作成したハードウェアIPを選択します。HLSプロジェクトの[solution1]>[impl]>[ip]フォルダに格納されているので、それを選択します。レポジトリに追加されたら、次にブロックデザインに追加していきましょう。IP]を選択し、作成したIPを選びます。Vivadoでのデザイン設計IPの実装イメージインポートしたIPをどのように他のビデオ出力系のモジュールと接続するかイメージを共有しておきます。高位合成したIPには制御信号を入出力するためのバスと画像やフィルタといった配列を入出力するためのバスの2種類が用意されています。それぞれのバスには、プロセッサからのAXI4_Lite、メモリとDMA転送するAXI4を接続しようと思います。加えて画像出力ロジックも実装します。画像出力ロジックは以前の記事で紹介した静止画出力アプリケーションで用いたものを流用します。以前はHDMI出力でしたが、今回はVGA出力としました。実装は評価ボードZyboに行います。Viewそれぞれで示します(画像をクリックすると拡大します)。Demo」を読み込んで作成したブロックデザインをベースに作成しています。IPをインポートです。gmem2をPS部のS_AXI_HP0に接続しています。GPとHPの違いは次の通りです。22.8よりこの比較表によると、以下のように設定するのが良いかと思います。制御信号やステータス信号をやり取りするAXI4-LITEのバスはGPポートに接続GPとHPを次のブロック図のようにして使い分けをしています。空間フィルタリング処理に必要な制御に用いる信号は、GPポートを介しAXI4-Liteのプロトコルでプロセッサから送信します。DDRメモリに格納する画像やフィルタの配列などの映像信号は、HPポートを介して直接メモリから読み出しています(DMA転送とは何か?)次に、画像がどのような流れでメモリから外部ディスプレイまで流れていくかを、これもブロック図で示してみました。画像とラプラシアンフィルタをメモリから読み出した後、空間フィルタリングをしてメモリに戻します。IPを使って読み出し、VGA出力することにしています。この辺の処理は、img_outをメモリに送らず直接外部に出力することができそうなので、改善の余地があります。フィルタリングのタイミングと読み出しのタイミングをあまり考慮していないため、今のところ静止画ではうまくいっていますが、動画にしてリアルタイムに画像処理させる場合はもっとタイミングを考慮する必要があると思います論理合成からXSAファイルの作成までそれでは、ブロックデザインからVitisに読み込むためのXSAファイルの作成を行います。いっても、以前の記事で紹介済みですので、改めて確認したい方は[+]マークから詳細をご確認ください。読み込んだブロックデザインをもとにHDL(ハードウェア言語)を作成します。bitstreamファイルの作成までを行います。立ち上がった新しいウィンドウ上で、エクスポートの設定を確認していきます。[Next]をクリックします。bitstream]を選択し、[Next]をクリックします。ファイル名とエクスポート先を指定し、[Next]をクリックします。最後に、[Finish]をクリックして完了です。IPを実際にブロックデザインに組み込んでいます。静止画出力のブロックデザインがそのまま流用できるのでとても楽な作業で済みました。次回は、アプリケーションのソースコードを作っていき、実際にディスプレイに映るかを試してみます。2020.2次回の記事のリンクビジョンライブラリの画像処理結果をディスプレイ表示【(2)実装】Vitisビジョンライブラリのcustomconvに含まれるFilter2D_accelを例にラプラシアンフィルタを行うIPを高位合成。本記事ではラプラシアンフィルタリング処理した画像をディスプレイ表示するアプリケーションプロジェクトを紹介。Synthesis】Vitisビジョンライブラリでテストベンチ関数を使った高位合成の方法を紹介。用例のcustomconvに含まれるFilter2D_accelを例にラプラシアンフィルタの高位合成と実装をめざす(本記事は高位合成まで)ビジョンライブラリビジョンライブラリの画像処理結果をディスプレイ表示【(2)実装】Vitisビジョンライブラリのcustomconvに含まれるFilter2D_accelを例にラプラシアンフィルタを行うIPを高位合成。本記事ではラプラシアンフィルタリング処理した画像をディスプレイ表示するアプリケーションプロジェクトを紹介。ビジョンライブラリVitisビジョンライブラリのxf::cv::MatクラスについてVitisビジョンライブラリで画像を取り扱うためのクラスxf::cv::Matの宣言の仕方とテンプレート引数、メンバについてまとめました。OpenCVのcv::Matクラスとの相違点を中心に解説しています。Csim】Vitisビジョンライブラリでテストベンチ関数を使ったCシミュレーションの方法を解説。HLSにビジョンライブラリとOpenCVをインクルードして、画像処理関数を高位合成する環境を構築しました。HLSのセットアップの方法を解説しています。HLSにビジョンライブラリとOpenCVをインクルードして、画像処理関数を高位合成する環境を構築しました。本記事では前準備として環境構築に必要なセットアップのうちOpenCVのインストール方法を解説しています。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。@phys_higashiFPGAを使ったデジタル回路の設計に興味を持ち、休日に勉強をしています。初学者の目線から、詰まりやすいポイントとそれを解決した方法について、記事にまとめています。初学者ゆえの間違い等あるとは思いますが、お気づきの際はお問い合わせをいただけますと幸いです。@phys_higashiFPGAを使ったデジタル回路の設計に興味を持ち、休日に勉強をしています。初学者の目線から、詰まりやすいポイントとそれを解決した方法について、記事にまとめています。初学者ゆえの間違い等あるとは思いますが、お気づきの際はお問い合わせをいただけますと幸いです。-掛け算IPをZyboに実装-2021.04.182022.02.13Rustupをインストールするときに発生したエラーの回避方法2021.08.102021.11.07。