I want to see a failure if $rose(tErrorBit) is true -but- $rose(mCheck) is not true at the same clock. The assertion does not fail. It simply waits for both tErrorBit and mCheck go $rose at the same clock. Then it passes. How can I make it fail when tErrorBit and mCheck do not go $rose at the same clock?
Thanks much, Dave. Your first solution actually does exactly what I want. The only difference is that my spec expected the entire sequence to start with $rose(tagError). But checking for level sensitive tagError will work. I should have thought of moving part of the expression as an antecedent.
Your second solution has a typo (mCheck is repeated twice). Should be,
// an assertion of the form
a |-> ##[1:$] b ##0 c; // will never fail
// because there are other thread's to check.
// the fixes:
a |-> b[->1] ##0 c; // preferred
a |-> first_match(##[1:$] b) ##0 c; // option
##[1:$] b ##0 c // is same as
(##1 b ##0 c) or
(##2 b ##0 c) or
(##3 b ##0 c) or
......
(##$ b ##0 c); // $ is infinity
// if one thread fails, maybe another will pass