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

System verilog 如何在断言中使用SystemVerilog序列属性?,system-verilog,system-verilog-assertions,System Verilog,System Verilog Assertions,我想说,如果有无限数量的输入,最终我会得到一个输出,我该怎么做 在脚本的其他部分,我想假设输入的供应是有限的,所以我不能只写假设输入的数量是无限的,并且在全局范围内保持不变 到目前为止,我已经编写了属性: property always_another_valid_input; @(posedge clock) ##[1:$] valid_input; endproperty property foo; @(posedge clock) always_another_valid_

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

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

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

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);
但当我运行此命令时,我得到一个错误:属性实例始终\u序列表达式中不允许另一个\u有效\u输入

如果我用非序列属性替换|->的任一侧,那么仍然会得到一个错误。仅当两侧都是非序列属性时,它才起作用

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

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

属性_expr::= ... 序列_expr |->属性_expr 序列_expr |=>属性_expr

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

如果将另一个有效输入声明为序列而不是属性,则代码将编译

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