Files
Jungfraujoch/fpga/hls/axis_256_to_512.cpp

43 lines
1.3 KiB
C++

// Copyright (2019-2023) Paul Scherrer Institute
#include "hls_jfjoch.h"
void axis_256_to_512(hls::stream<ap_axiu<256,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<256,1,1,1> packet_256[2];
data_in >> packet_256[0];
while (!packet_256[0].user) {
#pragma HLS PIPELINE II=2
data_in >> packet_256[1];
data_out << (packet_256[1].data,packet_256[0].data);
data_in >> packet_256[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;
}
}