How do you cap LVT usage, and why set it early?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
Tag the LVT library cells as a threshold-voltage group, declare it low-Vt with set_threshold_voltage_group_type -type low_vt LVT (ICC2), and cap it with set_multi_vth_constraint -low_vt_percentage <p> (ICC2), by cell count or by area. place_opt (ICC2), clock_opt (ICC2) and route_opt (ICC2) then honour the cap on data-path cells. Set it early, because route_opt (ICC2) deliberately limits this optimization to avoid disturbing QoR.
Technical Explanation
- LVT cells are faster but leak more. Limiting their share cuts leakage, and the ICC2 guide also presents it as a yield improvement. Early in a project it also shows how hard the RTL is to time, because a block that needs far more LVT than budgeted is telling you the logic depth or the floorplan needs work.
- Setup has two steps. First set the
threshold_voltage_groupattribute on the LVT library cells and declare that group low-Vt withset_threshold_voltage_group_type(ICC2). Then set the limit withset_multi_vth_constraint -low_vt_percentage(ICC2). - The LVT cells must have a valid purpose from
set_lib_cell_purpose(ICC2), be in the right target library subsets, and not be dont_touch or dont_use. -cost cell_countcounts instances;-cost areaweights by cell area, so large LVT cells count more. Use the one your power budget is written in.- The constraint applies to data-path cells during
place_opt(ICC2),clock_opt(ICC2) androute_opt(ICC2).route_opt(ICC2) limits it to avoid QoR disturbance, so a block over budget at postroute will mostly stay over. report_multi_vth_constraint(ICC2) reports the setting andreset_multi_vth_constraint(ICC2) removes it.- PrimeTime ECO can add LVT back. Keep LVT cells out of PrimeTime fixing with
set_dont_use(PT) orset_target_library_subset -dont_use(PT), which restrict the fix_eco commands, and finish with leakage recovery,fix_eco_power -pattern_priority {HVT MVT LVT}(PT), which swaps cells back to higher Vt where slack allows.
What To Check
- LVT percentage after each stage, by the same cost measure as the budget.
- That the threshold_voltage_group attribute is on every LVT library cell and on no others.
- LVT cells being usable: purpose set, in subsets, not dont_use.
- LVT share after each PrimeTime ECO round.
Command Checks & Actions
set_attribute [get_lib_cells -quiet *lvt*/*] threshold_voltage_group LVTTags the LVT library cells as a group.
set_threshold_voltage_group_type -type low_vt LVTDeclares the group as low-Vt.
set_multi_vth_constraint -low_vt_percentage 10 -cost cell_countCaps LVT at 10% of data-path cell count.
report_multi_vth_constraintReports the constraint in force.
fix_eco_power -pattern_priority {HVT MVT LVT}Final leakage recovery, swapping to higher Vt where slack allows.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): LVT at 8.5% against a 10% cap after
place_opt(ICC2), still at or under 10% afterroute_opt(ICC2). - Suspicious (illustrative): LVT creeping from 10% to 12% over a few PrimeTime ECO rounds.
- Hard stop: LVT at 18% at postroute against a 10% budget, with timing closed on those LVT cells.
Common Mistake
The Trap: Adding the constraint only just before route_opt (ICC2), when leakage reports first look bad. route_opt (ICC2) limits this optimization, so the percentage barely moves. The team is left choosing between a leakage waiver and a rerun from placement.
What The Interviewer Is Testing
- Knows the two setup steps and the cost choices.
- Knows why the cap must be in place from
place_opt(ICC2). - Accounts for LVT added by PrimeTime ECO.
Follow-up Question & Model Response
"Why does route_opt limit percentage-LVT optimization?"
Candidate Model Response: Synopsys says it is to minimize QoR disturbance. By postroute, timing is nearly closed, and mass swapping of LVT cells to slower cells would reopen setup paths that were tuned around them. Each swap also changes the timing of neighbouring paths that were already signed off in the optimizer's view. So the budget has to be met while placement and clock optimization can still absorb the cost.
Practical Example
Tapeout Scenario: A 1.2 million cell block runs place_opt (ICC2) with no cap and reaches 14% LVT at WNS -5 ps (illustrative). With a 10% cell count cap from the start, it reaches 9.6% at WNS -12 ps, and clock_opt (ICC2) and route_opt (ICC2) close timing at 9.8%. Three PrimeTime ECO rounds take it to 10.4%, and final leakage recovery brings it back to 9.9%.
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