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
  • Reconvergence and Gray Coding16
  • Reset Domain Crossing16
  • Architecture and Design Rules16
    • CDC-Aware Partitioning
    • Clock Gating and Muxing
      • Glitch-Free Clock Mux
      • Gating as a Domain Boundary
      • Crossing with Gated Clocks
      • Clock Switching and Reset
    • Interface and IP Rules
    • Quasi-Static Signals and Configuration
  • CDC Signoff Methodology24
  • RDC Signoff16
  • Debug and Case Studies11
  • CDC and RDC Interview Prep30
  • Capstone: Sign Off a Multi-clock Peripheral4
Loading lesson

‹Clock Gating and Muxing
  1. Topics
  2. CDC & RDC
  3. Architecture and Design Rules
  4. Clock Gating and Muxing
  5. Crossing with Gated Clocks

Part 6 · Architecture and Design Rules · Intermediate

Crossing with Gated Clocks

Data crossing when the source or destination clock may stop; stalled clocks and handshakes; what must stay alive.

On this page

    A synchroniser assumes its clock keeps ticking. A gated clock does not. The moment either side of a crossing can stop, the protocol must survive the stall, or the first idle period wedges the link permanently.

    What stops, and what breaks

    Situation

    Failure

    Destination clock stopped

    A pulse arrives and leaves while nobody samples; a level sits unsynchronised until the clock returns, then crosses late. Late is tolerable only where the protocol holds the request until it is acknowledged; otherwise the lateness is itself a failure.

    Source clock stopped mid-handshake

    The request freezes; the destination already answered or is still waiting. A two-phase link resumes correctly; a careless four-phase controller can double-issue.

    Destination clock stopped mid-handshake

    The acknowledge never returns. The source waits forever unless it has a timeout or a wake-up path, which is a deadlock by another name.

    Both clocks stopped

    FIFO pointers freeze on both sides; full and empty flags go stale. Resumption is correct only if nothing was sampled mid-update.

    What must stay alive

    1. The synchroniser flops' clocks, or the stall tolerance. Either keep the synchroniser chain on a free-running clock (ungated or parent) while the gated logic sleeps, or use a protocol that holds its request until the acknowledge returns, however long that takes.

    2. The acknowledge path. A handshake whose acknowledge logic sleeps with the destination clock cannot complete. Route the acknowledge through logic that wakes with, or before, the destination.

    3. The wake-up ordering. The common pattern is: request arrives, idle detection wakes the gated domain, the clock restarts, the synchroniser chain (kept alive or given flush cycles) delivers the request, the acknowledge returns. Skipping the flush delivers a stale value as if it were the new request.

    In practice this means the synchroniser chain usually sits outside the gated region, on the parent or free-running clock, while only the consuming logic sleeps. The chain costs a few flops of always-on power and buys a link that cannot wedge.

    How to verify it

    Simulate the stall explicitly: gate the clock for hundreds of cycles mid-transfer, in both directions, with requests pending each way, and check that every request eventually completes exactly once. Structural analysis cannot see a stopped clock, so this behaviour is demonstrated by stall simulation in both directions plus review, not by the CDC report.

    Common pitfall

    Adding a timeout that retries the request on a stalled link. The retry plus the original, both eventually delivered, execute the transfer twice. Timeouts on cross-domain links need idempotence (safe to repeat) or exactly-once logic; a bare retry has neither.

    Check yourself A handshake crosses into a gated domain. The source sends a request, the destination clock is stopped, and the source waits for the acknowledge. What wakes the system?

    Something outside the stalled handshake: the request itself (or its synchronised copy on a live clock) must feed the idle-detection or wake-up logic. If nothing watches the request while the clock is still, the link waits forever.

    Related topics

    • Gating as a Domain Boundary

    • RTL: CDC handshakes

    Previous

    85 / 179

    Next: Clock Switching and Reset

    Up next

    Up nextClock Switching and Reset

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Glitch-Free Clock Mux