以下两个属性有何不同?
property p1;
@(posedge clk) disable iff (Reset) b ##1 c;
endproperty
property p2;
@(posedge clk) (~Reset & b) ##1 c;
endproperty
assert property (p1);
assert property (p2);
答案 0 :(得分:5)
非常不同。
在p1
中,Reset
是异步未采样的。在评估p1
期间的任何时间,Reset
变为真,该属性被禁用。当Reset为false时,每次posedge clock
都会尝试在一个时钟周期后检查b
是否为真,c
对于尝试通过为真,否则失败。如果在任何时候重置为真,则所有活动尝试都将被终止。
在p2
中,同步采样Reset
。每次posedge clock
尝试检查~Reset &b
在一个时钟周期之后是否为真,c
对于尝试通过是真的,否则失败。如果Reset
变为真,则尝试将失败。
答案 1 :(得分:1)
p1
有异步重置。在任何端口Reset
都很高,任何活动的p1
线程都将被中止。p2
仅在第一个时钟检查Reset
。如果Reset==1
或b==0
。以下是视觉方法的两个例子。
clk ‾‾‾\__/‾‾‾\__/‾‾‾ Reset _________/‾‾‾‾‾‾‾ b ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ c ‾‾‾‾‾‾‾‾‾\_______ c is asynchronously reset by Reset in this example p1 .___ Assertion aborts on posedge Reset p2 .______↓ Assertion fails
clk ‾‾‾\__/‾‾‾\__/‾‾‾ Reset ____/‾‾‾‾‾‾‾‾‾‾‾‾ b ‾‾‾‾‾‾‾\_________ c ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ p1 Assertion never starts p2 ↓ ↓ Assertion fails