property_expr ::=
…
| strong ( sequence_expr )
| sequence_expr #-# property_expr
| sequence_expr #=# property_expr
There is NO implication here. #-# is equivalent to ##0 if you substitute
property_expr with sequence.
So the #-# just says
sequence_expr is followed by a property_expr in a manner similar to
sequence ##0 sequence says a sequence followed by another sequence.
en Cohen Ben@systemverilog.us
Link to the list of papers and books that I wrote, many are now donated.
I understand that #-#, #=# don’t have meaning of implication unlike |->, |=>. Therefore, the check is done at every clock. A few articles says no vacuous pass with followed-by operator, #-#, #=#. But they are NOT implication property. So, check is done at every clock unless there is implication before them. Therefore, no vacuous pass in that sense. I misunderstood it and I thought strong attribute can be applied with #-#. I guess the person who created the following post made the same misunderstanding as me.
Usually, #-# is used to combine two properties as follows.
A |-> B #-# C |-> D
And, I think this is equivalent to the following two properties.
A |-> B A ##0 B ##0 C |-> D
In this sense, followed-by operators are different from simple concatenation of implication.
"B #-# (C |-> D)" and "B ##0 C |-> D"?
A: B #-# (C |-> D)
B is a sequence
(C |->D) is a property
if B==0 then ( B #-# (C |-> D)) property is false (Fails in an assertion)
(B #-# C) |-> D is illegal because (B #-# C) is a property
-----
B ##0 C |-> D
B ##0 C is a sequence and is an antecedent
D is sequence treated as a property in the consequent
if B==0 then (B ##0 C |-> D) property is vacuously true, (vacuous in an assertion)
Ben Cohen Ben@systemverilog.us
Link to the list of papers and books that I wrote, many are now donated.