property X;
@(posedge clk)
A ##[1:10] B ##[1:5] C;
endproperty
Does the above go through all 10x5=50 combinations?
I mean A is 1 on cycle 3 and 5, but B is 1 on cycle 10 only. C is always 1.
Simulator:
cycle 1 - A is 0
cycle 2 - A is 0
cycle 3 - A is 1 → checking B, going through cycles 4 to 8, B is never 1 for that time range
cycle 4 - A is 0
cycle 5 - A is 1 → checking B, going through cycle 6 to 10, B is 1 on cycle 10 → checking C → SVA PASSED.
Will the following SVA be treated in a similar way?
Or would it be:
cycle 1 - A is 0
cycle 2 - A is 0
cycle 3 - A is 1 → checking B, going through cycles 4 to 8, B is never 1 for that time range → SVA FAILED.
You have multiple threads
A ##[1:10] B ##[1:5] C; // is same as
A ##[1] B ##[1] C or
A ##[1] B ##[2] C or
…
A ##[1] B ##[5] C or // AND (that is an error)
… with the ##[2], ##[3] up to
A ##[10] B ##[1] C or // AND
A ##[10] B ##[2] C or // AND
…
A ##[10] B ##[5] C;
You can use the first_match for the search of the first occurrence of a thread.
I STRONGLY suggest that you read my paper Understanding the SVA Engine (item 3 in my signature) if you really want to understand these concepts along with the treads and how they
relate in antecedents and consequents.