In reply to hctseng:
Your assertion has the following as an antecedent:
dec_push_desc_fifo_vld [= 3] |-> …
Note that
b[=1] is equivalent to:
!b[*0:$] ##1 b ##1 !b[*0:$]
b[=2] is equivalent to:
!b[*0:$] ##1 b ##1 !b[*0:$] ##1 b ##1 !b[*0:$]
That means that at every clocking event you’ll have a successful attempt, and thus a new valid thread whenever dec_push_desc_fifo_vld == 0. Thus, there are way-way too many unnecessary threads and thus you will run out of memory. The solution, start the assertion when dec_push_desc_fifo_vld is true rather than falses or true.
Also, the b[=n] causes a !b[*0:] at the end of the nth time, and this assertion can never succeed since all threads of the antecedent must be tested for a pass. However, the
b[->1] is equivalent to: !b[*0:] ##1 b. POINT: Use the goto operator
Thank you very much Ben. I read the SV LRM, and I still could not quite fully understand the difference between b[=n] and b[->n]. Could you please make an legal example both terms?
I am giving you 3 pages from my SVA Handbook 4th Edition, 2016 ISBN 978-1518681448 that clearly explains these concepts with examples. I tend to use lots of examples in my book. Hopefully, that will clarify things for you.
Thank you Ben. This helps a lot. Appreciate your help!!
Just wondering what is the big difference between your 3rd edition and the 4th edition book? I have a coworker owns the 3rd edition, but I’m not sure if I should purchase the 4th edition for myself.
A new chapter on VERIFYING ASSERTIONS (using constrained-random tests, but not UVM)
Some explanation on constraints. I covered a lot assertion verification examples in my posts
A few more examples on the dictionary chapter.
A new chapter on 1800’18 PREVIEW, but I covered a lot of that in my posts