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
      • Input and Output Delay
      • Interface Budgets
      • Virtual Clocks
      • I/O Constraint Audit
    • Exceptions & Audit Policy
    • 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

‹I/O Timing & Boundary Contracts
  1. Topics
  2. Static Timing Analysis
  3. Constraints & SDC Fundamentals
  4. I/O Timing & Boundary Contracts
  5. Interface Budgets

Part 2 · Constraints and SDC · All levels

Interface Budgets

A period is split between the outside world and the block; budgeting it up front prevents integration surprises.

On this page

    Why it matters

    When two blocks exchange data every cycle, their combined delay must fit in one period. If each assumes the other is fast, the total can exceed the period. Budgeting assigns each side a share before implementation, and the boundary delays are then derived from the shares.

    A budget table

    Component

    Delay (ns, illustrative)

    Owner

    Block A clock-to-Q

    0.45

    Block A

    Block A output logic

    1.20

    Block A

    Top-level routing

    1.40

    Top

    Block B input logic

    1.60

    Block B

    Block B setup

    0.15

    Block B

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    T = 5.0
    parts = {"A cq": 0.45, "A logic": 1.20, "route": 1.40, "B logic": 1.60, "B setup": 0.15}
    total = sum(parts.values())
    slack = T - total
    assert abs(total - 4.80) < 1e-9 and abs(slack - 0.20) < 1e-9
    # Derived constraints: A's output delay (everything after A's logic) and B's input delay (everything before B's logic)
    a_output_delay = parts["route"] + parts["B logic"] + parts["B setup"]    # 3.15
    b_input_delay = parts["A cq"] + parts["A logic"] + parts["route"]        # 3.05
    assert abs(a_output_delay - 3.15) < 1e-9 and abs(b_input_delay - 3.05) < 1e-9
    print("PASS: total", round(total, 2), "slack", round(slack, 2), "A output delay", a_output_delay, "B input delay", b_input_delay)

    The sum is 4.80 ns against a 5.0 ns period: 0.20 ns of margin. From the table, block A is told its output delay is 3.15 ns (the rest of the path after A's logic) and block B its input delay is 3.05 ns (everything before B's logic). The two constraints are not the same number because they exclude each side's own logic. Budgets that skip this and give each side the full period guarantee a failure at integration.

    What the review looks for

    • Both ends of every top-level interface carry matching budgets that sum to less than the period with explicit margin.

    • Budgets are revised when implementation reveals a cost that differs from the assumption, and both sides are updated together.

    • The budget table is a signoff artifact, versioned with the constraints.

    Common pitfall

    Giving every block 50% of the period "to be fair". Interface delays differ by distance and logic; a flat split wastes margin on short interfaces and fails long ones.

    Interview

    Walk a two-block example in 30 seconds: list the delay components, sum them, and derive each block's input and output delay.

    Check yourself Why must A's output delay and B's input delay differ in the example?

    Each excludes its own logic: A's output delay covers everything after A's logic (route, B logic, B setup) and B's input delay covers everything before B's logic (A's clock-to-Q, A logic, route). They share the route but each leaves out its own side.

    Related topics

    • Input and Output Delay

    • Next: Virtual Clocks

    Previous

    31 / 183

    Next: Virtual Clocks

    Up next

    Up nextVirtual Clocks

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • I/O Constraint Audit