Data Motion Optimization

The data motion network is the hardware used to connect the programming running on the PS to the hardware function implemented in the PL fabric. The SDSoC environment automatically creates a data motion network based on the data types, however directives can be used to optimize the implementation for both speed and hardware resources. The default data motion networks created for each data type are:


Scalar data types are always transferred by the AXI_LITE data mover. This is a memory-mapped interface that requires very few hardware resources to implement, consisting of single word read/write transfers with handshaking. This makes it the ideal choice for function arguments that are only transferred once per invocation. These types rarely need to be addressed when optimizing the system.


Arrays contain multiple data values and are more efficiently transferred using fast DMA transfers. The SDSoC environment provides a number of options to control both the efficiency of the hardware and the resources used to implement the hardware, even allowing for the selection of specific data movers.


By default, in the absence of any pragmas, a pointer argument is taken to be a scalar, even though in C/C++ it might denote a one-dimensional array type. If a pointer is written to or read from multiple times, pragmas should be used to ensure the efficient transfer of data.

Struct or Class
A single struct/class is flattened, and each data member uses its own data mover depending on whether it is a scalar or array. For an array of struct/class, the data motion network is the same as an array discussed previously.

With an understanding of the SDSoC environment default behavior, it is now possible to select the most optimum data motion network based on your own particular needs.