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 with the DDR or connect PL blocks
with the DDR. The logical_name
is the name of the
port as presented in the interface data sheet. The burst_length
is the length of the DDR 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.
return_code pl_gm(void* address, size_t total_size);
The pl_gm
method sets the PL
m_axi
port start address in the AXI4-Lite
interface. The start address of the vitual memory space for the PL
m_axi
port is specified by the address
parameter. The total size of the memory to be accessed is
specified by size
parameter.
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.