Internals of axiToMultiStream

This document describes the structure and execution flow of axiToMultiStream, implemented as axiToMultiStream function.

axi_to_multi_stream Structure

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, e.g. three types of data compressed in one binary files. AXI port is assumed to have width as multiple of 8-bit char.

Caution

Applicable condition:

This module only supports 3 categories of data.

When input data ptr width is less than AXI port width, the AXI port bandwidth will not be fully used. So, AXI port width should be minimized while meeting performance requirements of application.

This primitive has two modules working simultaneously in side.

  1. 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.
  2. 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.