【问题标题】:when to use $rose system task with a signal in assertions何时在断言中使用带有信号的 $rose 系统任务
【发布时间】:2014-09-03 06:19:34
【问题描述】:
我试图了解何时将$rose 用于断言中的信号。例如,以下两个断言在哪些方面会有不同的表现?
first:assert property
(@(posedge clk) $rose(reset) |-> (data == 0));
second: assert property
(@(posedge clk) reset |-> (data==0));
$rose 是不是要和异步信号一起使用?
【问题讨论】:
标签:
system-verilog
system-verilog-assertions
【解决方案1】:
$rose 表示在上一个时钟周期中信号为“0”,在当前时钟周期中为“1”。
第一个断言只会在reset 为高电平时检查第一个周期,而第二个断言将在reset 为高电平时在每个时钟周期检查data 是否为“0”。
这是一张漂亮的图画,显示了每个断言何时触发。
_ _ _ _ _ _
clk _| |_| |_| |_| |_| |_| |_
___________
reset _____| |_______
first x
second x x x
$rose 对同步信号有意义。
【解决方案2】:
$rose(reset) 在从0/x/z 到1 的转换时起作用,并且在发生这种转换时返回true。
reset 没有$rose 不解释了0/x/z 到1 的这种转换,并且在发生这种转换时将返回false。这是正确的吗?
【解决方案3】:
$rose() 是一个系统任务,用于检查信号的采样值是否在前一个样本和当前样本之间变为 1(前一个样本可能是 0/x/z)。
必须是两个连续的时钟周期样本。