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 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}
InputTypeRequiredDescription
odbstringyespath to the design database (.odb), its supply nets already connected (pdn.global_connect)
out_defstringyeswrite the result as DEF
powerstringyesthe power net name
groundstringyesthe ground net name
voltage_domains[‘string’, ‘array’]nothe voltage domains to build, e.g. CORE
trimintegerno1 trims the shapes as the reference does (default 0: untrimmed)
gridstringnoONE grid per call, ‘name:kind’ e.g. ‘stdcell:core’; the options below belong to it
domainstringnoregion:power:ground, for a region domain
starts_withstringnowhich net takes the innermost ring (default ground)
followpins[‘string’, ‘array’]nolayer[:extend[:width[:extend_by]]] in microns, e.g. ‘met1:core:0.48’; extend is core, rings, boundary or padring
ring[‘string’, ‘array’]nolayer0,layer1:width:spacing:offset[:boundary]
stripe[‘string’, ‘array’]nolayer: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’]nolayer0,layer1[:vias], one per pair of layers to join
pinsstringnolayers whose shapes are never shrunk, comma-separated
split_cuts[‘string’, ‘array’]nolayer: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 110 carried 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}
InputTypeRequiredDescription
odbstringyespath to the design database (.odb)
connect[‘string’, ‘array’]yesNET:PINPAT:INSTPAT:power|ground|signal, one rule per entry; patterns are FULL matches, e.g. ‘VPWR:^VPWR$:.*:power’
forcebooleannoreconnect pins already on another net
out_odbstringnowrite the database here instead of in place

Assertion: supplies-connected — passes when status equals applied