The user data width between the kernel and the memory controller can be
configured by the Vitis compiler based on the data
types of the kernel arguments. To maximize the data throughput, Xilinx recommends that you choose data types map to the full data width
on the memory controller. The memory controller in all supported acceleration cards
supports 512-bit user interface, which can be mapped to C/C++ arbitrary precision data
type ap_int<512>
or OpenCL vector data types such as int16
.
The default is for Vitis HLS to automatically re-size the kernel interface ports up to 512-bits to improve burst access. As shown on the following figure, you can observe burst AXI transactions (Burst Length 16) and a 512-bit package size (Burst Size 64 bytes).
This example shows good interface configuration as it maximizes AXI data width as well as actual burst transactions.
Complex structs or classes, used to declare interfaces, can lead to very complex hardware interfaces due to memory layout and data packing differences. This can introduce potential issues that are very difficult to debug in a complex system.