如何在断言中使用 SystemVerilog 序列属性?
How can I use SystemVerilog sequence properties in asserts?
我想说"if there are an unlimited number of inputs, eventually I get an output",我该怎么办?
在脚本的其他部分,我想假设输入的供应有限,所以我不能只写 "assume there are an unlimited number of inputs" 并在全球范围内保持这种状态。
到目前为止我写了属性:
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含义,您将看到|->
语法用法描述为:
property_expr ::=
...
sequence_expr |->
property_expr
sequence_expr |=>
property_expr
左边必须是序列或序列表达式。它不能是 属性,即使 属性 只包含一个序列表达式。
如果您将 always_another_valid_input
声明为 sequence
而不是 property
,您的代码将编译
<b>sequence</b> always_another_valid_input;
@(posedge clock) ##[1:$] valid_input;
<b>endsequence</b>
我想说"if there are an unlimited number of inputs, eventually I get an output",我该怎么办?
在脚本的其他部分,我想假设输入的供应有限,所以我不能只写 "assume there are an unlimited number of inputs" 并在全球范围内保持这种状态。
到目前为止我写了属性:
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含义,您将看到|->
语法用法描述为:
property_expr ::=
...
sequence_expr|->
property_expr
sequence_expr|=>
property_expr
左边必须是序列或序列表达式。它不能是 属性,即使 属性 只包含一个序列表达式。
如果您将 always_another_valid_input
声明为 sequence
而不是 property
,您的代码将编译
<b>sequence</b> always_another_valid_input;
@(posedge clock) ##[1:$] valid_input;
<b>endsequence</b>