#ifndef ALGO_GLOBALS_H #define ALGO_GLOBALS_H #include "ap_int.h" #include "hls_stream.h" #define VITIS_HLS 1 #define RGN_DATA_WIN_SIZE 16 #define RGN_DATA_PIXEL_WIDTH 2 //output 2 pixels per clock #define MAX_PT_NUM 3071 #define CAM2K_Y_WIDTH 12 //after calibration, may exceed 2048 #define CAM4K_Y_WIDTH 13 //after calibration, may exceed 4096 #define CAM4K_Y_RSV_BITS (16-13) #define ROW_COUNT 3072 #define CAM_MAX_Y (ROW_COUNT-1) union CharFloat { float fdata; unsigned char buff[4]; }; union UintDouble { double fdata; unsigned int buff[2]; }; union UintFloat { float fdata; unsigned int unData; }; struct PeakRun{ ap_uint<8> start; ap_uint<8> len; ap_uint<8> value; }; struct RgnPix { ap_uint LazerWinX; //winStartX ap_uint LazerWinY; ap_uint<11> LazerWinRid; ap_uint<4> LazerWinFlag; //bit0:OverLap | bit1:Rflct ap_uint<1> LazerWinRsv; ap_uint<2> Sync; //FrmSync:b10 | LineSync:b01 ap_uint<8> RltvRdx; // bit3~0:Str | bit7~4:End }; struct RgnPixConvolve { ap_uint LazerWinX; //winStartX ap_uint LazerWinY; ap_uint<11> LazerWinRid; ap_uint<4> LazerWinFlag; //bit0:OverLap | bit1:Rflct ap_uint<1> LazerWinRsv; ap_uint<2> Sync; //FrmSync:b10 | LineSync:b01 ap_uint<8> value; int nD1; int nD2; }; struct RgnSubPix { float x; ap_uint y; //support up to 4k camera ap_uint<11> rid; ap_uint<4> flag; //bit0:OverLap | bit1:Rflct ap_uint<1> rsv; ap_uint<2> Sync; //FrmSync:b10 | LineSync:b01 ap_uint<8> value; }; struct RgnSubPixCalib { float x; float y; ap_uint<11> rid; ap_uint<4> flag; //bit0:OverLap | bit1:Rflct ap_uint<1> rsv; ap_uint<2> Sync; //FrmSync:b10 | LineSync:b01 ap_uint<8> value; }; struct InterpolateCalibSubpix { float x; ap_uint y; //support up to 4k camera ap_uint<11> rid; ap_uint<8> value; ap_uint<2> flag; //bit0:OverLap | bit1:Rflct ap_uint<2> Sync; //FrmSync:b10 | LineSync:b01 }; struct BuffCalibSubpix { float x; ap_uint y; //support up to 4k camera ap_uint<11> rid; ap_uint<8> value; ap_uint<2> flag; //bit0:OverLap | bit1:Rflct ap_uint<2> matchFlag; //1£º L-R match; 2- L single side; 3: R single side }; struct LRMatchedPoint { float xL; float xR; ap_uint<14> y; //may exceed 2048 ap_uint<8> valueL; ap_uint<8> valueR; ap_uint match_seg_id; ap_uint<2> matchFlag; ap_uint<2> Sync; //FrmSync:b10 | LineSync:b01 }; struct SubpixInfo { float x; ap_uint y; ap_uint<11> rid; ap_uint<4> flag; //bit0:OverLap | bit1:Rflct ap_uint<1> rsv; ap_uint<8> value; }; union Byte8 { //SubpixInfo subpix; unsigned int nData[2]; float fData[2]; double dData; }; struct CalibData { double calibK[2]; //double calibK_ext[2]; //SubCalib subpix_calib; ap_uint<2> Sync; //FrmSync:b10 | LineSync:b01 }; struct Pnt3D { float x; float y; float z; ap_uint<8> valueL; ap_uint<8> valueR; ap_uint<2> matchFlag; ap_uint<2> Sync; //FrmSync:b10 | LineSync:b01 }; struct SRowData { ap_uint<4> ptNum; BuffCalibSubpix pt1; BuffCalibSubpix pt2; }; struct SPointMatchInfo { ap_uint match_seg_id; ap_uint<2> match_flag; //1: L-R match; 2:left single; 3: right single ap_uint<11> rid_L; ap_uint<11> rid_R; ap_uint<2> pt_idx_L; ap_uint<2> pt_idx_R; }; struct SLineMatchInfo { ap_uint<2> matchNum; SPointMatchInfo match1; SPointMatchInfo match2; }; struct SMatchSegInfo { ap_uint seg_id; ap_uint seg_ptSize; }; struct SLRMatchOutput { ap_uint<4> left_ptNum; BuffCalibSubpix left_pt1; BuffCalibSubpix left_pt2; ap_uint<4> right_ptNum; BuffCalibSubpix right_pt1; BuffCalibSubpix right_pt2; SLineMatchInfo matchInfo; ap_uint<2> syncWord; }; #if 0 struct RgnPnt { ap_uint<12> winStartX; ap_uint<12> y; ap_uint<11> rid_data; //HSync=1:rid; HSync=0:data ap_uint<1> overlalFlag; ap_uint<1> reflectFlag; ap_uint<1> rsvd; ap_uint<1> VSync; ap_uint<1> HSync; ap_uint<8> PkRltvRdx; }; #endif #endif