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
    • Corner and Mode Matrix Design
    • Library Sets and Operating Conditions
    • Signoff vs Implementation Views
    • MMMC Debug Playbook
      • Symptoms to Views
      • Per-View Triage
      • Scenario Bisect
      • Reporting by View
  • OCV, AOCV, POCV and Variation16
  • Crosstalk and Noise16
  • ECO and Closure16
  • STA Debug Playbook16
  • STA Interview Prep26
  • Capstone Timing Signoff Lab4
Loading lesson

‹MMMC Debug Playbook
  1. Topics
  2. Static Timing Analysis
  3. Multi-Corner Multi-Mode Signoff
  4. MMMC Debug Playbook
  5. Scenario Bisect

Part 5 · Multi-Corner Multi-Mode · All levels

Scenario Bisect

When two runs disagree, bisect the list of changes between them: half the changes at a time find the culprit in about log2(n) runs.

On this page

    Why it matters

    Between yesterday's good run and today's bad one dozens of things changed: constraints, libraries, netlist, parasitics, scripts. Testing them one at a time costs n runs. Bisecting the ordered list costs about log2 n runs, which for 32 changes is five.

    The method

    Step

    Action

    1

    List the changes between the good and bad runs in the order they were applied

    2

    Apply the first half to the good run and re-run

    3

    If it fails, the culprit is in the first half; otherwise in the second; repeat on that half

    4

    When one change remains, confirm by reverting only it from the bad run

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    changes = [f"change_{i:02d}" for i in range(32)]
    culprit = "change_21"
    runs = 0
    def fails_with(applied):
        global runs
        runs += 1
        return culprit in applied          # stands for a full re-run that either shows the failure or not
    lo, hi = 0, len(changes)               # culprit is in changes[lo:hi]
    while hi - lo > 1:
        mid = (lo + hi) // 2
        if fails_with(changes[:mid]):      # applying only the first mid changes already fails
            hi = mid
        else:
            lo = mid
    assert changes[lo] == culprit
    assert runs == 5
    print("PASS: found", changes[lo], "in", runs, "runs out of", len(changes), "changes")

    The loop finds change_21 among 32 changes in five re-runs. The toy 'run' is a membership test; in practice each run is a complete timing run, so five runs instead of up to 32 is a large saving. The method assumes a single culprit; when two changes interact, bisection finds the first one that is sufficient to fail, and the second shows up after reverting it.

    What the review looks for

    • Runs are reproducible: the same inputs give the same numbers, otherwise bisection chases noise.

    • The change list is complete and ordered, including tool and script versions.

    • The final confirmation reverts the suspected change on the bad run and shows the failure disappears.

    Common pitfall

    Bisecting without checking reproducibility. If two runs of the same inputs differ, the first step is to remove that non-determinism.

    Interview

    Mention bisection by name and give the log2 n count.

    Check yourself How many runs does bisection need for 100 changes?

    About 7 (log2 100 is between 6 and 7), compared with up to 100 for one-at-a-time testing.

    Related topics

    • Per-View Triage

    • Next: Reporting by View

    Previous

    88 / 183

    Next: Reporting by View

    Up next

    Up nextReporting by View

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Symptoms to Views