System verilog assertion : |-> operator with intersect construct

property intersect_1;
@(posedge clk) (a |-> ##[1:2] b) intersect (c |-> ##[2:3] d);
endproperty

// above code is giving compilation error as shown below

QuestaSim qverilog 10.2e_3 Compiler 2014.09 Sep 25 2014
/tools/mentor/questa10.2e_3/questasim/bin/…/linux/qverilog a1.sv
– Compiling module a1
**** Error: a1.sv(51): near “intersect”: syntax error, unexpected intersect, expecting endproperty**

/////////////////

Thanks

In reply to kishan patel:

The intersect operator only works between two sequences. You are trying to intersect two properties.

In reply to dave_59:

In reply to kishan patel:
The intersect operator only works between two sequences. You are trying to intersect two properties.

So, for intersect it is not valid …

But it is valid for “and”

   property and_1;
     @(posedge clk) (a |-> ##[1:2] b) and (c |-> ##[2:3] d);
   endproperty

//above code is running without any compilation error.

so, can you tell me what is the exact problem while using it with intersect because, “and” & “intersect” is almost same. only the difference is length of sequence.

or it is like LRM says that we can’t use implication_operator with “intersect” but we can use it with “and”.

Please clear my doubt.
Thanks

In reply to kishan patel:

Why do you need |-> operator here? Might as well just use a ##[1:2} b

In reply to kishan patel:

There is a difference between and used between two sequences from and used between two properties. You are correct that the only difference between the and and intersect sequence operators is whether the ending time of the two sequences need to match.

When you and properties together, there are no connections between the timings of the two properties. The expression is true simply if, and only if, both properties are true. You have to look at the context know which and operator to apply.

In reply to dave_59:

In reply to kishan patel:
There is a difference between and used between two sequences from and used between two properties. You are correct that the only difference between the and and intersect sequence operators is whether the ending time of the two sequences need to match.
When you and properties together, there are no connections between the timings of the two properties. The expression is true simply if, and only if, both properties are true. You have to look at the context know which and operator to apply.

What is the difference between and used between two sequences from and used between two properties…??

In reply to kishan patel:

When you and properties together, there are no connections between the timings of the two properties. The expression is true simply if, and only if, both properties are true.

When you and sequences together, the two sequences must start on the same cycle. There is a match when both sequences match- the matches do not have to come on the same cycle.