vyges-ant — CLI reference
Generated from vyges-ant --help. Do not edit by hand — run scripts/gen-cli-reference.sh.
vyges-ant — antenna ratio sign-off over the routed design database
USAGE:
vyges-ant check <design.odb> [-o FILE] [--json]
vyges-ant explain <design.odb> --net NAME
vyges-ant --describe
vyges-ant --help
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 error usage error, unreadable database, or no DBU scale
Contract
Generated from vyges-ant --describe.
ant
antenna ratio sign-off (PAR/CAR/PSR/CSR) over the routed design database
Maturity: structured
check {odb}
| Input | Type | Required | Description |
|---|---|---|---|
odb | string | yes | path to the routed design database (.odb) |
out | string | no | write 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.
- Correlated against OpenROAD check_antennas on a routed sky130 block: 76 of 83 violations matched exactly, 1 unconfirmed, 76 of 77 compared values within 2%, and every shared record agreeing on the limit. 7 real violations are still missed, so this is not yet a formal sign-off gate – run check_antennas before a tapeout – but the two engines agree to the decimal on what they both see.
- 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.