Assertion fails at 5ns itself…At 5ns the CtrllerCmd changes from 3’bX to 3’b000, however I don’t understand why the assertion is triggering and failing ?
Could I get some advice on correcting this assertion ?
I am trying to write an assertion for: When the CtrllerCmd becomes/is 3’b100, the time between the CtrllerCmd = 3’b001 should be 56 clock cycles!
The assertion I have written is:
property p2;
@ (posedge clk) (CtrllerCmd == 3’b100) ##56 (CtrllerCmd == 3’b001)
endproperty
a2: assert property (p2) else $info (“PreCharge to Activate Violation”);
Assertion fails at 5ns itself…At 5ns the CtrllerCmd changes from 3’bX to 3’b000, however I don’t understand why the assertion is triggering and failing ?
At the first posedge of clk, CtrllerCmd ==3’bX in the Prepone region, thus, your assertion fails since your property has no implication operator and is a sequence. With 3’bX that sequence fails in the first attempt.
Could I get some advice on correcting this assertion ?
I am trying to write an assertion for: When the CtrllerCmd becomes/is 3’b100, the time between the CtrllerCmd = 3’b001 should be 56 clock cycles!
The assertion I have written is:
// When the CtrllerCmd becomes/is 3'b100, the time between the CtrllerCmd = 3'b001 should be 56 clock cycles!
ap56: assert property(@ (posedge clk) (CtrllerCmd == 3'b100) |-> ##56 (CtrllerCmd == 3'b001)) else $info ("PreCharge to Activate Violation");
// You may want to use the UVM severity levels
string tID="my module name";
ap56: assert property(@ (posedge clk) (CtrllerCmd == 3'b100) |-> ##56 (CtrllerCmd == 3'b001))
else `uvm_info(tID,$sformatf("%m : PreCharge to Activate Violation, CtrllerCmd=%b", CtrllerCmd), UVM_FULL);
An important, but code-wise minor suggestion - Please use $error or `uvm_error in fail action block. Using $info defeats the purpose of flagging errors.