1

I understand that [-> m] is a non-consecutive GoTo operator and can be used as (e.g.)

@(posedge clk) a |=> b [->2] ##1 c;

But I came across an example, where I see (in the middle of a property), a -> b. What does that mean? Does it mean if a is true that b is true? Does it behave like an overlapping implication operator? Please see the example below. Thanks.

property count_event(reg [15:0] PerfCtr, reg [15:0] event_count);

 
@(posedge DfiClk)

disable iff (disable_perfcntcheck)

((PWR_OK === 1'b1) && (Reset === 1'b0) && (DebugPerfCtrEn === 1) && (dfi_event_select === 1) && ($rose(dfi_event))) |->

##[1:5] !$isunknown(capture_dly) && (**!capture_dly -> event_count == PerfCtr**) ##1 !$isunknown(capture_dly) && (**capture_dly -> event_count == PerfCtr**);
Some programmer dude
  • 400,186
  • 35
  • 402
  • 621
CCRCCR
  • 19
  • 2
  • And if you haven't done it yet, then please take some time to read [the help pages](http://stackoverflow.com/help), take the SO [tour], read [ask], as well as [this question checklist](https://codeblog.jonskeet.uk/2012/11/24/stack-overflow-question-checklist/). – Some programmer dude Jul 24 '22 at 16:10

1 Answers1

1

It looks like it is in the middle of a logical expression, not property. It is the logical implication operator:

11.4.7 Logical operators

The logical implication expression1 –> expression2 is logically equivalent to (!expression1 || expression2), and the logical equivalence expression1 <–> expression2 is logically equivalent to ((expression1 –> expression2) && (expression2 –> expression1)). Each of the two operands of the logical equivalence operator shall be evaluated exactly once.

Serge
  • 11,616
  • 3
  • 18
  • 28