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
    • MTBF & Synchronizer Math
    • Two-Flop Synchronizers in Practice
    • Multi-bit CDC Hazards
    • Synchronizer Selection Guide
      • Decision Matrix
      • Slow-to-Fast Crossings
      • Fast-to-Slow Crossings
      • Cost of Each Choice
  • CDC Protocols and Handshakes16
  • 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

‹Synchronizer Selection Guide
  1. Topics
  2. CDC & RDC
  3. Metastability and Synchronizers
  4. Synchronizer Selection Guide
  5. Fast-to-Slow Crossings

Part 2 · Metastability and Synchronizers · All levels

Fast-to-Slow Crossings

Rules and examples for crossings into a slower clock: pulse stretching, spacing, and a runnable toggle example.

On this page

    Crossing into a slower clock is the dangerous direction: the destination samples rarely, so short events fall between edges and disappear. Every fast-to-slow rule exists to make sure each event is still present when an edge finally comes.

    Rules

    1. Stretch every pulse past two destination periods before a plain synchroniser, measured against the slowest destination mode.

    2. Prefer a toggle scheme where the ratio is wide or unknown: flip a bit per event, synchronise the level, and detect edges on the slow side.

    3. Space events apart by more than the synchroniser latency plus the detector width, so pulses never merge.

    4. Hold handshake data stable until the slow side's acknowledge returns, however long that takes.

    Runnable example: toggle crossing

    The testbench below sends four fast events as toggles through a slow-domain synchroniser with an edge detector, and checks that four slow pulses arrive. Event spacing is 100 ns against a 30 ns slow clock, comfortably wider than the synchroniser latency.

    toggle_sync.sv
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    `timescale 1ns/1ps
    
    // Fast-to-slow event crossing: the event toggles a bit, the toggle crosses on a
    // two-flop synchroniser, and an edge detector in the slow domain recovers one pulse.
    module toggle_sync (input logic clk_s, input logic tog_f, output logic pulse_s);
      logic q1 = 1'b0, q2 = 1'b0, q2_d = 1'b0;
      always_ff @(posedge clk_s) begin
        q1 <= tog_f;  q2 <= q1;  q2_d <= q2;
      end
      assign pulse_s = q2 ^ q2_d;          // one slow cycle high per toggle
    endmodule
    

    What the tools check

    Structural analysis recognises the toggle flop, the two synchroniser flops, and the edge detector as one scheme, and flags a bare pulse wire into a slow domain. The review checks stretch widths against the slowest mode and event spacing against the synchroniser latency.

    Common pitfall

    Back-to-back fast events closer than the slow round trip merge into one toggle edge too few. The spacing rule is a protocol requirement, so the source logic must guarantee it, not merely the testbench.

    Interview

    “How do you send a pulse from fast to slow?” Answer toggle-first: stretch assumptions break when ratios change, while a toggle is correct for any ratio as long as events are spaced. Then state the spacing rule.

    Check yourself The slow clock halves in a low-power mode. Which numbers in the example must be rechecked?

    The stretch or spacing against the new period: 100 ns spacing still clears the latency, but any width sized at two old periods must be rechecked against two new ones. The toggle scheme itself stays correct.

    Check yourself Two fast events arrive 20 ns apart with a 30 ns slow clock. Can the toggle scheme deliver both?

    No. The second toggle can follow before the first has crossed and been detected, merging the two. The source must space events wider than the slow-side latency.

    Related topics

    • Slow-to-Fast Crossings

    • Decision Matrix

    Previous

    29 / 179

    Next: Cost of Each Choice

    Up next

    Up nextCost of Each Choice

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Decision Matrix