概要
タイトルそのままです。HLSでカメラ画像をダイレクトに処理してみました。今回は3x3のフィルタでラプラシアンフィルタを実装しています。
こちらに公開しております。
何が違うのか
メモリに置いている画像への処理をアクセラレートするのではなく、カメラから入ってくる画像データをダイレクトに処理するコアですので、カメラのピクセルクロックに対してコンスタントに処理できる回路が生成できないと破綻します。
csimで期待値が合うだけでは不十分で、合成結果がちゃんと 収まるか合成までして確認する必要があります。
そしていざ合成すると、下記のようにターゲットに届かなくてNGという事も発生します。

当初 vitis_hls 2019.2 でやっていたのですが、うまくいかず、vivado_hsl 2019.2 だとなぜかうまくいくけど実機で真っ黒になり、結局 vitis_hls 2021.2 でうまくいったという、書き方やツールバージョンに振り回されるなかなか散々な過程を経て動き出しました。
動作風景
フィルタをON/OFFすると


今後の展望
とりあえず当面の狙いは拙作の LUT-NetworkのHLS対応でしょうか。今のところVerilogでしか試せていないので、ただでさえニッチなものが、超ニッチになっていますので(汗)。
いわゆる畳み込みネットワーク(CNN)が、計算機的には画像フィルタと同じ構成ですので、まずこれができないと始まらないのですが、今回ようやくと言う感じです。まだまだ先は長いですがのんびりやって行ければと思います。
メモリ上のデータしか処理しないアクセラレーターとは異なり、エッジコンピューティングでは外部デバイスが繋がってきますのでいろいろな制約が追加されることが多々でてきます。ほんとうにコンピュータアーキテクチャは奥が深いです。
参考にさせて頂いたサイト
色んなサイトを参考にさせて頂きました。
- https://github.com/Xilinx/xfopencv/blob/master/include/common/xf_video_mem.h
- https://www.acri.c.titech.ac.jp/wordpress/archives/8947
- https://marsee101.blog.fc2.com/blog-entry-3426.html
- https://marsee101.blog.fc2.com/blog-entry-4561.html
既に3年前に動かしておられたFPGAの部屋は凄いです。
追記(2023/05/14)
KV260用のものもこちらに作成しました。