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. I/O Constraint Audit

Part 2 · Constraints and SDC · All levels

I/O Constraint Audit

A checklist that finds ports with no delay, one-sided delays, wrong reference clocks and inconsistent min and max.

On this page

    Why it matters

    Boundary constraints are numerous, hand-written and rarely re-read, so errors accumulate. An audit that counts ports by category turns "did we constrain the I/O?" into a number that must be zero.

    The audit

    Check

    Problem it finds

    Input ports with no input delay

    Unconstrained input paths

    Output ports with no output delay

    Unconstrained output paths

    Ports with only -max (or only -min)

    One-sided: the other check is unconstrained

    Ports tied to an internal clock when the interface is external

    Wrong reference: port timing follows the internal waveform, gating and tree

    Min greater than max

    A typo; the analysis is meaningless

    Clock ports and static control ports

    Should be excluded or constrained as constants, not given data delays

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ports = {
        "din":  {"max": 4.0, "min": 1.0},
        "valid":{"max": 4.0},                 # missing min
        "cfg_data": {},                      # no constraint
        "dout": {"max": 3.0, "min": -0.5},
        "bad":  {"max": 1.0, "min": 2.0},     # min > max
    }
    unconstrained = [p for p, v in ports.items() if not v]
    one_sided = [p for p, v in ports.items() if v and ("max" not in v or "min" not in v)]
    inverted = [p for p, v in ports.items() if "max" in v and "min" in v and v["min"] > v["max"]]
    assert unconstrained == ["cfg_data"] and one_sided == ["valid"] and inverted == ["bad"]
    print("PASS: unconstrained", unconstrained, "one-sided", one_sided, "inverted", inverted)

    The audit finds three different problems in five ports. Each category has a different fix: add the missing constraint, supply the missing side, correct the typo. The goal is the whole list empty (or each entry explained), and the audit is rerun on every constraint change. A static control pin such as a mode select is covered by case analysis, not an input delay.

    What the review looks for

    • The audit counts are zero or each exception is signed off, with the audit output archived with the signoff package.

    • Constants (mode pins, test pins) are constrained as case analysis, not given arbitrary data delays.

    • Interfaces between blocks are audited from both sides together.

    Common pitfall

    Running the audit once, early. Port lists change with every RTL revision; an audit that is not part of the regression drifts out of date silently.

    Interview

    Mention the three audit counts (no delay, one-sided, inverted) as the first checks you run on any new constraint file.

    Check yourself A port shows input delay -max 0 and no -min. Why is that suspicious?

    A max of zero says data is launched at the clock edge with no external delay, which is rarely true, and with no -min the hold check from that port is unconstrained rather than checked against zero. Both look like defaults, not an interface specification.

    Related topics

    • Virtual Clocks

    Previous

    33 / 183

    Next: Exceptions & Audit Policy

    Up next

    Up nextExceptions & Audit Policy

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Input and Output Delay
    • Interface Budgets