はじめに
この記事ではSimulinkで画像処理のアルゴリズムを設計してシミュレーションした後、HDL Coderを用いてコード生成、IPパッケージングまで行った後に、Zybo Z7上で実機動作させるまでの流れを書きたいと思います。
開発環境は以下です。
- MATLAB/Simulink R2024b
- Vivado 2023.1
Simulinkを使って画像処理アルゴリズムを設計
まずはアルゴリズムの設計
今回は簡単な画像処理アルゴリズムということで、エッジ検出とオーバーレイを行うアルゴリズムを設計したいと思います。Simulinkを使ってこのようなアルゴリズムを記述すると下図のようになります。

Simulinkはブロック線図ベースの設計環境なので、このように機能ブロックを結線してアルゴリズムを表現します。
ここでシミュレーションをしてみます。あくまで簡易シミュレーションということで、入力としてはMP4ファイルを指定し、出力はViewerを設定するのみとします。左図は元データの出力、右側はエッジ検出+オーバーレイを行った結果の出力です。まずはアルゴリズムの動作を確認することが出来ました。
FPGA実装用に最適化
理想的には上記を確認した段階で、HDLコード生成っ!!としたいところですが、まだそうはいきません。やはりFPGA実装に併せてもう少しブロック線図の最適化が必要です。具体的にはストリーム処理に対応できるようにラインバッファベースの設計にしたり、FFに相当するブロックを追加したりします。図が小さくて分かりにくいですが、このような形でデジタル回路設計を意識した設計に落とし込みます。
Simulinkの設計を作り込み、再度シミュレーションしてみましょう。ここでは、FPGA実装用に最適化したブロックが最初に設計したアルゴリズムと同等の動作をしているか確認します。Simulinkはその名の通りシミュレーション機能が非常に豊富なので、このような形でVideoを入力として読み込ませて、その結果を表示したり、時間変化に合わせて結果をビジュアライズすることが容易にできます。
HDLコード出力
ここまで設計を進めたらHDLコード生成の設定をしていきます。ターゲットデバイスや動作周波数を指定したり、設計したブロックのI/Oをベースにインターフェイスの設定を行います。データの入出力はAXI4-Stream Videoの入出力 (Master/Slave) とし、パラメータはAXI4-Liteでアクセス可能なレジスタとして設定します。
その他必要事項を入力してコード生成を行います。筆者の環境では1分程度でコード生成が完了しました。コード生成が行われると、下記のような形でコード生成レポートが出力されます。リソース量やクリティカルパスの推定を行ってくれます。また、今回はIPコアとしてパッケージングする設定としましたが、IPコアとしての使い方が記述してあるので、こちらのベースに設計を進めていきます (レジスタマップ情報など)。
Vivadoプロジェクトへの統合
次にVivado側でZyboのプロジェクトと今回生成したIPコアを統合します。Digilent社のZybo Z7 Pcam 5C Demoページ (https://digilent.com/reference/programmable-logic/zybo-z7/demos/pcam-5c?srsltid=AfmBOooMWVnAxChwhnugUS4DZc4NyfS4T8sgy9KsPDQZL57O8xj2qPh3) より、プロジェクトをダウンロードします。今回は2023.1のものを使用しました。
HDL CoderにてHDLコード生成時、指定したフォルダ内にipcoreというサブフォルダが生成されます。ここにIPコア一式があるのでこのパスをVivadoのIP Repositoryに登録します。

VivadoのIPブロックデザインを変更します。フレームバッファの手前に今回作成したIPコアを挿入します。具体的にはGamma CorrectionとAXI VDMAの間にIPコアを配置します (下図参照)。
これで一旦コンパイル (論理合成~配置配線~Bitstream生成) し、Zyboボードに書き込んでみます (Firmwareの書き込みも忘れずに行います)。
実機動作
正しくコンパイル出来ていれば、下図のように実機動作についてもSimulinkでのシミュレーションと同様にエッジ検出 + オーバーレイ処理が行われるはずです。ZyboのHDMI出力から外部ディスプレイに接続していますが、1920 x 1080 (30FPS) でリアルタイム動作することを確認できました。
(筆者ボード環境:ZyboZ7-020 + Pcam 5C Module)
おわりに
ノーコードでここまで設計することが出来ました。HDLアドベントカレンダーなのにHDLが全く出てこなかったのはご愛敬ということで…。
※設計データのリポジトリは整理して、後日アップデートします。






