farScope/globals/algoGlobals.h
jerryzeng bcefbebd6d v0.1
基本版本:所有模块中每个Peak的处理时钟不超过9个clock
2026-10-14 20:28:58 +08:00

215 lines
3.9 KiB
C
Raw Permalink Blame History

#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<CAM4K_Y_WIDTH> LazerWinX; //winStartX
ap_uint<CAM4K_Y_WIDTH> 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<CAM4K_Y_WIDTH> LazerWinX; //winStartX
ap_uint<CAM4K_Y_WIDTH> 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<CAM4K_Y_WIDTH> 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<CAM4K_Y_WIDTH> 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<CAM4K_Y_WIDTH> 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<><31> 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<CAM4K_Y_WIDTH> match_seg_id;
ap_uint<2> matchFlag;
ap_uint<2> Sync; //FrmSync:b10 | LineSync:b01
};
struct SubpixInfo
{
float x;
ap_uint<CAM4K_Y_WIDTH> 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<CAM4K_Y_WIDTH> 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<CAM4K_Y_WIDTH> seg_id;
ap_uint<CAM4K_Y_WIDTH> 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