I started going through @user49 's paper on ‘Solving Complex Users’ Assertion. Is there a good online source to understand sequences? I am trying to understand how to read the following sequence. Can someone explain in simple terms what is the below sequence?
//[Ben] This paper “Understanding the SVA Engine Using the Fork-Join Model”
// addresses important concepts about attempts and threads. Emphasizes the total independence of attempts
// Verification Horizons
// 1800 provides some explanations too.
// Of course, textbooks also explain the application of sequences thru complete examples.
// Feel free to checkout my book and papers
/* SystemVerilog Assertions Handbook Revised 4 th edition 2023: … for Dynamic and Formal https://www.amazon.com/dp/B0CK37KXMH ebook https://www.amazon.com/dp/B0C6W4BF1D paper https://systemverilog.us/vf/Cohen_Links_to_papers_books.pdf */
// I am trying to understand how to read the following sequence.
// Can someone explain in simple terms what is the below sequence?
// SVA: Package for dynamic and range delays and repeats
// Application: $rose(a) |-> sq_rpt_simple_count(sq_1, d1)
int count=3;
sequence dynamic_repeat(q_s, count);
int v=count;
(1, v=count) ##0 first_match((q_s, v=v-1'b1) [*1:$] ##0 v<=0);
endsequence
// when the sequence is called, the
(1, v=count) // saves the value of count into the sequence local variable "v".
// 1800 defines, among other things, a sequence as
(sequence_expr {, sequence_match_item}) [sequence_abbrev]
// it defines a sequence_match_item as
operator_assignment | inc_or_dec_expression | subroutine_call
// example:
bit w;
function automatic void f(bit a); $display("%t $sampled w=", $realtime, a);endfunction
sequence q; (w, f(w))[*2]; endsequence
// back to the sequence dynamic_repeat(q_s, count);
##0 first_match((q_s, v=v-1'b1) [*1:$] ##0 v<=0);
// in the same cycle, you evaluate the sequence "q_s", and if it matches,
// you decrement the local valiable v.
// You repeat this process (evaluation and decrement)until v<=0.
// The first_match is needed because this sequence may be used as an antecedant,
// and in an antecedant, all thereads of the antecedant must be test
Hi @user49
As you stated that this process will repeat untill v <=0, so my question
when we do assert(property), then the assertion is execute once write, so why this repition.
And if repition is happening can you bit expalin in more detail , so the whole process is getting execute.
and also what this ##0 means. Like i know ##1 means wait for one clock cycle.
It will be great help.