add function in testbench to read simulation parameters
This commit is contained in:
parent
1849b598d7
commit
9d4db3772f
@ -10,6 +10,17 @@
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t L;
|
||||
uint16_t T;
|
||||
uint16_t W;
|
||||
uint16_t H;
|
||||
uint32_t FrmNo;
|
||||
uint32_t TimeStamp;
|
||||
uint32_t encInfo;
|
||||
}Luma_frameInfo;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t WinRdx;//窗口在图像内的起始坐标
|
||||
|
||||
@ -18,17 +18,17 @@ void save_bmp_2(
|
||||
fopen_s(&file, filename, "wb");
|
||||
#endif
|
||||
if (!file) {
|
||||
printf("锟睫凤拷锟斤拷锟侥硷拷 %s\n", filename);
|
||||
printf("閿熺潾鍑ゆ嫹閿熸枻鎷烽敓渚ョ》鎷<EFBFBD> %s\n", filename);
|
||||
return;
|
||||
}
|
||||
|
||||
// 锟斤拷锟斤拷每锟斤拷锟斤拷锟斤拷纸锟斤拷锟<EFBFBD>
|
||||
int bytes_per_row = RGN_DATA_WIN_SIZE * 3; // 每锟斤拷锟斤拷锟斤拷3锟街节o拷BGR锟斤拷
|
||||
// 閿熸枻鎷烽敓鏂ゆ嫹姣忛敓鏂ゆ嫹閿熸枻鎷烽敓鏂ゆ嫹绾搁敓鏂ゆ嫹閿燂拷
|
||||
int bytes_per_row = RGN_DATA_WIN_SIZE * 3; // 姣忛敓鏂ゆ嫹閿熸枻鎷烽敓鏂ゆ嫹3閿熻鑺傦綇鎷稡GR閿熸枻鎷<EFBFBD>
|
||||
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,26 +51,67 @@ void save_bmp_2(
|
||||
.colors_important = 0
|
||||
};
|
||||
|
||||
// 写锟斤拷头锟斤拷息
|
||||
// 鍐欓敓鏂ゆ嫹澶撮敓鏂ゆ嫹鎭<EFBFBD>
|
||||
fwrite(&file_header, 1, sizeof(BMPFileHeader), file);
|
||||
fwrite(&info_header, 1, sizeof(BMPInfoHeader), file);
|
||||
|
||||
// 写锟斤拷锟斤拷锟斤拷锟斤拷锟捷o拷锟斤拷锟斤拷锟揭伙拷锌锟绞硷拷锟<EFBFBD>
|
||||
// 鍐欓敓鏂ゆ嫹閿熸枻鎷烽敓鏂ゆ嫹閿熸枻鎷烽敓鎹凤綇鎷烽敓鏂ゆ嫹閿熸枻鎷烽敓鎻紮鎷烽攲閿熺粸纭锋嫹閿燂拷
|
||||
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顺锟斤拷
|
||||
// 閿熸枻鎷稲GB杞负BGR椤洪敓鏂ゆ嫹
|
||||
fputc(pixel, file); // B
|
||||
fputc(pixel, file); // G
|
||||
fputc(pixel, file); // R
|
||||
}
|
||||
fwrite(padding_bytes, 1, padding, file); // 锟斤拷锟<EFBFBD>
|
||||
fwrite(padding_bytes, 1, padding, file); // 閿熸枻鎷烽敓锟<EFBFBD>
|
||||
}
|
||||
|
||||
fclose(file);
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
return frameInfo;
|
||||
}
|
||||
|
||||
std::vector<Luma_rgnData> readTestFile(
|
||||
const char* file,
|
||||
@ -125,32 +166,26 @@ std::vector<Luma_rgnData> readTestFile(
|
||||
void genTestSream(
|
||||
std::vector<Luma_rgnData>& srcData,
|
||||
hls::stream<RgnPix>& 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 frameInfo)
|
||||
{
|
||||
RgnPix VSync = {0,0,0,0,0,0,0};
|
||||
ap_uint<32> data_32;
|
||||
//1st:FrmNo
|
||||
data_32 = FrmNo;
|
||||
data_32 = frameInfo.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 = frameInfo.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 = frameInfo.encInfo;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.LazerWinX(11,0) = data_32.range(11,0);
|
||||
VSync.LazerWinY(11,0) = data_32.range(23,12);
|
||||
@ -158,22 +193,22 @@ 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 = frameInfo.W;
|
||||
data16_2 = frameInfo.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;
|
||||
data16_1 = frameInfo.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 = frameInfo.T;
|
||||
VSync.Sync = 0b00;
|
||||
VSync.LazerWinX(11,0) = data16_1.range(11,0);
|
||||
VSync.LazerWinY(11,0) = 0;
|
||||
@ -373,22 +408,18 @@ int main()
|
||||
char outFileName[200];
|
||||
#if defined(__linux__)
|
||||
sprintf(fileName, "%s%d_L_verilog.txt", InDataPath[n], fi);
|
||||
sprintf(paraFileName, "%s%d_para_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(paraFileName, "%s%d_para_verilog.txt", InDataPath[n], fi);
|
||||
sprintf_s(outFileName, "%s%d_L_pkCenter.txt", OutDataPath[n], fi);
|
||||
#endif
|
||||
std::vector<Luma_rgnData> testData = readTestFile(fileName, &winSize);
|
||||
Luma_frameInfo framwInfo = readParaFile(paraFileName);
|
||||
//gen test stream
|
||||
hls::stream<RgnPix> 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);
|
||||
genTestSream(testData, inStream, framwInfo);
|
||||
|
||||
hls::stream<RgnPix> outStream;
|
||||
peakCentering(inStream,outStream);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user