Files
Jungfraujoch/fpga/hls/axis_helpers.cpp

45 lines
1.4 KiB
C++

// Copyright (2019-2023) Paul Scherrer Institute
#include "hls_jfjoch.h"
void axis_128_to_512(hls::stream<ap_axiu<128,1,1,1>> &data_in,
hls::stream<ap_uint<512>> &data_out) {
#pragma HLS INTERFACE ap_ctrl_none port=return
#pragma HLS INTERFACE axis register both port=data_in
#pragma HLS INTERFACE axis register both port=data_out
ap_axiu<128,1,1,1> packet_128[4];
data_in >> packet_128[0];
while (!packet_128[0].user) {
#pragma HLS PIPELINE II=4
data_in >> packet_128[1];
data_in >> packet_128[2];
data_in >> packet_128[3];
data_out << (packet_128[3].data,packet_128[2].data, packet_128[1].data,packet_128[0].data);
data_in >> packet_128[0];
}
}
void axis_32_to_512(hls::stream<ap_axiu<32,1,1,1>> &data_in,
hls::stream<ap_uint<512>> &data_out) {
#pragma HLS INTERFACE ap_ctrl_none port=return
#pragma HLS INTERFACE axis register both port=data_in
#pragma HLS INTERFACE axis register both port=data_out
ap_axiu<32,1,1,1> packet_32;
data_in >> packet_32;
while (!packet_32.user) {
#pragma HLS PIPELINE II=16
ap_uint<512> val = 0;
val(31,0) = packet_32.data;
for (int i = 1; i < 16; i++) {
data_in >> packet_32;
val(i * 32 + 31, i * 32) = packet_32.data;
}
data_out << val;
data_in >> packet_32;
}
}