Files
Jungfraujoch/fpga/hls/spot_finder_tb.cpp
2023-10-19 22:43:35 +02:00

56 lines
1.4 KiB
C++

#include "hls_jfjoch.h"
#include <thread>
int main() {
int ret = 0;
STREAM_512 input;
STREAM_512 output;
hls::stream<ap_axiu<32, 1, 1, 1>> strong_pixel;
ap_int<16> in_photon_count_threshold = 8;
ap_uint<8> in_strong_pixel_threshold = 16;
std::vector<int16_t> input_frame(4 * RAW_MODULE_SIZE), output_frame(
RAW_MODULE_SIZE);
for (int i = 0; i < 4 * RAW_MODULE_SIZE; i++) {
if (i % RAW_MODULE_COLS == 1023)
input_frame[i] = INT16_MIN;
else
input_frame[i] = i % RAW_MODULE_COLS;
}
auto input_frame_512 = (ap_uint<512>*) input_frame.data();
auto output_frame_512 = (ap_uint<512>*) output_frame.data();
input << packet_512_t { .user = 0 };
for (int i = 0; i < 4 * 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 };
spot_finder(input, output, strong_pixel, in_photon_count_threshold,
in_strong_pixel_threshold);
if (input.size() != 0)
ret = 1;
if (output.size() != 4 * RAW_MODULE_SIZE * sizeof(uint16_t) / 64 + 2)
ret = 1;
for (int i = 0; i < 4 * RAW_MODULE_SIZE * sizeof(uint16_t) / 64 + 2; i++)
output.read();
if (strong_pixel.size() != 4 * (RAW_MODULE_SIZE * sizeof(uint16_t) / 64 + 16) + 1)
ret = 1;
for (int i = 0; i < 4 * (RAW_MODULE_SIZE * sizeof(uint16_t) / 64 + 16) + 1; i++)
strong_pixel.read();
if (ret != 0) {
printf("Test failed !!!\n");
ret = 1;
} else {
printf("Test passed !\n");
}
return ret;
}