When you combine cells of different site types into a macro, use the absolute grid.
The absolute grid, or RPM grid, is a coordinate system that defines site coordinates by their physical location in the device. The grid accounts for differences in site sizes, such as the wider spacing of RAM and DSP blocks compared to slices. The following figure shows an example schematic.
This example groups cells from three site types into a macro using the absolute grid. The input data path flows from input ports through two register stages into block RAMs.
To create the macro, provide a list of cells and their relative locations (RLOCs) using the absolute grid. Because visualization can be difficult, AMD recommends placing the cells temporarily at absolute locations in the device and then deriving their absolute grid RLOC values.
Although the absolute grid specifies fixed locations, the macro can still be placed anywhere that supports the relative placement. In this example, the lower-left corner serves as the reference point.
Even though the locations are absolute, they define only relative placement. This allows you to place the macro anywhere in the device that maintains the same relative arrangement. Because this macro includes ILOGIC, slices, and block RAM, placement is somewhat restricted. You can place the macro only in the three highlighted locations shown in the following figure.
To determine absolute grid RLOCs, use the site RPM_X and RPM_Y
properties. For example, the lower block RAM is placed at site RAMB36_X0Y0. Selecting the site (not the cell) shows
RPM_X = 33 and RPM_Y =
0 (Figure 4). The corresponding RLOC value is X33Y0.
A slice in the same region produces an RLOC of X31Y0.
Create the macro with the following commands:
create_macro m0
update_macro m0 -absolute_grid <cell0 rloc0 cell1 rloc1 cell2 rloc2 … cellN rlocN>
If the macro contains many cells, Tcl can simplify the process of
building the cell-RLOC list required by update_macro.
proc getAbsRLOC {cell} {
set site [get_sites -of [get_cells $cell]]
set X [get_property RPM_X $site]
set Y [get_property RPM_Y $site]
return "X${X}Y${Y}"
}