the following assertion will check idle is high as long as reset is low. what will be the value of idle when reset transition to high.
property reset_chk0_p;
@(posedge clk)
$fell(reset) |-> ##[0:1] idle ##0 idle[*0:$] intersect !reset[*0:$] ##1 $rose(reset);
endproperty
idle[*0:$](repetition with unbounded range) is equivalent to
!idle or idel ##1 idel or idel ##1 idel ##1 idel or .. so on.
##[0:$] idel (its unbounded range) is equivalent to
idel or !idel ##1 idel or !idel ##1 !idel ##1 idel or .. so on.
sequence stable_seq ;
$stable(idle) throughout $rose(reset)[->1] ;
endsequence
property reset_chk0_p;
@(posedge clk) $fell(reset) |-> ##[0:1] idle ##1 stable_seq ;
endproperty
// We use ##1 stable_seq instead of ##0 stable_seq as idle could have changed at same clock as $fell(reset) is True OR 1 clock after $fell(reset) is True.
// Hence $stable(idle) would be False in these 2 cases had we used ##0 stable_seq
sequence stable_seq ;
$stable(idle) throughout $rose(reset)[->1] ;
endsequence
property reset_chk0_p;
@(posedge clk) $fell(reset) |-> ##[0:1] idle ##1 stable_seq ;
endproperty
// We use ##1 stable_seq instead of ##0 stable_seq as idle could have changed at same clock as $fell(reset) is True OR 1 clock after $fell(reset) is True.
// Hence $stable(idle) would be False in these 2 cases had we used ##0 stable_seq
Can’t implement like this instead of using the sequence?