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
      • create_clock Rules
      • Waveform and Edge Cases
      • Uncertainty and Jitter
      • Source Versus Network Latency
    • Generated Clocks & Dividers
    • I/O Timing & Boundary Contracts
    • 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

‹Clock Definition & Uncertainty
  1. Topics
  2. Static Timing Analysis
  3. Constraints & SDC Fundamentals
  4. Clock Definition & Uncertainty
  5. create_clock Rules

Part 2 · Constraints and SDC · All levels

create_clock Rules

create_clock defines a clock's period and waveform at a port or pin, and every clock pin the signal reaches becomes a clocked pin.

On this page

    Why it matters

    A timing run is only as meaningful as its clocks. A missing clock leaves flops unconstrained. A clock defined at the wrong point times the wrong network. A clock defined twice on the same net can double-count checks. Getting create_clock right is the base of everything.

    The command and what it means

    Diagram
    # not-run: SDC is not executable here
    create_clock -name sys_clk -period 2.0 [get_ports clk_in]
    # period 2.0 ns, default waveform {0 1.0}: rise at 0, fall at half period

    Part

    Meaning

    Common mistake

    -name

    A name used to refer to the clock in other constraints

    Omitting it on a pin-defined clock, which then takes the pin name

    -period

    The clock period in the library time unit (check the unit)

    Mixing ns and ps

    Source object (port or pin)

    Where the clock enters the analysis; it propagates from there through buffers, inverters and combinational gates

    Defining on a pin after a divider without a generated clock definition

    -waveform {rise fall}

    Edge times within one period (default is a 50% duty cycle starting at 0)

    Forgetting an offset or duty cycle in a non-standard clock

    What the clock reaches

    • The clock propagates forward through combinational cells (buffers, inverters, gates) and through wires to the clock pins of sequential cells.

    • It does not propagate through a flop's clock-to-Q arc. A flop output that clocks other flops needs a generated clock definition.

    • A sequential cell's clock pin is a clocked pin only if some clock reaches it; the report lists pins with no clock.

    example.py
    1
    2
    3
    4
    5
    6
    7
    # Period and frequency sanity: the unit trap.
    period_ns = 2.0
    freq_mhz = 1000.0 / period_ns
    assert freq_mhz == 500.0
    # if the library time unit is ps, "-period 2.0" would mean 2 ps (500 GHz): a typo-scale error
    assert 1e6 / 2.0 == 500000.0   # MHz for a 2 ps period
    print("PASS: 2.0 ns = 500 MHz; the same number in ps would be 500000 MHz")

    The check shows how a unit mix-up changes the frequency by a factor of a thousand while still looking like a valid constraint. Always confirm the time unit in the library or with a unit command before trusting a period.

    Common pitfall

    Defining the same clock on both a port and an internal pin of the same net. The tool may treat them as two clocks, with checks between them. Define one clock at its true source and let it propagate.

    Interview

    Interviewers like "what does create_clock not do?". It does not add delay, does not define latency (a separate command), and does not make a flop output a clock.

    Check yourself A flop divides the clock by 2 and its output drives 200 flops. Is create_clock on the original port enough?

    No. The clock does not propagate through the divider flop's clock-to-Q arc, so those 200 flops have no clock. The divider output needs a create_generated_clock definition.

    Related topics

    • Next: Waveform and Edge Cases

    • RTL: Clock Architecture

    Previous

    22 / 183

    Next: Waveform and Edge Cases

    Up next

    Up nextWaveform and Edge Cases

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Uncertainty and Jitter
    • Source Versus Network Latency