Files
Jungfraujoch/fpga/hls/transfer_hbm.cpp
T

66 lines
2.4 KiB
C++

// Copyright (2019-2023) Paul Scherrer Institute
// SPDX-License-Identifier: GPL-3.0-or-later
#include "hls_jfjoch.h"
void transfer_hbm(ap_uint<256> *d_hbm_p0,
ap_uint<256> *uram,
uint32_t hbm_offset,
bool hbm_to_uram,
uint8_t stride,
uint8_t uram_offset) {
#pragma HLS INTERFACE m_axi port=d_hbm_p0 bundle=d_hbm_p0 depth=512 offset=off \
max_read_burst_length=16 max_write_burst_length=16 latency=120 num_write_outstanding=8 num_read_outstanding=9
#pragma HLS INTERFACE m_axi port=uram bundle=uram depth=512 offset=off \
max_read_burst_length=16 max_write_burst_length=16 latency=8 num_write_outstanding=2 num_read_outstanding=2
#pragma HLS interface s_axilite port=hbm_offset
#pragma HLS interface s_axilite port=hbm_to_uram
#pragma HLS interface s_axilite port=stride
#pragma HLS interface s_axilite port=uram_offset
#pragma HLS INTERFACE s_axilite port=return
if ((stride != 1) && (stride != 2) && (stride != 4))
return;
if (uram_offset >= stride)
return;
if (stride == 2) {
if (hbm_to_uram) {
for (int i = 0; i < RAW_MODULE_SIZE * sizeof(uint16_t) / 32 / 2; i++) {
#pragma HLS PIPELINE II=1
uram[2 * i + uram_offset] = d_hbm_p0[hbm_offset + i];
}
} else {
for (int i = 0; i < RAW_MODULE_SIZE * sizeof(uint16_t) / 32 / 2; i++) {
#pragma HLS PIPELINE II=1
d_hbm_p0[hbm_offset + i] = uram[2 * i + uram_offset];
}
}
} else if (stride == 4) {
if (hbm_to_uram) {
for (int i = 0; i < RAW_MODULE_SIZE * sizeof(uint16_t) / 32 / 4; i++) {
#pragma HLS PIPELINE II=1
uram[4 * i + uram_offset] = d_hbm_p0[hbm_offset + i];
}
} else {
for (int i = 0; i < RAW_MODULE_SIZE * sizeof(uint16_t) / 32 / 4; i++) {
#pragma HLS PIPELINE II=1
d_hbm_p0[hbm_offset + i] = uram[4 * i + uram_offset];
}
}
} else {
if (hbm_to_uram) {
for (int i = 0; i < RAW_MODULE_SIZE * sizeof(uint16_t) / 32; i++) {
#pragma HLS PIPELINE II=1
uram[i + uram_offset] = d_hbm_p0[hbm_offset + i];
}
} else {
for (int i = 0; i < RAW_MODULE_SIZE * sizeof(uint16_t) / 32; i++) {
#pragma HLS PIPELINE II=1
d_hbm_p0[hbm_offset + i] = uram[i + uram_offset];
}
}
}
}