Zyboボードの組み込みLinuxで動作する画像/ビデオ処理システムで動作するように、Vivado HLSにカスタムIPコアを構築しています。コアはvia/AXIストリームで画像/ビデオデータを取り込み、処理タスク(Sobelなど)を実行してから、別のAXIストリームに出力します。しかし、私はZyboのオンボードスイッチを使ってどの処理タスクを実行するかを決定したい(デフォルトはパススルー)。ZyboボードのVivado HLS GPIOスイッチデータ
GPIOスイッチからデータを読み込むためのHLSリソース/インターフェイスを作成する方法(HLSでは、IP IntegratorまたはVivado SDKではありません)を示す簡単な例が見つかりません。
#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シミュレーション」とのための適切な出力できます:私は何を持っていることは、私の一番上のモジュールでは以下のコードである「C合成を」。 「RTL/C Cosimulation」で「OpenCV Error:入力引数のサイズが一致しません」というエラーが表示されます。すべてのRGB_IMAGESは、最初は同じrows/colsで設定されているので、これは意味をなさない。