ExpertQuestion 141 of 141Source: Synopsys ICC2 Implementation User Guide: ECO Flow (Adding Buffers on Routed Nets)

How do you ECO-buffer a long routed bus without the buffers clumping?

From PDVerse PnR Interview Handbook · pdVerse Mentor Guide

Short Answer

Buffering each bit of a bus at the same interval puts all the buffers in one column, where they fight for sites and pin access and push cells aside. ICC2 has bus buffer patterns for this: define a stagger with create_eco_bus_buffer_pattern (ICC2), then place the buffers with add_buffer_on_route -user_specified_bus_buffers (ICC2), giving the pattern, the library cell and the first buffer location.

Technical Reference DiagramHow do you ECO-buffer a long routed bus without the buffers clumping?
A layout view of a horizontal bus where interval buffering puts every bit's buffer in the same column, beside the same bus buffered with a staggered pattern so buffers step across the bits and repeat every few nets.

Technical Explanation

  • Why they clump: a bus is many parallel nets of the same length. add_buffer_on_route -repeater_distance (ICC2) with the same first distance and interval on every bit puts every bit's buffer at the same distance from the driver, stacked across the bus.
  • A pattern defines the stagger. create_eco_bus_buffer_pattern (ICC2) requires -name, -first_buffer (which edge bit gets the first buffer: top or bottom for a horizontal bus, left or right for a vertical one) and -measure_from, plus either -distance for a regular stagger (with the optional -repeat_after; without it the pattern does not repeat) or -user_specified_distance for a list of different steps.
  • For a horizontal bus, create_eco_bus_buffer_pattern -name BP1 -first_buffer top -measure_from left -distance 2 -repeat_after 4 (ICC2) puts the first buffer on the topmost bit, staggers each next buffer by 2 to the right, and starts the pattern again after every four buffers. The ICC2 UG example is the same with -repeat_after 3.
  • Apply it with add_buffer_on_route [get_nets data_A*] -user_specified_bus_buffers {BP1 BUF2 100 70} (ICC2): pattern name, library cell and the location of the first buffer. Repeat the group format for more buffer groups along the bus.
  • -last_distance cannot be combined with -user_specified_bus_buffers, so the pattern and group locations must cover the whole route.
  • report_eco_bus_buffer_patterns (ICC2) and get_eco_bus_buffer_patterns (ICC2) show what is defined; remove_eco_bus_buffer_patterns (ICC2) removes patterns.
  • This is a different question from choosing between add_buffer (ICC2) and add_buffer_on_route (ICC2). In PrimeTime the equivalent insertion command is insert_buffer (PT), which does not know about bus patterns; bus staggering is done in ICC2.

What To Check

  • Buffer locations per bit after insertion: are they staggered as intended?
  • Local density and legality where the groups land.
  • Skew between bits of the bus after buffering.
  • Routing DRC and opens after ECO routing of the bus.

Command Checks & Actions

ICC2 (icc2_shell)create_eco_bus_buffer_pattern -name BP1 -first_buffer top -measure_from left -distance 2 -repeat_after 4

Defines a staggered pattern for a horizontal bus.

ICC2 (icc2_shell)report_eco_bus_buffer_patterns

Reports the defined bus patterns.

ICC2 (icc2_shell)add_buffer_on_route [get_nets data_A*] -user_specified_bus_buffers {BP1 BUF2 100 70}

Adds BUF2 buffers on the bus using pattern BP1 from the first location.

ICC2 (icc2_shell)route_eco

Connects the new buffers.

ICC2 (icc2_shell)check_routes

Confirms the bus routes are clean after ECO routing.

PrimeTime (pt_shell)report_timing -through [get_nets data_A*]

Checks timing and bit-to-bit spread in PrimeTime after extraction.

Healthy, Suspicious & Hard-stop Results

  • Healthy (illustrative): Buffers spread across four columns per group, all legal in place, and bit-to-bit delay spread under 10 ps.
  • Suspicious (illustrative): Pattern applied but one group lands on a macro edge, so several buffers move far from their route.
  • Hard stop: All bits buffered at the same column with cells displaced out of a timing-critical region. Remove and redo with a pattern.

Common Mistake

The Trap: Buffering a 64-bit bus with one add_buffer_on_route -repeater_distance 150 (ICC2) command. All 64 buffers of each stage land in the same column, legalization pushes half of them and the neighbouring cells several rows away, and the post-ECO run shows the bus bits spread by 40 ps plus new violations on the displaced logic.

What The Interviewer Is Testing

  • Understanding why uniform interval buffering clumps on a bus.
  • Can you describe the pattern options and the group format?
  • Knowing where staggering lives: ICC2, not PrimeTime.

Follow-up Question & Model Response

"When would you use -user_specified_distance instead of -distance and -repeat_after?"

Candidate Model Response: When the space beside the bus is not uniform, for example with a PG strap or a blockage crossing it at a known point, so a regular stagger would drop some buffers into blocked sites. A list of step distances lets me shape the pattern around it, as in the UG example with steps of 2, 3 and 2 before the pattern repeats. For an open area, a regular distance and repeat count is simpler to review.

Practical Example

Tapeout Scenario: A 32-bit routed bus, 1,800 um long, needs two buffer stages (illustrative). Interval buffering stacks 32 buffers in each of two columns and displaces 40 cells. With a pattern of distance 2 that repeats after 4 buffers, each stage becomes eight staggered groups of four. add_buffer_on_route (ICC2) places both stages with no displacement of existing cells, check_routes (ICC2) is clean after route_eco (ICC2), and PrimeTime shows the bit-to-bit spread at 7 ps.

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