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

  • How to Use This Course
  • Reading Path
  • STA Glossary
  • STA Metrics Reference
  • STA Mastery Cheatsheet
  • Timing Paths and Checks16
  • Constraints & SDC Fundamentals20
  • Delay Graph & Path Analysis16
  • Beyond Setup and Hold16
  • Multi-Corner Multi-Mode Signoff16
  • OCV, AOCV, POCV and Variation16
  • Crosstalk and Noise16
  • ECO and Closure16
    • Setup and Hold Closure Order
    • Physical vs Logical ECOs
      • Cell Swaps and Sizing
      • Buffering and Layers
      • Logical Changes
      • ECO Risk Ladder
    • Useful Skew Trade-offs
    • ECO Regression Matrix
  • STA Debug Playbook16
  • STA Interview Prep26
  • Capstone Timing Signoff Lab4
Loading lesson

‹Physical vs Logical ECOs
  1. Topics
  2. Static Timing Analysis
  3. ECO and Closure
  4. Physical vs Logical ECOs
  5. ECO Risk Ladder

Part 8 · ECO and Closure · All levels

ECO Risk Ladder

Order ECO types by how much they disturb; each rung forces every check of the rung below plus more, except a pure clock change, which builds on rerouting with clock checks instead of equivalence.

On this page

    Why it matters

    The risk of an ECO is how much it can break, and therefore how much must be re-verified. Putting the types in a ladder lets you pick the lowest rung that closes the problem and plan the verification up front.

    The ladder

    Rung

    Change

    Must rerun

    1

    Footprint-compatible cell swap

    Timing and SI on affected nets, power

    2

    Resize with placement legalisation

    Rung 1 plus design rules and parasitic re-extraction (legalisation moves cells)

    3

    Buffer insertion

    Rung 2 plus connectivity checks (new instances and new routes)

    4

    Rerouting or layer change

    Rung 3 plus full SI and routing checks

    5

    Logic restructuring

    Rung 4 plus equivalence checking

    6

    Clock tree or skew change

    Rung 4 plus clock checks and full timing across all corners (equivalence only if logic also changed)

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    ladder = [
        ("cell swap",           {"timing", "si_local", "power"}),
        ("resize",              {"timing", "si_local", "power", "drc", "extraction"}),
        ("buffer insertion",    {"timing", "si_local", "power", "drc", "extraction", "lvs"}),
        ("reroute or layer",    {"timing", "si_local", "power", "drc", "extraction", "lvs", "si_full"}),
        ("logic restructuring", {"timing", "si_local", "power", "drc", "extraction", "lvs", "si_full", "equivalence"}),
    ]
    reroute_checks = dict(ladder)["reroute or layer"]
    clock_checks = reroute_checks | {"clock_corners"}
    sizes = [len(s) for _, s in ladder] + [len(clock_checks)]
    assert sizes == [3, 5, 6, 7, 8, 8]
    assert all(ladder[i][1] <= ladder[i + 1][1] for i in range(len(ladder) - 1))      # each rung includes all checks below it
    assert reroute_checks <= clock_checks                                           # a clock change builds on rerouting
    assert "equivalence" not in clock_checks                                        # no equivalence unless logic changed
    extra = {ladder[i + 1][0]: sorted(ladder[i + 1][1] - ladder[i][1]) for i in range(len(ladder) - 1)}
    assert extra["resize"] == ["drc", "extraction"] and extra["buffer insertion"] == ["lvs"]
    assert extra["logic restructuring"] == ["equivalence"] and extra["reroute or layer"] == ["si_full"]
    assert sorted(clock_checks - reroute_checks) == ["clock_corners"]
    print("PASS: checks per rung", dict(zip([n for n, _ in ladder] + ["clock or skew"], sizes)))

    Each rung's check set contains the previous one's, growing from 3 checks for a swap to 8 for a logic change. Buffer insertion creates a new instance and new routes, so connectivity checks and extraction apply from that rung; resizing with legalisation moves cells and needs re-extraction a rung earlier. A clock or skew change builds on rerouting with clock checks and full timing across all corners, not equivalence, unless logic changed too. That is why the first question on any ECO is whether a lower rung will do. The table lists categories only; each flow has its own detailed list.

    What the review looks for

    • Each ECO states its rung and has the matching verification plan before it starts.

    • Skipping a check for a rung needs an explicit reason signed by the owner.

    • ECOs that cross several rungs are split where possible so the cheap ones are verified early.

    Common pitfall

    Treating all ECOs as equal. A routing change verified like a cell swap leaves SI and connectivity unchecked.

    Interview

    Place five ECO types on a ladder and say which extra check each adds.

    Check yourself Which extra check does moving from buffer insertion to rerouting add?

    Full SI and routing checks: connectivity checks and re-extraction already apply from buffer insertion, so rerouting adds the full-SI scope, because routes change and coupling moves.

    Related topics

    • Logical Changes

    Previous

    129 / 183

    Next: Useful Skew Trade-offs

    Up next

    Up nextUseful Skew Trade-offs

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Cell Swaps and Sizing
    • Buffering and Layers