How are antenna violations fixed?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
There are two main fixes: layer hopping and diode insertion. Layer hopping breaks a long wire with a short jump to another layer near the gate, so less metal is attached to the gate during the risky etch step; Zroute prefers this by default. Diode insertion adds a protection diode that gives the collected charge a safe path to the substrate.
Technical Explanation
- Zroute analyzes and fixes antenna violations automatically during detail routing if antenna rules are defined in the design library. By default fixing starts in the second detail routing iteration, after initial routing and basic DRC fixing.
- Breaking with a higher layer: for a violation on metal N, insert a short metal N+1 segment near the gate. This works for most violations.
- Moving down: for violations on the top layer where the output pin has limited protection, replace part of the metal with a lower layer. Splitting wires can hurt RC and timing, so it is used with care.
- Diode insertion adds a diode cell connected to the net. You can allow it during routing with
route.detail.insert_diodes_during_routing, or make diodes the preferred fix withroute.detail.antenna_fixing_preferenceset touse_diodes. - Diodes can be new cells or spare diodes already placed. The diode library cells are named with
route.detail.diode_libcell_names, and by default filler locations can be reused. - After routing,
create_diodesinserts diodes for specific violating ports that routing could not fix. - Every fix adds something to the net: extra vias for hopping, extra load for a diode. Re-extract parasitics and rerun timing after antenna fixing.
What To Check
check_routes -antenna true: remaining antenna violations and which pins they are on.- The antenna count in the DRC summary at the end of each detail routing iteration.
- Whether violations sit on the top routing layer, where hopping up is not possible.
- Timing on nets that were fixed, after re-extraction.
Command Checks & Actions
check_routes -antenna trueRuns the routing checks and states the antenna check explicitly (it is on by default); read the antenna section of the report.
set_app_options -name route.detail.insert_diodes_during_routing -value trueAllows Zroute to insert protection diodes during detail routing.
set_app_options -name route.detail.antenna_fixing_preference -value use_diodesWith diode insertion enabled, makes diodes the preferred fix instead of the default layer hopping.
create_diodes -options {{A U12 DIODE1 1 M5 2.5}}After routing, inserts one DIODE1 cell for pin A of U12, routed up to M5 within 2.5 um.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): Zero antenna violations after detail routing, with most fixes done by layer hopping.
- Suspicious (illustrative): A few violations left on top-layer nets or top-level ports, which need diodes.
- Hard stop: Antenna checking disabled or skipped for nets, or a macro missing antenna data for some layers (ZRT-311 warning).
Common Mistake
The Trap: Fixing antenna violations on critical nets and not rerunning timing. Layer hopping adds two vias per hop, and each via adds resistance. On a net with little slack, a hop can turn a passing path into a failing one. The re-extraction takes minutes; finding the failure at signoff costs a new ECO round.
What The Interviewer Is Testing
- Whether you know both fixes and which one is the default.
- Do you understand why top-layer violations need different handling?
- A strong answer shows you remember the timing cost of the fix.
Follow-up Question & Model Response
"What does a ZRT-311 warning mean for antenna fixing?"
Candidate Model Response: It means a macro has hierarchical antenna properties that are not defined for all its layers. Zroute treats the data as incomplete and skips antenna analysis for those pins. So the report may look clean for that macro only because nothing was checked. The fix is to get antenna properties defined for every layer of the macro, from the macro provider or by annotating them on the hard macro cell, and then rerun the check. For a block abstraction in a hierarchical flow, derive_hier_antenna_property extracts that data from the block.
Practical Example
Tapeout Scenario: After detail routing, check_routes -antenna true reports 7 antenna violations (illustrative). Five are on M3 nets with the driver joining on M6; Zroute had not finished fixing them because the area around them is dense. An incremental detail routing pass adds short M4 hops near the gates and clears all five. The other two are on top-level input ports with long M7 wires, where hopping up is not possible, so create_diodes adds a diode at each port. After re-extraction, one hopped net loses 3 ps of slack but still passes.
PnR Flow Mentor Guide
Master the Physical Design Implementation Flow
Read the complete 8-chapter PnR Flow Mentor Guide free on the web — library setup through placement, clock tree synthesis, routing, chip finishing, hierarchical implementation, and ECO, all the way to stream-out.

Continue practising