3.2 Hello AIE Graph - 3.2 Hello AIE Graph - 2026.1 English - UG1864

Vitis Functional Simulation User Guide (UG1864)

Document_ID
UG1864
Release_Date
2026-06-23
Version
2026.1 English

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;