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
  • Delay Graph & Path Analysis16
  • Beyond Setup and Hold16
    • Latches and Time Borrowing
    • Clock Gating Checks
    • Recovery, Removal and Async
    • Pulse Width and Min Period
      • Minimum Pulse Width
      • Minimum Period
      • Duty Cycle Distortion
      • Pulse Width Signoff
  • 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

‹Pulse Width and Min Period
  1. Topics
  2. Static Timing Analysis
  3. Beyond Setup and Hold
  4. Pulse Width and Min Period
  5. Minimum Period

Part 4 · Beyond Setup and Hold · All levels

Minimum Period

A cell with internal timing needs a minimum time between like clock edges; the check compares the clock period at the pin with it.

On this page

    Why it matters

    Some cells, memories above all, run internal sequences that take a fixed time per cycle. The library gives a minimum clock period for the pin, and STA checks the actual period at that pin. The check also catches clock definitions that were wrong in a way that no data path reveals.

    Worked example

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # A memory clock pin with minimum period 1.25 ns (illustrative).
    min_period = 1.25
    clocks = {"clk_core": 1.10, "clk_core_div2": 2.20, "clk_mem": 1.25}
    slack = {name: round(p - min_period, 2) for name, p in clocks.items()}
    assert slack == {"clk_core": -0.15, "clk_core_div2": 0.95, "clk_mem": 0.0}
    violators = [n for n, s in slack.items() if s < 0]
    assert violators == ["clk_core"]
    # fastest legal frequency at this pin
    fmax = 1000.0 / min_period
    assert abs(fmax - 800.0) < 1e-9
    print("PASS: violators", violators, "; maximum frequency", fmax, "MHz")

    A memory fed directly by a 1.10 ns clock fails by 0.15 ns; the same clock divided by two has 0.95 ns of slack; a 1.25 ns clock is exactly at the limit, which is a zero-slack pass. The maximum frequency at the pin is 800 MHz. This is the usual reason a design is clocked through a divider or a separate memory clock.

    How it interacts with other items

    Situation

    Effect on the check

    Divided clock

    Period at the pin is the divided period; larger slack

    Clock multiplexer

    The pin sees the clock of each selected input; each period is checked

    Gated clock

    Checked on the waveform defined at the pin; gating does not change the defined period

    Generated clock defined with the wrong divide ratio

    Reported slack is wrong, in either direction

    What the review looks for

    • Minimum period is clean for every macro clock pin, in every corner.

    • Clock definitions match the intended frequencies; a wrong generated clock can hide or invent period violations.

    • Whether clock uncertainty is subtracted from the period for this check is a methodology decision: state it in the signoff notes.

    Common pitfall

    Fixing a minimum period violation in the constraints by changing the clock period to pass. The check was telling you the real clock is too fast for the cell.

    Interview

    Give the standard fix: use a slower or divided clock for the macro, or ask for a faster macro.

    Check yourself A macro has a 1.25 ns minimum period and the source clock period is 1.0 ns. Which integer divide ratios pass?

    Divide-by-1 leaves 1.0 ns and fails. Divide-by-2 gives 2.0 ns and passes, so every ratio of 2 or more passes.

    Related topics

    • Minimum Pulse Width

    • Next: Duty Cycle Distortion

    Previous

    71 / 183

    Next: Duty Cycle Distortion

    Up next

    Up nextDuty Cycle Distortion

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Pulse Width Signoff