SVA:SV断言期间的时钟门控

时间:2014-03-04 10:31:34

标签: verilog system-verilog assertion uvm system-verilog-assertions

我有一个SV断言,它检查属性如下

propert my_property;
@(posedge clk) disable iff(reset) $rose(halt) ##0 ((rx_prio) > (expec_prio)) ##[0:$] $rose(rdy) |-> ##[1:100] (my_prio[rx_prio]==1'b1);
endproperty:my_property

我的断言如下:

MY_PROPERTY_CHECK:assert property (my_propert)
else
$error;

这里的情况是,前提是真的,并且在1&之间检查结果。 100个时钟周期。在先行之后,由于时钟门控一段时间,时钟停止,然后时钟再次开始滴答。信号 my_prio [rx_prio] 在时钟门控后置位,但在100个时钟周期内再次置位。但我仍然认为断言失败了。

无法找出失败的问题。断言检查之间的时钟门控是否存在问题?或任何其他原因失败? 感谢。

2 个答案:

答案 0 :(得分:2)

可能会有很多线程开始。尝试使用下面显示语句的局部变量。请参阅IEEE Std 1800-2012§16.10局部变量

propert my_property;
  static int prop_cnt=0; // shared
  local  int prop_id; // Note: some require the "local", other need it omitted
  @(posedge clk) disable iff(reset) 
    ($rose(halt) ##0 ((rx_prio) > (expec_prio)),
        prop_id=prop_cnt++,
        $display("Spawn prop_id:%0d prop_cnt:%0d @ %0t %m",
                   prop_id,prop_cnt,$time) )
    ##[0:$] ($rose(rdy),
        $display("Trigger prop_id:%0d prop_cnt:%0d @ %0t %m",
                     prop_id,prop_cnt,$time) )
    |-> ##[1:100] (my_prio[rx_prio]==1'b1,
        $display("Pass prop_id:%0d prop_cnt:%0d @ %0t %m",
                     prop_id,prop_cnt,$time) );
endproperty : my_property

如果您看到Spawn-Spawn-Trigger或Spawn-Trigger-Trigger,我们的任何东西都超出预期(即Spawn-Triger-Pass),那么就会出现意外的线程。

如果是这种情况,那么请查看IEEE Std 1800-2012§16.9.8 First_match操作

first_match(
    $rose(halt) ##0 ((rx_prio) > (expec_prio)) ##[0:$] $rose(rdy),
      $display("Spawn-Trigger prop_id:%0d prop_cnt:%0d @ %0t %m",
                   prop_id,prop_cnt,$time)

) |-> // ...

OR §16.9.10序列包含在另一个序列中

(
    ( $rose(halt) ##0 ((rx_prio) > (expec_prio)) ) within $rose(rdy)[->1],
      $display("Spawn-Trigger prop_id:%0d prop_cnt:%0d @ %0t %m",
                   prop_id,prop_cnt,$time)
) |-> // ...

您可能想为触发器创建sequence

答案 1 :(得分:0)

由于我不知道您的设置,我可以假设您可能在未被门控的层次结构上的时钟上触发,但是您在时钟被门控的确切层次结构中调试波。

如果您正在编写无法使用断言进行改装的RTL块的断言(它是VHDL / Verilog或者您不允许触摸该文件),请使用bind在该块内实例化断言:http://www.asic-world.com/systemverilog/assertions22.html