From 8c780c8867b9432c1422657364fd878b1bbca684 Mon Sep 17 00:00:00 2001 From: zengHQ Date: Sun, 23 Nov 2025 17:40:08 +0800 Subject: [PATCH] peakCentering bug: if a line is invalid, HSync is disabled, but data still output --- peakCentering/sourceCode/peakCentering.cpp | 12 +- peakCentering/sourceCode/peakCentering_tb.cpp | 111 +++++++++++------- 2 files changed, 79 insertions(+), 44 deletions(-) diff --git a/peakCentering/sourceCode/peakCentering.cpp b/peakCentering/sourceCode/peakCentering.cpp index f25d632..8300697 100644 --- a/peakCentering/sourceCode/peakCentering.cpp +++ b/peakCentering/sourceCode/peakCentering.cpp @@ -86,6 +86,7 @@ void peakCentering( ap_uint<2> SM = 0b00; ap_uint<1> evenFlag = 0; ap_uint<5> pkRng_S, pkRng_E; + ap_uint<1> outFlag = 0; for(int n = 0; n <= WinNum; n ++) { #pragma HLS LOOP_TRIPCOUNT min=3072 max=3072 @@ -99,6 +100,9 @@ void peakCentering( else InData = zeroData; + if(InData.LazerWinY == 0x07ac) + int kkk = 1; //debug point + if(0 == i) //HSync { evenFlag = n%2; @@ -109,7 +113,13 @@ void peakCentering( HSyncData_d1.LazerWinX = LazerWinX_d1 + pkCenter; if ((n > 0) &&( linePk.len>0)) + { OutCenteringPnt.write(HSyncData_d1); + outFlag = 1; + } + else + outFlag = 0; + HSyncData_d1 = InData; LazerWinX_d1 = InData.LazerWinX - RGN_DATA_WIN_SIZE; @@ -280,7 +290,7 @@ void peakCentering( stmOut.Sync = 0b00; stmOut.LazerWinX(7,0) = out_0; stmOut.LazerWinY(7,0) = out_1; - if( (n > 0 ) && (pkCenter > 0) ) + if( (n > 0 ) && (pkCenter > 0) &&(outFlag == 1)) { OutCenteringPnt.write(stmOut); } diff --git a/peakCentering/sourceCode/peakCentering_tb.cpp b/peakCentering/sourceCode/peakCentering_tb.cpp index 09bc5af..cc1389d 100644 --- a/peakCentering/sourceCode/peakCentering_tb.cpp +++ b/peakCentering/sourceCode/peakCentering_tb.cpp @@ -18,17 +18,17 @@ void save_bmp_2( fopen_s(&file, filename, "wb"); #endif if (!file) { - printf("ÎÞ·¨´ò¿ªÎļþ %s\n", filename); + printf("�޷����ļ� %s\n", filename); return; } - // ¼ÆËãÿÐÐÌî³ä×Ö½ÚÊý - int bytes_per_row = RGN_DATA_WIN_SIZE * 3; // ÿ¸öÏñËØ3×Ö½Ú£¨BGR£© + // ����ÿ������ֽ��� + int bytes_per_row = RGN_DATA_WIN_SIZE * 3; // ÿ������3�ֽڣ�BGR�� int padding = (4 - (bytes_per_row % 4)) % 4; int row_size = bytes_per_row + padding; int height = testSamples.size(); - // ³õʼ»¯ÎļþÍ· + // ��ʼ���ļ�ͷ BMPFileHeader file_header = { .file_type = 0x4D42, // 'BM' .file_size = sizeof(BMPFileHeader) + sizeof(BMPInfoHeader) + row_size * height, @@ -36,11 +36,11 @@ void save_bmp_2( .reserved2 = 0, .offset_data = sizeof(BMPFileHeader) + sizeof(BMPInfoHeader) }; - // ³õʼ»¯ÐÅϢͷ + // ��ʼ����Ϣͷ BMPInfoHeader info_header = { .size = sizeof(BMPInfoHeader), .width = RGN_DATA_WIN_SIZE, - .height = height, // ÕýÊý±íʾÏñËØÊý¾Ý´Óϵ½ÉÏÅÅÁÐ + .height = height, // ������ʾ�������ݴ��µ������� .planes = 1, .bit_count = 24, .compression = 0, @@ -51,21 +51,21 @@ void save_bmp_2( .colors_important = 0 }; - // дÈëÍ·ÐÅÏ¢ + // д��ͷ��Ϣ fwrite(&file_header, 1, sizeof(BMPFileHeader), file); fwrite(&info_header, 1, sizeof(BMPInfoHeader), file); - // дÈëÏñËØÊý¾Ý£¨´Ó×îºóÒ»ÐпªÊ¼£© + // д���������ݣ������һ�п�ʼ�� uint8_t padding_bytes[3] = { 0, 0, 0 }; for (int y = height - 1; y >= 0; y--) { for (int x = 0; x < RGN_DATA_WIN_SIZE; x++) { uint8_t pixel = (uint8_t)testSamples[y].data[x]; - // ½«RGBתΪBGR˳Ðò + // ��RGBתΪBGR˳�� fputc(pixel, file); // B fputc(pixel, file); // G fputc(pixel, file); // R } - fwrite(padding_bytes, 1, padding, file); // Ìî³ä + fwrite(padding_bytes, 1, padding, file); // ��� } fclose(file); @@ -263,6 +263,9 @@ void convertStreamToArray( Luma_rgnData a_line; a_line.WinRdx = (uint16_t)Hsync.LazerWinX; a_line.y = (uint16_t)Hsync.LazerWinY; + if(a_line.y >= 1963) + int kkk = 1; //debug point + a_line.Rid = (uint16_t)Hsync.LazerWinRid; a_line.Flag = (uint8_t)Hsync.LazerWinFlag; a_line.PeakRltvRdx = (uint8_t)Hsync.RltvRdx; @@ -319,59 +322,81 @@ void writepeakCenteringData( -#define TST_GROUP 1 +#define TST_GROUP 3 int main() { #if defined(__linux__) const char* InDataPath[TST_GROUP] = { - "/home/zengHQ/CamTestData/testSample/RgnPixData/testData.txt" + "/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* OutDataPath[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/", }; #else const char* InDataPath[TST_GROUP] = { - "E:/CamTestData/testSample/RgnPixData/testData.txt" + "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* OutDataPath[TST_GROUP] = { - "E:/CamTestData/testSample/PkCentering/testData.txt" + "E:/CamTestData/testSample/PkCentering/", + "E:/CamTestData/Grp_0/PkCentering/", + "E:/CamTestData/Grp_1/PkCentering/", }; #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 = 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 outFileName[200]; +#if defined(__linux__) + sprintf(fileName, "%s%d_L_verilog.txt", InDataPath[n], fi); + sprintf(outFileName, "%s%d_L_pkCenter.txt", OutDataPath[n], fi); +#else + sprintf_s(fileName, "%s%d_L_verilog.txt", InDataPath[n], fi); + sprintf_s(outFileName, "%s%d_L_pkCenter.txt", OutDataPath[n], fi); +#endif + std::vector testData = readTestFile(fileName, &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); - hls::stream outStream; - peakCentering(inStream,outStream); + hls::stream outStream; + peakCentering(inStream,outStream); - std::vector outData; - uint32_t outFrmNo, outTimeStamp, outEncInfo; - uint16_t outROI_w,outROI_h, outROI_x,outROI_y; - convertStreamToArray( - 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; + convertStreamToArray( + outStream, + outData, + &outFrmNo, + &outTimeStamp, + &outEncInfo, + &outROI_w, + &outROI_h, + &outROI_x, + &outROI_y); - writepeakCenteringData(OutDataPath[n], outData); + writepeakCenteringData(outFileName, outData); + } } printf("done!\n");