Macro Placement#

The macro placement module in OpenROAD (mpl) is based on TritonMacroPlacer, an open-source ParquetFP-based macro cell placer. The macro placer places macros/blocks honoring halos, channels and cell row “snapping”. Run global_placement before macro placement.

Approximately \(\Bigl\lceil [{\frac{numMacros}{3}}]^{1.5} \Bigr\rceil\) quadrisections of the initial placed mixed-size layout are explored and packed using ParquetFP-based annealing. The best resulting floorplan according to a heuristic evaluation function is kept.



  • Parameters in square brackets [-param param] are optional.

  • Parameters without square brackets -param2 param2 are required.

Macro Placement#

This command performs macro placement. For placement style, corner_max_wl means that choosing the partitions that maximise the wirelength of connections between the macros to force them to the corners. Vice versa for corner_min_wl.

Macros will be placed with \(max(halo * 2, channel)\) spacing between macros, and between macros and the fence/die boundary. If no solutions are found, try reducing the channel/halo.

    [-halo {halo_x halo_y}]
    [-channel {channel_x channel_y}]
    [-fence_region {lx ly ux uy}]
    [-snap_layer snap_layer_number]
    [-style corner_wax_wl|corner_min_wl]


Switch Name



Horizontal and vertical halo around macros (microns).


Horizontal and vertical channel width between macros (microns).


Restrict macro placements to a region (microns). Defaults to the core area.


Snap macro origins to this routing layer track.


Placement style, to choose either corner_max_wl or corner_min_wl. The default value is corner_max_wl.

Useful Developer Commands#

If you are a developer, you might find these useful. More details can be found in the source file or the swig file.

Command Name



Macro placement debugging. Note that GUI must be present for this command, otherwise a segfault will occur.

Example scripts#

Example scripts demonstrating how to run TritonMacroPlace on a sample design of east_west as follows:


Regression tests#

There are a set of regression tests in ./test. For more information, refer to this section.

Simply run the following script:




Check out GitHub discussion about this tool.


BSD 3-Clause License. See LICENSE file.