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
    • Event Scheduling Puzzles
    • Race Condition Puzzles
    • Clocking Block Puzzles
      • Why Every Sample Is One Cycle Old
      • Interpreting |=> ##1 in Clocking Domain
      • disable fork Kills Unrelated Background Threads
      • input #0 vs input #1step Snapshot
      • Nonzero Input Skew Looks Back in Time
      • Mixing Direct Drive and cb Drive
    • Semaphore & Mailbox Puzzles
    • Concurrency & Timing Puzzles: Tricky Q&A
  • Randomization & Constraint Puzzles25
  • SVA Assertion Puzzles25
  • 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

←Clocking Block Puzzles
  1. Topics
  2. DV Interview Puzzles
  3. Concurrency & Timing Puzzles
  4. Clocking Block Puzzles
  5. Interpreting |=> ##1 in Clocking Domain
On this page

    VLSI DV Interview PuzzlesAll levels

    Interpreting |=> ##1 in Clocking Domain

    For a req sampled high at cycle N, at which cycle must grant be 1 for this property to pass?

    Puzzle

    Difficulty: Easy · Puzzle 2 of 6 · Topic: Clocking Block Puzzles

    For a req sampled high at cycle N, at which cycle must grant be 1 for this property to pass?

    Code

    arb_if.sv
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    interface arb_if(input bit clk);
      logic req, grant;
      clocking cb @(posedge clk);
        default input #0 output #0;
        input req, grant;
      endclocking
    endinterface
    
    module tb;
      bit clk = 0;
      arb_if vif(clk);
      always #5 clk = ~clk;
    
      property p_req_to_grant;
        @(vif.cb) vif.cb.req |=> ##1 vif.cb.grant;
      endproperty
    
      ap: assert property (p_req_to_grant);
    endmodule

    Hint

    |=> already moves one cycle; ##1 adds another cycle.

    Step-by-step solution

    Diagram
    1) The antecedent samples req high at cycle N.
    2) |=> starts the consequent at cycle N+1.
    3) ##1 inside the consequent delays the grant check by one more cycle, to N+2.
    4) Checked in Verilator: with req sampled at t=15 (N), grant high at t=35 passes; grant high only at t=25 (N+1) fails at t=35.
    5) The property demands grant at N+2, not N+1.

    Answer

    Answer: grant must be 1 at cycle N+2. Candidates often misread this as the next cycle (N+1).

    How this was checked

    Checked by running the code in Verilator 5; the printed output supports the answer above. With req sampled at t=15, grant at N+2 (t=35) passes while grant only at N+1 (t=25) fails.

    Why candidates get it wrong

    Double-counting the delay is the trap: |=> and ##1 each add one cycle. It is a one-step reading exercise once you know that.

    Interviewer follow-up

    How would you rewrite for exactly next-cycle grant expectation? Model answer: vif.cb.req |=> vif.cb.grant (or vif.cb.req |-> ##1 vif.cb.grant); both require grant at N+1.

    Say it out loud

    Grant must be 1 at cycle N plus 2. The non-overlapped implication starts the consequent one cycle after the antecedent, and the ##1 inside the consequent adds one more. The trap is double counting the delay and expecting grant at N plus 1, or missing one of them. I would confirm it with a pass and a fail run, and check what the spec says before I trust the assertion.

    Related topics

    • |-> vs |=>

    • Clocks & the Sampling Model

    • Back to Clocking Block Puzzles

    • Concurrency & Timing Puzzles section

    Previous

    74 / 293

    Next: disable fork Kills Unrelated Background Threads

    Up next

    Up nextdisable fork Kills Unrelated Background Threads

    Sign in to save progress

    Practice this lessonPrevious lessonReport an error

    See also

    • input #0 vs input #1step Snapshot
    • Nonzero Input Skew Looks Back in Time
    • Mixing Direct Drive and cb Drive