I see a Warning saying “Large delay or repetition found” for the below sequence. There are three signals a, b and c with respective enable signals. There is a pre-defined delay between the rising of enable and the respective signals.
sequence check_a;
$rose(enable_a) ##delay_a $rose(sig_a);
endsequence
sequence check_b;
$rose(enable_b) ##delay_b $rose(sig_b);
endsequence
property check_seq_abc;
@(posedge clk)
check_a and check_b |-> ##delay_c $rose(sig_c);
endproperty
The delays used are constant values. For example delay_b = 200ns and hence there is a warning. What is the maximum delay value that can be used inside a property.
In reply to Anvitha:
Can you show us the exact declarations you used to define your delays?
The ## operator is a cycle count, not a relative time delay. if you had
parameter delay_b = 200ns; and the current time precision was 1ps, that is a cycle count of 200000 clock cycles.
In reply to dave_59:
Sorry for the typo here. The ##delay_b is 200.
The sequence is like:
sequence check_b;
$rose(enable_b) ##200 $rose(sig_b);
endsequence
The delay between enable_b and sig_b is 2000ns and the reference clock is of 100Mhz frequency. So the ##delay_b (i.e.,the number of clock cycles)is derived as 2000ns/10ns which is 200.
Please correct me if the method followed is inappropriate.
In reply to Anvitha:
There is nothing in the LRM placing a limit on the number of cycles. There can be performance issues when specifying large ranges like ##[0:200] in certain places, but I don’t see a problem with any fixed range in the example you show. This might be a tool specific issue and you’ll need to contact your tool vendor to see the reason behind the warning.