Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 one

It is also a standalone vyges-mpl binary 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.