IntermediateQuestion 209 of 222Source: Synopsys ICC2 Implementation User Guide X-2025.06-SP2: Chip Finishing and Design for Manufacturing (Inserting Filler Cells); ICC2 Tool Commands X-2025.06-SP2: remove_stdcell_fillers_with_violation

How do you remove only the fillers that cause DRCs?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

Use remove_stdcell_fillers_with_violation (ICC2), which checks filler instances against routing and deletes only the ones with violations. Run it first with -check_only true (ICC2) to see what it would remove, then in removal mode, and repeat until it reports that it deleted 0 cell instances. Removing one filler can expose a violation on its neighbour, so one pass is often not enough.

Technical Reference DiagramHow do you remove only the fillers that cause DRCs?
A standard-cell row with metal filler cells between logic cells, where two fillers overlapping or too close to a signal route are marked red and removed in the first pass, and a neighbouring filler shows a new violation that only the second pass removes.

Technical Explanation

  • By default the command considers instances whose names contain xofiller, the string ICC2 gives every inserted filler, and checks them only against top-level signal routing. -name (ICC2) picks a different pattern and -boundary (ICC2) limits the check to rectangles.
  • -check_between_fixed_objects true (ICC2) widens the check to every neighbour: other fillers, standard cells, PG rails and terminals. Use it when a violation involves something other than a signal wire.
  • -check_only true (ICC2) removes nothing and writes a report named after the block, ending in _fillers_with_violation.rpt, with each filler and its first violation. The file is overwritten on every check run, so copy it if you want to compare passes.
  • -shorts_only true (ICC2) removes only fillers that short to a routing shape, which keeps decap fillers that only have a spacing problem. It cannot be combined with -check_only (ICC2).
  • Fillers whose physical_status is fixed or locked are never removed, even with violations; set them to placed first. Fillers with PG pins not on a PG net are removed if they touch PG objects, so run connect_pg_net -automatic (ICC2) before checking.
  • Violations inside a filler, between objects of the same cell, are warned about and not removed. Double-patterning rules are checked only when route.common.color_based_dpt_flow (ICC2) is true and the technology file defines DP rules.
  • Prevention is cheaper. create_stdcell_fillers -rules check_pnet (ICC2) checks power net violations during insertion, at a runtime cost, so fewer decaps are removed later. In an ECO, create_stdcell_fillers -post_eco (ICC2) marks the new fillers and remove_stdcell_fillers_with_violation -post_eco true (ICC2) checks only those.

What To Check

  • Flow order: metal fillers, connect_pg_net -automatic (ICC2), removal passes, then nonmetal fillers and another PG connect.
  • The check report from each pass: filler count and violation types.
  • Decap loss, meaning how many decap fillers were removed and where, since each one takes decoupling away from busy logic.
  • The final pass printing Deleted 0 cell instances.
  • Signoff DRC afterwards with signoff_check_drc (ICC2), since the removal command checks routing DRC in ICC2 rather than the foundry runset.

Command Checks & Actions

ICC2 (icc2_shell)connect_pg_net -automatic

Connects filler PG pins first, so fillers touching rails are not removed only because their pins were unassigned.

ICC2 (icc2_shell)remove_stdcell_fillers_with_violation -check_only true -check_between_fixed_objects true

Checking mode with the same object scope as the removal pass: lists fillers that would be removed and removes nothing.

ICC2 (icc2_shell)remove_stdcell_fillers_with_violation -check_between_fixed_objects true

Removal mode, checking fillers against all neighbouring objects instead of only top-level signal routes.

ICC2 (icc2_shell)remove_stdcell_fillers_with_violation -shorts_only true -boundary {{{100 200} {160 260}}}

Removes only fillers that short to routing inside one rectangle (coordinates illustrative).

ICC2 (icc2_shell)save_block

Saves the block, since IC Validator reads it from disk.

ICC2 (icc2_shell)signoff_check_drc

Confirms the remaining fillers are clean against the signoff runset.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): Pass 1 removes 52 fillers, pass 2 removes 5, pass 3 reports Deleted 0 cell instances, and signoff DRC shows no filler-related errors.
  • Suspicious (illustrative): Pass counts that do not fall, such as 40, then 38, then 41, or more than 5% of decap fillers removed in one region.
  • Hard stop: Signoff DRC still flags filler shapes after a pass that deleted nothing (fixed or locked fillers, internal violations, or a rule the ICC2 check does not model), or fillers left with unconnected PG pins.

Common Mistake

The Trap: Running the command once and moving on. The first pass reports 52 deletions and looks finished, but removing those fillers creates new violations with neighbouring fillers, a limitation the command reference states. A second pass would have removed 5 more; instead they surface as signoff DRC errors two days later, after metal fill, and the fix now needs fill removal and a refill in that area.

What The Interviewer Is Testing

  • Knowing the command must be repeated until it deletes nothing.
  • Understanding what it will not remove: fixed or locked fillers and internal violations.
  • Candidates who connect PG before checking and start with check-only mode show they have used it on a real block.

Follow-up Question & Model Response

"Why not remove all fillers and reinsert them?"

Candidate Model Response: remove_cells [get_cells xofiller*] (ICC2) removes every filler, including thousands of clean decaps, and a full reinsert can put the same violations back because the routing has not changed. Targeted removal keeps clean fillers and their decoupling. Full removal and reinsertion makes sense after a large ECO that moved many cells, where most filler positions are stale anyway. For small changes, marking new fillers with -post_eco (ICC2) keeps the check limited to them.

Practical Example

Tapeout Scenario: After routing, a block receives 18,400 metal fillers, 6,100 of them decaps (illustrative). A check-only pass reports 52 fillers with violations: 44 spacing violations to top-level signal routes and 8 shorts. Pass 1 removes those 52, pass 2 removes 5 neighbours exposed by the first removal, and pass 3 reports Deleted 0 cell instances. 57 fillers are gone in total, 21 of them decaps, about 0.3% of the decap fillers. Nonmetal fillers then fill the gaps, connect_pg_net -automatic (ICC2) runs again, and signoff_check_drc (ICC2) shows no filler-related errors.

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