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 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 defaultcreate_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, useremove_cells [get_cells xofiller*](ICC2); the guide describes the targetedremove_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
check_legalityConfirms the placement is legal before any filler goes in.
set_cell_vt_type -lib_cells */*_vtA -vt_type vtALabels every library cell ending in _vtA as VT type vtA.
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.
set_vt_filler_rule -vt_type {default default} -filler_cells {myLib/filler2x myLib/filler1x}Rule for gaps between cells that have no VT label.
create_vtcell_fillers -prefix vt_run1Inserts fillers by rule and tags this run in the instance names.
save_blockSaves the block, since IC Validator reads it from disk.
signoff_check_drc -check_all_runset_layers trueChecks 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
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