因此,我记得当断言触发时,断言中的数据信号来自时钟沿之前。
我想在我的断言中放一条有用的错误消息,让用户知道哪里出了问题,但是当$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,看起来所有的模拟器都做了同样的事情,所以这似乎是我的错。
发布于 2021-03-19 06:23:00
您所需要做的就是添加$sampled(data)
POS_DATA: assert property ((ready & valid) |-> data) else $error(" POS_DATA fail data:%d",$sampled(data));而且你应该使用$error而不是$display。当你开始运行回归并获得覆盖报告时,你会感谢我的。
https://stackoverflow.com/questions/66698739
复制相似问题