【问题标题】:sva event scheduling with $display/uvm_error带有 $display/uvm_error 的 sva 事件调度
【发布时间】:2021-03-18 20:33:36
【问题描述】:

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

我想在我的断言中添加一条有用的错误消息,让用户知道出了什么问题,但是当 $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);

有没有更好的方法来编写这个断言?

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

【问题讨论】:

    标签: system-verilog system-verilog-assertions


    【解决方案1】:

    您只需添加$sampled(data)

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

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

    【讨论】:

    • 非常感谢。我错过了那个。我实际上正在使用 `uvm_error() 但在 edaplayground 上闲逛时试图使示例更易于详细说明/运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多