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 physical mpl — CLI reference

Generated from vyges physical mpl --help — this page is the tool’s own output, verbatim.

vyges physical mpl — hierarchical macro placement

USAGE:
  vyges physical mpl run <design.odb> [--out-odb FILE] [--out-def FILE]
                         [--min-channel W,H] [--pin-aware-channels]
                         [--macro-guide NAME=LX,LY,UX,UY ...]
                         [--boundary-weight W] [--notch-weight W] [--guidance-weight W]
                         [--target-util U] [--max-num-inst N] [--min-num-inst N]
                         [--max-num-macro N] [--min-num-macro N]
  vyges physical mpl place-macro <design.odb> --macro NAME=X,Y[,ORIENT] [--macro ...]
                                 [--dbu] [--out-odb FILE]
  vyges physical mpl --describe
  vyges physical mpl --help

RUN:
  Automatic hierarchical macro placement: clustering, coarse shaping, annealed placement,
  boundary push, orientation, snapping. Each movable macro is left LOCKED, each macro not given a
  soft halo is guarded by a soft placement blockage over its haloed box, and standard cells get
  the temporary PLACED positions the placer used. Lengths are MICRONS. Halos come from the
  database; the channel, guidance, weight and threshold options are command state a database
  cannot carry, so they are passed here. --out-odb defaults to writing the design in place.

PLACE-MACRO:
  LibreLane `Classic` step 16, `Odb.ManualMacroPlacement` -- the manual placement a real harden
  flow uses. X,Y are the macro ORIGIN in MICRONS (as the MACROS config states them); pass --dbu
  to give database units instead. ORIENT is R0/R90/R180/R270/MX/MY/MXR90/MYR90, default R0.
  Each macro is left FIXED, which is the status LibreLane's step produces.

STATUS:
  0 applied   macros placed and committed
  1 refused   the design cannot be processed as asked (see LIMITS); nothing is written
  2 usage     bad arguments, or the design could not be read or written
  3 vacuous   nothing to do -- no unfixed macros

LIMITS:
  This engine does not implement TritonPart partitioning. A FLAT cluster -- one with no
  module children -- whose leaf standard cells exceed the level threshold is REFUSED rather
  than approximated. The reference's own mpl suite never reaches that path; a large flat block does.
  Clustering data is not kept as database groups; `run` has no --keep-clustering-data.

THREADS:
  Runs on one thread; there is no thread option. Several runs can go side by side, one core each.

Contract

Generated from vyges physical mpl --describe.

mpl

hierarchical macro placement over the design database

Maturity: structured

run {design}
InputTypeRequiredDescription
designstringyespath to the design database (.odb)
out_odbstringnowrite the database here instead of in place
out_defstringnoalso write the placed design as DEF
min_channelstringnoW,H minimum channel between macros, microns
pin_aware_channelsbooleannosize channels from the macros’ pin access
macro_guidestringnoNAME=LX,LY,UX,UY guidance region in microns — repeatable
boundary_weightnumberno
notch_weightnumberno
guidance_weightnumberno
target_utilnumbernotarget utilization, default 0.25
max_num_instintegerno
min_num_instintegerno
max_num_macrointegerno
min_num_macrointegerno

Consumes: odb

Artifacts: odb (out_odb)

Assertion: macros-placed — passes when status equals applied

Threads

Runs on one thread; there is no thread option. Several jobs can run side by side, one core each.

Provenance limitations

  • input_hash covers the argument vector, not the content of the .odb it names.
  • run writes what the commit gate scores: the commit stage’s rows (macro corner and orientation, halo blockages, temporary standard-cell positions) applied to the database, so the database and the scored output are one derivation. Clustering groups (-keep_clustering_data) are not written. place-macro is LibreLane Classic step 16, Odb.ManualMacroPlacement, and asserts nothing about where macros should go.
  • A FLAT cluster – one with no module children – whose leaf standard cells exceed the level threshold is split by vyges-par. The reference’s own mpl suite never reaches that path; it is measured on a flat synthesized design, where the partitioner’s inputs and answers and the written DEF match the reference’s exactly. Builds without the par feature refuse such a cluster instead.
  • Correlation is measured against the reference’s own 36-design regression suite at the pin above, per stage rather than on the final output: physical hierarchy and design report 33 of 33 byte-exact each; coarse shaping, boundary push and orientation byte-exact on every case that emits a trace; golden DEFs – macro positions, temporary standard cells, halo blockages and clustering groups – 33 of 33 exact. Those gates drive cluster-dump, which runs the same driver as run.
  • Every score is true of ONE reference commit, named in openroad_pin. The reference moves: a score quoted without its pin says nothing.
  • consumes is the generic odb on purpose. mpl supports running BEFORE or AFTER pin placement and the two give DIFFERENT placements, so a fixed predecessor list would be the wrong shape of claim rather than merely the wrong list.