BeginnerQuestion 116 of 127Source: Synopsys ICC2 Implementation User Guide: Routing

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 Reference DiagramHow are antenna violations fixed?
Before and after: a long wire to a gate marked in red, then the same wire broken by a short hop to the layer above near the gate, with an inset showing a diode cell as the alternative.

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 with route.detail.antenna_fixing_preference set to use_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_diodes inserts 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

ICC2check_routes -antenna true

Runs the routing checks and states the antenna check explicitly (it is on by default); read the antenna section of the report.

ICC2set_app_options -name route.detail.insert_diodes_during_routing -value true

Allows Zroute to insert protection diodes during detail routing.

ICC2set_app_options -name route.detail.antenna_fixing_preference -value use_diodes

With diode insertion enabled, makes diodes the preferred fix instead of the default layer hopping.

ICC2create_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

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.

PnR Flow Physical Design Mentor Guide — eight chaptersPnR Flow Mentor GuideEight chapters, library setup through to stream-out. →