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

  • Logic Synthesis Glossary
  • Logic Synthesis Cheatsheet
  • Synthesis Foundations14
  • Logic Optimisation and Mapping20
  • Constraints and Timing15
    • SDC for Synthesis
      • Clocks and Generated Clocks
      • Uncertainty, Latency and IO Delays
      • Driving Cells, Loads and Units
      • False, Multicycle and Max-Delay Paths
      • Missing and Over-Tight Constraints
    • Delay Models and Slack
    • Timing-Driven Synthesis
  • Sequential, FSM and Memory19
  • Datapath Synthesis14
  • Area, Power and Test14
  • Verification, ECO and Handoff15
  • Flows and Debugging15
  • Interview and Judgment11
Loading lesson

‹SDC for Synthesis
  1. Topics
  2. Logic Synthesis
  3. Constraints and Timing
  4. SDC for Synthesis
  5. Uncertainty, Latency and IO Delays

Part 3 · Constraints and Timing · Intermediate

Uncertainty, Latency and IO Delays

Clock uncertainty, latency, IO delays, and the available time they leave.

On this page

    Uncertainty and latency

    Clock uncertainty is an EXAMPLE margin, in nanoseconds, covering skew and jitter the tool should not try to use. Latency is the delay from the clock source to the flop clock pin, split into source and network parts at concept level.

    Uncertainty shrinks the usable period on every path. Latency shifts when the clock arrives; how each tool models the split varies, so state both numbers explicitly.

    Input and output delays

    An input delay states how much of the period the outside world consumes before the signal reaches the input port. An output delay states how much of the period the outside world needs after the signal leaves the output port.

    Both are EXAMPLE parameters in nanoseconds. The listing below sketches them in tool-neutral form.

    The listing below is illustrative tool-neutral SDC and is not run by any tool.

    Diagram
    illustrative SDC sketch (not run by any tool):
    set_input_delay -clock CLK 3.0 [get_ports req]
    set_output_delay -clock CLK 2.5 [get_ports ack]

    Available time

    Available time is the period minus what the outside world, uncertainty, and the capturing flop's setup time already take. For an input-to-register path the remainder before setup is the period minus the input delay minus uncertainty.

    For a register-to-output path it is the period minus the output delay minus uncertainty. The launching side contributes clock-to-Q plus combinational delay, which must fit inside the remainder minus the setup time.

    Diagram
    EXAMPLE parameters (not real targets): period 10.0 ns, input delay 3.0 ns, output delay 2.5 ns, uncertainty 0.5 ns, setup 0.5 ns
    full equation: combinational budget = period - IO delay - uncertainty - setup
    input-to-register: remainder before setup = 10.0 - 3.0 - 0.5 = 6.5 ns; budget = 6.5 - 0.5 = 6.0 ns
    register-to-output: remainder before setup = 10.0 - 2.5 - 0.5 = 7.0 ns; budget = 7.0 - 0.5 = 6.5 ns

    A worked model

    The program below repeats the subtraction in integer picoseconds, so the arithmetic is exact. Its six self-checks pin both remainders, both budgets, and their sums back to the period.

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    import sys
    
    PERIOD_PS = 10000
    IN_DELAY_PS = 3000
    OUT_DELAY_PS = 2500
    UNC_PS = 500
    SETUP_PS = 500
    
    def remainder(delay_ps):
        return PERIOD_PS - delay_ps - UNC_PS
    
    def budget(delay_ps):
        return remainder(delay_ps) - SETUP_PS
    
    in2reg_rem = remainder(IN_DELAY_PS)
    reg2out_rem = remainder(OUT_DELAY_PS)
    in2reg = budget(IN_DELAY_PS)
    reg2out = budget(OUT_DELAY_PS)
    
    if in2reg_rem != 6500:
        print("FAIL: in2reg remainder got " + str(in2reg_rem) + " want 6500")
        sys.exit(1)
    if reg2out_rem != 7000:
        print("FAIL: reg2out remainder got " + str(reg2out_rem) + " want 7000")
        sys.exit(1)
    if in2reg != 6000:
        print("FAIL: in2reg budget got " + str(in2reg) + " want 6000")
        sys.exit(1)
    if reg2out != 6500:
        print("FAIL: reg2out budget got " + str(reg2out) + " want 6500")
        sys.exit(1)
    if in2reg + IN_DELAY_PS + UNC_PS + SETUP_PS != PERIOD_PS:
        print("FAIL: in2reg parts do not sum to period")
        sys.exit(1)
    if reg2out + OUT_DELAY_PS + UNC_PS + SETUP_PS != PERIOD_PS:
        print("FAIL: reg2out parts do not sum to period")
        sys.exit(1)
    
    print("PASS: combinational budgets 6.0 ns in and 6.5 ns out of a 10.0 ns period")

    Path

    Combinational budget

    Meaning

    Input to register

    6.0 ns

    Remainder 6.5 ns before setup; budget 6.5 minus setup 0.5.

    Register to output

    6.5 ns

    Remainder 7.0 ns before setup; budget 7.0 minus setup 0.5.

    Common pitfall

    A zero input delay does not mean a fast external path; it means no budget was reserved for the outside world. Missing IO delays overstate the available time by the full external delay.

    Interview

    Likely probes: deriving available time, and what uncertainty covers.

    • Available time is the period minus the IO delay, uncertainty, and the capturing flop's setup time.

    • Uncertainty covers skew and jitter margin; latency shifts clock arrival.

    • The worked budgets are 6.0 ns into the flop and 6.5 ns out of it, from remainders of 6.5 and 7.0 ns.

    Check yourself The period is 10.0 ns, the input delay is 3.0 ns, uncertainty is 0.5 ns, and EXAMPLE setup is 0.5 ns. What is the remainder before setup, and the combinational budget?

    The remainder is 10.0 minus 3.0 minus 0.5, which is 6.5 ns. The budget is 6.5 minus 0.5, which is 6.0 ns.

    Check yourself The output delay is 2.5 ns with the same period, uncertainty, and setup. What is the remainder before setup, and the budget?

    The remainder is 10.0 minus 2.5 minus 0.5, which is 7.0 ns. The budget is 7.0 minus 0.5, which is 6.5 ns.

    Related topics

    • Driving Cells, Loads and Units

    • Delay Models and Slack

    • See also: Skew and Variation

    Previous

    38 / 139

    Next: Driving Cells, Loads and Units

    Up next

    Up nextDriving Cells, Loads and Units

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • False, Multicycle and Max-Delay Paths
    • Missing and Over-Tight Constraints