使用 $display/uvm_error 进行 sva 事件调度

sva event scheduling with $display/uvm_error

所以我记得当断言触发时断言中的数据信号来自时钟边沿之前。

我想在我的断言中放置一条有用的错误消息,让用户知道出了什么问题,但是当 $display() 发生时,数据已经更改。

例如,当 ready/valid 握手发生时,只要 data=0,下面的断言就会失败。但是,如果断言触发时恰好有数据的上升沿,则打印的 $display 将显示 data=1。

  default clocking CLK @(posedge clk);
  endclocking
  //Assertion triggers an error if data is not = 1 when new data is clocked into the DUT.
  POS_DATA: assert property ((ready & valid) |-> data) else $display("[%t] POS_DATA fail data:%d",$time,data);

是否有更好的方法来编写此断言?

创建了一个 EDAPlayground Example,看起来所有的模拟器都做同样的事情,看来这是我的错。

您只需添加 $sampled(data)

POS_DATA: assert property ((ready & valid) |-> data) else $error(" POS_DATA fail data:%d",$sampled(data));

您应该使用 $error 而不是 $display。稍后当您开始 运行 回归并获得覆盖率报告时,您会感谢我的。