Generally, there are two methods to transfer data between kernels–buffer or stream. When using the buffer, data transfers can be realized as ping-pong buffers or optionally, using a single buffer. The AI Engine tools will take care of buffer synchronization between the kernels. Designers need to decide the buffer size and optionally buffer location between kernels when partitioning the application. If an overlap is needed between different buffers of the data, the AI Engine tools provide options for setting a margin for the buffer, that is, to copy the overlap of data automatically.
When using streams, the data movement involves two input as well as two output stream ports, along with one dedicated cascade stream input port and output port. Stream ports can provide 32-bit per cycle or, 128-bit per four cycles on each port. Stream interfaces are bidirectional and can read or write neighboring or non-neighboring AI Engines by stream ports. However, cascade stream ports are unidirectional and only provide a one-way access between the neighboring AI Engines.