Providing User Guidance to Mapper - 2025.2 English - UG1076

AI Engine Tools and Flows User Guide (UG1076)

Document ID
UG1076
Release Date
2025-11-20
Version
2025.2 English
In some cases, the mapper error can be due to tool limitations. In such cases, it can be useful to provide guidance to the tool.
  1. Turn off automatic AI Engine compiler floorplanning using the command line switch.
    -–Xmapper=disableFloorplanning
  2. Create your own floorplanning by using either bounding box constraints in the graph or areaGroup constraints in the constraints file. This is particularly useful if there are multiple disjoint graphs in the design.

    You can constrain each of these separate graphs to a particular region of the array. This technique not only helps design convergence but can also help improve performance by minimizing interference between different graph buffers. The following diagram shows an example using a 16 antenna transmit chain design. The highlighted kernels in blue belong to antenna 4.

    Figure 1. Kernels in Antenna 4

    The constraints file syntax to achieve this is as follows.

    {
      "GlobalConstraints": {
        "areaGroup": {
          "name": "ant4_cores",
          "nodeGroup": ["tx_chain4.*"],
          "tileGroup": ["(16,0):(19,3)"]
        }
      }
    }

    The bounding box syntax to achieve this is as follows.

    location<graph>(tx_chain4) = bounding_box(16,0,19,3);
  3. Add co-location or absolute location constraints if necessary. If this guidance does not get the design to converge, you can try adding co-location or absolute location constraints. You can add co-location constraints between kernels and buffers or system memory that you expect to be mapped to the same tile. The following example shows this.
    location<buffer>(kernel_1.out[0]) = location<kernel>(kernel_1);
    location<stack>(kernel_1) = location<kernel>(kernel_1);
    You can also add absolute location constraints to certain key kernels or buffers. These act as anchors and guide the mapper's placement of other components. The following example shows this.
    location<kernel>(kernel_1) = tile(20, 0);
    location<buffer>(kernel_1.in[0]) =
    
            { address(19, 0, 0x0),
              address(19, 0, 0x2000) }; // double buffer needs two locations