// Copyright (2019-2023) Paul Scherrer Institute #include #include #include "../fpga/hls/hls_jfjoch.h" #include "../common/RawToConvertedGeometryCore.h" TEST_CASE("FPGA_add_multipixel_core","[FPGA][SpotFinder]") { STREAM_512 input; STREAM_512 output; std::vector input_frame(RAW_MODULE_SIZE), input_frame_transformed(CONVERTED_MODULE_SIZE), output_frame(257 * 64 * 32); for (int i = 0; i < RAW_MODULE_SIZE; i++) input_frame[i] = i % INT16_MAX; TransferModuleAdjustMultipixels(input_frame_transformed.data(), input_frame.data(), CONVERTED_MODULE_COLS, INT16_MIN, INT16_MAX); auto input_frame_512 = (ap_uint<512>*) input_frame.data(); auto output_frame_512 = (ap_uint<512>*) output_frame.data(); ap_uint<512> action_control = 0; ACT_REG_MODE(action_control) = MODE_ADD_MULTIPIXEL; input << packet_512_t { .data = action_control, .user = 0 }; for (int i = 0; i < RAW_MODULE_SIZE * sizeof(uint16_t) / 64; i++) input << packet_512_t { .data = input_frame_512[i], .user = 0 }; input << packet_512_t { .user = 1 }; add_multipixel(input, output); REQUIRE(input.size() == 0); REQUIRE(output.size() == (257 * 64) + 2); output.read(); for (int i = 0; i < 257 * 64 ; i++) output_frame_512[i] = output.read().data; output.read(); size_t diff = 0; for (int line = 0; line < 512; line++) { for (int col = 0; col < 1027; col++) { if (output_frame[line * 1028 + col] != input_frame_transformed[(line + 1) * 1030 + (col+1)]) diff++; } } REQUIRE(diff == 0); }