vyges physical ifp — CLI reference
Generated from vyges physical ifp --help — this page is the tool’s own output, verbatim.
vyges physical ifp — initialize the floorplan: die area, core area, and rows
USAGE:
vyges physical ifp run <design.odb> --die-area 'x1 y1 x2 y2' --core-area 'x1 y1 x2 y2' --site NAME
vyges physical ifp run <design.odb> --utilization PCT --core-space 'b t l r' --site NAME
vyges physical ifp make-rows <design.odb> --core-area 'x1 y1 x2 y2' --site NAME
vyges physical ifp make-tracks <design.odb> [--track LAYER:xoff,xpitch,yoff,ypitch]... [--out-odb FILE]
vyges physical ifp --describe
vyges physical ifp --help
MAKE-ROWS:
Rows on a die that is ALREADY set: same options as run minus the die, with the core given
either explicitly (--core-area) or as margins off the die (--core-space).
MAKE-TRACKS:
Routing tracks over the die, from the technology's own pitches. With no --track, every ROUTING
layer with a non-zero routing level is taken from the LEF; --track gives one layer explicitly,
in MICRONS, which is the form a technology's .tracks file uses. Repeatable.
OPTIONS:
--die-area 'x1 y1 x2 y2' die rectangle, in MICRONS
--utilization PCT derive the die from the placed cell area instead of giving it
--aspect-ratio R height/width for the derived core (default 1.0)
--core-space 'b t l r' margins in MICRONS, or ONE value for all four; required with
--utilization and refused with --die-area
--core-area 'x1 y1 x2 y2' core rectangle, in MICRONS
--site NAME the base site whose height sets the row pitch
--additional-sites A,B also tile rows for these sites (hybrid rows)
--row-parity NONE|ODD|EVEN trim the row count to a parity (default NONE)
--flip-sites A,B shift the row-orientation phase for these sites
--gap MICRONS margin around a voltage domain (default: 6 x the site height)
--out-odb FILE write the database here (default: IN PLACE, over the input)
--dry-run plan and report, write nothing
-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 applied the floorplan was built and written
1 refused the design cannot be floorplanned as asked (empty die, core outside the
die, degenerate or mismatched site, or no row fits)
2 error usage error, unreadable database, no DBU scale, or a failed write
Contract
Generated from vyges physical ifp --describe.
ifp
floorplan initialization: die area, site-grid snapping, rows, and the core area they cover
Maturity: structured
run {odb}
| Input | Type | Required | Description |
|---|---|---|---|
odb | string | yes | path to the design database (.odb) |
die_area | string | yes | die rectangle in microns, ‘x1 y1 x2 y2’ |
core_area | string | yes | core rectangle in microns, ‘x1 y1 x2 y2’ |
site | string | yes | base site name |
out_odb | string | no | write the database here instead of in place |
out | string | no | write the report to FILE instead of stdout |
Consumes: odb
Artifacts: floorplan_report (report_path)
Assertion: floorplan-built — passes when status equals applied
Provenance limitations
- input_hash covers the argument vector, not the content of the .odb it names.
- Implements BOTH forms of initialize_floorplan. Give –die-area and –core-area explicitly, or give –utilization with –core-space and the die is derived from the placed cell area. The two are mutually exclusive, as upstream has them: –die-area with –utilization is refused (IFP-14), and so is –core-area (IFP-20).
- The utilization form is TWO steps and the intermediate matters. The die is derived first – core_width from sqrt(design area / utilization / aspect ratio) TRUNCATED to a whole DBU, core_height ROUNDED from that already-truncated width – and then snapped to the manufacturing grid. The core is taken back off the SNAPPED die by subtracting the same margins, so it is not the rectangle the die computation laid out. Both are upstream behaviours.
- Areas are given in MICRONS, matching the upstream Tcl argument, and converted with the database’s dbu_per_micron. A database with no DBU scale is an error rather than an assumed scale.
- The core’s lower left is snapped UP to the site grid while the upper right is left where it was; the core area finally stored is what the rows COVER, not what was asked for. Both are upstream behaviors and both are load-bearing – a caller that reads back the core area will not always get its own argument.
- Rows are named globally across sites (ROW_0, ROW_1, …) rather than restarting per site, so adding a site renumbers the rows that follow it.
- Existing rows are cleared before the new ones are built. Anything already placed on the old row grid is not re-legalized by this engine.
- Written against the upstream ifp regression goldens at pin 945a9f48dc6e5cc91d865daa92c45a1094cb682c. The algorithm is reimplemented from the published behavior, not transliterated; where the two disagree the goldens are the arbiter.
- MEASURED against that suite at the same pinned commit, re-run 2026-09-01, on THREE axes. Log lines: 23 cases reproduce every compared IFP-* line exactly, 0 fail, 17 not comparable (6 utilization form, 6 polygon floorplans, 3 that never call initialize_floorplan, 2 that need UPF). Track patterns: 8 of the 8 cases that call make_tracks match the reference database exactly, none skipped. Rows and die area, against the DEF goldens upstream ships: 21 comparable, of which 5 differed until the row cutting and the voltage-domain split landed. The log-line number alone was green throughout all five, which is why it is quoted last.
- HYBRID SITES are supported: a site with a row pattern tiles the core from that pattern (IFP-0049) and every hybrid site additionally gets rows spanning a whole pattern each (IFP-0050), offset to where its pattern occurs in the base pattern – matching as written (R0) or reversed with orientations mirrored (MX). Row parity is REFUSED on a hybrid floorplan (IFP-0051), because parity would have to trim whole patterns rather than rows.
- Sites are visited in NAME order and deduplicated by name, not in the order given on the command line – row numbering and log order both follow from this. The site set also includes sites used by placed instances that were never named as arguments (upstream addUsedSites), excluding blocks.
- VOLTAGE AND POWER DOMAINS split the rows. A row crossing a domain group’s region, or lying within a margin of it, is replaced by up to three pieces: one left of the domain, one right of it, and – only where the row lies wholly inside the domain’s y range – one across the domain itself. The margin is –gap, or 6x the minimum site height when none is given. Rows on PAD sites are never touched. The split happens AFTER the core area and the per-site row counts are settled, so IFP-0001 and IFP-0102 report the floorplan before it.
- ROWS ARE CUT against the block’s placement blockages, using OpenDB’s own cutRows rather than a reimplementation of it. This runs last and unconditionally; a design that declares no blockage is unaffected.
- SCOPE – upstream ifp exposes FOUR commands and this engine implements THREE: initialize_floorplan is
run, make_rows ismake-rows, make_tracks ismake-tracks. insert_tiecells is NOT implemented. - make-rows builds rows on a die the database already holds and never writes a die of its own. The core is given explicitly or as margins off that die, and an empty die is refused with IFP-63 or IFP-64 depending on which of the two forms was used – upstream uses two codes for the one condition.
- Known gap – UPF POWER DOMAINS. Upstream’s floorplan inserts power-domain instances and its instance census rises accordingly (16 to 40 on upf_test); this engine inserts none. All floorplan GEOMETRY matches exactly on those cases; what differs is the instance census that follows from the count – IFP-0103, IFP-0104 and IFP-0105 together.
- A macro larger than the core area is refused with IFP-0002 before anything is snapped or written, matching upstream’s ordering: the die checks come first, so a design with both an empty die and an oversized macro reports the die. Pads and covers are exempt, and a master with R90 symmetry is measured against the core’s larger dimension because it is free to rotate.
- The instance census (IFP-0103 total instance area, IFP-0104 effective utilization) counts EVERY instance’s master area, including the pads and covers the fit check skips – it is a census of the design, not a question about the core. Utilization is omitted rather than printed as infinity when the core area is zero.
- make-tracks covers BOTH pitch forms. A layer whose technology carries LEF58_PITCH (FIRSTLASTPITCH) is not one grid at the layer pitch: it expands into a stack of patterns, one per track within the cell row, each repeating on the CORE ROW HEIGHT, with one further pattern past the end. A layer whose x or y offset runs past the die is skipped ENTIRELY – both axes, not just the one that overran.
- The default output is IN PLACE, over the input database. Pass –out-odb to write elsewhere, or –dry-run to plan without writing.