This class represents the I/O port attribute specification used to connect graph kernels to the external virtual platform ports representing global memory (DDR) connections.
Constructors
GMIO(const std::string& logical_name, int burst_length, int bandwidth);
This GMIO port attribute specification is used to connect AI Engine kernels to the DDR memory or connect PL
blocks to the DDR memory. logical_name
is the name
of the port as presented in the interface data sheet. The burst_length
is the length of the DDR memory burst transaction (can be
64, 128, or 256 bytes), and the bandwidth
is the
average expected throughput in MB/s.
Member Functions
static void* malloc(size_t size);
The malloc
method allocates
contiguous physical memory space and returns the corresponding virtual address. It
accepts a parameter, size
, to specify how many
bytes to be allocated. If successful, the pointer to the allocated memory space is
returned. nullptr
is returned in the event of a
failure.
static void free(void* address);
The free
method frees memory space
allocated by GMIO::malloc
.
return_code gm2aie_nb(const void* address, size_t transaction_size);
The gm2aie_nb
method initiates a DDR
to AI Engine transfer. The memory space for the
transaction is specified by the address
pointer and
the transaction_size
parameter (in bytes). The
transaction memory space needs to be within the total memory space allocated by the
GMIO::malloc
method. This method can only be
used by platform source GMIO objects. It is a
non-blocking function in that it does not wait for the read transaction to
complete.
return_code aie2gm_nb(void* address, size_t transaction_size);
The aie2gm_nb
method initiates an
AI Engine to DDR transfer. The memory space
for the transaction is specified by the address
pointer and the transaction_size
parameter (in
bytes). The transaction memory space needs to be within the total memory space
allocated by the GMIO::malloc
method. This method
can only be used by platform sink GMIO objects.
It is a non-blocking function in that it does not wait for the write transaction to
complete.
return_code wait();
The wait
method blocks until all the
previously issued transactions are complete. This method is only applicable for
GMIO
objects connected to AI Engine.
return_code gm2aie(const void* address, size_t transaction_size);
The gm2aie
method is a blocking
version of gm2aie_nb
. It blocks until the AI Engine–DDR read transaction completes.
return_code aie2gm(void* address, size_t transaction_size);
The aie2gm
method is a blocking
version of aie2gm_nb
. It blocks until the AI Engine–DDR write transaction completes.
In Linux, these GMIO member functions must use PS virtual memory
addresses through void*
pointers returned by
GMIO::malloc
in the PS program.
For bare metal, the virtual address and physical address are the
same. There is no need to call GMIO::malloc
and
GMIO::free
. But you can call it for
consistency.