cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
XilinxVivadoUbu
Visitor
Visitor
147 Views
Registered: ‎12-16-2020

Missed burst read (m_axi)

My kernels reads of vector of datatype ap_uint<8> (or unsigned char) from an HBM bank (Platform: U280, hardware emulation).

First I transferred a vector of length 24896 bytes (aligned ap_uint<8>data_in(24896) to an HBM bank and I am reading that vector in the kernel in 16 chunks.

Kernel code:

 

 

BLOCK_SIZE = 24896 / 16
...
ap_uint<8> data[BLOCK_SIZE];

for (int i = 0; i < 16; i++) {
  read_data:
     for (int k = 0, k < BLOCK_SIZE; k++) {
        data[k] = data_input[i* BLOCK_SIZE + k]
     }
...

 

 
Block size is 1556 bytes (24896 / 16).
In Vitis Analyzer, I could see that the kernel is reading the data in 32bits steps (8 -> 32).

I didn't achieve to reach maximum 512bits (64 bytes) burst reads even though I tried to resize (padding) my block size to a value dividable by 64 bytes (e. g. block size of 1600).  
With other datatypes such as int or double, I could easily achieve the max. burst read of 64 bytes.

How can achieve the max. throughput with the ap_uint<8> datatype (in both cases with or without resizing/padding)?
0 Kudos
Reply
0 Replies