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
    • Interface and IP Rules
    • Quasi-Static Signals and Configuration
      • Static by Construction
      • Qualification and Stability
      • Constraints and Waiver Hygiene
      • Runtime Reconfiguration
  • CDC Signoff Methodology24
  • RDC Signoff16
  • Debug and Case Studies11
  • CDC and RDC Interview Prep30
  • Capstone: Sign Off a Multi-clock Peripheral4
Loading lesson

‹Quasi-Static Signals and Configuration
  1. Topics
  2. CDC & RDC
  3. Architecture and Design Rules
  4. Quasi-Static Signals and Configuration
  5. Qualification and Stability

Part 6 · Architecture and Design Rules · Intermediate

Qualification and Stability

The stable-before-use proof obligation and how to assert it.

On this page

    Every quasi-static signal carries the same proof obligation: stable before use. Whoever claims the signal is static must show what enforces the stability and what would catch it if the enforcement broke. An obligation nobody writes down is an obligation nobody meets.

    The obligation, stated plainly

    For each quasi-static signal, name the stability window (reset, a named mode, a stopped clock), the enforcer (gated write, mode machine, stopped clock), and the observer (the assertion or check that fires if the signal moves inside the window). A row missing any of the three is incomplete.

    Item

    Example entry

    Signal

    filter_coeff[15:0], live copy.

    Stability window

    RUN mode: from mode-enter plus settle time until mode-exit.

    Enforcer

    Write enable gated by run_state == IDLE; live copy updates only on the synced load pulse.

    Observer

    Assertion p_coeff_stable (below) plus a simulation check that scrambles the shadow copy mid-run.

    Asserting it

    The stability property is a one-line assertion: while the consumer is active, the value must not change. It costs almost nothing and catches exactly the failure that matters, a write path that fires when it should not.

    design.sv
    1
    2
    3
    4
    5
    6
    // snippet
    // the live configuration must hold still whenever the datapath uses it
    property p_cfg_stable;
      @(posedge clk_d) use_enable |-> $stable(cfg_live);
    endproperty
    a_cfg_stable : assert property (p_cfg_stable);

    The matching simulation check scrambles the writable (shadow) copy while use_enable is high and confirms the live copy and the outputs do not move. Together the assertion and the test cover both directions: the live value never changes in use, and writes outside the window cannot leak through.

    What the review looks for

    The reviewer reads the obligation table, not the intent comment. “Static configuration” in a comment proves nothing; a named window with an enforcer and an observer proves the claim was taken seriously. Signals without all three get synchronisers, not trust.

    Common pitfall

    Qualifying a bus with a “data valid” flag that is itself unsynchronised. The qualifier is then just another crossing with the same problem. A qualifier must be generated in, or safely delivered to, the domain that acts on it.

    Check yourself An assertion checks $stable(cfg) on every cycle with no precondition. It fires during the legal update window and gets waived. What was done wrong?

    The assertion states the wrong property: the obligation is stability during use, not stability always. Gate it with the use condition (use_enable), so the legal update window passes and only a change during use fires.

    Related topics

    • Static by Construction

    • Constraints and Waiver Hygiene

    Previous

    92 / 179

    Next: Constraints and Waiver Hygiene

    Up next

    Up nextConstraints and Waiver Hygiene

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Runtime Reconfiguration