vyges physical dpl — CLI reference
Generated from vyges physical dpl --help — this page is the tool’s own output, verbatim.
vyges physical dpl — detailed placement: legality checking and legalization over the design database
USAGE:
vyges physical dpl check-placement <design.odb> [--json] [-o FILE]
vyges physical dpl detailed-placement <design.odb> [--out-odb FILE] [--dry-run] [OPTIONS]
vyges physical dpl --describe | --help | --version
OPTIONS:
--out-odb FILE write the legalized database here (default: nothing is written)
--dry-run legalize and report, write no database
--use-diamond-legalizer use the diamond search instead of negotiation (upstream's flag)
--max-displacement N[,M] cap the move at N sites and M rows (default: 500,100)
--site-search-window N base search width along the row, in sites (default: 20)
--row-search-window N base search height, in rows (default: 5)
--drc-penalty F cost added per DRC violation at a candidate site (default: 5)
--disable-window-extension do not widen the search window past a macro or a wall
-o FILE write the report to FILE instead of stdout
--json emit JSON (the default)
--describe print a machine-readable JSON description of the command
EXIT STATUS:
0 legalized every cell was seated; the database was written unless --dry-run
0 clean check-placement found no violation
0 vacuous the run placed nothing -- NOT a completed legalization; read the count
1 failed a cell could not be seated, or a check family found violations
2 error usage error, an unreadable database, or a failed write
⛔ SCOPE: legalization runs the NEGOTIATION legalizer, which is upstream's default path;
`--use-diamond-legalizer` selects the diamond one, as upstream's own flag does. Whichever
runs, what it does NOT implement is named in `not_done` on every run rather than omitted,
and every instance the model filter excluded is named in `filtered_out`.
⚠️ Seven of upstream's nine check families are evaluated. `region_placement` and `edge_spacing`
are reported in `not_checked` rather than passed over in silence, and a family that ran under
a restriction says so in `limitations`.
ℹ️ `-disallow_one_site_gaps` has no equivalent here ON PURPOSE: upstream deprecated it and
derives the setting from `hasOneSiteMaster()`, so the flag cannot change the result.
`-incremental` is not implemented and is named in `not_done`.
Contract
Generated from vyges physical dpl --describe.
dpl
detailed placement: legality checking and legalization over the design database
Maturity: structured
check-placement {odb}
| Input | Type | Required | Description |
|---|---|---|---|
odb | string | yes | the design database to check or legalize |
out_odb | string | no | write the legalized database here |
max_displacement | string | no | move cap, ‘SITES’ or ‘SITES,ROWS’ |
site_search_window | integer | no | base search width in sites |
row_search_window | integer | no | base search height in rows |
drc_penalty | number | no | cost per DRC violation at a candidate |
out | string | no | write the report to FILE instead of stdout |
Consumes: odb
Artifacts: placement_check (report_path), odb (out_odb)
Assertion: placement-legal — passes when status equals clean
Provenance limitations
- input_hash covers the argument vector, not the content of the .odb it names.
- LEGALIZATION is implemented and is the default path: the NEGOTIATION legalizer, which is what upstream’s
detailed_placementruns when-use_diamond_legalizeris absent.--use-diamond-legalizerselects the other one. The two produce DIFFERENT placements, so the report names which ran. - Correlated at pin 945a9f48dc6e5cc91d865daa92c45a1094cb682c:
detailed_placementmatches the reference on 28 of 28 comparable cases from its own regression suite, including aes (21340 components), ibex (34184) and gcd (549). The agreement is sweep-level, not final-placement only – upstream’s per-iteration debug trace and this engine’s match line for line. - BUT 35 of upstream’s 63
detailed_placementcases are OUTSIDE that number and are not scored at all: 12 ship no golden, 8 need filler placement, 7 declare REGIONS/GROUPS, 7 need placement padding values, 1 needs both.28 of 28is a claim about what the corpus asks, not about every design. - Two of
countDRCViolationsfour terms are NOT evaluated –checkEdgeSpacing(needs each master’s LEF58 cell-edge list) andcheckBlockedLayers. Nothing in the comparable corpus exercises either, so their absence is invisible to the score rather than proven harmless. - Every instance the model filter excluded is named and counted in
filtered_outon every run. A filter that drops instances silently is indistinguishable from a design that has none of them. -disallow_one_site_gapsis NOT accepted: upstream deprecated it (DPL-3/DPL-4) and derives the setting fromhasOneSiteMaster(), so the flag cannot change the result.-incrementalis not implemented and is named innot_done.- SEVEN of upstream’s NINE check families are evaluated: site alignment, placed, overlap, in_rows, padding, blocked_layers and one_site_gap. What is NOT evaluated is named in the report’s
not_checkedfield on every run – region_placement needs regions, edge_spacing needs each master’s LEF58 cell-edge list – because a clean verdict from a partial checker must not read as a complete one. Families that ran under a restriction are named inlimitationsrather than left to be inferred. - Site alignment is CORE-RELATIVE: upstream compares
cell->getLeft() % siteWidthwhere getLeft() is relative to core_.xMin(). Measured on aes.defok, reading it as an absolute coordinate reports every one of 21340 cells misaligned on a design the reference calls clean. - A site-alignment failure removes the cell from the overlap comparison entirely. That is a side effect of upstream’s
continue, not a separate rule: checkOverlap is what paints a cell into its pixels, so a cell that was skipped is never there for a later cell to collide with. - The OVERLAP ACCELERATION differs from upstream deliberately: a rectangle sweep here, a pixel walk there. The predicate is identical and the failing SET matches, but which partner is reported can differ, because upstream reports whichever cell already owns the pixel and that depends on visit order.
- status is one of clean, violations, vacuous or error. VACUOUS IS NOT CLEAN: it means the run examined no cell, and a design with no instances is an absent placement rather than a legal one.
- Correlated at pin 945a9f48dc6e5cc91d865daa92c45a1094cb682c in both directions on three designs: aes.defok gives 21340 cells and 0 violations against the reference’s clean verdict; cell_on_block1.def gives 4 site-align failures against
Site aligned check failed (4); fragmented_row04.def gives 1 in_rows failure againstPlaced in rows check failed (1).