BeginnerQuestion 136 of 157Source: Synopsys PrimeTime User Guide: ECO Flow

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 Reference DiagramHow are max-transition violations fixed?
Before and after schematic: a small driver on a long net with a slow red edge at the loads, then the same net with an upsized driver, a mid-net buffer and the load split, each giving a sharp blue edge.

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, and add_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 with insert_buffer (PT). ICC2 scripts normally use add_buffer (ICC2) or add_buffer_on_route (ICC2), but ICC2 also has insert_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) and size_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

PrimeTime (pt_shell)report_constraint -max_transition

Lists max transition violations with actual and required values in PrimeTime.

PrimeTime (pt_shell)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.

ICC2 (icc2_shell)report_constraints -max_transition

Reports max transition violations inside ICC2.

ICC2 (icc2_shell)size_cell U88 -lib_cell BUFX8

Upsizes one driver in ICC2.

ICC2 (icc2_shell)add_buffer [get_nets n_long] -lib_cell BUFX4

Inserts 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, and add_buffer (ICC2) or add_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

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