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
    • Clock Definition & Uncertainty
    • Generated Clocks & Dividers
    • I/O Timing & Boundary Contracts
    • Exceptions & Audit Policy
      • False Paths
      • Multicycle Paths
      • Min and Max Delay Exceptions
      • Exception Audit
    • Environment and Design Rules
  • Delay Graph & Path Analysis16
  • 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

‹Exceptions & Audit Policy
  1. Topics
  2. Static Timing Analysis
  3. Constraints & SDC Fundamentals
  4. Exceptions & Audit Policy
  5. Min and Max Delay Exceptions

Part 2 · Constraints and SDC · All levels

Min and Max Delay Exceptions

set_max_delay and set_min_delay replace the clock-derived requirement of a path with an explicit delay limit.

On this page

    Why it matters

    Sometimes no clock relationship describes a path's requirement, for example a crossing between unrelated clocks where you want a bounded delay without a full check. set_max_delay and set_min_delay set a direct limit on the path delay. They override the default requirement, so they must be precise.

    Forms and meaning

    Diagram
    # not-run: SDC is not executable here
    set_max_delay 2.5 -from [get_pins a_reg/CK] -to [get_pins sync1/D]                  ;# arrival must be <= 2.5 ns
    set_max_delay 2.5 -ignore_clock_latency -from [get_clocks clk_a] -to [get_clocks clk_b]    ;# ignore clock latencies and skew
    set_min_delay 0.2 -from [get_pins a_reg/CK] -to [get_pins b_reg/D]                  ;# arrival must be >= 0.2 ns

    set_max_delay

    set_min_delay

    Replaces

    The setup requirement of the covered paths

    The hold requirement of the covered paths

    Checks

    Data path delay (launch clock to endpoint arrival) against the number

    The same delay against a lower bound

    -ignore_clock_latency

    Excludes clock latency so only the data path counts (clock latency is excluded only with that standard option)

    n/a in the same way; used with care

    Typical use

    Bounded delay on crossings and bus skew control

    Guarantee a minimum delay

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Bounded-delay check: path delays on a bus must stay within the limit
    # the 0.7 ns spread below is observed, not guaranteed: a max-only bound limits skew to (bound - minimum delay)
    limit = 2.5
    bus_delays = {"d0": 1.9, "d1": 2.2, "d2": 2.6, "d3": 2.4}
    violations = {k: round(v - limit, 2) for k, v in bus_delays.items() if v > limit}
    assert violations == {"d2": 0.1}
    spread = max(bus_delays.values()) - min(bus_delays.values())
    assert abs(spread - 0.7) < 1e-9
    print("PASS: violations", violations, "skew spread", round(spread, 2), "ns")

    One bit exceeds the limit by 0.10 ns and the observed bus delay spread is 0.7 ns. For crossings such as Gray-coded pointers, a max-only bound on every bit limits the skew to (bound - minimum delay); a skew requirement needs a minimum bound too, or a bound tight relative to the destination period. The CDC course explains the protocol side.

    What the review looks for

    • Each max/min delay value is derived (a skew budget, a protocol requirement), not tuned to pass.

    • -ignore_clock_latency is used deliberately: it ignores clock latency, so check what that omits.

    • Exceptions order is understood: a false path overrides a delay exception on the same path; multicycle exceptions do not combine with a delay limit the way you might expect.

    Common pitfall

    Using set_max_delay as a softer false path. A large max delay on an unrelated crossing removes the one-cycle requirement but keeps a number nobody validated; either bound it with a derived value or remove the check with a justified false path plus CDC proof.

    Interview

    Contrast set_false_path (no check), set_multicycle_path (a shifted edge) and set_max_delay (an explicit delay bound), and say which is used to control skew across a crossing.

    Check yourself Why would you add -ignore_clock_latency to a max delay on a crossing between asynchronous clocks?

    Because the clocks are unrelated, their latencies and skew are meaningless for the bound. -ignore_clock_latency checks the data path delay alone against the number.

    Related topics

    • Multicycle Paths

    • Next: Exception Audit

    • CDC: Bounded Delay Constraints

    Previous

    36 / 183

    Next: Exception Audit

    Up next

    Up nextException Audit

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • False Paths