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 loom ant — CLI reference

Generated from vyges loom ant --help — this page is the tool’s own output, verbatim.

vyges loom ant — antenna ratio sign-off over the routed design database

USAGE:
  vyges loom ant check <design.odb> [-o FILE] [--json]
  vyges loom ant explain <design.odb> --net NAME
  vyges loom ant --describe
  vyges loom ant --help
  vyges loom ant --version

OPTIONS:
  --net NAME            (explain) dump one net's per-gate, per-stage attribution
  -o FILE               write the report to FILE instead of stdout
  --json                emit JSON (the default for `check`)
  --describe            print a machine-readable JSON description of the command

EXIT STATUS:
  0  clean          no violation found
  1  violations     at least one net exceeds a LEF antenna limit
  2  vacuous        nothing was checked -- no antenna rule in the technology, or no routed
                    metal in the database (a global-route .odb has none). NOT a pass.
  2  error          usage error, unreadable database, or no DBU scale

Contract

Generated from vyges loom ant --describe.

ant

antenna ratio sign-off (PAR/CAR/PSR/CSR) over the routed design database

Maturity: structured

check {odb}
InputTypeRequiredDescription
odbstringyespath to the routed design database (.odb)
outstringnowrite the report to FILE instead of stdout

Consumes: odb

Artifacts: antenna_report (report_path)

Assertion: antenna-clean — passes when status equals clean

Provenance limitations

  • input_hash covers the argument vector, not the content of the .odb it names.
  • Both the plain and the diffusion-dependent (PWL) LEF ratio forms are read; where a technology states a diff curve it takes precedence, and outside the curve’s stated range the limit is clamped rather than extrapolated.
  • A ratio the technology states in neither form is not checked. On sky130 only DiffPSR is stated, so PAR, CAR and CSR are unlimited there; layers_without_rules and no_rules_found report this rather than leaving it implied by the exit code.
  • status is one of clean, violations, vacuous or error. VACUOUS IS NOT CLEAN: it means nothing was checked, either because no layer states an antenna rule (no_rules_found) or because no net carries routed metal (no_routing_found, which usually means a global-route database was passed to a checker that reads routed geometry). The declared assertion passes only on clean, so a vacuous run fails it rather than signing off a design nothing was verified on. Exit status is 2 for both vacuous and error, 1 for violations, 0 for clean.
  • Correlated against OpenROAD check_antennas, RE-MEASURED 2026-08-23 against a freshly generated reference on a build carrying OpenROAD PR 11125. Reference: check_antennas at OpenROAD 945a9f4. Engine: vyges-ant 802e66b. Database: a detail-routed sky130 block of 10918 nets, of which 9677 checked, 751 with no gate, 490 unrouted. Result: 44 reference violations, 43 matched, 1 missed, 0 added, 43 of 43 matched values within 2%. All 44 are PSR. Both sides are deterministic – repeat runs on the same .odb return byte-identical output. A NUMBER HERE MEANS NOTHING WITHOUT THE BUILD AND THE DATABASE: the reference’s own answer moves between OpenROAD builds, and an earlier measurement against a pre-11125 build showed 10 violations this engine reported that the reference did not, all of which are gone against a current reference. Treat as a strong screen, not a sign-off gate: run check_antennas for sign-off, and if the two disagree check which build you are comparing against. Give it a DETAIL-routed database – on a global-route .odb the reference synthesises wires from routing guides while this engine reads the routed database, finds no routing, and refuses the verdict as vacuous.
  • The ratio is charged per CONDUCTOR: metal reachable from the gates over layers at or below the one being deposited, divided by the summed gate area of the gates on that conductor. Measured as the exact union of the rectangles, so overlap and abutment count once.
  • The diffusion-dependent limit is indexed by each conductor’s own diffusion, matching OpenROAD’s per-node iterm_diff_area. Every terminal is anchored to a conductor, not only the gates, since a diode pin carries diffusion without carrying a gate.
  • The conductor graph follows AntennaChecker: vias decomposed onto the layers they occupy, pin metal subtracted so pins cut the wire into antenna regions, components labelled per layer, layers joined through the cut between them, and terminals attached to the fragments their own pin boxes touch.
  • Cut layers (mcon/via/via2) are not checked; routing layers only.
  • Diffusion area is applied net-wide, where the real limit varies per layer as the path to diffusion completes.
  • A terminal whose pin metal touches no routing is attached to nothing and, if it is a gate, counted in gates_unanchored rather than silently skipped.
  • Layer accumulation order is dbTechLayer routing level, not a manufacturing step model.