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

AboutRoadmapCareersInternshipsFAQContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Puzzle Bank
  • SystemVerilog Language Puzzles25
  • Difficulty Guide
  • Full Topic Map
  • Interview-Day Tips
  • Study Route: One Week Before the Interview
  • Study Route: Two Weeks
  • Study Route: Four Weeks (Full Course)4
  • OOP & Testbench Puzzles25
  • Concurrency & Timing Puzzles25
  • Randomization & Constraint Puzzles25
  • SVA Assertion Puzzles25
    • Sequence Puzzles
    • Implication Puzzles
    • Temporal Corner Puzzles
    • Assertion Debug Puzzles
      • disable iff Reset Glitch Hides a Lost Grant
      • Multiclock Ack Visibility
      • Weak vs Strong at End of Simulation
      • Overlapping Attempts Share One Grant
      • $rose Consumed During Reset
      • Intersect Requirement in Dual Checks
    • SVA Assertion Puzzles: Tricky Q&A
  • Functional Coverage Puzzles25
  • Logic & Aptitude Puzzles25
  • Scenario & Debug Puzzles25
  • UVM Testbench Puzzles25
  • Clock, Reset & CDC Puzzles25
  • Bus and Interface Protocol Puzzles25
  • Interview Prep: Puzzle Rounds7
  • DV Puzzle Cheatsheet
Loading lesson

←Assertion Debug Puzzles
  1. Topics
  2. DV Interview Puzzles
  3. SVA Assertion Puzzles
  4. Assertion Debug Puzzles
  5. Multiclock Ack Visibility
On this page

    VLSI DV Interview PuzzlesAll levels

    Multiclock Ack Visibility

    Property intent: when req_src rises in the src_clk domain, ack_dst must be seen within 0 to 1 dst_clk edges. dst_clk runs about 3x faster than src_clk. ack_dst is a dst_clk-domain register: it only changes just after a dst_clk edge and is cleanly sampled at the next one. Timeline: req_src is sampled rising at S100. The first dst_clk edge after S100 is D200, then D201, D202 and D203; S101 falls between D202 and D203. ack_dst is high only at D202 (low at D200, D201, D203). Determine the verdict.

    Puzzle

    Difficulty: Hard · Puzzle 2 of 6 · Topic: Assertion Debug Puzzles

    Property intent: when req_src rises in the src_clk domain, ack_dst must be seen within 0 to 1 dst_clk edges. dst_clk runs about 3x faster than src_clk. ack_dst is a dst_clk-domain register: it only changes just after a dst_clk edge and is cleanly sampled at the next one. Timeline: req_src is sampled rising at S100. The first dst_clk edge after S100 is D200, then D201, D202 and D203; S101 falls between D202 and D203. ack_dst is high only at D202 (low at D200, D201, D203). Determine the verdict.

    Code

    design.sv
    1
    2
    3
    4
    property p_multiclk_ack;
      @(posedge src_clk) $rose(req_src)
        |-> @(posedge dst_clk) ##[0:1] ack_dst;
    endproperty

    Hint

    ##[0:1] counts ticks of the clock in force at that point of the consequent. Which clock is that, and how many of its edges fit in the window?

    Step-by-step solution

    Diagram
    1) The source-domain rise at S100 starts the consequent, which switches to dst_clk; its first tick is D200, the first dst edge after S100.
    2) ##[0:1] counts dst_clk edges, so the window is D200 and D201 only.
    3) ack_dst is low at both of those samples. It goes high at D202, one dst edge too late.
    4) No legal match in the window, so the property FAILS. Counting the window as one src_clk cycle (D200..D202) would wrongly pass it.
    5) Tool note: multiclock properties are not supported by every free tool (Verilator 5.048 has no multiclock support); this verdict comes from the LRM clocking rules.

    Answer

    Answer: FAIL - the window is two dst_clk edges (D200, D201), and ack_dst arrives at D202, one dst edge late.

    How this was checked

    Not run here: Multiclock property: Verilator 5.048 has no multiclock sequence support and the free simulators cannot sample two clock domains faithfully, so the verdict rests on the LRM clocking rules.. The answer follows the language rules and the solution steps above.

    Why candidates get it wrong

    The delay range is in dst_clk cycles, not src_clk cycles. With dst_clk about 3x faster the window is roughly two thirds of a src cycle, so an ack that looks 'within one cycle' by src_clk standards is already late for this checker. Debuggers who fix the RTL first miss that the bound is in the wrong unit.

    Interviewer follow-up

    If the spec allows the ack up to one full src_clk cycle after the rise, what is the fix? Model answer: change the bound to count dst edges in that period (here ##[0:2], after confirming the clock ratio and boundary alignment), or move the check to src_clk using a synchronised copy of ack_dst and include the synchroniser latency in the bound. Stretching the pulse or synchronising in the DUT changes the design, not the checker.

    Say it out loud

    I would count in destination clock edges, not source ones. The consequent switches to the destination clock, whose first edge after the source rise is D200, so the zero to one window is D200 and D201. The ack is low at both and goes high at D202, one edge late, so the property fails. The trap is counting the window in source clock cycles, which would wrongly pass it. I would check that the bound is in the right unit before touching the RTL.

    Related topics

    • Multi-Clock Assertions

    • Back to Assertion Debug Puzzles

    • SVA Assertion Puzzles section

    Previous

    130 / 293

    Next: Weak vs Strong at End of Simulation

    Up next

    Up nextWeak vs Strong at End of Simulation

    Sign in to save progress

    Practice this lessonPrevious lessonReport an error

    See also

    • Overlapping Attempts Share One Grant
    • $rose Consumed During Reset
    • Intersect Requirement in Dual Checks