BeginnerQuestion 172 of 187Source: Synopsys ICC2 Implementation User Guide: Inserting Metal Fill With IC Validator In-Design and Performing Real Metal Fill Extraction

Why insert fill only when timing is nearly clean?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

Metal fill adds floating metal next to, above and below signal wires, and every piece adds capacitance. That changes the parasitics and so the delays, usually slowing paths. If you fill while timing is still moving, each timing fix disturbs the fill and each fill pass disturbs timing, so the ICC2 guide says the block should be close to meeting timing, with few or no DRC violations, before fill goes in.

Technical Reference DiagramWhy insert fill only when timing is nearly clean?
Cross-section of metal layers showing a signal wire between neighbours, before fill with open space and after fill with floating fill shapes next to and above the wire, each adding sidewall and overlap capacitance marked with small capacitor symbols.

Technical Explanation

  • Fill shapes are floating conductors. A signal wire with fill beside it on the same layer sees extra sidewall capacitance, and fill on the layers above and below adds area capacitance. The extra C slows the driver and the wire, so setup slack drops on those nets.
  • Crosstalk coupling can change as well. Fill between two signal wires takes some of their direct coupling, but the total capacitance each wire sees still rises. The net effect depends on geometry, so it has to be extracted, not guessed.
  • Before fill, extraction uses emulated fill: the TLUPlus model accounts for fill statistically. After fill, you can extract real fill: associate non-emulation TLUPlus files with the corners, then enable it with set_extraction_options -real_metalfill_extraction floating (ICC2). Mixing the two double-counts or misses fill.
  • Each timing ECO after fill moves cells and wires, which means fill in those areas must be removed and reinserted. The guide gives incremental fill for modified regions, but many small ECO loops each need their own fill update and re-extraction.
  • Timing-driven fill reduces the impact. With -nets (ICC2) or -timing_preserve_setup_slack_threshold (ICC2), signoff_create_metal_fill (ICC2) keeps fill away from critical nets; by default spacing to those nets is twice the minimum spacing from the technology file. It cannot be combined with TCD fill.
  • A threshold that is too large makes too many nets critical, which leaves large empty areas and can cause density errors. signoff.create_metal_fill.fix_density_errors (ICC2) can repair those during timing-driven fill; it defaults to false.
  • Hold can move too. Extra capacitance normally helps hold on the slowed paths, but it also changes clock-net delay when fill lands beside clock wires, which shifts skew. The guide provides signoff.create_metal_fill.fill_shielded_clock (ICC2) to control whether shielded clock nets are filled during timing-driven fill.
  • The practical order is: close timing on emulated fill, insert fill, extract with real fill, run final timing, and make only small ECOs with incremental fill afterwards.

Common Mistake

The Trap: Inserting fill right after the first routing pass "to get it out of the way". Every one of the next six timing ECOs moves cells and wires through filled areas, fill has to be redone each time, and extraction flips between emulated and real models between runs. The team loses track of which slack numbers used which fill, and a 20 ps setup regression goes unnoticed until signoff. Had they closed timing on emulated fill first, fill would have gone in once, real-fill extraction would have run once, and any remaining slack loss would have been visible as a single, explainable step.

Follow-up Question & Model Response

"How would you protect critical paths from fill without leaving density violations?"

Candidate Model Response: I would use timing-driven fill with a modest setup slack threshold with -timing_preserve_setup_slack_threshold (ICC2), or list the few critical nets explicitly with -nets (ICC2), so fill keeps extra spacing from them. I would keep the threshold small, because too many protected nets leaves empty areas that fail minimum density. If density errors appear, signoff.create_metal_fill.fix_density_errors (ICC2) can fix them during the run. After fill I would extract with real fill and rerun timing on those nets.

Practical Example

Tapeout Scenario: A block closes at setup WNS +6 ps on emulated fill (illustrative). After signoff_create_metal_fill (ICC2) and real-fill extraction, WNS drops to -3 ps, with 14 failing paths, each seeing 3 to 5% more net capacitance. Rerunning fill in timing-driven mode with a 10 ps setup slack threshold keeps fill at twice minimum spacing from 2,100 nets. WNS returns to +2 ps, and 6 density windows fall under minimum, which signoff.create_metal_fill.fix_density_errors (ICC2) repairs.

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. →