How are max-transition violations fixed?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
A max-transition violation is fixed by making the driver stronger or the load it sees smaller. The three standard moves are upsizing the driver, inserting a buffer to break a long net, and splitting a large fanout across several buffers. PrimeTime can do this automatically with fix_eco_drc (PT), and ICC2 has size_cell (ICC2) and add_buffer (ICC2) for manual fixes.
Technical Explanation
- Transition time depends on the driver strength and the load: pin capacitance of the loads plus wire capacitance, and wire resistance on long nets. A weak cell driving a heavy load produces a slow edge.
- Upsizing the driver is the smallest change. A stronger cell of the same function drives the same load faster. The cost is a larger input capacitance, which loads the previous stage, plus more area and leakage.
- Buffering breaks a long net into shorter pieces. Each buffer drives only part of the wire, so each segment has a sharp edge. In ICC2,
add_buffer(ICC2) takes the net or pins positionally with-lib_cell, andadd_buffer_on_route(ICC2) places buffers along an existing route. - Splitting the load helps when the net is short but drives many pins. Several buffers each drive a group of loads. ICC2 has
split_fanout(ICC2) for this. fix_eco_drc(PT) fixes transition, capacitance, fanout and noise violations by sizing cells and inserting buffers or inverter pairs while minimizing area. By default it does not consider timing effects, so rerun timing afterwards. PrimeTime inserts withinsert_buffer(PT). ICC2 scripts normally useadd_buffer(ICC2) oradd_buffer_on_route(ICC2), but ICC2 also hasinsert_buffer(ICC2), which is how the insert_buffer lines in a PT change list run there.- Physically aware options such as
fix_eco_drc -physical_mode open_site(PT) restrict changes to where there is already room. Physically aware ECO needs a PrimeTime-ADV license (PT UG licensing table). - Both tools have the command:
size_cell(PT) andsize_cell(ICC2). The ICC2 version also has spare-cell awareness for freeze-silicon ECOs, because it edits the real layout.
What To Check
- The worst transition and the limit it violates, per scenario.
- Whether the net is long, heavily loaded or driven by a small cell.
- The input capacitance increase on the previous stage after upsizing.
- Timing on paths through the fixed nets after the change.
Command Checks & Actions
report_constraint -max_transitionLists max transition violations with actual and required values in PrimeTime.
fix_eco_drc -type max_transition -methods {size_cell insert_buffer} -buffer_list {BUFX2 BUFX4}Fixes transition violations by sizing and buffer insertion from the given buffer list; write the edits out afterwards with write_changes.
report_constraints -max_transitionReports max transition violations inside ICC2.
size_cell U88 -lib_cell BUFX8Upsizes one driver in ICC2.
add_buffer [get_nets n_long] -lib_cell BUFX4Inserts a buffer on a net in ICC2; the net is positional.
Healthy, Suspicious & Hard-stop Results
- Healthy (illustrative): Zero max transition violations in every scenario after fixing, with setup and hold unchanged or better.
- Suspicious (illustrative): A few violations left that
fix_eco_drc(PT) marks unfixable because there is no room nearby. - Hard stop: Transition violations on clock nets after CTS. The clock tree itself needs repair, not a data-path style fix.
Common Mistake
The Trap: Upsizing every violating driver to the largest cell. On a net with 400 um of wire, an X16 driver still cannot get a sharp edge to the far end because the wire resistance dominates, and the X16 input pin now loads its own driver into a new violation. A buffer halfway along the wire fixes it with a smaller cell.
What The Interviewer Is Testing
- Choosing between sizing, buffering and splitting based on why the edge is slow.
- Knowing the buffer commands in each tool:
insert_buffer(PT) in PrimeTime, andadd_buffer(ICC2) oradd_buffer_on_route(ICC2) in ICC2 scripts. - That the candidate rechecks timing after a DRC fix.
Follow-up Question & Model Response
"When does upsizing the driver stop helping a transition violation?"
Candidate Model Response: It stops helping when the wire itself is the problem. On a long net the far-end transition depends on wire resistance and capacitance, and a stronger driver only improves the near end. Upsizing also increases input capacitance on the previous stage, which can move the violation back one stage. At that point a buffer part way along the wire, or a split of the loads, is the fix.
Practical Example
Tapeout Scenario: A net driven by an X1 buffer runs 320 um to 6 loads, with a far-end transition of 380 ps against a 250 ps limit (illustrative). Upsizing to X4 brings it to 290 ps, still failing. Adding a buffer 150 um along the route gives 140 ps on the first segment and 160 ps on the second. The path through it gains 25 ps of setup slack, and the extra buffer adds about 1 um squared of area.
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