vyges-ant — antenna ratio sign-off
Part of the Vyges Loom suite. Install once with
vyges install loom, then runvyges loom ant. It’s also a standalonevyges-antbinary on your PATH (the integration contract for flow authors).
vyges-ant answers: will this routing damage a gate during manufacture? While a chip is
being built, a metal shape already connected to a transistor gate but not yet to a diffusion
path collects charge. If that shape is large relative to the gate, the accumulated charge
breaks the gate oxide — a failure that no amount of post-silicon testing can repair. The check
is a ratio of collected metal to gate area, evaluated per routing layer against limits the PDK’s
LEF states.
Run it
vyges install loom # one-time
vyges loom ant check routed.odb # -> verdict, exit 0/1
vyges loom ant check routed.odb -o antenna.json # report to a file
{
"status": "clean",
"count": 0,
"nets_checked": 42,
"nets_no_gate": 8,
"nets_unrouted": 2,
"layers_without_rules": [],
"no_rules_found": false,
"violations": []
}
Exit status is the verdict: 0 clean, 1 violations, 2 error — so CI can gate on it without parsing prose.
See the full CLI reference (generated from --help).
What it computes
For each net, walking routing layers bottom-up:
| Ratio | Numerator |
|---|---|
| PAR | metal on this layer alone |
| CAR | metal on this layer and every layer below |
| PSR | side area (perimeter × layer thickness) on this layer |
| CSR | side area cumulative to this layer |
The cumulative forms are not redundant. A net legal on every layer taken individually can still violate CAR, because the charge a gate sees is what the whole connected stack collected, not the worst single layer.
Where it sits
A routed .odb in, an antenna verdict out. It reads the routed database — the same substrate
OpenROAD’s ant module uses — rather than a streamed GDS. That choice is the point: a GDS answer
arrives after the last stage at which a violation could still be repaired by inserting a
protection diode. vyges-drc computes an antenna ratio too, over GDS polygons, post-stream; same
ratio, different substrate, different job.
It is a checker. It reports and never modifies a design; repair is a separate, reviewable plan replayed by an applier — the same split the Loom optimizers use, for the same reason.
Two forms of limit, and why it matters
LEF states antenna limits two ways, and a checker that reads only one finds nothing on technologies that use the other:
- Plain ratios (
ANTENNAAREARATIO…) — a constant per layer. - Diffusion-dependent PWL ratios (
ANTENNADIFFAREARATIO…) — the limit as a piecewise-linear function of the diffusion area connected to the net. More diffusion permits a higher ratio, which is exactly how a protection diode earns relief.
Both are read; where a technology states a diff curve it takes precedence, since that is the limit the foundry characterised for a net carrying that much diffusion. Outside a curve’s stated range the limit is clamped, not extrapolated — a LEF table covers the diffusion areas the foundry characterised, and inventing values beyond either end would be manufacturing an answer the technology never gave.
On sky130 this is the whole check: every routing layer carries an antenna rule object, yet none
states a plain ratio. sky130 declares exactly one limit, DiffPSR, as a 4-point curve identical
on met1–met3.
Verdicts that are not verdicts
Two situations are deliberately not reported as clean, because nothing was actually checked:
no_rules_found— the technology states no antenna limit in either form. Exit 2, not 0. A design whose PDK sets no limits has not passed anything.nets_no_gate— a net with routed metal but no gate area on any connected pin. With no denominator there is no ratio. A large count here means the standard-cell library is missing antenna models and the check covers less than it appears to, which is why the number is in the report rather than swallowed.
Known bounds
Both over-report rather than under-report, so a clean verdict is trustworthy and a reported violation may be spurious:
- Metal area double-counts overlap — shapes are summed as raw rectangles, not unioned.
- Layer order is routing level, not a manufacturing step model (the standard CAR approximation).
And one gap that belongs to the technology rather than the tool: a ratio stated in neither form is not checked. On sky130 that means only PSR is evaluated.