在SystemVerilog断言中处理重置

时间:2014-02-20 19:11:57

标签: system-verilog system-verilog-assertions

以下两个属性有何不同?

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);

2 个答案:

答案 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==1b==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