52 lines
1.2 KiB
C++
52 lines
1.2 KiB
C++
// Copyright (2019-2023) Paul Scherrer Institute
|
|
|
|
#include <catch2/catch.hpp>
|
|
#include <bitshuffle/bitshuffle.h>
|
|
|
|
#include "../fpga/hls/hls_jfjoch.h"
|
|
|
|
TEST_CASE("HLS_bitshuffle") {
|
|
STREAM_512 data_in;
|
|
STREAM_512 data_out;
|
|
|
|
packet_512_t packet_in, packet_out;
|
|
|
|
ACT_REG_MODE(packet_in.data) = MODE_BITSHUFFLE_FPGA;
|
|
data_in << packet_in;
|
|
packet_in.user = 0;
|
|
packet_in.last = 0;
|
|
|
|
ap_int<16> image[4096];
|
|
|
|
for (int i = 0; i < 4096; i++)
|
|
image[i] = i;
|
|
|
|
for (int i = 0; i < 128; i++) {
|
|
packet_in.data = pack32(image + i * 32);
|
|
data_in << packet_in;
|
|
}
|
|
|
|
packet_in.user = 1;
|
|
data_in << packet_in;
|
|
|
|
bitshuffle(data_in, data_out);
|
|
|
|
REQUIRE(data_out.size() == 130);
|
|
data_out >> packet_out;
|
|
|
|
ap_int<16> image_out_shuf[128*32];
|
|
ap_int<16> image_out[128*32];
|
|
for (int i = 0; i < 128; i++) {
|
|
data_out >> packet_out;
|
|
unpack32(packet_out.data, image_out_shuf + 32 * i);
|
|
}
|
|
bshuf_bitunshuffle(image_out_shuf, image_out, 128*32, 2, 2048);
|
|
|
|
int diff = 0;
|
|
for (int i = 0; i < 128*32; i++) {
|
|
if (image_out[i] != image[i]) diff++;
|
|
}
|
|
REQUIRE(diff == 0);
|
|
}
|
|
|