First_match usage

In reply to dave_59:


property write;
  int a,b;
   @(posedge clk) first_match (($rose(cond1), a=addr, b=data) ## [2:50] cond2 == a) 
                     |=> cond3 == b;
end property 

cond1 may appear twice before cond2 can happen.

At each clocking event there is an attempt, and if that attempt is successful the local Variables are updated, and they are local to that thread ONLY. If $rose(cond1)appears again in another cycle then a new thread is started, independently from the other thread.
During a successful attempt, Local variables are updated for that attempt in the sequence matched item. Again, those local variables are local to that thread for that attempt, and not for any other attempt.Read my paper https://verificationacademy.com/news/verification-horizons-march-2018-issue and understand the equivalency (but not implementation) of an SVA assertion using automatic tasks with automatic local variables that are started with fork-join.

Ben Cohen
http://www.systemverilog.us/ ben@systemverilog.us
For training, consulting, services: contact Home - My cvcblr


  1. https://verificationacademy.com/news/verification-horizons-march-2018-issue
  2. http://systemverilog.us/vf/SolvingComplexUsersAssertions.pdf
  3. “Using SVA for scoreboarding and TB designs”
    http://systemverilog.us/papers/sva4scoreboarding.pdf
  4. “Assertions Instead of FSMs/logic for Scoreboarding and Verification”
    https://verificationacademy.com/verification-horizons/october-2013-volume-9-issue-3
  5. SVA in a UVM Class-based Environment
    https://verificationacademy.com/verification-horizons/february-2013-volume-9-issue-1/SVA-in-a-UVM-Class-based-Environment

FREE BOOK: Component Design by Example
… A Step-by-Step Process Using VHDL with UART as Vehicle