In some cases, the mapper error might be due to limitations of the tool. In such cases. it might be useful to provide guidance to the tool.
- Turn off automatic AI Engine compiler
floorplanning using the command line
switch.
-–Xmapper=disableFloorplanning
- 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. Each of these separate graphs can be constrained 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);
- 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. Co-location constraints can be added between kernels
and buffers or system memory that you expect to be mapped to the same tile, as shown
in the following
example.
Absolute location constraints can also be added to certain key kernels or buffers to act as anchors and guide the mapper's placement of other components, as shown in the following example.location<buffer>(kernel_1.out[0]) = location<kernel>(kernel_1); location<stack>(kernel_1) = location<kernel>(kernel_1);
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