From c1049417b1b686366cce8a49e48088fd7bc48c78 Mon Sep 17 00:00:00 2001 From: jerryzeng Date: Mon, 24 Nov 2025 18:19:01 +0800 Subject: [PATCH] version 1.6.1 1. fix calib bug: last data output error 2. add frmae lastSync --- Calib/sourceCode/Calib.cpp | 15 +- Calib/sourceCode/calib_tb.cpp | 187 ++++++++++++----- compute3D/sourceCode/compute3D.cpp | 7 +- compute3D/sourceCode/compute3D_tb.cpp | 198 ++++++++++++------ convolve/sourceCode/convolve.cpp | 16 +- convolve/sourceCode/convolve_tb.cpp | 179 +++++++++++----- globals/tbGlobals.h | 2 + peakCentering/sourceCode/peakCentering_tb.cpp | 1 + subPix/sourceCode/subPix.cpp | 20 +- subPix/sourceCode/subPix_tb.cpp | 176 +++++++++++----- 10 files changed, 550 insertions(+), 251 deletions(-) diff --git a/Calib/sourceCode/Calib.cpp b/Calib/sourceCode/Calib.cpp index fe95828..957d6f0 100644 --- a/Calib/sourceCode/Calib.cpp +++ b/Calib/sourceCode/Calib.cpp @@ -15,8 +15,7 @@ void calib( CalibData InData; InData = inCalibData.read(); - ap_uint<1> VSync = InData.Sync.range(1,1); - if(0b0 == VSync) //wait for syncFirst + if(0b10 != InData.Sync) //wait for syncFirst return; Byte8 dataBuff; @@ -131,7 +130,7 @@ void calib( dataBuff.dData = InData.calibK[1]; apData32 = (ap_uint<32>)dataBuff.nData[0]; calibPnt.value = apData32.range(7,0); - calibPnt.Sync = 0; + calibPnt.Sync = InData.Sync; calibPnt.rsv = 0; if(rawx < 0) vldFlag = 0; @@ -161,7 +160,7 @@ void calib( dataBuff.dData = InData.calibK[1]; apData32 = (ap_uint<32>)dataBuff.nData[0]; calibPnt_pt1.value = apData32.range(7,0); - calibPnt_pt1.Sync = 0; + calibPnt_pt1.Sync = InData.Sync; calibPnt_pt1.rsv = 0; if(rawx_pt1 < 0) vldFlag_pt1 = 0; @@ -339,8 +338,16 @@ void calib( } } if( (Lines > 0)&& (vldFlag == 1)) + { + calibPnt.x = (float)(xmul0 + xmul1 + xmul2 + xmul3 + xmul4 + xmul5+ xmul6 + xmul7); + calibPnt.y = (float)(ymul0 + ymul1 + ymul2 + ymul3 + ymul4 + ymul5+ ymul6 + ymul7); outSubpixCalib.write(calibPnt); + } if( (Lines > 0)&& (vldFlag_pt1 == 1)) + { + calibPnt_pt1.x = (float)(xmul0_pt1 + xmul1_pt1 + xmul2_pt1 + xmul3_pt1 + xmul4_pt1 + xmul5_pt1+ xmul6_pt1 + xmul7_pt1); + calibPnt_pt1.y = (float)(ymul0_pt1 + ymul1_pt1 + ymul2_pt1 + ymul3_pt1 + ymul4_pt1 + ymul5_pt1+ ymul6_pt1 + ymul7_pt1); outSubpixCalib.write(calibPnt_pt1); + } } diff --git a/Calib/sourceCode/calib_tb.cpp b/Calib/sourceCode/calib_tb.cpp index 2b577be..76a1c8d 100644 --- a/Calib/sourceCode/calib_tb.cpp +++ b/Calib/sourceCode/calib_tb.cpp @@ -7,6 +7,49 @@ #include "calib.h" #include "../../globals/tbGlobals.h" +Luma_frameInfo readParaFile(const char* file) +{ + std::ifstream inputFile(file); + Luma_frameInfo frameInfo; + std::string strLineTxt; + + int data; + getline(inputFile, strLineTxt); //XL + sscanf(strLineTxt.c_str(), "XL:%d", &data); + frameInfo.L = (uint16_t)data; + + getline(inputFile, strLineTxt); //XR + + getline(inputFile, strLineTxt); //TL + sscanf(strLineTxt.c_str(), "TL:%d", &data); + frameInfo.T = (uint16_t)data; + + getline(inputFile, strLineTxt); //TR + + getline(inputFile, strLineTxt); //W + sscanf(strLineTxt.c_str(), "W:%d", &data); + frameInfo.W = (uint16_t)data; + + getline(inputFile, strLineTxt); //H + sscanf(strLineTxt.c_str(), "H:%d", &data); + frameInfo.H = (uint16_t)data; + + getline(inputFile, strLineTxt); //FrmNO + sscanf(strLineTxt.c_str(), "FrmNO:%x", &data); + frameInfo.FrmNo = (uint32_t)data; + + getline(inputFile, strLineTxt); //TimStp + sscanf(strLineTxt.c_str(), "TimStp:%x", &data); + frameInfo.TimeStamp = (uint32_t)data; + + getline(inputFile, strLineTxt); //EncInfo + sscanf(strLineTxt.c_str(), "EncInfo:%x", &data); + frameInfo.encInfo = (uint32_t)data; + + inputFile.close(); + return frameInfo; +} + std::vector readSubpixDataFile( const char* file, uint16_t* validSize) @@ -24,11 +67,11 @@ std::vector readSubpixDataFile( continue; float x; - int y, Rid, Flag, pkValue; + int y, Rid, Flag, pkValue, Sync; #if defined(__linux__) - sscanf(strLineTxt.c_str(), "%f %d %d %x %d", &x, &y, &Rid, &Flag, &pkValue); + sscanf(strLineTxt.c_str(), "%f %d %d %x %d %x", &x, &y, &Rid, &Flag, &pkValue, &Sync); #else - sscanf_s(strLineTxt.c_str(), "%f %d %d %x %d", &x, &y, &Rid, &Flag, &pkValue); + sscanf_s(strLineTxt.c_str(), "%f %d %d %x %d %x", &x, &y, &Rid, &Flag, &pkValue, &Sync); #endif a_line.x = (float)x; @@ -36,6 +79,7 @@ std::vector readSubpixDataFile( a_line.rid = (ap_uint<11>)Rid; a_line.flag = (ap_uint<4>)Flag; a_line.value = (ap_uint<8>)pkValue; + a_line.Sync = (ap_uint<2>)Sync; testData.push_back(a_line); if(x >= 0) validNum ++; @@ -48,19 +92,13 @@ std::vector readSubpixDataFile( void genCalibTestSream( std::vector& subpixData, hls::stream& calibStream, - const uint32_t FrmNo, - const uint32_t timeStamp, - const uint32_t encInfo, - const uint16_t frameROI_w, - const uint16_t frameROI_h, - const uint16_t frameROI_x, - const uint16_t frameROI_y, + const Luma_frameInfo framwInfo, const uint16_t validDataSize) { CalibData VSync; Byte8 dataBuff; //1st:FrmNo - dataBuff.nData[0] = FrmNo; + dataBuff.nData[0] = framwInfo.FrmNo; dataBuff.nData[1] = 0; VSync.Sync = 0b10; VSync.calibK[0] = dataBuff.dData; @@ -68,21 +106,21 @@ void genCalibTestSream( calibStream.write(VSync); //2nd:FrmNo - dataBuff.nData[0] = timeStamp; + dataBuff.nData[0] = framwInfo.TimeStamp; VSync.Sync = 0b00; VSync.calibK[0] = dataBuff.dData; VSync.calibK[1] = 0; calibStream.write(VSync); //3rd:encInfo - dataBuff.nData[0] = encInfo; + dataBuff.nData[0] = framwInfo.encInfo; VSync.Sync = 0b00; VSync.calibK[0] = dataBuff.dData; VSync.calibK[1] = 0; calibStream.write(VSync); //4th:frmW(12bit), frmH(12bit) ap_uint<16> data16_1, data16_2; - data16_1 = frameROI_w; - data16_2 = frameROI_h; + data16_1 = framwInfo.W; + data16_2 = framwInfo.H; ap_uint<32> tmpData; tmpData(11,0) = data16_1.range(11,0); tmpData(23,12) = data16_2.range(11,0); @@ -94,7 +132,7 @@ void genCalibTestSream( calibStream.write(VSync); //5th: frmX, WinNum int lines = (int)subpixData.size() / 2; //lines - data16_1 = frameROI_x; + data16_1 = framwInfo.L; data16_2 = (uint16_t)lines; tmpData(11,0) = data16_1.range(11,0); tmpData(23,12) = data16_2.range(11,0); @@ -105,7 +143,7 @@ void genCalibTestSream( VSync.Sync = 0b00; calibStream.write(VSync); //6th: frmY - data16_1 = frameROI_y; + data16_1 = framwInfo.T; data16_2 = validDataSize; tmpData(11,0) = data16_1.range(11,0); tmpData(23,12) = data16_2.range(11,0); @@ -118,6 +156,8 @@ void genCalibTestSream( //output data for(int i = 0; i < lines; i ++) { + if(i == lines-1) + int kkk = 1; //debug point RgnSubPix a_line = subpixData[i*2]; CalibData conData; @@ -134,7 +174,7 @@ void genCalibTestSream( dataBuff.nData[0] = (uint32_t)apData32; dataBuff.nData[1] = 0; conData.calibK[1] = dataBuff.dData; - conData.Sync = 0b01; + conData.Sync = a_line.Sync; calibStream.write(conData); a_line = subpixData[i*2+1]; @@ -150,7 +190,7 @@ void genCalibTestSream( dataBuff.nData[0] = (uint32_t)apData32; dataBuff.nData[1] = 0; conData.calibK[1] = dataBuff.dData; - conData.Sync = 0b00; + conData.Sync = a_line.Sync; calibStream.write(conData); for(int m = 0; m < 4; m ++) //write k @@ -222,6 +262,8 @@ void convertSubpixCalibStreamToArray( //output data for(int i = 0; i < winNum; i ++) { + if(i == winNum-1) + int kkk = 1; //debug point RgnSubPixCalib data_in = streamData.read(); Luma_rgnSubpixCalib a_pnt; a_pnt.x = data_in.x; @@ -229,6 +271,7 @@ void convertSubpixCalibStreamToArray( a_pnt.Rid = (uint16_t)data_in.rid; a_pnt.Flag = (uint8_t)data_in.flag; a_pnt.pkValue = (uint8_t)data_in.value; + a_pnt.sync = (uint8_t)data_in.Sync; arrayData.push_back(a_pnt); } return; @@ -244,71 +287,101 @@ void writeSubpixCalibData( { char data[250]; #if defined(__linux__) - sprintf(data, "%.2f %.2f %04d %01x %02d", - outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue); + sprintf(data, "%.2f %.2f %04d %01x %02d %01x", + outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue, outData[i].sync); #else - sprintf_s(data, "%.2f %.2f %04d %01x %02d", - outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue); + sprintf_s(data, "%.2f %.2f %04d %01x %02d %01x", + outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue, outData[i].sync); #endif sw << data << std::endl; } sw.close(); } -#define TST_GROUP 1 +#define TST_GROUP 3 int main() { #if defined(__linux__) + const char* SrcDataPath[TST_GROUP] = { + "/home/zengHQ/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/", + "/home/zengHQ/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/", + "/home/zengHQ/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/" + }; const char* InDataPath[TST_GROUP] = { - "/home/zengHQ/CamTestData/testSample/Subpix/testData.txt" + "/home/zengHQ/CamTestData/testSample/Subpix/", + "/home/zengHQ/CamTestData/Grp_0/Subpix/", + "/home/zengHQ/CamTestData/Grp_1/Subpix/", }; const char* OutDataPath[TST_GROUP] = { - "/home/zengHQ/CamTestData/testSample/Calib/testData.txt" + "/home/zengHQ/CamTestData/testSample/Calib/", + "/home/zengHQ/CamTestData/Grp_0/Calib/", + "/home/zengHQ/CamTestData/Grp_1/Calib/", }; #else + const char* SrcDataPath[TST_GROUP] = { + "E:/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/", + "E:/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/", + "E:/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/" + }; const char* InDataPath[TST_GROUP] = { - "E:/CamTestData/testSample/Subpix/testData.txt" + "E:/CamTestData/testSample/Subpix/", + "E:/CamTestData/Grp_0/Subpix/", + "E:/CamTestData/Grp_1/Subpix/", }; const char* OutDataPath[TST_GROUP] = { - "E:/CamTestData/testSample/Calib/testData.txt" + "E:/CamTestData/testSample/Calib/", + "E:/CamTestData/Grp_0/Calib/", + "E:/CamTestData/Grp_1/Calib/", }; #endif + int testFileSize[TST_GROUP] = {1, 4, 4}; - for(int n = 0; n < TST_GROUP; n ++) + for(int n = 1; n < TST_GROUP; n ++) { int winSize = 0; - uint16_t vldSize = 0; - std::vector testData = readSubpixDataFile(InDataPath[n], &vldSize); - //gen test stream - hls::stream inStream; - uint32_t FrmNo = 0x1; - uint32_t timeStamp = 0x2; - uint32_t encInfo = 0x3; - uint16_t frameROI_w = 0x100; - uint16_t frameROI_h = 2048; - uint16_t frameROI_x = 0; - uint16_t frameROI_y = 0; - genCalibTestSream(testData, inStream, FrmNo, timeStamp, encInfo, frameROI_w, frameROI_h, frameROI_x, frameROI_y, vldSize); + int fileSize = testFileSize[n]; + for(int fi = 0; fi < fileSize; fi++) + { + char fileName[200]; + char paraFileName[200]; + char outFileName[200]; +#if defined(__linux__) + sprintf(fileName, "%s%d_L_subpix.txt", InDataPath[n], fi); + sprintf(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi); + sprintf(outFileName, "%s%d_L_calib.txt", OutDataPath[n], fi); +#else + sprintf_s(fileName, "%s%d_L_subpix.txt", InDataPath[n], fi); + sprintf_s(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi); + sprintf_s(outFileName, "%s%d_L_calib.txt", OutDataPath[n], fi); +#endif + Luma_frameInfo framwInfo = readParaFile(paraFileName); - hls::stream outStream; - calib(inStream,outStream); + uint16_t vldSize = 0; + std::vector testData = readSubpixDataFile(fileName, &vldSize); + //gen test stream + hls::stream inStream; + genCalibTestSream(testData, inStream, framwInfo, vldSize); - std::vector outData; - uint32_t outFrmNo, outTimeStamp, outEncInfo; - uint16_t outROI_w,outROI_h, outROI_x,outROI_y; - convertSubpixCalibStreamToArray( - outStream, - outData, - &outFrmNo, - &outTimeStamp, - &outEncInfo, - &outROI_w, - &outROI_h, - &outROI_x, - &outROI_y); + hls::stream outStream; + calib(inStream,outStream); - writeSubpixCalibData(OutDataPath[n], outData); + std::vector outData; + uint32_t outFrmNo, outTimeStamp, outEncInfo; + uint16_t outROI_w,outROI_h, outROI_x,outROI_y; + convertSubpixCalibStreamToArray( + outStream, + outData, + &outFrmNo, + &outTimeStamp, + &outEncInfo, + &outROI_w, + &outROI_h, + &outROI_x, + &outROI_y); + + writeSubpixCalibData(outFileName, outData); + } } printf("done!\n"); } diff --git a/compute3D/sourceCode/compute3D.cpp b/compute3D/sourceCode/compute3D.cpp index cb802d3..c3e4b10 100644 --- a/compute3D/sourceCode/compute3D.cpp +++ b/compute3D/sourceCode/compute3D.cpp @@ -86,10 +86,9 @@ void compute3D( outData.y = (float)y; outData.z = (float)z; outData.value = InData.value; - if(n == (WinNum-1)) - outData.Sync = 0b01; - else - outData.Sync = 0; + outData.Sync = InData.Sync; outPt3D.write(outData); + if(0b11 == InData.Sync) + break; } } diff --git a/compute3D/sourceCode/compute3D_tb.cpp b/compute3D/sourceCode/compute3D_tb.cpp index 70a86f9..2283bbd 100644 --- a/compute3D/sourceCode/compute3D_tb.cpp +++ b/compute3D/sourceCode/compute3D_tb.cpp @@ -7,6 +7,49 @@ #include "compute3D.h" #include "../../globals/tbGlobals.h" +Luma_frameInfo readParaFile(const char* file) +{ + std::ifstream inputFile(file); + Luma_frameInfo frameInfo; + std::string strLineTxt; + + int data; + getline(inputFile, strLineTxt); //XL + sscanf(strLineTxt.c_str(), "XL:%d", &data); + frameInfo.L = (uint16_t)data; + + getline(inputFile, strLineTxt); //XR + + getline(inputFile, strLineTxt); //TL + sscanf(strLineTxt.c_str(), "TL:%d", &data); + frameInfo.T = (uint16_t)data; + + getline(inputFile, strLineTxt); //TR + + getline(inputFile, strLineTxt); //W + sscanf(strLineTxt.c_str(), "W:%d", &data); + frameInfo.W = (uint16_t)data; + + getline(inputFile, strLineTxt); //H + sscanf(strLineTxt.c_str(), "H:%d", &data); + frameInfo.H = (uint16_t)data; + + getline(inputFile, strLineTxt); //FrmNO + sscanf(strLineTxt.c_str(), "FrmNO:%x", &data); + frameInfo.FrmNo = (uint32_t)data; + + getline(inputFile, strLineTxt); //TimStp + sscanf(strLineTxt.c_str(), "TimStp:%x", &data); + frameInfo.TimeStamp = (uint32_t)data; + + getline(inputFile, strLineTxt); //EncInfo + sscanf(strLineTxt.c_str(), "EncInfo:%x", &data); + frameInfo.encInfo = (uint32_t)data; + + inputFile.close(); + return frameInfo; +} + std::vector readSubpixCalibDataFile( const char* file) { @@ -21,17 +64,18 @@ std::vector readSubpixCalibDataFile( continue; float x,y; - int Rid, Flag, pkValue; + int Rid, Flag, pkValue, Sync; #if defined(__linux__) - sscanf(strLineTxt.c_str(), "%f %f %d %x %d", &x, &y, &Rid, &Flag, &pkValue); + sscanf(strLineTxt.c_str(), "%f %f %d %x %d %x", &x, &y, &Rid, &Flag, &pkValue, &Sync); #else - sscanf_s(strLineTxt.c_str(), "%f %f %d %x %d", &x, &y, &Rid, &Flag, &pkValue); + sscanf_s(strLineTxt.c_str(), "%f %f %d %x %d %x", &x, &y, &Rid, &Flag, &pkValue, &Sync); #endif a_line.x = (float)x; a_line.y = (float)y; a_line.rid = (ap_uint<11>)Rid; a_line.flag = (ap_uint<4>)Flag; a_line.value = (ap_uint<8>)pkValue; + a_line.Sync = (ap_uint<2>)Sync; testData.push_back(a_line); } inputFile.close(); @@ -41,18 +85,12 @@ std::vector readSubpixCalibDataFile( void genCompute3DTestSream( std::vector& subpixCalibData, hls::stream& conpute3DStream, - const uint32_t FrmNo, - const uint32_t timeStamp, - const uint32_t encInfo, - const uint16_t frameROI_w, - const uint16_t frameROI_h, - const uint16_t frameROI_x, - const uint16_t frameROI_y) + const Luma_frameInfo framwInfo) { RgnSubPixCalib VSync; UintFloat dataBuff; //1st:FrmNo - dataBuff.unData = FrmNo; + dataBuff.unData = framwInfo.FrmNo; VSync.Sync = 0b10; VSync.x = dataBuff.fdata; VSync.y = 0; @@ -63,19 +101,19 @@ void genCompute3DTestSream( conpute3DStream.write(VSync); //2nd:FrmNo - dataBuff.unData = timeStamp; + dataBuff.unData = framwInfo.TimeStamp; VSync.Sync = 0b00; VSync.x = dataBuff.fdata; conpute3DStream.write(VSync); //3rd:encInfo - dataBuff.unData = encInfo; + dataBuff.unData = framwInfo.encInfo; VSync.Sync = 0b00; VSync.x = dataBuff.fdata; conpute3DStream.write(VSync); //4th:frmW(12bit), frmH(12bit) ap_uint<16> data16_1, data16_2; - data16_1 = frameROI_w; - data16_2 = frameROI_h; + data16_1 = framwInfo.W; + data16_2 = framwInfo.H; ap_uint<32> tmpData; tmpData(11,0) = data16_1.range(11,0); tmpData(23,12) = data16_2.range(11,0); @@ -86,7 +124,7 @@ void genCompute3DTestSream( conpute3DStream.write(VSync); //5th: frmX, WinNum int winNum = (int)subpixCalibData.size(); - data16_1 = frameROI_x; + data16_1 = framwInfo.L; data16_2 = (uint16_t)winNum; tmpData(11,0) = data16_1.range(11,0); tmpData(23,12) = data16_2.range(11,0); @@ -96,7 +134,7 @@ void genCompute3DTestSream( VSync.Sync = 0b00; conpute3DStream.write(VSync); //6th: frmY - data16_1 = frameROI_y; + data16_1 = framwInfo.T; data16_2 = 0; tmpData(11,0) = data16_1.range(11,0); tmpData(23,12) = data16_2.range(11,0); @@ -109,10 +147,6 @@ void genCompute3DTestSream( for(int i = 0; i < winNum; i ++) { RgnSubPixCalib a_line = subpixCalibData[i]; - if(i == 0) - a_line.Sync = 0b01; - else - a_line.Sync = 0b00; a_line.rsv = 0; conpute3DStream.write(a_line); } @@ -166,7 +200,7 @@ void convertSubpixCalibStreamToArray( a_pnt.y = data_in.y; a_pnt.z = data_in.z; a_pnt.value = (ap_uint<8>)data_in.value; - a_pnt.Sync = 0; + a_pnt.Sync = data_in.Sync; arrayData.push_back(a_pnt); } return; @@ -182,76 +216,108 @@ void writeCompute3DData( { char data[250]; uint8_t value = (uint8_t)outData[i].value; + uint8_t sync = (uint8_t)outData[i].Sync; #if defined(__linux__) - sprintf(data, "%.3f %.3f %.3f %02d", - outData[i].x, outData[i].y, outData[i].z, value); + sprintf(data, "%.3f %.3f %.3f %02d %01x", + outData[i].x, outData[i].y, outData[i].z, value, sync); #else - sprintf_s(data, "%.3f %.3f %.3f %02d", - outData[i].x, outData[i].y, outData[i].z, value); + sprintf_s(data, "%.3f %.3f %.3f %02d %01x", + outData[i].x, outData[i].y, outData[i].z, value, sync); #endif sw << data << std::endl; } sw.close(); } -#define TST_GROUP 1 +#define TST_GROUP 3 int main() { #if defined(__linux__) + const char* SrcDataPath[TST_GROUP] = { + "/home/zengHQ/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/", + "/home/zengHQ/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/", + "/home/zengHQ/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/" + }; const char* InDataPath[TST_GROUP] = { - "/home/zengHQ/CamTestData/testSample/Calib/testData.txt" + "/home/zengHQ/CamTestData/testSample/Calib/", + "/home/zengHQ/CamTestData/Grp_0/Calib/", + "/home/zengHQ/CamTestData/Grp_1/Calib/", }; const char* OutDataPath[TST_GROUP] = { - "/home/zengHQ/CamTestData/testSample/Compute3D/testData.txt" + "/home/zengHQ/CamTestData/testSample/Compute3D/", + "/home/zengHQ/CamTestData/Grp_0/Compute3D/", + "/home/zengHQ/CamTestData/Grp_1/Compute3D/", }; #else + const char* SrcDataPath[TST_GROUP] = { + "E:/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/", + "E:/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/", + "E:/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/" + }; const char* InDataPath[TST_GROUP] = { - "E:/CamTestData/testSample/Calib/testData.txt" + "E:/CamTestData/testSample/Calib/", + "E:/CamTestData/Grp_0/Calib/", + "E:/CamTestData/Grp_1/Calib/", }; const char* OutDataPath[TST_GROUP] = { - "E:/CamTestData/testSample/Compute3D/testData.txt" + "E:/CamTestData/testSample/Compute3D/", + "E:/CamTestData/Grp_0/Compute3D/", + "E:/CamTestData/Grp_1/Compute3D/", }; #endif + int testFileSize[TST_GROUP] = {1, 4, 4}; - for(int n = 0; n < TST_GROUP; n ++) + for(int n = 1; n < TST_GROUP; n ++) { - std::vector testData = readSubpixCalibDataFile(InDataPath[n]); - //gen test stream - hls::stream inStream; - uint32_t FrmNo = 0x1; - uint32_t timeStamp = 0x2; - uint32_t encInfo = 0x3; - uint16_t frameROI_w = 0x100; - uint16_t frameROI_h = 2048; - uint16_t frameROI_x = 0; - uint16_t frameROI_y = 0; - genCompute3DTestSream(testData, inStream, FrmNo, timeStamp, encInfo, frameROI_w, frameROI_h, frameROI_x, frameROI_y); + int winSize = 0; + int fileSize = testFileSize[n]; + for(int fi = 0; fi < fileSize; fi++) + { + char fileName[200]; + char paraFileName[200]; + char outFileName[200]; +#if defined(__linux__) + sprintf(fileName, "%s%d_L_calib.txt", InDataPath[n], fi); + sprintf(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi); + sprintf(outFileName, "%s%d_L_compute3d.txt", OutDataPath[n], fi); +#else + sprintf_s(fileName, "%s%d_L_calib.txt", InDataPath[n], fi); + sprintf_s(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi); + sprintf_s(outFileName, "%s%d_L_compute3d.txt", OutDataPath[n], fi); +#endif + Luma_frameInfo framwInfo = readParaFile(paraFileName); - float u0 = 620.1; - float v0 = 1023.51; - float F_inv = 0.0009933051235; - float plane_a = -2.67733; - float plane_b = 0.0501805; - float plane_c = 631.944; - hls::stream outStream; - compute3D(inStream, outStream, u0, v0, F_inv, plane_a, plane_b, plane_c ); + std::vector testData = readSubpixCalibDataFile(fileName); + //gen test stream + hls::stream inStream; + genCompute3DTestSream(testData, inStream, framwInfo); - //output - std::vector outData; - uint32_t outFrmNo, outTimeStamp, outEncInfo; - uint16_t outROI_w,outROI_h, outROI_x,outROI_y; - convertSubpixCalibStreamToArray( - outStream, - outData, - &outFrmNo, - &outTimeStamp, - &outEncInfo, - &outROI_w, - &outROI_h, - &outROI_x, - &outROI_y); - writeCompute3DData(OutDataPath[n], outData); + float u0 = 630; + float v0 = 960; + float F_inv = 0.0009933051235; + float plane_a = -2.0; + float plane_b = 0.0501805; + float plane_c = 631.944; + hls::stream outStream; + compute3D(inStream, outStream, u0, v0, F_inv, plane_a, plane_b, plane_c ); + + //output + std::vector outData; + uint32_t outFrmNo, outTimeStamp, outEncInfo; + uint16_t outROI_w,outROI_h, outROI_x,outROI_y; + convertSubpixCalibStreamToArray( + outStream, + outData, + &outFrmNo, + &outTimeStamp, + &outEncInfo, + &outROI_w, + &outROI_h, + &outROI_x, + &outROI_y); + writeCompute3DData(outFileName, outData); + } } printf("done!\n"); } diff --git a/convolve/sourceCode/convolve.cpp b/convolve/sourceCode/convolve.cpp index a8d1a93..ef220c5 100644 --- a/convolve/sourceCode/convolve.cpp +++ b/convolve/sourceCode/convolve.cpp @@ -19,8 +19,7 @@ void convolve( ap_uint<12> WinNum = 0; RgnPix InData; InData = InRgnPnt.read(); - ap_uint<1> VSync = InData.Sync.range(1,1); - if(0b0 == VSync) //wait for syncFirst + if(0b10 != InData.Sync) //wait for syncFirst return; RgnPixConvolve outData = {0,0,0,0,0,0, 0, 0, 0}; @@ -82,14 +81,23 @@ void convolve( int nD2 = 0; RgnPix HSyncData_d1 = {0,0,0,0,0,0,0}; ap_uint<8> peakValue = 0; - for(int n = 0; n < WinNum; n ++) + ap_uint<1> lastData = false; + for(int n = 0; n <= WinNum; n ++) { #pragma HLS LOOP_TRIPCOUNT min=3072 max=3072 + if(1 == lastData) //frmae done + break; + for(int i = 0; i <= 8; i ++) { #pragma HLS PIPELINE II=1 RgnPix InData = InRgnPnt.read(); + if(0b11 == InData.Sync) + { + lastData = 1; + break; + } if(0 == i) //HSync { //compute pre-line subpix; output @@ -134,7 +142,7 @@ void convolve( if(WinNum > 0) { RgnPixConvolve a_pnt; - a_pnt.Sync = 0b00; + a_pnt.Sync = 0b11; a_pnt.LazerWinX = HSyncData_d1.LazerWinX; a_pnt.LazerWinY = HSyncData_d1.LazerWinY; a_pnt.LazerWinRid = HSyncData_d1.LazerWinRid; diff --git a/convolve/sourceCode/convolve_tb.cpp b/convolve/sourceCode/convolve_tb.cpp index ba04b72..768ba19 100644 --- a/convolve/sourceCode/convolve_tb.cpp +++ b/convolve/sourceCode/convolve_tb.cpp @@ -7,6 +7,49 @@ #include "convolve.h" #include "../../globals/tbGlobals.h" +Luma_frameInfo readParaFile(const char* file) +{ + std::ifstream inputFile(file); + Luma_frameInfo frameInfo; + std::string strLineTxt; + + int data; + getline(inputFile, strLineTxt); //XL + sscanf(strLineTxt.c_str(), "XL:%d", &data); + frameInfo.L = (uint16_t)data; + + getline(inputFile, strLineTxt); //XR + + getline(inputFile, strLineTxt); //TL + sscanf(strLineTxt.c_str(), "TL:%d", &data); + frameInfo.T = (uint16_t)data; + + getline(inputFile, strLineTxt); //TR + + getline(inputFile, strLineTxt); //W + sscanf(strLineTxt.c_str(), "W:%d", &data); + frameInfo.W = (uint16_t)data; + + getline(inputFile, strLineTxt); //H + sscanf(strLineTxt.c_str(), "H:%d", &data); + frameInfo.H = (uint16_t)data; + + getline(inputFile, strLineTxt); //FrmNO + sscanf(strLineTxt.c_str(), "FrmNO:%x", &data); + frameInfo.FrmNo = (uint32_t)data; + + getline(inputFile, strLineTxt); //TimStp + sscanf(strLineTxt.c_str(), "TimStp:%x", &data); + frameInfo.TimeStamp = (uint32_t)data; + + getline(inputFile, strLineTxt); //EncInfo + sscanf(strLineTxt.c_str(), "EncInfo:%x", &data); + frameInfo.encInfo = (uint32_t)data; + + inputFile.close(); + return frameInfo; +} + std::vector readTestFile( const char* file, int* winSize) @@ -60,32 +103,26 @@ std::vector readTestFile( void genTestSream( std::vector& srcData, hls::stream& inStream, - const uint32_t FrmNo, - const uint32_t timeStamp, - const uint32_t encInfo, - const uint16_t frameROI_w, - const uint16_t frameROI_h, - const uint16_t frameROI_x, - const uint16_t frameROI_y) + const Luma_frameInfo FrmInfo) { RgnPix VSync = {0,0,0,0,0,0,0}; ap_uint<32> data_32; //1st:FrmNo - data_32 = FrmNo; + data_32 = FrmInfo.FrmNo; VSync.Sync = 0b10; VSync.LazerWinX(11,0) = data_32.range(11,0); VSync.LazerWinY(11,0) = data_32.range(23,12); VSync.LazerWinRid(7,0) = data_32.range(31,24); inStream.write(VSync); //2nd:FrmNo - data_32 = timeStamp; + data_32 = FrmInfo.TimeStamp; VSync.Sync = 0b00; VSync.LazerWinX(11,0) = data_32.range(11,0); VSync.LazerWinY(11,0) = data_32.range(23,12); VSync.LazerWinRid(7,0) = data_32.range(31,24); inStream.write(VSync); //3rd:encInfo - data_32 = encInfo; + data_32 = FrmInfo.encInfo; VSync.Sync = 0b00; VSync.LazerWinX(11,0) = data_32.range(11,0); VSync.LazerWinY(11,0) = data_32.range(23,12); @@ -93,28 +130,28 @@ void genTestSream( inStream.write(VSync); //4th:frmW(12bit), frmH(12bit) ap_uint<16> data16_1, data16_2; - data16_1 = frameROI_w; - data16_2 = frameROI_h; + data16_1 = FrmInfo.W; + data16_2 = FrmInfo.H; VSync.Sync = 0b00; VSync.LazerWinX(11,0) = data16_1.range(11,0); VSync.LazerWinY(11,0) = data16_2.range(11,0); inStream.write(VSync); //5th: frmX, WinNum - int winNum = (int)srcData.size(); - data16_1 = frameROI_x; + int winNum = (int)srcData.size() + 12; + data16_1 = FrmInfo.L; data16_2 = (uint16_t)winNum; VSync.Sync = 0b00; VSync.LazerWinX(11,0) = data16_1.range(11,0); VSync.LazerWinY(11,0) = data16_2.range(11,0); inStream.write(VSync); //6th: frmY - data16_1 = frameROI_y; + data16_1 = FrmInfo.T; VSync.Sync = 0b00; VSync.LazerWinX(11,0) = data16_1.range(11,0); VSync.LazerWinY(11,0) = 0; inStream.write(VSync); //output data - for(int i = 0; i < winNum; i ++) + for(int i = 0, i_max= (int)srcData.size(); i < i_max; i ++) { Luma_rgnData* a_line = &srcData[i]; RgnPix Hsync; @@ -138,6 +175,16 @@ void genTestSream( inStream.write(a_data); } } + //add Last sync data + VSync.LazerWinFlag = 0; + VSync.LazerWinRid = 0; + VSync.LazerWinRsv = 0; + VSync.LazerWinX = 0; + VSync.LazerWinY = 0; + VSync.RltvRdx = 0; + VSync.Sync = 0b11; + inStream.write(VSync); + return; } @@ -201,6 +248,8 @@ void convertConvolveStreamToArray( a_pnt.nD1 = data_in.nD1; a_pnt.nD2 = data_in.nD2; arrayData.push_back(a_pnt); + if(data_in.Sync == 0b11) + break; } return; } @@ -238,58 +287,90 @@ void writeConvolveData( sw.close(); } -#define TST_GROUP 1 +#define TST_GROUP 3 int main() { #if defined(__linux__) + const char* SrcDataPath[TST_GROUP] = { + "/home/zengHQ/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/", + "/home/zengHQ/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/", + "/home/zengHQ/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/" + }; const char* InDataPath[TST_GROUP] = { - "/home/zengHQ/CamTestData/testSample/PkCentering/testData.txt" + "/home/zengHQ/CamTestData/testSample/PkCentering/", + "/home/zengHQ/CamTestData/Grp_0/PkCentering/", + "/home/zengHQ/CamTestData/Grp_1/PkCentering/", }; const char* OutDataPath[TST_GROUP] = { - "/home/zengHQ/CamTestData/testSample/Convolve/testData.txt" + "/home/zengHQ/CamTestData/testSample/Convolve/", + "/home/zengHQ/CamTestData/Grp_0/Convolve/", + "/home/zengHQ/CamTestData/Grp_1/Convolve/", }; #else + const char* SrcDataPath[TST_GROUP] = { + "E:/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/", + "E:/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/", + "E:/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/" + }; const char* InDataPath[TST_GROUP] = { - "E:/CamTestData/testSample/PkCentering/testData.txt" + "E:/CamTestData/testSample/PkCentering/", + "E:/CamTestData/Grp_0/PkCentering/", + "E:/CamTestData/Grp_1/PkCentering/", }; const char* OutDataPath[TST_GROUP] = { - "E:/CamTestData/testSample/Convolve/testData.txt" + "E:/CamTestData/testSample/Convolve/", + "E:/CamTestData/Grp_0/Convolve/", + "E:/CamTestData/Grp_1/Convolve/", }; #endif - for(int n = 0; n < TST_GROUP; n ++) + int testFileSize[TST_GROUP] = {1, 4, 4}; + + for(int n = 1; n < TST_GROUP; n ++) { int winSize = 0; - std::vector testData = readTestFile(InDataPath[n], &winSize); - //gen test stream - hls::stream inStream; - uint32_t FrmNo = 0x1; - uint32_t timeStamp = 0x2; - uint32_t encInfo = 0x3; - uint16_t frameROI_w = 0x100; - uint16_t frameROI_h = 2048; - uint16_t frameROI_x = 0; - uint16_t frameROI_y = 0; - genTestSream(testData, inStream, FrmNo, timeStamp, encInfo, frameROI_w, frameROI_h, frameROI_x, frameROI_y); + int fileSize = testFileSize[n]; + for(int fi = 0; fi < fileSize; fi++) + { + char fileName[200]; + char paraFileName[200]; + char outFileName[200]; +#if defined(__linux__) + sprintf(fileName, "%s%d_L_pkCenter.txt", InDataPath[n], fi); + sprintf(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi); + sprintf(outFileName, "%s%d_L_convolve.txt", OutDataPath[n], fi); +#else + sprintf_s(fileName, "%s%d_L_pkCenter.txt", InDataPath[n], fi); + sprintf_s(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi); + sprintf_s(outFileName, "%s%d_L_convolve.txt", OutDataPath[n], fi); +#endif - hls::stream OutConvolvePnt; - convolve( inStream, OutConvolvePnt ); + std::vector testData = readTestFile(fileName, &winSize); + Luma_frameInfo framwInfo = readParaFile(paraFileName); - std::vector outData; - uint32_t outFrmNo, outTimeStamp, outEncInfo; - uint16_t outROI_w,outROI_h, outROI_x,outROI_y; - convertConvolveStreamToArray( - OutConvolvePnt, - outData, - &outFrmNo, - &outTimeStamp, - &outEncInfo, - &outROI_w, - &outROI_h, - &outROI_x, - &outROI_y); + //gen test stream + hls::stream inStream; + genTestSream(testData, inStream, framwInfo); - writeConvolveData(OutDataPath[n], outData); + hls::stream OutConvolvePnt; + convolve( inStream, OutConvolvePnt ); + + std::vector outData; + uint32_t outFrmNo, outTimeStamp, outEncInfo; + uint16_t outROI_w,outROI_h, outROI_x,outROI_y; + convertConvolveStreamToArray( + OutConvolvePnt, + outData, + &outFrmNo, + &outTimeStamp, + &outEncInfo, + &outROI_w, + &outROI_h, + &outROI_x, + &outROI_y); + + writeConvolveData(outFileName, outData); + } } printf("done!\n"); } diff --git a/globals/tbGlobals.h b/globals/tbGlobals.h index 9001f04..3de4662 100644 --- a/globals/tbGlobals.h +++ b/globals/tbGlobals.h @@ -50,6 +50,7 @@ typedef struct uint16_t Rid; //region的ID uint8_t Flag; //bit0是overlap标志。bit1是反光信号标 uint8_t pkValue; + uint8_t Sync; }Luma_rgnSubpix; @@ -60,6 +61,7 @@ typedef struct uint16_t Rid; //region的ID uint8_t Flag; //bit0是overlap标志。bit1是反光信号标 uint8_t pkValue; + uint8_t sync; }Luma_rgnSubpixCalib; #pragma pack(push, 1) diff --git a/peakCentering/sourceCode/peakCentering_tb.cpp b/peakCentering/sourceCode/peakCentering_tb.cpp index caa3948..1a147b6 100644 --- a/peakCentering/sourceCode/peakCentering_tb.cpp +++ b/peakCentering/sourceCode/peakCentering_tb.cpp @@ -110,6 +110,7 @@ Luma_frameInfo readParaFile(const char* file) sscanf(strLineTxt.c_str(), "EncInfo:%x", &data); frameInfo.encInfo = (uint32_t)data; + inputFile.close(); return frameInfo; } diff --git a/subPix/sourceCode/subPix.cpp b/subPix/sourceCode/subPix.cpp index f97c178..46952d6 100644 --- a/subPix/sourceCode/subPix.cpp +++ b/subPix/sourceCode/subPix.cpp @@ -18,8 +18,7 @@ void subpix( ap_uint<12> frmY = 0; RgnPixConvolve InData; InData = InConvolvePnt.read(); - ap_uint<1> VSync = InData.Sync.range(1,1); - if(0b0 == VSync) //wait for syncFirst + if(0b10 != InData.Sync) //wait for syncFirst return; RgnSubPix outData = {0,0,0,0,0,0}; @@ -91,11 +90,8 @@ void subpix( int nStart = (int)frmY; ap_uint<12> lastLine = frmY + frmH - 1; - ap_uint<16> readNum = 0; ap_uint<1> readFlag = 1; - InData = InConvolvePnt.read(); - readNum ++; RgnPixConvolve currData; int loopNum = nLoops * 2; for(int n = 0; n < loopNum; n ++) @@ -108,15 +104,14 @@ void subpix( ap_uint<1> vldFlag = 0; if( InData.LazerWinY <= lineIndx) { - if(readNum <= WinNum) + if(1 == readFlag) { currData = InData; vldFlag = 1; - if(readNum < WinNum) - { + if(currData.Sync != 0b11) InData = InConvolvePnt.read(); - } - readNum ++; + else + readFlag = 0; } } @@ -139,11 +134,8 @@ void subpix( a_pnt.value = currData.value; a_pnt.x = (float)currData.LazerWinX + 8.0f + fx + 0.5; //adjust point to pixel center a_pnt.rsv = 0; + a_pnt.Sync = currData.Sync; } - if(n == 0) - a_pnt.Sync = 0b01; - else - a_pnt.Sync = 0b00; OutSubpixPnt.write(a_pnt); } } diff --git a/subPix/sourceCode/subPix_tb.cpp b/subPix/sourceCode/subPix_tb.cpp index b0476cf..b8fa83f 100644 --- a/subPix/sourceCode/subPix_tb.cpp +++ b/subPix/sourceCode/subPix_tb.cpp @@ -7,6 +7,49 @@ #include "subPix.h" #include "../../globals/tbGlobals.h" +Luma_frameInfo readParaFile(const char* file) +{ + std::ifstream inputFile(file); + Luma_frameInfo frameInfo; + std::string strLineTxt; + + int data; + getline(inputFile, strLineTxt); //XL + sscanf(strLineTxt.c_str(), "XL:%d", &data); + frameInfo.L = (uint16_t)data; + + getline(inputFile, strLineTxt); //XR + + getline(inputFile, strLineTxt); //TL + sscanf(strLineTxt.c_str(), "TL:%d", &data); + frameInfo.T = (uint16_t)data; + + getline(inputFile, strLineTxt); //TR + + getline(inputFile, strLineTxt); //W + sscanf(strLineTxt.c_str(), "W:%d", &data); + frameInfo.W = (uint16_t)data; + + getline(inputFile, strLineTxt); //H + sscanf(strLineTxt.c_str(), "H:%d", &data); + frameInfo.H = (uint16_t)data; + + getline(inputFile, strLineTxt); //FrmNO + sscanf(strLineTxt.c_str(), "FrmNO:%x", &data); + frameInfo.FrmNo = (uint32_t)data; + + getline(inputFile, strLineTxt); //TimStp + sscanf(strLineTxt.c_str(), "TimStp:%x", &data); + frameInfo.TimeStamp = (uint32_t)data; + + getline(inputFile, strLineTxt); //EncInfo + sscanf(strLineTxt.c_str(), "EncInfo:%x", &data); + frameInfo.encInfo = (uint32_t)data; + + inputFile.close(); + return frameInfo; +} + std::vector readConvolveDataFile( const char* file){ std::ifstream inputFile(file); @@ -59,32 +102,26 @@ std::vector readConvolveDataFile( void genTestSream( std::vector& convolveData, hls::stream& convolveStream, - const uint32_t FrmNo, - const uint32_t timeStamp, - const uint32_t encInfo, - const uint16_t frameROI_w, - const uint16_t frameROI_h, - const uint16_t frameROI_x, - const uint16_t frameROI_y) + const Luma_frameInfo framwInfo) { RgnPixConvolve VSync = {0,0,0,0,0,0,0, 0, 0}; ap_uint<32> data_32; //1st:FrmNo - data_32 = FrmNo; + data_32 = framwInfo.FrmNo; VSync.Sync = 0b10; VSync.LazerWinX(11,0) = data_32.range(11,0); VSync.LazerWinY(11,0) = data_32.range(23,12); VSync.LazerWinRid(7,0) = data_32.range(31,24); convolveStream.write(VSync); //2nd:FrmNo - data_32 = timeStamp; + data_32 = framwInfo.TimeStamp; VSync.Sync = 0b00; VSync.LazerWinX(11,0) = data_32.range(11,0); VSync.LazerWinY(11,0) = data_32.range(23,12); VSync.LazerWinRid(7,0) = data_32.range(31,24); convolveStream.write(VSync); //3rd:encInfo - data_32 = encInfo; + data_32 = framwInfo.encInfo; VSync.Sync = 0b00; VSync.LazerWinX(11,0) = data_32.range(11,0); VSync.LazerWinY(11,0) = data_32.range(23,12); @@ -92,28 +129,28 @@ void genTestSream( convolveStream.write(VSync); //4th:frmW(12bit), frmH(12bit) ap_uint<16> data16_1, data16_2; - data16_1 = frameROI_w; - data16_2 = frameROI_h; + data16_1 = framwInfo.W; + data16_2 = framwInfo.H; VSync.Sync = 0b00; VSync.LazerWinX(11,0) = data16_1.range(11,0); VSync.LazerWinY(11,0) = data16_2.range(11,0); convolveStream.write(VSync); //5th: frmX, WinNum - int winNum = (int)convolveData.size(); - data16_1 = frameROI_x; + int winNum = (int)convolveData.size()+12; + data16_1 = framwInfo.L; data16_2 = (uint16_t)winNum; VSync.Sync = 0b00; VSync.LazerWinX(11,0) = data16_1.range(11,0); VSync.LazerWinY(11,0) = data16_2.range(11,0); convolveStream.write(VSync); //6th: frmY - data16_1 = frameROI_y; + data16_1 = framwInfo.T; VSync.Sync = 0b00; VSync.LazerWinX(11,0) = data16_1.range(11,0); VSync.LazerWinY(11,0) = 0; convolveStream.write(VSync); //output data - for(int i = 0; i < winNum; i ++) + for(int i = 0, i_max=(int)convolveData.size(); i < i_max; i ++) { Luma_convolveData* a_line = &convolveData[i]; RgnPixConvolve conData; @@ -125,6 +162,8 @@ void genTestSream( conData.value = (ap_uint<8>)a_line->pkValue; if(i == 0) conData.Sync = 0b01; + else if(i == (i_max-1)) + conData.Sync = 0b11; else conData.Sync = 0b00; conData.nD1 = a_line->nD1; @@ -182,6 +221,7 @@ void convertSubpixStreamToArray( a_pnt.Rid = (uint16_t)data_in.rid; a_pnt.Flag = (uint8_t)data_in.flag; a_pnt.pkValue = (uint8_t)data_in.value; + a_pnt.Sync = (uint8_t)data_in.Sync; arrayData.push_back(a_pnt); } return; @@ -197,70 +237,100 @@ void writeSubpixData( { char data[250]; #if defined(__linux__) - sprintf(data, "%.2f %04d %04d %01x %02d", - outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue); + sprintf(data, "%.2f %04d %04d %01x %02d %01x", + outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue, outData[i].Sync); #else - sprintf_s(data, "%.2f %04d %04d %01x %02d", - outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue); + sprintf_s(data, "%.2f %04d %04d %01x %02d %01x", + outData[i].x, outData[i].y, outData[i].Rid, outData[i].Flag, outData[i].pkValue, outData[i].Sync); #endif sw << data << std::endl; } sw.close(); } -#define TST_GROUP 1 +#define TST_GROUP 3 int main() { #if defined(__linux__) + const char* SrcDataPath[TST_GROUP] = { + "/home/zengHQ/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/", + "/home/zengHQ/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/", + "/home/zengHQ/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/" + }; const char* InDataPath[TST_GROUP] = { - "/home/zengHQ/CamTestData/testSample/Convolve/testData.txt" + "/home/zengHQ/CamTestData/testSample/Convolve/", + "/home/zengHQ/CamTestData/Grp_0/Convolve/", + "/home/zengHQ/CamTestData/Grp_1/Convolve/", }; const char* OutDataPath[TST_GROUP] = { - "/home/zengHQ/CamTestData/testSample/Subpix/testData.txt" + "/home/zengHQ/CamTestData/testSample/Subpix/", + "/home/zengHQ/CamTestData/Grp_0/Subpix/", + "/home/zengHQ/CamTestData/Grp_1/Subpix/", }; #else + const char* SrcDataPath[TST_GROUP] = { + "E:/CamTestData/testSample/PickRgn_C/PickRgn_Rslt/Txt/", + "E:/CamTestData/Grp_0/PickRgn_C/PickRgn_Rslt/Txt/", + "E:/CamTestData/Grp_1/PickRgn_C/PickRgn_Rslt/Txt/" + }; const char* InDataPath[TST_GROUP] = { - "E:/CamTestData/testSample/Convolve/testData.txt" + "E:/CamTestData/testSample/Convolve/", + "E:/CamTestData/Grp_0/Convolve/", + "E:/CamTestData/Grp_1/Convolve/", }; const char* OutDataPath[TST_GROUP] = { - "E:/CamTestData/testSample/Subpix/testData.txt" + "E:/CamTestData/testSample/Subpix/", + "E:/CamTestData/Grp_0/Subpix/", + "E:/CamTestData/Grp_1/Subpix/", }; #endif + int testFileSize[TST_GROUP] = {1, 4, 4}; - for(int n = 0; n < TST_GROUP; n ++) + for(int n = 1; n < TST_GROUP; n ++) { + int winSize = 0; - std::vector testData = readConvolveDataFile(InDataPath[n]); - //gen test stream - hls::stream inStream; - uint32_t FrmNo = 0x1; - uint32_t timeStamp = 0x2; - uint32_t encInfo = 0x3; - uint16_t frameROI_w = 0x100; - uint16_t frameROI_h = 2048; - uint16_t frameROI_x = 0; - uint16_t frameROI_y = 0; - genTestSream(testData, inStream, FrmNo, timeStamp, encInfo, frameROI_w, frameROI_h, frameROI_x, frameROI_y); + int fileSize = testFileSize[n]; + for(int fi = 0; fi < fileSize; fi++) + { + char fileName[200]; + char paraFileName[200]; + char outFileName[200]; +#if defined(__linux__) + sprintf(fileName, "%s%d_L_convolve.txt", InDataPath[n], fi); + sprintf(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi); + sprintf(outFileName, "%s%d_L_subpix.txt", OutDataPath[n], fi); +#else + sprintf_s(fileName, "%s%d_L_convolve.txt", InDataPath[n], fi); + sprintf_s(paraFileName, "%s%d_para_verilog.txt", SrcDataPath[n], fi); + sprintf_s(outFileName, "%s%d_L_subpix.txt", OutDataPath[n], fi); +#endif + Luma_frameInfo framwInfo = readParaFile(paraFileName); + std::vector testData = readConvolveDataFile(fileName); + //gen test stream + hls::stream inStream; + genTestSream(testData, inStream, framwInfo); - hls::stream outStream; - subpix(inStream,outStream); + hls::stream outStream; + subpix(inStream,outStream); - std::vector outData; - uint32_t outFrmNo, outTimeStamp, outEncInfo; - uint16_t outROI_w,outROI_h, outROI_x,outROI_y; - convertSubpixStreamToArray( - outStream, - outData, - &outFrmNo, - &outTimeStamp, - &outEncInfo, - &outROI_w, - &outROI_h, - &outROI_x, - &outROI_y); + std::vector outData; + uint32_t outFrmNo, outTimeStamp, outEncInfo; + uint16_t outROI_w,outROI_h, outROI_x,outROI_y; + convertSubpixStreamToArray( + outStream, + outData, + &outFrmNo, + &outTimeStamp, + &outEncInfo, + &outROI_w, + &outROI_h, + &outROI_x, + &outROI_y); - writeSubpixData(OutDataPath[n], outData); + writeSubpixData(outFileName, outData); + } } printf("done!\n");