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
    • Useful Skew Trade-offs
    • ECO Regression Matrix
      • What to Rerun
      • Regression Matrix Design
      • Avoiding Fix Breaks Fix
      • Closure Dashboards
  • STA Debug Playbook16
  • STA Interview Prep26
  • Capstone Timing Signoff Lab4
Loading lesson

‹ECO Regression Matrix
  1. Topics
  2. Static Timing Analysis
  3. ECO and Closure
  4. ECO Regression Matrix
  5. Regression Matrix Design

Part 8 · ECO and Closure · All levels

Regression Matrix Design

A fast set of scenarios chosen by endpoint ownership covers most of the risk at a fraction of the cost; the rest is caught by the scheduled full run.

On this page

    Why it matters

    The scenario matrix is large. Most endpoints are limited by a few scenarios, which is the dominant-corner idea applied to regression. A fast loop runs only those and tells you in minutes whether a batch helped; the full matrix runs overnight and checks the rest.

    Worked example

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    owned = {"s1": 420, "s2": 310, "s3": 180, "s4": 40, "s5": 25, "s6": 15, "s7": 6, "s8": 4}     # endpoints whose worst slack is in each scenario
    total = sum(owned.values())
    assert total == 1000
    order = sorted(owned, key=lambda s: -owned[s])
    coverage = {}
    running = 0
    for i, s in enumerate(order, start=1):
        running += owned[s]
        coverage[i] = running / total
    assert [round(coverage[i], 3) for i in (1, 2, 3, 4)] == [0.42, 0.73, 0.91, 0.95]
    fast_set = order[:3]
    assert fast_set == ["s1", "s2", "s3"]
    uncovered = total - sum(owned[s] for s in fast_set)
    assert uncovered == 90
    print("PASS: fast set", fast_set, "covers", round(100 * coverage[3], 1), "% of owned endpoints; uncovered", uncovered)

    Scenarios in the fast set

    Endpoints covered

    Coverage

    1 (s1)

    420

    42%

    2 (s1, s2)

    730

    73%

    3 (s1 to s3)

    910

    91%

    4 (s1 to s4)

    950

    95%

    Three of eight scenarios own 910 of 1000 endpoints, so a fast loop of three scenarios covers 91% of endpoints by worst-slack ownership. The remaining 90 endpoints are owned by five other scenarios and are seen only in the full run. Coverage grows slowly after the third scenario, which is why the fast set stops there. Ownership changes as fixes land (a fixed scenario hands its endpoints to the next worst), so the table is refreshed regularly.

    Two loops

    Loop

    Scenarios

    When

    Purpose

    Fast

    The top few by ownership

    After every batch

    Quick feedback on progress

    Full

    The whole signoff matrix

    Nightly or on every milestone

    Catches the endpoints the fast set does not own

    What the review looks for

    • The fast set is derived from current ownership data and re-derived after large changes.

    • The uncovered fraction is stated, so nobody mistakes a fast result for a signoff one.

    • Failures that appear only in the full run are analysed: they show where the fast set is blind.

    Common pitfall

    Declaring a batch good because the fast loop passed. Nine percent of endpoints were not examined.

    Interview

    Describe the two-loop structure and quote the coverage you would aim for.

    Check yourself What is the coverage of the two-scenario fast set, and what is not covered?

    73%: the 270 endpoints owned by s3 to s8 are not seen until the full run.

    Related topics

    • What to Rerun

    • Dominant Corner Analysis

    • Next: Avoiding Fix Breaks Fix

    Previous

    135 / 183

    Next: Avoiding Fix Breaks Fix

    Up next

    Up nextAvoiding Fix Breaks Fix

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Closure Dashboards