The tool shows the property starts at 2nd tick, and fails at fourth tick.
~a[*1:10] = ~a[*1] or ~a[*2] or … or ~a[*10]. In the waveform, ~a[1] is true and ~[a2] is false. But,1 or 0 or 0 = 1, so the left operand of intersect are always true.
why it fails at fourth tick?
Thank you!
I have some questions related to intersect.
(~a[*1:10]) intersect (b[->1] ##1 !b) , (~a[*1:10]) and (b[->1] ##1 !b) start and end in the same cycle.
Q1: How to know the start point for (b[->1] ##1 !b) and (~a[*1:10])?
Q2: if b is 1 at t2, does it mean that (b[->1] ##1 !b) not match at t2? Therefore,(~a[*1:10]) intersect (b[->1] ##1 !b) not match, and my property is false. Am I correct?
Thank you
I have some questions related to intersect.
(~a[*1:10]) intersect (b[->1] ##1 !b) , (~a[*1:10]) and (b[->1] ##1 !b) start and end in the same cycle.
Not quite correct.
(~a[*1:10]) and (b[->1] ##1 !b) Must start in the same cycle
and in one sequence ends, then the other sequence must match at the completion
of that other ended sequence.
For the above diagram, If I wrote as follows:
(##1 a ##1 !a ##1 a ##1 !a[*1:]) intersect (b[->1] ##1 !b)
then when the RHS sequence ends, the LHS sequence must match until that point.
The LHS is endless because of the [*1:].
If the LHS does not have a match during the RHS sequence, then the antecedent fails.
In reply to peter:
a_sequence[*0] is called an empty match
(b[*0] ##1 c ) is equivalent to c
Thus,
A:(~a[*1:10]) intersect (!b[*0] ##1 b ##1 !b) // is same as
A:(~a[*1:10]) intersect (b ##1 !b)
// Obviously different that
B:(~a[*1:10]) intersect (##1 b ##1 !b)
/* 1800'2017 16.9.2.1 Repetition, concatenation, and empty matches Using 0 as a sequence repetition number, an empty sequence (see 16.7 ) results, as in this example: */
a [*0]
/* Because empty matches occur over an interval of zero clock ticks and are thus of length 0, they follow the set of concatenation rules specified below. In the following rules, an empty sequence is denoted as empty, and another sequence (which may be empty or nonempty) is denoted as seq.*/
— (empty ##0 seq) does not result in a match.
— (seq ##0 empty) does not result in a match.
— (empty ##n seq), where n is greater than 0, is equivalent to (##(n-1) seq).
— (seq ##n empty), where n is greater than 0, is equivalent to (seq ##(n-1) `true).
Hi Ben,
what is the meaning of empty match? someone says s[*0] not match any posititve number of clocks.
I am a bit confused.
what scenario we need using the empty match? (would you give an example)
a_seq[*0] is an empty match because repeating something 0 times means it does not exist.
It comes up when you write something like
a ##1 b[*0:1] ##1 c
// same as
a ##1 b[*0] ##1 c or a ##1 b[*1] ##1 c
// same as
a ##1 c or a ##1 b[*1] ##1 c