This design pattern creates a one-clock-cycle-wide pulse in the receiving clock domain,
which serves as a precise strobe signal to capture multi-bit data that has crossed clock domains.


🕹️ The Core Idea

Instead of sending a level signal that must be stretched long enough to be detected,
we send a toggling signal (a single bit that flips state every time a new data word is ready).

This toggle passes through a 3-stage synchronizer in the receiving domain,
and by comparing two consecutive synchronization stages (using an XOR gate),
a one-cycle pulse is generated whenever a toggle change is detected.

This pulse acts as a safe “capture now” command for the destination logic.


⚙️ Circuit Breakdown

Let’s denote:

Synchronized pulse generation logic.jpg

Verilog-like description:

always @(posedge dest_clk) begin
    q1 <= d;          // 1st synchronizer stage
    q2 <= q1;         // 2nd stage
    q3 <= q2;         // 3rd stage
end

assign sync_pulse = q2 ^ q3;  // XOR detects any change (toggle edge)
assign q_out = q3;            // Delayed version of input


🧠 How It Works — Step-by-Step

Let’s follow the operation through cycles:

  1. Cycle 1 — Source toggles d high (new data ready).
  2. Cycle 2–4 — The high value propagates through the synchronizer stages (q1, q2, q3).
  3. When q2 and q3 temporarily differ (e.g., q2=1, q3=0),
    their XOR output = 1, generating a 1-cycle pulse in the destination domain.
  4. This pulse (sync_pulse) signals capture the data now.
  5. Cycle 7 — Source toggles d low (next data ready).
    Again, after synchronization delay, another 1-cycle pulse appears.
  6. The q_out follows the toggle state delayed by three destination clock cycles,
    which can be used for feedback/acknowledge back to the source domain.

🧩 Key Features

Feature Description
Polarity independent Works whether the toggle goes high→low or low→high — XOR detects any edge
Single-cycle pulse Output pulse lasts exactly one destination clock cycle
Three-stage synchronizer Provides robust metastability filtering and pulse alignment
q-output Delayed synchronized copy of the input, often used for feedback (acknowledge)
No pulse width tuning Works purely from detecting toggles, not signal levels

✅ Advantages


⚠️ Design Requirements


🪄 Typical Usage Pattern

This synchronized enable pulse circuit forms the heart of many reliable CDC handshaking systems.


📊 Summary Table

Signal Role
d Toggle bit from source domain
q1, q2, q3 Synchronizer stages in destination domain
sync_pulse 1-cycle pulse for data capture
q_out Delayed synchronized version of d (used for feedback)

🧩 Why It’s Preferred

This technique ensures that: