Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • RTL Foundations36
  • Combinational Design25
  • Sequential Design27
  • FSM & Control27
  • Timing & Clocking39
  • Reset & CDC34
  • Memory & Buses57
  • Advanced RTL28
  • Senior & Interview76
    • Low-Power RTL Hub
    • DFT and Scan Hub
    • Physical Awareness Hub
    • Waveform Debug Hub
    • STA and ECO Hub
      • The timing-closure loop in practice
      • ECO levers: sizing and buffering
      • When an RTL change is the right call
      • Senior closure checklist
    • RTL-to-Implementation Closure
    • DFT-Ready RTL
    • Capstone: Resilient Streaming Peripheral
    • Principal Design Review
    • Senior RTL Interview Questions & Model Answers
  • Glossary and Notation
Loading lesson

‹STA and ECO Hub
  1. Topics
  2. RTL Design
  3. Senior & Interview
  4. STA and ECO Hub
  5. ECO levers: sizing and buffering

Part 9 · Senior · Senior

ECO levers: sizing and buffering

Gate-level ECO levers for setup and hold: sizing, buffering, cloning, and skew.

On this page

    Why this matters

    A setup ECO can open a hold violation, and a hold fix spends setup margin. Gate-level levers keep the existing regression valid, but each one has a price.

    After this lesson you can: rank setup and hold levers by disruption, say what each one costs, and re-verify both checks after every change.

    Gate level first

    Most late-stage fixes happen at gate level first. They are localized and less disruptive than RTL changes.

    A gate ECO swaps cells or adds buffers without touching RTL. Function is unchanged, so the existing regression stays valid.

    Setup levers

    Setup ECOs cut maximum delay along the complete failing path. An arc contributes regardless of its distance from capture. Rank candidates by cell/net delay sensitivity, input slew, output load and shared fanout; an early driver can dominate several later delays. Re-evaluate setup and hold on all affected branches after each change.

    Lever

    What it does

    Price

    Resize report-selected cells

    Can reduce total path delay where slew/load sensitivity warrants it

    Area/power and changed load on preceding/shared arcs

    Insert repeater buffers

    Cuts slew on long nets

    Extra cells and load elsewhere

    Clone high-fanout drivers

    Cuts load per driver

    Duplicated logic

    Hold levers

    Hold ECOs add minimum delay on paths that are too fast. They spend setup margin, so each one re-verifies setup too.

    Lever

    What it does

    Price

    Add delay buffers

    Raises minimum delay on short paths

    Area; consumes setup margin

    Downsize launch-side cells

    Slows the fast path

    Hurts setup on shared arcs

    Advance capture with useful skew

    Reduces positive capture-minus-launch skew, helping hold

    Consumes setup margin; affects neighbouring paths; needs sign-off

    For skew defined as capture arrival minus launch arrival, advancing capture helps hold at the cost of setup; delaying capture helps setup at the cost of hold. Clock changes affect other paths too, so useful skew needs flow support and re-verification across every required view.

    The same launch clock against a capture clock moved earlier and later. Edge 0 sets the hold check and edge 1 sets the setup check, so every move helps one and hurts the other.

    Read each capture row against the dashed launch edges. The left edge is the hold check; the right edge is the setup check one period later.

    • Advanced capture: the setup edge comes sooner, so the data has less time; the hold edge comes sooner, so new data is less likely to overrun it.

    • Delayed capture: the reverse. Setup gains time, hold loses margin.

    • Both edges move together, which is why a skew ECO always re-checks the other check on every affected path.

    Common mistakes

    Common pitfall

    Closing setup can open hold when minimum data delay shrinks or capture skew increases. Adding data delay for hold can instead consume setup margin. Sign off on both checks after each ECO.

    Interview

    “List the setup levers in order of disruption.”

    • Upsizing and repeaters first: local, easy to revert.

    • Cloning next: structural but still gate-level.

    • Useful skew after that: needs timing sign-off.

    • An RTL cut last: changes latency and verification.

    Check yourself A setup path fails by a small margin on a long net between two blocks. Which lever fits?

    Use extracted RC, input slew, driver resistance and loads to compare placed repeaters, sizing and branch cloning. Upsizing may help driver resistance but cannot remove distributed wire RC; an unnecessary buffer may make the path slower.

    Check yourself A hold fix adds buffers to a short path that also feeds a setup-critical endpoint. What must be re-checked?

    Setup on that endpoint. Delay that fixes hold consumes setup margin, so both close together.

    Testbench

    The repeated reductions below are a functional illustration; a checker enumerates all 256 binary inputs. Synthesis may merge every identical term. Implemented cloning requires the flow's synthesis/physical cloning command or reviewed preservation controls and placement. Inspect distinct mapped drivers, fanout per driver and routed timing before claiming load reduction or a timing gain.

    fanout_src.sv
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    `timescale 1ns/1ps
    module fanout_src (
      input  logic [7:0] d,
      output logic       y0, y1, y2, y3
    );
      logic shared;
      assign shared = &d;                   // one term driving four loads
      assign y0 = shared;
      assign y1 = shared;
      assign y2 = shared;
      assign y3 = shared;
    endmodule
    
    module fanout_clone (
      input  logic [7:0] d,
      output logic       y0, y1, y2, y3
    );
      assign y0 = &d;                       // repeated expression; physical cloning is not implied
      assign y1 = &d;
      assign y2 = &d;
      assign y3 = &d;
    endmodule
    
    module tb_fanout;
      initial begin
        #100000;
        $fatal(1, "FAIL: bounded bench watchdog expired");
      end
      logic [7:0] d = 0;
      logic y0s, y1s, y2s, y3s, y0c, y1c, y2c, y3c;
      logic exp;
      int errors = 0;
      fanout_src s (.d(d), .y0(y0s), .y1(y1s), .y2(y2s), .y3(y3s));
      fanout_clone k (.d(d), .y0(y0c), .y1(y1c), .y2(y2c), .y3(y3c));
      initial begin
        for (int vv = 0; vv < 256; vv++) begin
          d = vv[7:0]; #1;
          exp = &d;
          if (y0s !== exp || y1s !== exp || y2s !== exp || y3s !== exp) errors++;
          if (y0c !== exp || y1c !== exp || y2c !== exp || y3c !== exp) errors++;
        end
        if (errors == 0) $display("PASS: shared and cloned drivers agree on all 256 input values");
        else $fatal(1, "FAIL: %0d errors", errors);
        $finish;
      end
    endmodule

    Remember

    • Most late fixes are gate level: swap cells, add buffers or repeaters, clone drivers; the function is unchanged.

    • Hold ECOs add minimum delay and spend setup margin; advancing capture helps hold at the cost of setup.

    • Useful skew needs flow support and re-verification in every required view.

    Rule of thumb: sign off setup and hold after every ECO.

    How this was checked

    Functional illustration of repeated reductions, run with Icarus Verilog 13.0 (2026-10-16): prints PASS. The checker enumerates all 256 binary inputs. It does not show mapped cloning or any timing gain.

    Keep going

    • Interview: run a mock interview on this topic

    Related topics

    • The timing-closure loop in practice

    • When an RTL change is the right call

    Previous

    292 / 350

    Next: When an RTL change is the right call

    Up next

    Up nextWhen an RTL change is the right call

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Senior closure checklist