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
    • Graph Traversal & Slack
      • Arrival and Required Times
      • Forward and Backward Propagation
      • Slack Worked Example
      • A Tiny Timing Engine
    • Cell vs Net Delay Budgets
    • Path Group Prioritization
    • Report Timing Deep Read
  • Beyond Setup and Hold16
  • Multi-Corner Multi-Mode Signoff16
  • OCV, AOCV, POCV and Variation16
  • Crosstalk and Noise16
  • ECO and Closure16
  • STA Debug Playbook16
  • STA Interview Prep26
  • Capstone Timing Signoff Lab4
Loading lesson

‹Graph Traversal & Slack
  1. Topics
  2. Static Timing Analysis
  3. Delay Graph & Path Analysis
  4. Graph Traversal & Slack
  5. Forward and Backward Propagation

Part 3 · Delay Graph and Path Analysis · All levels

Forward and Backward Propagation

Propagating in topological order visits every node and edge once, so STA scales linearly with design size, not with the number of paths.

On this page

    Why it matters

    The number of distinct paths in a design is astronomically large, far beyond enumeration. STA can still report the worst of them because it never lists paths: it propagates times node by node. Understanding that is what lets you reason about runtime, incremental analysis and why a small ECO re-times only part of the design.

    Paths explode, traversal does not

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # A chain of k diamonds (two parallel routes per stage): paths double per stage, edges grow linearly.
    def stats(k):
        paths, edges = 1, 0
        for _ in range(k):
            paths *= 2          # two routes through each diamond
            edges += 4          # in->a, in->b, a->out, b->out
        return paths, edges
    for k in (1, 10, 20):
        p, e = stats(k)
        print(f"k={k:2d}: paths={p:>9,}  edges visited per pass={e}")
    p20, e20 = stats(20)
    assert p20 == 1_048_576 and e20 == 80
    assert stats(10) == (1024, 40)
    print("PASS: 20 diamonds have", p20, "paths but a pass touches only", e20, "edges")

    Twenty simple diamonds already give over a million paths, while one propagation pass touches 80 edges. Real blocks have millions of nodes and unimaginably many paths; the cost of STA tracks nodes plus edges. Path-based reports (the top-N worst paths) are generated from the propagated data by backtracking from the worst endpoints, not by searching all paths. Backtracking along the worst predecessor at each node recovers only the single worst path per endpoint; further paths come from enumerating near-worst deviations (k-best path enumeration).

    Incremental analysis

    Change

    What must be recomputed

    Resize one cell

    Arrival times in its fanout cone; required times in its fanin cone; the slews it changes

    Add a buffer

    The same cones, plus the net it splits

    Change a constraint

    Potentially everything it touches (a clock change touches all its flops)

    Change a parasitic

    The net and the stages around it

    What the review looks for

    • Runtime growth is roughly linear with size; an unexplained jump points to a constraint or a loop problem.

    • Incremental results are validated by a periodic full re-time, since incremental updates can drift.

    • Path-based analysis (more accurate, slower) is used on the worst endpoints for final signoff, graph-based for everyday runs.

    Common pitfall

    Assuming incremental updates are exact for everything. Coupling and CRPR effects reach beyond the changed cone. Always confirm closure with a full run.

    Interview

    Give the example numbers: 20 diamonds, a million paths, 80 edge visits. It shows exactly why STA scales.

    Check yourself Why can STA report the 100 worst paths without enumerating all paths?

    The forward and backward propagations produce arrival, required and slack at every node. The worst endpoints are known from them, and the single worst path to each of those endpoints is recovered by backtracking along the worst predecessor at each node; further paths come from enumerating near-worst deviations (k-best path enumeration).

    Related topics

    • Arrival and Required Times

    • Next: Slack Worked Example

    Previous

    43 / 183

    Next: Slack Worked Example

    Up next

    Up nextSlack Worked Example

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • A Tiny Timing Engine