4.3. POM AXI-Lite interface memory map

The POM hardware runtime includes an optional AXI-Lite interface to access internal debug registers (read-only). The mapped address space is 16KB (14-bit addresses).

The available registers and their respective addresses are (size in bytes):

Register name

Address

Size

Description

COPY_OPT_IN

0x0

4

Number of copy in optimizations in the command in queue (both internal and external)

COPY_OPT_OUT

0x4

4

Number of copy in optimizations in the command in queue (both internal and external)

ACC_AVAIL

0x8

8

One bit per accelerator, indicating the availability status

QUEUE_NEMPTY

0x10

8

One bit per accelerator, indicating if the internal queue is not empty

CMD_IN_N_CMDS

0x800

4 per acc

For each accelerator, the number of commands it has received

CMD_OUT_N_CMDS

0x900

4 per acc

For each accelerator, the number of commands it has issued

ACC_AVAIL_COUNT

0xA00

8 per acc

For each accelerator, the total number of execution cycles

4.3.1. How to enable the AXI-Lite interface

You can enable it with the --enable_pom_axilite flag in AIT. For a full list of AIT options, see AIT options

4.3.2. How to read the registers with QDMA

You can use the script located in the https://gitlab.pm.bsc.es/ompss-at-fpga/rtl/meep-ompss-fpga-cluster repository, under scripts/axilite_cntrl.py.

python3 $MEEP-OMPSS-FPGA-CLUSTER/scripts/axilite_cntrl.py --read_pom

The script needs the XTASKS_PCI_DEV variable.

If you are using OMPIF, you can read all registers, including the message sender and receiver, with the cluster.json file.

python3 $MEEP-OMPSS-FPGA-CLUSTER/scripts/axilite_cntrl.py --cluster cluster.json

If some FPGAs are on remote nodes, the script automatically launches servers on each remote node. However, you need to have the xtasks_devs_$(hostname).sh files in the current working directory.