FC2カウンター FPGAの部屋 OpenCV の X軸方向 Sobel フィルタ IP のカメラ表示システム

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

FPGAの部屋

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

OpenCV の X軸方向 Sobel フィルタ IP のカメラ表示システム

Vivado HLS 2016.1 で OpenCV の Sobel フィルタを試してみた”で作った X軸方向 Sobel フィルタの IP をカメラ表示システムに入れて、Sobel フィルタ出力が表示されるかどうか?を調べてみた。これが表示されれば、 hls::AXIvideo2Mat() や hls::Mat2AXIvideo() の動作は正しく、FASTX が問題なのでは?という可能性が高まる。

FASTXコーナー検出IPのカメラ表示システム1(プロジェクト作成)”のブロックデザインで、FASTX の IP の代わりに、X軸方向 Sobel フィルタの IP を入れた。
FASTXコーナー検出IP も Sobel フィルタの IP も名前は同じ image_filter なので、ブロックデザインは全く見た目が一緒だ。
これを論理合成、インプリメントを行った。結果を示す。
Vivado_HLS_OpenCV_95_160417.png

Vivado_HLS_OpenCV_96_160417.png

やはり、FASTXよりもX軸方向 Sobel フィルタの方がリソース使用量が少ない。

ハードウェアをエクスポートして、SDKを立ち上げた。
cam_disp, sobel_on, cam_return を作りなおした。
Vivado_HLS_OpenCV_97_160417.png

cam_disp_axis.elf を起動すると、カメラの画像が表示された。
Vivado_HLS_OpenCV_98_160417.jpg

sobel_on.elf を起動すると、リアルタイムに X軸方向 Sobel フィルタ処理をすることができた。
Vivado_HLS_OpenCV_99_160417.jpg

やはり、Vivado HLS 2016.1 のHLS ビデオライブラリの動作は問題ないようだ。
全く同じブロックデザイン構成で、FASTXは画像が表示されなかった。問題はFASTX かもしくは、FASTX でしか使っていないライブラリのどれかにバグがあるのかもしれない?

最後に sobel_on.c を貼っておく。

// sobel_fil_on.c
// 2016/04/13 by marsee
//
// Refered to http://japan.xilinx.com/support/documentation/sw_manuals_j/xilinx2014_4/ug902-vivado-high-level-synthesis.pdf
//

#include <stdio.h>
#include "ximage_filter.h"
#include "xparameters.h"

int main(){
    XImage_filter Ximage_filter;
    XImage_filter_Config *Ximage_filterPtr;

    // Look Up the device configuration
    Ximage_filterPtr = XImage_filter_LookupConfig(0);
    if (!Ximage_filterPtr){
        fprintf(stderr, "XImage_filter configuration failed.\n");
        return(-1);
    }

    // Initialize the Device
    int Xlap_status = XImage_filter_CfgInitialize(&Ximage_filter, Ximage_filterPtr);
    if (Xlap_status != XST_SUCCESS){
        fprintf(stderr, "Could not Initialize XImage_filter\n");
        return(-1);
    }

    // image_filter rows, cols set
    XImage_filter_Set_rows(&Ximage_filter, (u32)600);
    XImage_filter_Set_cols(&Ximage_filter, (u32)800);

    // axis_switch_1, 1to2 ,Select M01_AXIS
    // Refer to http://marsee101.blog19.fc2.com/blog-entry-3177.html
    Xil_Out32((XPAR_CAMERA_INTERFACE_AXIS_SWITCH_1_BASEADDR+0x40), 0x80000000); // disable
    Xil_Out32((XPAR_CAMERA_INTERFACE_AXIS_SWITCH_1_BASEADDR+0x44), 0);
    Xil_Out32((XPAR_CAMERA_INTERFACE_AXIS_SWITCH_1_BASEADDR), 0x2); // Commit registers

    // sobel filter AXIS Start
    XImage_filter_Start(&Ximage_filter);
    XImage_filter_EnableAutoRestart(&Ximage_filter);

    // axis_switch_0, 2to1, Select S01_AXIS
    // Refer to http://marsee101.blog19.fc2.com/blog-entry-3177.html
    Xil_Out32((XPAR_CAMERA_INTERFACE_AXIS_SWITCH_0_BASEADDR+0x40), 0x1);
    Xil_Out32((XPAR_CAMERA_INTERFACE_AXIS_SWITCH_0_BASEADDR), 0x2); // Commit registers

    return(0);
}

  1. 2016年04月18日 04:26 |
  2. OpenCV
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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