The digital construct used to program the access of both the interface tiles and the AIE-ML tiles to the the memory tile is the shared buffer.
This buffer is parametrized with:
Data type, chosen in the template parameters.
Size, as a 1,2,3 or 4 values vector where each of those values expresses the sizes of the dimensions of the buffer, in terms of samples.
Number of input ports, that are maximum six per Memory Tile.
Number of output ports, that are maximum six per Memory Tile.
This buffer has various settings that are controlled through specific APIs. Some of the most important ones are:
Read and write access patterns, that are set through tiling parameters.
Repetition count, that sets the amount of times the access pattern to the buffer must be done for every graph call.
Number of buffers, that enable the usage of ping-pong buffers if set to two.
The tiling parameters regulate the access to the shared buffer by dividing it into “tiles” that have dimensions lesser or equal to the ones of shared buffer, being thus subsets of the memory tensor. Those parameters give freedom to the developer to traverse the tiles with various patterns. Some important features set by those parameters are:
Tile dimensions, that is a vector having the same dimensionality of the shared buffer, where each element contains the size of the tile in such dimension.
Offset, that is vector having the same dimensionality of the shared buffer, where each element contains the offset with respect to the first element of the buffer.
Traversing parameters, that is a vector having the same dimensionality of the shared buffer, where each element is a data structure that defines:
Dimension: the dimension (i, j, k…) of the shared buffer tensor to be traversed;
Stride: the distance between consecutive elements accessed in the tile, in terms of samples;
Wrap: the number of tiles to be accessed in the chosen dimension.