FC2カウンター FPGAの部屋 FASTXコーナー検出IPのカメラ表示システム4(Vivado HLS 2016.1でやってみた2)

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

FASTXコーナー検出IPのカメラ表示システム4(Vivado HLS 2016.1でやってみた2)

”FASTXコーナー検出IPのカメラ表示システム3(Vivado HLS 2016.1でやってみた1)”の続き。

Accelerating OpenCV Applications with Zynq-7000 All Programmable SoC using Vivado HLS Video Libraries, XAPP1167 (v3.0) June 24, 2015”の 10 ページを見ると、FASTX のレイテンシが最大 7 lines で、Dilate レイテンシが最大 3 lines なので、10 ライン分のFIFO バッファを入れる必要があったようだ。今回の実装では、カメラの画像が 800 ピクセル / line なので、800 ピクセル X 10 lines = 8000 以上のFIFO バッファが必要になるようだ。これを忘れていたので、実装しよう。なお、FIFO バッファ数は8000 以上の 2 の n 乗の数を選定した。8196 で 2 の 13 乗だ。挿入するディレクティブは、

#pragma HLS STREAM variable=img_1_.data_stream depth=8192

になった。

opencv_ex_ug.cpp を貼っておく。

// opencv_ex_ug.cpp
// 2016/04/02 by marsee
// 2016/04/09 : FAST Corners Detection

#include "opencv_ex_ug.h"

void image_filter(AXI_STREAM& INPUT_STREAM, AXI_STREAM& OUTPUT_STREAM, int rows, int
cols) {
#pragma HLS DATAFLOW
#pragma HLS INTERFACE ap_stable port=cols
#pragma HLS INTERFACE ap_stable port=rows
#pragma HLS INTERFACE s_axilite port=return
#pragma HLS INTERFACE axis port=OUTPUT_STREAM
#pragma HLS INTERFACE axis port=INPUT_STREAM
#pragma HLS INTERFACE s_axilite port=cols
#pragma HLS INTERFACE s_axilite port=rows

    RGB_IMAGE img_0(rows, cols);
    RGB_IMAGE img_1(rows, cols);
    RGB_IMAGE img_1_(rows, cols);
#pragma HLS STREAM variable=img_1_.data_stream depth=8192
    // FASTX に最大 7 ラインのレイテンシ、Dilate に最大 3 ラインのレイテンシがあるそうだ
    // 1ラインのピクセル数X10 ラインのFIFO バッファが必要 800x10 < 8192 (2の13乗)
    // http://japan.xilinx.com/support/documentation/application_notes/xapp1167.pdf
    // の 10 ページ参照

    GRAY_IMAGE img_1g(rows, cols);
    GRAY_IMAGE mask(rows, cols);
    GRAY_IMAGE dmask(rows, cols);
    GRAY_IMAGE img_2g(rows, cols);
    RGB_IMAGE img_3(rows, cols);
    RGB_PIXEL color(25500);

    hls::AXIvideo2Mat(INPUT_STREAM, img_0);
    hls::Duplicate(img_0, img_1, img_1_);
    hls::CvtColor<HLS_BGR2GRAY>(img_1, img_1g);
    hls::FASTX(img_1g, mask, 20true);
    hls::Dilate(mask, dmask);
    hls::PaintMask(img_1_, dmask, img_3, color);
    hls::Mat2AXIvideo(img_3, OUTPUT_STREAM);
}


C シミュレーションを行った。これは結果は前と同じだ。
Vivado_HLS_OpenCV_100_160418.png

C コードからの合成を行った。
Vivado_HLS_OpenCV_101_160418.png

Latency は変化が無い。

リソース使用量を示す。やはり、FIFO 分の 12 個の BRAM_18K が増えている。
Vivado_HLS_OpenCV_102_160418.png

C/RTL コシミュレーションが動作した。Latency は 32700 クロックだった。
Vivado_HLS_OpenCV_103_160418.png

C/RTL コシミュレーション波形を示す。
Vivado_HLS_OpenCV_104_160418.png

1ライン分拡大してみた。
Vivado_HLS_OpenCV_105_160418.png

1クロックで1ピクセル処理ができているようだ。

IP のパッケージを行った。IP ができた。
Vivado_HLS_OpenCV_106_160419.png
  1. 2016年04月19日 05:04 |
  2. OpenCV
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/3446-9f43a23a
この記事にトラックバックする(FC2ブログユーザー)