0

Vivado HLS でカスタム IP コアを構築して、Zybo ボード上の組み込み Linux で実行される画像/ビデオ処理システムを実行しています。コアは、AXI ストリーム経由で画像/ビデオ データを取り込み、処理タスク (Sobel など) を実行してから、これを別の AXI ストリームに出力します。これは機能しますが、実行する処理タスクを決定するために Zybo のオンボード スイッチを使用したいと考えています (デフォルトはパススルーです)。

(IP インテグレーターや Vivado SDK ではなく HLS で) GPIO スイッチからデータを読み取るための HLS RESOURCE/INTERFACE の作成方法を示すリソースまたは簡単な例が見つかりません。私が持っているのは、私のトップモジュールにある以下のコードです:

    #include <hls_video.h>
    #include "ip_types.h"

    void MultiImaging(AXI_STREAM& inputStream, AXI_STREAM& outputStream, int rows, int cols, bool sw0, bool sw1)
    {
    #pragma HLS INTERFACE axis port=inputStream
    #pragma HLS INTERFACE axis port=outputStream

    #pragma HLS RESOURCE variable=rows core=AXI_SLAVE metadata="-bus_bundle CONTROL_BUS"
    #pragma HLS RESOURCE variable=cols core=AXI_SLAVE metadata="-bus_bundle CONTROL_BUS"

    #pragma HLS INTERFACE ap_stable port=rows
    #pragma HLS INTERFACE ap_stable port=cols

    //are these two correct for the switches?
    #pragma HLS INTERFACE axis port=sw0
    #pragma HLS INTERFACE axis port=sw1

    //are these two correct for the switches?
    #pragma HLS RESOURCE variable=sw0 core=AXI_SLAVE //GPIO?
    #pragma HLS RESOURCE variable=sw1 core=AXI_SLAVE //GPIO?

    RGB_IMAGE img(rows, cols);
    RGB_IMAGE oimg(rows, cols);
    RGB_IMAGE sobel_output(rows,cols);

    RGB_IMAGE imgh(rows, cols);
    RGB_IMAGE imgv(rows, cols);

    RGB_IMAGE hsobel(rows, cols);
    RGB_IMAGE vsobel(rows, cols);

    GRAY_IMAGE imgGray(rows, cols);
    GRAY_IMAGE oimgGray(rows, cols);

    #pragma HLS dataflow
    hls::AXIvideo2Mat(inputStream, img);


    //Passthrough
    if(sw1 == 0 && sw0 == 0){
        //..code here
    }
    //Sobel
    else if(sw1 == 0 && sw0 == 1){    
    //..code here
    }
    //Threshold
    else if(sw1 == 1 && sw0 == 0){
    //..code here
    }
    //..etc            
}

上記は機能し、'C Simulation' および 'C Synthesis' の適切な出力を提供します。「RTL/C Cosimulation」で「OpenCV エラー: 入力引数のサイズが一致しません」というエラーが発生します。すべての RGB_IMAGES は最初は同じ行/列で設定されているため、これは私には意味がありません。

4

1 に答える 1