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
      • create_generated_clock
      • Dividers and Gated Clocks
      • Clock Muxes and Case Analysis
      • Verifying Clock Propagation
    • 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

‹Generated Clocks & Dividers
  1. Topics
  2. Static Timing Analysis
  3. Constraints & SDC Fundamentals
  4. Generated Clocks & Dividers
  5. create_generated_clock

Part 2 · Constraints and SDC · All levels

create_generated_clock

A generated clock names a derived waveform on a pin and ties it to its master clock by division, multiplication or edge selection.

On this page

    Why it matters

    A divider flop's output drives clock pins, but STA does not propagate the master clock through the flop. create_generated_clock tells the tool where the new clock appears and how it relates to its master. With it, the downstream flops are clocked, the relationship between master and derived clocks is known, and the delay through the divider counts as clock latency.

    Forms

    Diagram
    # not-run: SDC is not executable here
    create_generated_clock -name clk_div2 -source [get_ports clk] -divide_by 2 [get_pins div_reg/Q]
    create_generated_clock -name clk_x2   -source [get_ports clk] -multiply_by 2 [get_pins pll_out]
    create_generated_clock -name clk_div4 -source [get_ports clk] -edges {1 5 9} [get_pins div4_reg/Q]
    create_generated_clock -name clk_inv  -source [get_ports clk] -divide_by 1 -invert [get_pins inv_reg/Q]

    Option

    Meaning

    -source

    The master clock point the derived clock comes from (a pin or port where the master is defined or propagated)

    -divide_by N / -multiply_by N

    Period of the derived clock is N times longer / N times shorter than the master

    -edges {a b c}

    Rise at master edge a, fall at b, rise at c (edges counted from 1 at the first master rising edge)

    -invert

    The derived clock is the inverse of the divided waveform

    -master_clock

    Selects the master when several clocks reach the source pin

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Generated clock waveform from master edges: -edges {1 3 5} on a 10 ns master (rise at 0, fall at 5)
    master_period = 10.0
    def master_edge(n):                      # edge 1 = rise at 0, 2 = fall at 5, 3 = rise at 10, ...
        return (n - 1) * master_period / 2.0
    rise, fall, rise2 = master_edge(1), master_edge(3), master_edge(5)   # {1 3 5}: rise 0, fall 10, rise 20
    period = rise2 - rise
    assert (rise, fall, rise2) == (0.0, 10.0, 20.0) and period == 20.0
    assert period == 2 * master_period      # equal to -divide_by 2
    print("PASS: -edges {1 3 5} gives a divide-by-2 clock, period", period, "ns")

    The edge list {1 3 5} picks the first, third and fifth master edges: rising at 0, falling at 10, rising at 20. The derived period is 20 ns, twice the master's, with a 50% duty cycle, identical to -divide_by 2. Use -edges when the duty cycle or phase is not a plain division.

    What the review looks for

    • Every divider, toggle flop or clock-generating cell has a generated clock; the clock list in the report shows each with its master and period.

    • The generated clock is defined on the output pin of the dividing cell, and its master points to a real clock source.

    • The delay through the divider shows up in the derived clock's latency under propagated clocks.

    Common pitfall

    Defining the generated clock with the wrong divide ratio. A divide_by 3 flop does not give a 50% duty cycle unless extra structure is added; a plain divide_by on the definition describes the period, and the actual waveform can differ, so check duty cycle with -edges when it matters.

    Interview

    Be ready to write the divide-by-2 and divide-by-3 definitions and say what -edges adds.

    Check yourself What period does create_generated_clock -divide_by 4 produce from a 2 ns master?

    8 ns, four times the master period.

    Related topics

    • create_clock Rules

    • Next: Dividers and Gated Clocks

    Previous

    26 / 183

    Next: Dividers and Gated Clocks

    Up next

    Up nextDividers and Gated Clocks

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Clock Muxes and Case Analysis
    • Verifying Clock Propagation