vyges physical pdn — CLI reference
Generated from vyges physical pdn --help — this page is the tool’s own output, verbatim.
usage: vyges-pdn generate <db> --out-def <def> --power <net> --ground <net>
[--starts-with power|ground] (default ground)
[--domain <region>:<power>:<ground>] (per grid; region domain)
[--followpins <layer>[:<extend>[:<width>[:<extend_by>]]]] (micron, repeatable)
[--stripe <layer>:<width>:<pitch>:<offset>[:<extend>[:<count>[:<snap>[:<spacing>
[:<starts_with>[:<nets>[:out[:<offset_type>[:<extend_by>]]]]]]]]]]
<extend> is core | rings | boundary | padring; <offset_type> is
START | FIRST (default) | CENTER | LAST | END; <extend_by> runs a stripe or rail
on past its target along its length, up to the die (micron).
[--ring <layer0>,<layer1>:<width>:<spacing>:<offset>[:boundary]]
[--connect <layer0>,<layer1>[:<via>[+<via>...][:...]]] (repeatable)
[--pins <layer>[,<layer>...]] (shapes there are never shrunk)
[--split-cuts <layer>:<pitch>[:stagger]] (micron, repeatable)
[--trim 0|1] (default 0: shapes are written untrimmed)
vyges-pdn global-connect <db> --connect NET:PINPAT:INSTPAT:power|ground|signal
[--connect ...] [--force] [--out-odb FILE]
creates the supply nets and connects matching instance pins to them.
Patterns are FULL matches, as the reference's are. Without this, `generate`
refuses: there is no net to build a grid on.
status is applied or vacuous. VACUOUS IS NOT APPLIED: the rules matched no
pin and nothing was connected. Exit is still 0 -- a design already wired
correctly connects nothing on a second run -- so read connections.
vyges-pdn --describe | --help | --version
⚠️ Without `--trim 1`, shapes are emitted BEFORE trimming: each keeps its full built
extent, and one that nothing connects to is kept rather than removed. Compare such a run
against the reference run with `pdngen -skip_trim`.
Contract
Generated from vyges physical pdn --describe.
pdn
power distribution network generation: rings, straps, follow pins and the vias between them
Maturity: structured
generate {odb}
| Input | Type | Required | Description |
|---|---|---|---|
odb | string | yes | path to the design database (.odb), its supply nets already connected (pdn.global_connect) |
out_def | string | yes | write the result as DEF |
power | string | yes | the power net name |
ground | string | yes | the ground net name |
voltage_domains | [‘string’, ‘array’] | no | the voltage domains to build, e.g. CORE |
trim | integer | no | 1 trims the shapes as the reference does (default 0: untrimmed) |
grid | string | no | ONE grid per call, ‘name:kind’ e.g. ‘stdcell:core’; the options below belong to it |
domain | string | no | region:power:ground, for a region domain |
starts_with | string | no | which net takes the innermost ring (default ground) |
followpins | [‘string’, ‘array’] | no | layer[:extend[:width[:extend_by]]] in microns, e.g. ‘met1:core:0.48’; extend is core, rings, boundary or padring |
ring | [‘string’, ‘array’] | no | layer0,layer1:width:spacing:offset[:boundary] |
stripe | [‘string’, ‘array’] | no | layer:width:pitch:offset[:extend[:count[:snap[:spacing[:starts_with[:nets[:out[:offset_type[:extend_by]]]]]]]]] in microns; extend is core, rings, boundary or padring; offset_type is START, FIRST, CENTER, LAST or END |
connect | [‘string’, ‘array’] | no | layer0,layer1[:vias], one per pair of layers to join |
pins | string | no | layers whose shapes are never shrunk, comma-separated |
split_cuts | [‘string’, ‘array’] | no | layer:pitch[:stagger] in microns |
Consumes: odb
Artifacts: pdn_def (def_written)
Assertion: pdn-generated — passes when status equals generated
Provenance limitations
- input_hash covers the argument vector, not the content of the .odb it names.
- MEASURED 2026-11-04 against the reference pdn goldens at pin 4155ac31014923e0fa721b691d222511adc7d8c3: 160 of 160 comparable cases exact on shapes, vias and block terminals, of 199 discovered, and 22 of 22 error cases with the reference code and message. MEASURED 2026-10-12 against the reference pdn goldens at pin 27288f5c90265ae5296b2f5a9fa6e8714fa191ad: 132 of 150 comparable cases exact on shapes, vias and block terminals, of 189 discovered. Of the 18 that differ, 17 are polygon-shaped grid cases that first became comparable at that pin, and 1 (asap7_repair_channel_macro_gap) is new reference channel-repair behaviour; neither family is modelled yet. MEASURED 2026-09-30 at pin da9f29f18b6487825aa880597176e0fa97110b31: 130 of 130 comparable cases exact on shapes, vias and block terminals, of 168 discovered. A SCORE IS ONLY TRUE OF ONE COMMIT – the pin is spelled out here rather than substituted, because a MEASUREMENT names the commit it was taken at, not whatever this binary was later built against.
- No comparable case fails at that pin. The eight the previous reading failed – hybrid and multi-height rows, mirrored rows, a merged stacked-via enclosure, a pad balance case, over-pad connections and power-switch cut rows – all match.
- Previous readings: 106 of 114 at pin 7d490b8ecd357199c0c0e9f3e32becd5eb507c34 on 2026-09-03; 104 of 104 at pin 945a9f48dc6e5cc91d865daa92c45a1094cb682c on 2026-08-30. An earlier
110 of 110carried in this descriptor was NOT reproducible and is withdrawn. - 38 of the suite’s cases are skipped rather than passed, and the reasons are counted, not hidden: 30 build no grid at all, 2 have a reference that built no grid, 2 compute a -pitch and 1 its -instances in Tcl this translation cannot read, and one each use -existing, repair_pdn_vias and add_sroute_connect.
- Diagnostics implemented so far: PDN-0003, 0004, 0005 (connect rules), 0106, 0107, 0108, 0114, 0117, 0118, 0191 (argument validation), 0185 and 0215 (runtime). A case whose golden names any other code is skipped with that code named, never silently passed.
- status is one of generated, vacuous or error. VACUOUS IS NOT GENERATED: it means the run laid no metal at all, and this assertion passes only on generated, so a no-op fails it rather than reporting a grid that was never built. Zero can still be the right answer for the design; read shapes and decide.
- The engine validates inside the ordinary build path, as the reference does inside addRing and addStrap, so every design it accepts has passed those checks too – the diagnostics are not a separate check mode.
- Written against the reference pdn regression suite. The algorithm is reimplemented from the published behaviour and the goldens’ implementation-defined details (snapping, tie-breaks, rounding), not transliterated from the source.
pdn.global_connect
create the supply nets and connect every matching instance pin to them (run before generate)
global-connect {odb}
| Input | Type | Required | Description |
|---|---|---|---|
odb | string | yes | path to the design database (.odb) |
connect | [‘string’, ‘array’] | yes | NET:PINPAT:INSTPAT:power|ground|signal, one rule per entry; patterns are FULL matches, e.g. ‘VPWR:^VPWR$:.*:power’ |
force | boolean | no | reconnect pins already on another net |
out_odb | string | no | write the database here instead of in place |
Assertion: supplies-connected — passes when status equals applied