FC2カウンター FPGAの部屋 2017年02月03日

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

FPGAの部屋

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

FASTXコーナー検出による物体の形状検出3(FASTXプロジェクトの修正)

FASTXコーナー検出による物体の形状検出2(Vivado HLS 2016.4 プロジェクト)”の続き。

前回は、FASTX コーナー検出のVivado HLS 2016.4 プロジェクトをやってみた。今回は、前回のFASTX コーナー検出は元の写真が入っているので、コーナー検出された結果から物体を検索することは難しいので、コーナー検出された位置のみを表示するようにしてみた。

まずは、fastx_2 プロジェクトを示す。
fastx_20_170202.png

C シミュレーションを行った。
fastx_21_170202.png

元画像
fastx_22_170203.jpg

元画像からこのようなFASTX コーナー検出の画像が生成できた。(theshold = 60)
fastx_23_170203.jpg

theshold = 20
fastx_30_170203.jpg

次にC コードの合成を行った。
fastx_24_170203.png

前回よりも今回のほうがリソース使用量が増えていた。

C/RTL協調シミュレーションを行った。
fastx_25_170203.png

500587で、前回とC/RTL協調シミュレーションの終了クロック時間は同じだった。

C/RTL協調シミュレーション波形を示す。
まずはAXI4-Stream の全体のシミュレーション波形を示す。
fastx_26_170203.png

1行分拡大した。
fastx_27_170203.png

更に、1行の終了部分と次の行の開始部分を拡大した。
fastx_28_170203.png

前回との違いは特にない様だ。

最後のIP へのエクスポートを行った
Vivado RTL Synthesis にチェックを入れてOK ボタンをクリックした。

IP へのエクスポートの結果を示す。
fastx_29_170203.png

fastx_2.cpp を貼っておく。

// fastx_2.cpp
// 2016/04/02 by marsee
// 2016/04/09 : FAST Corners Detection
// 2017/02/03 : 元の写真を入れないで、コーナー検出の点だけ表示した

#include "fastx.h"

void fastx_corner_det(AXI_STREAM& INPUT_STREAM, AXI_STREAM& OUTPUT_STREAM, int rows, int cols, int threshold) {
#pragma HLS INTERFACE ap_stable port=threshold
#pragma HLS INTERFACE s_axilite port=threshold
#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, threshold, true);
    hls::Dilate(mask, dmask);
    //hls::PaintMask(img_1_, dmask, img_3, color);
    hls::CvtColor<HLS_GRAY2BGR>(dmask, img_3);
    hls::Mat2AXIvideo(img_3, OUTPUT_STREAM);
}



なお、OpenCV の画像とハードウェア化関数の画像は全く違うので、テストベンチの fastx_tb.cpp ではエラーを表示するprintf() をコメントアウトしてある。
  1. 2017年02月03日 05:08 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0