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.