IntermediateQuestion 210 of 222Source: Synopsys ICC2 Implementation User Guide X-2025.06-SP2: Inserting Filler Cells (Threshold-Voltage-Based Filler Cell Insertion); ICC2 Tool Commands X-2025.06-SP2: set_vt_filler_rule, create_vtcell_fillers

What is threshold-voltage-based filler insertion?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

It is a filler flow in which ICC2 picks the filler for each gap from the threshold-voltage types of the cells on its left and right. You label VT types with set_cell_vt_type (ICC2), write rules with set_vt_filler_rule (ICC2) and insert with create_vtcell_fillers (ICC2). The guide says this flow is typically used only for established foundry nodes; the other method is the standard create_stdcell_fillers (ICC2) flow.

Technical Reference DiagramWhat is threshold-voltage-based filler insertion?
A standard-cell row where gaps between two vtA cells, two default cells and a mixed vtA and default pair are each filled with the filler named by a set_vt_filler_rule (ICC2) rule, with the implant layer drawn continuous across the correctly filled gaps and a notch where a mixed pair had no rule.

Technical Explanation

  • Each library cell gets a VT type label. set_cell_vt_type -lib_cells /_vtA -vt_type vtA (ICC2) tags every cell whose name ends in _vtA. A cell you never label counts as the keyword default.
  • A rule names a pair of VT types and a filler list, for example set_vt_filler_rule -vt_type {vtA vtA} -filler_cells {myLib/fillerA2x myLib/fillerA1x} (ICC2). The pair is the cells to the left and right of the gap. List fillers from largest to smallest, because the tool tries them in the order given.
  • The reason for the flow is implant layers. A cell's VT is set by implant shapes, and implants have their own width and spacing rules, so a filler whose implant matches its neighbours keeps the implant continuous across the gap instead of leaving a thin sliver or a notch.
  • Mixed boundaries need their own rules. A gap between a vtA cell and a default cell is a different pair from vtA and vtA, so write a rule for every neighbour combination the placement actually contains and verify the result.
  • Run check_legality (ICC2) first; the flow expects a legal placement. By default create_vtcell_fillers (ICC2) fills all empty space in the horizontal rows of the whole block. -region (ICC2) and -voltage_area (ICC2) restrict it, and -prefix (ICC2) tags a run so its fillers can be selected later.
  • Instances are named xofiller!library_cell!number, with ! as the default separator, which -separator (ICC2) changes. To remove them all, use remove_cells [get_cells xofiller*] (ICC2); the guide describes the targeted remove_stdcell_fillers_with_violation (ICC2) for the standard flow.
  • create_vtcell_fillers -clear_vt_information (ICC2) deletes the rules and the VT annotations and inserts nothing. Run it before redefining rules so old labels do not linger.

What To Check

  • Every library cell carries the intended VT label; an unlabelled cell silently becomes default.
  • A rule exists for every neighbour pair present in the placement, mixed pairs included.
  • Filler lists in each rule run from largest to smallest.
  • check_legality (ICC2) is clean before insertion.
  • Signoff DRC shows no implant width or spacing errors at filler boundaries.

Command Checks & Actions

ICC2 (icc2_shell)check_legality

Confirms the placement is legal before any filler goes in.

ICC2 (icc2_shell)set_cell_vt_type -lib_cells */*_vtA -vt_type vtA

Labels every library cell ending in _vtA as VT type vtA.

ICC2 (icc2_shell)set_vt_filler_rule -vt_type {vtA vtA} -filler_cells {myLib/fillerA2x myLib/fillerA1x}

Fills gaps with vtA cells on both sides using vtA fillers, largest first.

ICC2 (icc2_shell)set_vt_filler_rule -vt_type {default default} -filler_cells {myLib/filler2x myLib/filler1x}

Rule for gaps between cells that have no VT label.

ICC2 (icc2_shell)create_vtcell_fillers -prefix vt_run1

Inserts fillers by rule and tags this run in the instance names.

ICC2 (icc2_shell)save_block

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

ICC2 (icc2_shell)signoff_check_drc -check_all_runset_layers true

Checks implant rules at filler boundaries; the default run checks only metal and via layers.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): No empty sites left, every filler matching the rule for its neighbours, and signoff DRC clean on the implant layers.
  • Suspicious (illustrative): Implant errors clustered next to one cell family, which usually means that family has no VT label or one neighbour pair has no rule.
  • Hard stop: Implant spacing errors along whole rows after a library update renamed cells, so the /_vtA pattern no longer matched and every former vtA cell became default.

Common Mistake

The Trap: Writing rules only for the matched pairs, {vtA vtA} and {default default}, on a block where vtA and default cells sit side by side in every row. No rule covers the mixed gaps, signoff DRC flags implant errors at hundreds of them after routing is frozen, and the fillers have to be removed and reinserted with the missing rules.

What The Interviewer Is Testing

  • Knowing the rule is keyed on the left and right neighbours, not on the filler alone.
  • Mentioning labelling, filler order from largest to smallest, and legality first.
  • Knowing this is an established-node flow and that the standard filler flow is the alternative.

Follow-up Question & Model Response

"When would you pick the standard filler flow instead?"

Candidate Model Response: The standard create_stdcell_fillers (ICC2) flow uses the placement legalizer, so fillers honour advanced-node placement rules, blockages and keepout margins. It also supports leakage-driven selection with -leakage_vt_order (ICC2) and decap mix control with -type_utilization (ICC2). The VT-rule flow is simpler and predictable when the main concern is matching implants between neighbours. I follow whichever flow the foundry reference methodology uses for that node.

Practical Example

Tapeout Scenario: A 28 nm block (illustrative) uses three VT flavours tagged hvt, svt and lvt, and placement puts cells of different flavours next to each other in most rows. The first script defines rules only for the three matched pairs. After create_vtcell_fillers (ICC2), signoff DRC reports implant spacing errors at 1,840 filler boundaries, 11% of 16,700 filled gaps, all at mixed hvt/svt or svt/lvt boundaries. Rules are added for every mixed combination found, the fillers are removed with remove_cells [get_cells xofiller*] (ICC2) and inserted again, and signoff DRC then shows no implant errors at filler edges.

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