2016-11-02 11 views
0

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는 처음에 같은 행/열로 설정되기 때문에 이것은 나에게 이해가되지 않습니다.

답변

0

글쎄, 데이터의 크기는 ROW와 COL에 의해서만 결정됩니다.

// typedef video library core structures 
typedef hls::stream<ap_axiu<24,1,1,1> >    AXI_STREAM; 
typedef hls::Scalar<3, unsigned char>     RGB_PIXEL; 
typedef hls::Mat<MAX_HEIGHT, MAX_WIDTH, HLS_8UC3>  RGB_IMAGE; 

당신이 AXI_STREAM을 사용하고 있기 때문에이 분명하다 : 헤더 파일에 모습을 봅니다 , 뭔가를이 있어야합니다. 여기서 픽셀에 몇 비트가 있는지, 픽셀에 채널 색이 몇 개인 지 등을 정의합니다. 이미지의 크기가 같으면 "입력 인수의 크기가 일치하지 않습니다."라는 문장은 맨 위 주요 함수와의이 불일치 문제를 나타냅니다.