ack_rose: assert property(@(posedge clk)
$rose(ack) |=> ack);
ack_gnt: assert property(@(posedge clk)
##2 ack |=> $rose(gnt));
ack_rose: assert property(@(posedge clk)
$rose(ack) |=> ack);
ack_gnt: assert property(@(posedge clk)
##2 ack |=> $rose(gnt));
The ack_rose
assertions says that whenever ack
rises, it must remain high for at least one clock cycle. Your description did not state that as a requirement. Should it be?
The ack_gnt
assertion says starting after the second clock cycle, if ack is high, gnt must rise the next clock cycle. That only works when ack rises in the first clock cycle.
You probably want
$rose(ack) ##0 ack[*2]|-> ##1 $rose(gnt))
or
$rose(ack) |-> (ack&&!gnt)[*2] ##1 $rose(gnt))
Thanks dave_59,
I thought whenever ack goes high, it can remain high upto any clock cycles but whenever gnt goes high, before that ack stays high for 2 clock cycles.