Zybo 보드의 임베디드 리눅스에서 실행되는 withing 이미지/비디오 처리 시스템을 실행하기 위해 Vivado HLS에 사용자 정의 IP 코어를 구축하고 있습니다. 코어는 via/AXI 스트림에서 이미지/비디오 데이터를 가져 와서 프로세싱 작업 (예 : Sobel)을 수행 한 다음이를 다른 AXI 스트림으로 출력합니다. 이것은 작동하지만, Zybo의 온보드 스위치를 사용하여 어떤 처리 작업을 실행해야하는지 결정하고자합니다 (기본값은 패스 스루입니다).Vivado HLS Zybo 보드 용 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 합성을.' 'OpenCV 오류 : 입력 인수의 크기가 일치하지 않습니다.'와 함께 'RTL/C Cosimulation'에서 오류가 발생합니다. 모든 RGB_IMAGES는 처음에 같은 행/열로 설정되기 때문에 이것은 나에게 이해가되지 않습니다.