vyges-mpl — macro placement
Physical construction — opt-in, and not part of
vyges install loom. These engines build the design database that the sign-off and verification engines read, so they install as their own group:vyges install physical # all of them vyges install mpl # just this oneIt is also a standalone
vyges-mplbinary on your PATH, which is what the dispatch calls and what a flow author targets directly. Source: vyges-tools/mpl.
vyges-mpl places hard macros onto a floorplan — the SRAMs, the CPU core, the crossbars —
before standard cells are placed around them. Everything after it is positioned against where the
macros landed, so a macro in the wrong place is not something a later stage recovers from.
Place macros where the design says
vyges physical mpl place-macro design.odb \
--macro u_cpu=1353,2096,N \
--macro u_sram0=100,2520 \
--out-odb placed.odb
X,Y is the macro origin in microns, as a floorplan config states it; pass --dbu to give
database units instead. The orientation is R0/R90/R180/R270/MX/MY/MXR90/MYR90, and
defaults to R0. Each macro is left FIXED, which is the status a harden flow expects so later
placement cannot move it.
This is the manual placement a real flow uses: it corresponds to LibreLane Classic’s
Odb.ManualMacroPlacement, not to OpenROAD’s place_macro, and it therefore does no track
snapping and no overlap check.
⛔ Macros must arrive UNPLACED
A macro read from a DEF as + FIXED is LOCKED, and OpenDB refuses to move a locked instance —
you get ODB-0359 Attempt to change the origin of LOCKED instance. Strip the placement first, or
place onto a database that never had one. That is what a floorplan flow hands this step.
Place macros automatically
vyges physical mpl run design.odb --out-odb placed.odb --out-def placed.def --min-channel 44.8,30.24
run is the hierarchical RTL macro placer: it clusters the design by its module hierarchy and
connectivity, shapes and anneals the clusters, pushes macros to the boundary, picks orientations
and snaps to the track grid. Each macro is left LOCKED, guarded by a soft placement blockage,
and standard cells get the temporary positions the placer used. Lengths are microns; halos come
from the database.
A flat cluster — one with no module children, as a single-module synthesized netlist
produces — whose standard cells exceed the level threshold is split in two, recursively, by the
vyges-par hypergraph partitioner. The x86_64 Linux release links it. On the other
targets such a cluster is refused, never approximated.
Read the contract, not this page
--describe states what this build does — including limits.par_partitioning, which says
whether the partitioner is linked — and what its input_hash does not cover.
Where it sits
ifp -> mpl -> tap -> pdn
ifp makes the rows; mpl puts the macros on them; tap cuts the rows around what landed and
inserts taps and endcaps; pdn builds the grid over the result.