This document describes the structure and execution flow of axiToMultiStream, implemented as axiToMultiStream function.
The axiToMultiStream primitive is non-blocking and uses round robin to load multiple categories of data from one AXI master into multiple streams. For example, in the implementation of one AXI port loading three types of data, the data of each type could be tightly packed. Each type of data’s length should be multiple of 8 bits. The three types of data width could be unaligned or aligned. For example, three types of data compressed in one binary file. AXI port is assumed to have width as multiple of 8-bit char.
Caution
Applicable condition:
This module only supports three categories of data.
When input data ptr width is less than AXI port width, the AXI port bandwidth is not fully used. So, AXI port width should be minimized while meeting performance requirements of application.
This primitive has two modules working simultaneously.
read_to_vec_stream
: It reads AXI master to three BRAM buffers, and loads the buffers in non-blocking and round robin way to_WAxi
width stream.split_vec_to_aligned
: It takes the_WAxi
width stream, aligns to the stream width, and splits the _WAxi width data to stream width and output the stream.