I started going through @ben2 '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?
[quote]I started going through @ben2 's paper on ‘Solving Complex Users’ Assertion.
// Is there a good online source to understand sequences?
[/quote]
//[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