System verilog 带有$display/uvm_错误的sva事件调度

System verilog 带有$display/uvm_错误的sva事件调度,system-verilog,system-verilog-assertions,System Verilog,System Verilog Assertions,所以我记得当断言触发时,断言中的数据信号来自时钟边缘之前 我想在我的断言中添加一条有用的错误消息,让用户知道出了什么问题,但到$display()发生时,数据已经更改了 例如,当发生就绪/有效握手时,只要data=0,下面的断言就会失败。但是,如果在触发断言时同时存在数据的上升沿,则打印的$display将显示data=1 default clocking CLK @(posedge clk); endclocking //Assertion triggers an error if

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

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

例如,当发生就绪/有效握手时,只要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);
有没有更好的方法来编写这个断言


创建了一个,看起来所有模拟器都做了相同的事情,所以这似乎是我的错。

您需要做的就是添加
$sampled(data)


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

非常感谢。我错过了那个。实际上,我使用的是'uvm_error(),但在操场上闲逛时,我试图使示例更易于详细说明/运行
POS_DATA: assert property ((ready & valid) |-> data) else $error(" POS_DATA fail data:%d",$sampled(data));