如何在断言中使用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