the top_clk491 is high free running clock of 491Mhz and 61 specifies low 61Mhz clock. i am expecting the time from reset deassertion to first clock edge time should be greater than worst reset delay path.
But when i simulate even if the failure should happen at the first edge (my timing is such that it should fail) the assertion goes beyond first edge and validates at the second edge, to pass.
Somehow the ##[1:100] is propagating and taking in comparison and the $rose(CLK) as one.
What i want is to measure and check time at first edge. Please suggest…
($fell(RST),reset_deassert_time = $time) |-> (##[1:100] $rose(CLK),$display("time = %t",$time)) ##0(($time - reset_deassert_time) > worst_reset_delay_path);
// is of the form
expr1 |-> ##[1:100] expr2 ##0 expr3;
// That is equivalent to
expr1 |-> ##1 expr2 ##0 expr3 or // T1
##2 expr2 ##0 expr3 or // T2
...
##100 expr2 ##0 expr3; // T3
// Thus, if in T1 ##1 expr2==1 and expr3==0, that thread is ignored because of the "or"
// Thus, if in T2 ##1 expr2==1 and expr3==0, that thread is ignored because of the "or"
// ...
// The FIX
expr1 |-> first_match(##[1:100] expr2) ##0 expr3;
// For your property
property reset_to_clk_start_delay(CLK,RST) ;
realtime reset_deassert_time ; // <<<<<<<<< Use realtime
@(posedge top_clk_491)
disable iff(ccr_disable)
($fell(RST),reset_deassert_time = $realtime) |-> // <<<<<< Use $realtime
first_match( (##[1:100] $rose(CLK),$display("time = %t",$time)) ) ##0
(($time - reset_deassert_time) > worst_reset_delay_path);
endproperty
In reply to ben@SystemVerilog.us:
thanks Ben for clarification. my understanding for ##[1:100] was little flawed in terms of expr1 and expr2.
Thanks again…