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. Why Pulses Need Help

Part 3 · CDC Protocols and Handshakes · All levels

Why Pulses Need Help

A one-cycle pulse into a slower clock can fall between sampling edges and vanish.

On this page

    Why it matters

    Interrupts, start commands and event flags are usually one-cycle pulses. When the destination clock is slower than the source, such a pulse can be present for part of a destination period but absent at both neighbouring sampling edges. The crossing then delivers nothing, with no error flag: the event simply never happened as far as the destination is concerned.

    The loss mechanism

    A destination flop samples its input at its own clock edges. A pulse is seen only if it overlaps at least one edge with enough setup and hold margin. A pulse shorter than the destination period, positioned between two edges, overlaps neither.

    A pulse falling between two destination clock edges and being lost.
    A short pulse that sits between two destination edges is never sampled.

    Direction

    Pulse width versus destination period

    Verdict

    Slow source to fast destination, pulse held 2+ destination cycles

    Wide enough to be sampled at least twice

    A plain two-flop synchroniser is fine

    Fast source to slow destination, one source cycle

    Narrower than the destination period

    Lost unless converted to a level first

    Same-rate, phase-unknown clocks

    Comparable to the period

    Treat as unsafe: use a pulse scheme anyway

    The tempting fix is wrong:

    bad_pulse_cdc.sv
    1
    2
    3
    4
    5
    6
    7
    // bad-example: a short pulse fed straight into a synchroniser.
    // It compiles, and it usually passes simulation, because the test pulse
    // happens to overlap a destination edge. Shift the phase and it vanishes.
    module bad_pulse_cdc (input logic clk_d, input logic pulse_s, output logic pulse_d);
      logic q1;
      always @(posedge clk_d) begin q1 <= pulse_s; pulse_d <= q1; end
    endmodule

    What the checks look for

    A structural analysis generally looks for a pulse qualifier on the crossing: a toggle flop, a stretch counter, or a handshake around the event, rather than a bare synchroniser on a signal the design treats as a pulse. A reviewer asks the same question in words: how long does this signal stay valid compared with the destination period?

    Common mistakes

    Common pitfall

    Simulation hides this bug. A testbench whose pulse happens to overlap a destination edge passes every run, and the failure appears only with a different clock phase. This is why the signoff view insists on a structure (toggle, stretch, handshake) rather than on passing tests.

    Interview

    Answer with the direction table: slow-to-fast with a held pulse is the only case a plain synchroniser covers. Everything else needs a pulse scheme, and the scheme needs a spacing rule.

    Check yourself A 200 MHz domain sends a one-cycle pulse to a 50 MHz domain. How wide is the pulse in destination periods, and is a plain synchroniser acceptable?

    One 5 ns pulse against a 20 ns destination period: a quarter of a period, so it can easily sit between two edges. Not acceptable; use a toggle, stretch or handshake scheme.

    Related topics

    • Toggle synchronizer

    • RTL: Metastability and Synchronisation

    Previous

    31 / 179

    Next: Toggle Synchronizer

    Up next

    Up nextToggle Synchronizer

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Pulse Stretching and Edge Detect
    • Spacing and Rate Limits