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 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}
InputTypeRequiredDescription
odbstringyesthe design database to check or legalize
out_odbstringnowrite the legalized database here
max_displacementstringnomove cap, ‘SITES’ or ‘SITES,ROWS’
site_search_windowintegernobase search width in sites
row_search_windowintegernobase search height in rows
drc_penaltynumbernocost per DRC violation at a candidate
outstringnowrite 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_placement runs when -use_diamond_legalizer is absent. --use-diamond-legalizer selects the other one. The two produce DIFFERENT placements, so the report names which ran.
  • Correlated at pin 945a9f48dc6e5cc91d865daa92c45a1094cb682c: detailed_placement matches 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_placement cases 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 28 is a claim about what the corpus asks, not about every design.
  • Two of countDRCViolations four terms are NOT evaluated – checkEdgeSpacing (needs each master’s LEF58 cell-edge list) and checkBlockedLayers. 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_out on every run. A filter that drops instances silently is indistinguishable from a design that has none of them.
  • -disallow_one_site_gaps is NOT accepted: upstream deprecated it (DPL-3/DPL-4) and derives the setting from hasOneSiteMaster(), so the flag cannot change the result. -incremental is not implemented and is named in not_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_checked field 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 in limitations rather than left to be inferred.
  • Site alignment is CORE-RELATIVE: upstream compares cell->getLeft() % siteWidth where 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 against Placed in rows check failed (1).