FPGA: frame_generator has 8 module specific frames

This commit is contained in:
2023-09-24 15:43:04 +02:00
parent ae6e036628
commit f4f4b50be7
6 changed files with 40 additions and 24 deletions
+2 -1
View File
@@ -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
+1 -3
View File
@@ -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;
+1 -1
View File
@@ -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;
+6 -4
View File
@@ -283,8 +283,10 @@ void FPGAAcquisitionDevice::SetCustomInternalGeneratorFrame(const std::vector<ui
if (v.size() != RAW_MODULE_SIZE)
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Error in size of custom internal generator frame");
for (int i = 0; i < RAW_MODULE_SIZE; i++)
internal_pkt_gen_frame[i] = v[i];
for (int m = 0; m < FRAME_GENERATOR_MODULES; m++) {
for (int i = 0; i < RAW_MODULE_SIZE; i++)
internal_pkt_gen_frame[m * RAW_MODULE_SIZE + i] = v[i];
}
}
std::vector<uint16_t> FPGAAcquisitionDevice::GetInternalGeneratorFrame() const {
@@ -293,7 +295,7 @@ std::vector<uint16_t> 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;
}
+8 -3
View File
@@ -92,10 +92,15 @@ bool JFJochReceiverTest(JFJochProtoBuf::ReceiverOutput &output, Logger &logger,
std::vector<uint16_t> 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));
}
}
+22 -12
View File
@@ -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<ui
if (v.size() != RAW_MODULE_SIZE)
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
"Error in size of custom internal generator frame");
internal_pkt_gen_frame = v;
internal_pkt_gen_frame_conv = v;
for (int m = 0; m < FRAME_GENERATOR_MODULES ; m++) {
memcpy(internal_pkt_gen_frame.data() + RAW_MODULE_SIZE * m,
v.data(),
RAW_MODULE_SIZE);
memcpy(internal_pkt_gen_frame_conv.data() + RAW_MODULE_SIZE * m,
v.data(),
RAW_MODULE_SIZE);
}
}
void MockAcquisitionDevice::InitializeCalibration(const DiffractionExperiment &experiment, const JFCalibration &calib) {
JFConversionFloatingPoint conv;
conv.Setup(calib.GainCalibration(experiment.GetFirstModuleOfDataStream(data_stream)),
calib.Pedestal(experiment.GetFirstModuleOfDataStream(data_stream),0),
calib.Pedestal(experiment.GetFirstModuleOfDataStream(data_stream),1),
calib.Pedestal(experiment.GetFirstModuleOfDataStream(data_stream),2),
experiment.GetPhotonEnergy_keV());
conv.ConvertModule((int16_t *) internal_pkt_gen_frame_conv.data(), internal_pkt_gen_frame.data());
for (int m = 0; (m < experiment.GetModulesNum(data_stream)) && (m < FRAME_GENERATOR_MODULES); m++) {
JFConversionFloatingPoint conv;
conv.Setup(calib.GainCalibration(experiment.GetFirstModuleOfDataStream(data_stream) + m),
calib.Pedestal(experiment.GetFirstModuleOfDataStream(data_stream) + m,0),
calib.Pedestal(experiment.GetFirstModuleOfDataStream(data_stream) + m,1),
calib.Pedestal(experiment.GetFirstModuleOfDataStream(data_stream) + m,2),
experiment.GetPhotonEnergy_keV());
conv.ConvertModule((int16_t *) internal_pkt_gen_frame_conv.data() + m * RAW_MODULE_SIZE,
internal_pkt_gen_frame.data() + m * RAW_MODULE_SIZE);
}
}
std::vector<uint16_t> MockAcquisitionDevice::GetInternalGeneratorFrame() const {