In AMD Vitis™ tools, version 2022.1 and previous versions, the memory interface between kernels was called window. Buffer ports are similar to window ports, but differ as outlined below. Buffer ports provide a way for a kernel to operate on a block of core memory.
Windows | Buffers |
---|---|
Sizes and margins are in bytes. | Sizes and margins are in samples. |
Sizes can be defined only in graph using the connect statement. | Sizes can be defined either in graph using dimensions statement, or in kernel signature as compile time constant. |
Margins can be defined only in graph using the connect statement. | Margins can be defined only in kernel signature as compile time constant. |
Locking mechanism is specified in graph using connect construct. | Locking mechanism is specified in kernel signature. |
C++14 is enough. | Buffer ports use C++17 fold expressions. |
Support of circular addressing only. | Default addressing is linear. It can be set to circular. |
For data access, the iteration operation is tied
directly with the action reading or writing API, such as window_readincr() , and window_writeincr() . |
A reference pointer or an iterator are supported to perform read or write operations. |
One-dimensional only | Multi-dimensional. If buffer dimension is omitted in the kernel signature, it will be supposed one-dimensional. |
Note: Limitations on buffer port size,
window size and margin size depend on hardware constraints, hence, there is no
difference between buffer port and window in terms of minimum size.