An AI Engine program consists of a dataflow graph specification written in C++, which comprises nodes and edges. Nodes represent compute functions (known as kernels), and edges represent data connections. The AI Engine graph specification is compiled using the Vitis aiecompiler and simulated with the Vitis aiesimulator.
AMD recommends gradually refining and testing the graph, slowly progressing from scalar to vectorized operations. This allows you to set up your system (e.g., build scripts, functional correctness, etc.) without having to do low-level AI Engine-specific coding.
The graph is tested with a user-written test bench that drives and manages the graph using the graph application programming interfaces (APIs). Following are the methods for getting data into and out of a graph:
- Runtime parameters (RTPs) are programmable registers used to exchange values between the PS application and the AI Engine kernels.
- GMIOs provide a direct connection from the AI Engine to global memory via the horizontal NoC.
- PLIOs provide a direct streaming connection between AI Engine kernels and PL blocks.
The test bench can consist of basic file I/O-operations or more powerful traffic-generators written in Python, C/C++, or HDL to get data into and out of the AI Engine graph.
For more information on how to develop and simulate AI Engine graphs and kernels, see the Versal Adaptive SoC Design Process Documentation: AI Engine Development.