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 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.

What this engine does NOT do yet

  • run is not wired. The hierarchical RTL macro placer is implemented and correlated against OpenROAD — nine gates, byte-exact DEFs — but it is driven by the cluster-dump binary the correlation gates use. --describe advertises a run entry point this binary does not yet keep, and says so.
  • TritonPart (par) is not implemented yet. A flat cluster over the level threshold is refused, never approximated. That is published as a limits field so a caller can test for it rather than meet it mid-run. It matters on a flat synthesized netlist: a design read from a single-module netlist puts every cell in one cluster and reaches that path.

Both are in --describe, which is the contract — read it rather than inferring from this page.

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.