如何在断言中使用SystemVerilog序列属性?

时间:2017-03-08 14:43:32

标签: system-verilog system-verilog-assertions

我想说"如果有无限数量的输入,最终我得到输出",我该怎么做?

在剧本的其他部分,我想假设一个有限的输入供应,所以我不能写#34;假设有无限数量的输入"并在全球范围内持有。

到目前为止,我已写过属性:

property always_another_valid_input;
   @(posedge clock) ##[1:$] valid_input;
endproperty

property foo;
    @(posedge clock) always_another_valid_input |-> ##[0:$] bar == 1;
endproperty

assert property (foo);

但是当我运行此操作时出现错误:property instance always_another_valid_input is not allowed in sequence expression

如果我用非序列属性替换|->的任一侧,那么我仍然会收到错误。它仅在双方都是非序列属性时才有效。

有解决这个问题的好方法吗?

1 个答案:

答案 0 :(得分:1)

请参阅IEEE Std 1800-2012§16.12声明属性,更具体地说是§16.12.6 Implication ,您将看到|->语法ussage是描述为:

  

property_expr :: =
  ...
  sequence_expr |-> property_expr
  sequence_expr |=> property_expr

左侧必须是序列或序列表达式。即使该属性仅包含序列表达式,它也不能是属性。

如果您将always_another_valid_input声明为sequence而不是property,则代码将编译

sequence always_another_valid_input;
   @(posedge clock) ##[1:$] valid_input;
endsequence