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
      • Choosing Domain Boundaries
      • Register at the Boundary
      • Minimising Crossings
      • Crossing Inventory
    • Clock Gating and Muxing
    • 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

‹CDC-Aware Partitioning
  1. Topics
  2. CDC & RDC
  3. Architecture and Design Rules
  4. CDC-Aware Partitioning
  5. Choosing Domain Boundaries

Part 6 · Architecture and Design Rules · Intermediate

Choosing Domain Boundaries

Where to cut a design into clock domains and what each cut costs.

On this page

    A clock domain boundary is where one timing assumption ends and synchronisation begins. Put the cut where the data is naturally slow, narrow, or already packetised, and each crossing stays cheap. Cut through fast, wide, tightly coupled logic and every crossing becomes a project.

    What each cut costs

    Every crossing pays some combination of the following. The table uses illustrative cycle counts for a two-flop synchroniser: 2 to 3 destination cycles of latency per crossing.

    Cost

    What it looks like

    Latency

    2 to 3 destination cycles per synchroniser stage crossing; a handshake round trip adds the acknowledge path as well.

    Throughput limit

    A pulse needs spacing of several destination cycles; a handshake moves one item per round trip.

    Area

    Synchroniser flops, handshake state machines, or a FIFO per crossing.

    Verification

    One more item in structural analysis, one more protocol to assert, one more row in the inventory.

    Constraints

    Each clock pair needs its crossing intent captured; each synchroniser needs its preservation attributes.

    Rules for placing the cut

    1. Keep feedback loops inside one domain. A request-acknowledge pair that crosses twice (there and back) already spans two synchroniser delays; do not add a third cut inside the loop.

    2. Group logic by rate, not by function. A fast data path and its slow control register do not belong in the same domain just because they serve one feature.

    3. Cut where the data is already slow. Configuration, status, and packet boundaries cross far more cheaply than cycle-by-cycle data.

    4. Do not split a pipeline across domains. A pipeline stage boundary looks like a natural cut but carries wide data every cycle; it needs a FIFO, not a synchroniser.

    5. Treat muxed and gated clocks as boundaries. A clock mux output and a gated clock each create a domain relationship the partition must name (see the clock gating and muxing topic).

    Two partitions each joined by a single well-defined crossing.
    Good cuts: wide data through one FIFO, packet events through one handshake, instead of many scattered signals.

    What the review looks for

    The reviewer asks for the domain diagram and counts the crossings on it. A design with three domains and four documented crossings is easy to sign off; a design with three domains and forty scattered signals is not, whatever the synchronisers look like.

    Common pitfall

    Splitting one state machine across two clocks is the most expensive cut of all. Every state output becomes a crossing and every input a synchronised input, and the machine can still see an inconsistent combination. Keep the machine whole and cross its inputs and outputs instead.

    Interview

    “How do you decide clock domains?” Talk about rate grouping, cutting where data is slow or packetised, pricing each cut in latency and verification, and never splitting feedback loops or state machines.

    Check yourself A block diagram shows a 500 MHz datapath feeding a 50 MHz controller with 12 separate control wires crossing directly. What is the partitioning objection?

    Twelve separate crossings where one would do: the wires are related control, so they should cross as one defined protocol (a handshake or a qualified register), and the cut should sit at that single protocol, not across twelve ad-hoc signals.

    Related topics

    • Register at the Boundary

    • Minimising Crossings

    Previous

    79 / 179

    Next: Register at the Boundary

    Up next

    Up nextRegister at the Boundary

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Minimising Crossings
    • Crossing Inventory