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
    • Crossings and Failure Modes
    • Identifying Domains
      • Clocks and Resets in a Design
      • Generated, Gated and Muxed Clocks
      • Quasi-Static Signals
      • Writing Clock Intent
  • Metastability and Synchronizers16
  • 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

‹Identifying Domains
  1. Topics
  2. CDC & RDC
  3. Clock Domains and Failure Modes
  4. Identifying Domains
  5. Writing Clock Intent

Part 1 · Clock Domains and Failure Modes · All levels

Writing Clock Intent

Documenting clock and reset intent in plain language and tables: the tool-neutral CDC setup.

On this page

    Every CDC setup, whatever the tool calls its files, asks the same questions: which clocks, how they relate, which resets, and which signals are quasi-static. Writing the answers down before touching the tool turns setup from archaeology into transcription, and the document outlives every tool version.

    What the intent contains

    Section

    Contents

    Clock list

    Every clock net, its source, its frequency or period range, and whether it is always on

    Relationships

    For each clock pair that exchanges signals: synchronous, related, mesochronous, plesiochronous, or asynchronous

    Resets

    Per domain: each reset, asynchronous or synchronous, what it reaches, and the release order across domains

    Quasi-static signals

    Each rarely-changing crosser, its enforcement mechanism, and what stops mid-transfer changes

    Exceptions

    Anything deliberately untreated, with the justification that the waiver review will check

    A small example

    An illustrative two-clock block (a processor bus clock and a slower peripheral clock) needs only a few lines, and those lines already answer most setup questions:

    Item

    Entry

    Clocks

    cpu_clk 100 MHz always on (oscillator); periph_clk 25 MHz always on (same generator, divide-by-4, known phase)

    Relationship

    Related, fixed ratio 4:1; crossings use two-flop synchronisers for control and a handshake for data

    Resets

    Both domains share an asynchronous-assert reset; periph releases after cpu (ordered release); each synchroniser flop takes the receiving domain's reset (or is explicitly unreset by policy), and both flops release together

    Quasi-static

    periph_mode[1:0]: shadow register plus synchronised apply pulse; source holds the value until the acknowledge returns

    Exceptions

    None: every crossing has a scheme

    Keeping it tool-neutral

    Write nets, frequencies, and relationships, never tool commands or message names. The intent says "cpu_clk and periph_clk are related 4:1"; the tool setup translates that into whatever declarations the flow needs. When the tool reports an undeclared clock or an unexpected relationship, the intent is the referee: either the design changed and the intent is updated, or the setup is wrong and the tool input is fixed. Reviews work the same way: the reviewer reads five tables, not five hundred report lines, and samples the reports against them.

    design.sv
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // snippet
    // Clock intent for the illustrative cpu/periph block, in plain words.
    // A reviewer checks each line against the design and the tool setup.
    //   clocks:        cpu_clk 100 MHz (source: oscillator), periph_clk 25 MHz
    //                  (source: same generator, divide-by-4, known phase)
    //   relationship:  related, fixed ratio 4:1
    //   resets:        shared async-assert reset; periph releases after cpu
    //   quasi-static:  periph_mode[1:0] via shadow register + synchronised apply
    //   exceptions:    none

    Common pitfall

    Letting the intent rot: the design gains a debug clock, nobody updates the five tables, and the next signoff argues from a stale document. Make the intent a deliverable of every clock-affecting change, reviewed like RTL.

    Check yourself A tool setup declares two clocks asynchronous, but the intent table says they are mesochronous (same frequency, fixed unknown phase). Which one governs, and what happens next?

    The intent governs pending investigation: either the design changed (update the intent and re-justify the schemes) or the setup is wrong (fix the declaration). What must not happen is shrugging and signing off with the two disagreeing.

    Check yourself Why does the intent list exceptions explicitly instead of leaving untreated crossings out?

    Because an omitted crossing is invisible: no reviewer can distinguish "considered safe" from "never noticed". A listed exception carries its justification into waiver review; an omission carries nothing.

    Related topics

    • Glossary

    • Why Simulation Misses CDC

    • Up: CDC/RDC course hub

    Previous

    14 / 179

    Next: Metastability and Synchronizers

    Up next

    Up nextMetastability and Synchronizers

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Clocks and Resets in a Design
    • Generated, Gated and Muxed Clocks