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}
| Input | Type | Required | Description |
|---|---|---|---|
design | string | yes | path to the design database (.odb) |
out_odb | string | no | write the database here instead of in place |
out_def | string | no | also write the placed design as DEF |
min_channel | string | no | W,H minimum channel between macros, microns |
pin_aware_channels | boolean | no | size channels from the macros’ pin access |
macro_guide | string | no | NAME=LX,LY,UX,UY guidance region in microns — repeatable |
boundary_weight | number | no | |
notch_weight | number | no | |
guidance_weight | number | no | |
target_util | number | no | target utilization, default 0.25 |
max_num_inst | integer | no | |
min_num_inst | integer | no | |
max_num_macro | integer | no | |
min_num_macro | integer | no |
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.
runwrites 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-macrois LibreLaneClassicstep 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
parfeature 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 asrun. - Every score is true of ONE reference commit, named in
openroad_pin. The reference moves: a score quoted without its pin says nothing. consumesis the genericodbon 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.