This example runs an AIE graph that multiplies a streamed int32 input by 2, 8 samples at a time. Layout: Create a working directory with the following files: aie_example/ ├── DUT.h ├── DUT.cpp ├── run_aie_simple.py └── src/ ├── kernels.h └── kernels.cpp src/kernels.h: #pragma once #include "adf.h" void multiply_by_2(input_stream<int32> *in, output_stream<int32> *out); src/kernels.cpp: #include "kernels.h" void multiply_by_2(input_stream<int32> *in, output_stream<int32> *out) { for (unsigned ind = 0; ind < 8; ++ind) { int32 val = readincr(in); writeincr(out, val * 2); } } DUT.h: #pragma once #include <adf.h> #include "src/kernels.h" class DUT_base : public adf::graph { public: adf::kernel multiply_by_2_kernel; adf::input_port In1; adf::output_port Out1; DUT_base() { multiply_by_2_kernel = adf::kernel::create(multiply_by_2); adf::source(multiply_by_2_kernel) = "src/kernels.cpp"; adf::runtime<ratio>(multiply_by_2_kernel) = 0.9; adf::connect<adf::stream>(In1, multiply_by_2_kernel.in[0]); adf::connect<adf::stream>(multiply_by_2_kernel.out[0], Out1); } }; class DUT : public adf::graph { public: DUT_base mygraph; adf::input_plio In1; adf::output_plio Out1; DUT() { In1 = adf::input_plio::create("In1", adf::plio_32_bits, "In1.txt"); Out1 = adf::output_plio::create("Out1", adf::plio_32_bits, "Out1.txt"); adf::connect<>(In1.out[0], mygraph.In1); adf::connect<>(mygraph.Out1, Out1.in[0]); } }; DUT.cpp: #include "DUT.h" DUT dut;