From f4f4b50be783b176b3e1bab470702e643348edd4 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sun, 24 Sep 2023 15:43:04 +0200 Subject: [PATCH] FPGA: frame_generator has 8 module specific frames --- common/Definitions.h | 3 ++- fpga/hls/frame_generator.cpp | 4 +--- fpga/pcie_driver/jfjoch_drv.h | 2 +- receiver/FPGAAcquisitionDevice.cpp | 10 +++++---- receiver/JFJochReceiverTest.cpp | 11 +++++++--- receiver/MockAcquisitionDevice.cpp | 34 +++++++++++++++++++----------- 6 files changed, 40 insertions(+), 24 deletions(-) diff --git a/common/Definitions.h b/common/Definitions.h index dc0588c6..4a90e756 100644 --- a/common/Definitions.h +++ b/common/Definitions.h @@ -49,7 +49,7 @@ // For FPGA #define ACTION_TYPE 0x52324158 -#define RELEASE_LEVEL 0x003F +#define RELEASE_LEVEL 0x0040 #define MODE_CONV 0x0001L @@ -123,5 +123,6 @@ #define INT_PKT_GEN_EXPTTIME 10000 #define FPGA_INTEGRATION_BIN_COUNT 1024 +#define FRAME_GENERATOR_MODULES 8 #endif //DEFINITIONS_H diff --git a/fpga/hls/frame_generator.cpp b/fpga/hls/frame_generator.cpp index ce3e8218..1f9af9d9 100644 --- a/fpga/hls/frame_generator.cpp +++ b/fpga/hls/frame_generator.cpp @@ -52,9 +52,7 @@ void generate_packet(STREAM_512 &data_out, ap_uint<208> remainder = header(719, 512); for (int i = 0; i < 128; i++) { - ap_uint<512> tmp = uram[eth_packet * 128 + i]; - //tmp(255, 0) = d_hbm_p0[eth_packet * 128 + i]; - //tmp(511, 256) = d_hbm_p1[eth_packet * 128 + i]; + ap_uint<512> tmp = uram[(module % FRAME_GENERATOR_MODULES) * 128 * 128 + eth_packet * 128 + i]; packet.data(207, 0) = remainder; packet.data(511, 208) = tmp(303, 0); data_out << packet; diff --git a/fpga/pcie_driver/jfjoch_drv.h b/fpga/pcie_driver/jfjoch_drv.h index 21e3cf88..c5ca4ea0 100644 --- a/fpga/pcie_driver/jfjoch_drv.h +++ b/fpga/pcie_driver/jfjoch_drv.h @@ -73,7 +73,7 @@ #define ADDR_CMS_HBM_TEMP1_INS_REG 0x028268 // in C #define ADDR_CMS_HBM_TEMP2_INS_REG 0x0282BC // in C -#define INT_PKT_GEN_FRAME_SIZE_BYTES (512U*1024U*2UL) +#define INT_PKT_GEN_FRAME_SIZE_BYTES (FRAME_GENERATOR_MODULES * RAW_MODULE_SIZE*sizeof(short)) struct jfjoch_buf { dma_addr_t dma_address; diff --git a/receiver/FPGAAcquisitionDevice.cpp b/receiver/FPGAAcquisitionDevice.cpp index 7fa12c8b..8561e408 100644 --- a/receiver/FPGAAcquisitionDevice.cpp +++ b/receiver/FPGAAcquisitionDevice.cpp @@ -283,8 +283,10 @@ void FPGAAcquisitionDevice::SetCustomInternalGeneratorFrame(const std::vector FPGAAcquisitionDevice::GetInternalGeneratorFrame() const { @@ -293,7 +295,7 @@ std::vector FPGAAcquisitionDevice::GetInternalGeneratorFrame() const { FPGAAcquisitionDevice::FPGAAcquisitionDevice(uint16_t data_stream) : AcquisitionDevice(data_stream), -internal_pkt_gen_frame(RAW_MODULE_SIZE) { - for (int i = 0; i < RAW_MODULE_SIZE; i++) +internal_pkt_gen_frame(RAW_MODULE_SIZE * FRAME_GENERATOR_MODULES) { + for (int i = 0; i < RAW_MODULE_SIZE * FRAME_GENERATOR_MODULES; i++) internal_pkt_gen_frame[i] = i % 65536; } \ No newline at end of file diff --git a/receiver/JFJochReceiverTest.cpp b/receiver/JFJochReceiverTest.cpp index c73de6ac..4ce1c966 100644 --- a/receiver/JFJochReceiverTest.cpp +++ b/receiver/JFJochReceiverTest.cpp @@ -92,10 +92,15 @@ bool JFJochReceiverTest(JFJochProtoBuf::ReceiverOutput &output, Logger &logger, std::vector raw_expected_image(RAW_MODULE_SIZE * x.GetModulesNum()); for (int i = 0; i < x.GetDataStreamsNum(); i++) { uint32_t module0 = x.GetFirstModuleOfDataStream(i); + auto int_gen_frame = aq_devices[i]->GetInternalGeneratorFrame(); + if (int_gen_frame.size() != FRAME_GENERATOR_MODULES * RAW_MODULE_SIZE) { + logger.Error("Wrong internal generator frame size"); + return false; + } + for (int m = 0; m < x.GetModulesNum(i); m++) { - auto int_gen_frame = aq_devices[i]->GetInternalGeneratorFrame(); - if (int_gen_frame.size() == RAW_MODULE_SIZE) - memcpy(raw_expected_image.data() + (module0 + m) * RAW_MODULE_SIZE, int_gen_frame.data(), + memcpy(raw_expected_image.data() + (module0 + m) * RAW_MODULE_SIZE, + int_gen_frame.data() + (m % FRAME_GENERATOR_MODULES) * RAW_MODULE_SIZE, RAW_MODULE_SIZE * sizeof(uint16_t)); } } diff --git a/receiver/MockAcquisitionDevice.cpp b/receiver/MockAcquisitionDevice.cpp index ab2e4f0b..18b66269 100644 --- a/receiver/MockAcquisitionDevice.cpp +++ b/receiver/MockAcquisitionDevice.cpp @@ -35,12 +35,13 @@ void MockAcquisitionDevice::Cancel() { MockAcquisitionDevice::MockAcquisitionDevice(uint16_t data_stream, size_t in_frame_buffer_size_modules, int16_t in_numa_node) -: AcquisitionDevice(data_stream), internal_pkt_gen_frame(RAW_MODULE_SIZE), internal_pkt_gen_frame_conv(RAW_MODULE_SIZE) { +: AcquisitionDevice(data_stream), internal_pkt_gen_frame(FRAME_GENERATOR_MODULES * RAW_MODULE_SIZE), +internal_pkt_gen_frame_conv(FRAME_GENERATOR_MODULES * RAW_MODULE_SIZE) { max_modules = 16; MapBuffersStandard(in_frame_buffer_size_modules, 1, in_numa_node); max_handle = in_frame_buffer_size_modules; - for (int i = 0; i < RAW_MODULE_SIZE; i++) { + for (int i = 0; i < FRAME_GENERATOR_MODULES * RAW_MODULE_SIZE; i++) { internal_pkt_gen_frame[i] = i % 65536; internal_pkt_gen_frame_conv[i] = i % 65536; } @@ -152,19 +153,28 @@ void MockAcquisitionDevice::SetCustomInternalGeneratorFrame(const std::vector MockAcquisitionDevice::GetInternalGeneratorFrame() const {