如何使用SystemVerilog断言中的立即断言检查信号是否未更改

时间:2017-06-15 14:33:28

标签: system-verilog system-verilog-assertions

我是SystemVerilog Assertions的新手,我知道我可以使用Concurrent Assertions检查信号在时钟滴答之间是否有变化:

assert property (@(posedge clk) enable == 0 |=> $stable(data));

但是我如何继续使用立即声明?这是我在网上找到的一个例子,但我不确定这是我需要的以及它是如何工作的:

assign not_a = !a;
always_comb begin : b1
    a1: assert (not_a != a);
    a2: assert #0 (not_a!= a); // Should pass once values have settled
end

1 个答案:

答案 0 :(得分:0)

你所要求的是没有任何意义的。如果信号永远不会改变,那么它必须是一个常数。根据您显示的示例,a1可能会失败 - anot_a之间存在竞争条件。 a2是延迟断言 - 它负责比赛,永远不会失败。但这两个断言的问题是,如果a在某个时间发生变化,a2永远不会失败,您可能看不到a1

的失败