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
  • CDC/RDC Glossary
  • CDC/RDC Metrics Reference
  • CDC/RDC Interview Prep
  • CDC/RDC Signoff Cheatsheet
  • Clock Domains and Failure Modes8
  • Metastability and Synchronizers16
  • CDC Protocols and Handshakes16
    • Pulse Synchronizers
      • Why Pulses Need Help
      • Toggle Synchronizer
      • Pulse Stretching and Edge Detect
      • Spacing and Rate Limits
    • Handshake Protocols Across Domains
    • Async FIFO CDC
    • CDC Protocol Verification
  • Reconvergence and Gray Coding16
  • Reset Domain Crossing16
  • Architecture and Design Rules16
  • CDC Signoff Methodology24
  • RDC Signoff16
  • Debug and Case Studies11
  • CDC and RDC Interview Prep30
  • Capstone: Sign Off a Multi-clock Peripheral4
Loading lesson

‹Pulse Synchronizers
  1. Topics
  2. CDC & RDC
  3. CDC Protocols and Handshakes
  4. Pulse Synchronizers
  5. Pulse Stretching and Edge Detect

Part 3 · CDC Protocols and Handshakes · All levels

Pulse Stretching and Edge Detect

Holding the pulse high for several cycles instead of toggling, and where that is acceptable.

On this page

    Why it matters

    Toggling is not the only way to make a pulse wide enough to sample. Holding the pulse high for a fixed number of source cycles (stretching) is simpler to build and simpler to review, and for slow event sources it is completely adequate. A signoff reviewer needs to know both schemes and, more importantly, when stretching stops being acceptable.

    The pattern

    A stretch counter in the source domain holds the event high for S source cycles. The destination synchronises the resulting wide level through a two-flop synchroniser and edge-detects it, exactly as in the toggle scheme, producing one destination pulse per stretched event.

    design.sv
    1
    2
    3
    4
    5
    6
    7
    // snippet: stretch an event to S source cycles, then synchronise as a level.
    // Source domain:
    //   always @(posedge clk_s) begin
    //     if (pulse_s) stretch <= S; else if (stretch != 0) stretch <= stretch - 1;
    //     level_s <= (pulse_s || stretch != 0);
    //   end
    // Crossing: 2FF synchroniser of level_s into clk_d, then XOR edge detect.

    Question

    Toggle scheme

    Stretch scheme

    What crosses the boundary

    A level that flips per event

    A level held high for S source cycles

    Source state needed

    One toggle flop

    A counter plus the level flop

    Destination output per event

    Exactly one pulse

    Exactly one pulse, via the same edge detector

    Needs the spacing rule

    Yes: flips must stay apart

    Yes: stretched pulses must not overlap

    Failure if misconfigured

    Merges events silently

    A too-short stretch is missed silently

    When stretching is acceptable

    Stretching is acceptable when the stretched width S is chosen against the destination period with margin (at least two destination periods, preferably more) and the destination clock rate is bounded: if the destination can be slowed by a power mode, a fixed S can become too short. Toggling has no such dependence, because the level holds until the next event however slow the destination is.

    Destination edge detection

    Both schemes share the destination side: synchronise the level, delay it one cycle, XOR. The output pulse is one destination cycle wide. A reviewer checks that the detector watches the synchronised level and that nothing downstream expects the pulse to arrive in any fixed number of source cycles: the latency is two to three destination cycles plus synchroniser settling, never a source-cycle count.

    Common mistakes

    Common pitfall

    Stretching to exactly one destination period and calling it safe. One period gives a single sampling edge, and a setup-hold miss on that edge loses the event. Stretch to at least two periods so that two independent edges can see the level.

    Check yourself A stretched level is 40 ns wide and the destination period is 25 ns. Is the width adequate?

    Marginally: 40 ns covers at most two edges and a phase shift can leave only one usable sample. Widen to at least 50 ns (two full periods) with margin, or use a toggle.

    Related topics

    • Toggle synchronizer

    • Spacing and rate limits

    Previous

    33 / 179

    Next: Spacing and Rate Limits

    Up next

    Up nextSpacing and Rate Limits

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Why Pulses Need Help