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

我想说“如果有无限数量的输入,最终我得到一个输出”,我该怎么做?如何在断言中使用SystemVerilog序列属性?

在脚本的其他部分,我想假设有限的输入量,所以我不能只写“假设有无限数量的输入”并且在全局范围内持有。

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

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

如果我使用非序列属性替换|->的任一侧,那么仍然会出现错误。它只适用于双方都是非序列属性的情况。

是否有解决此问题的好方法?

回答:

参见IEEE Std 1800-2012 § 16.12 声明属性,并且更具体§ 16.12.6 蕴涵,你会看到|->语法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

以上是 如何在断言中使用SystemVerilog序列属性? 的全部内容, 来源链接: utcz.com/qa/265664.html

回到顶部