System verilog 如何在系统verilog断言中写入属性?

System verilog 如何在系统verilog断言中写入属性?,system-verilog,verification,formal-verification,system-verilog-assertions,System Verilog,Verification,Formal Verification,System Verilog Assertions,我想在SVA中编写一个属性来正式验证行为 以下是我想说的: property prop1(sig1,sig2,sig3,sig4); @(posedge clk) $fell(sig1) ##[1:$] first_match($fell(sig2)) ##0 sig3 |-> sig4 == sig3; endproperty 我如何重写上述属性,以便在sig1下降后,在剩余的评估周期中保持低水平 注意:我不想将sig1设置为禁用iff(sig1) 参见1800-201

我想在SVA中编写一个属性来正式验证行为

以下是我想说的:

property prop1(sig1,sig2,sig3,sig4);
    @(posedge clk)
    $fell(sig1) ##[1:$] first_match($fell(sig2)) ##0 sig3 |-> sig4 == sig3;
endproperty
我如何重写上述属性,以便在sig1下降后,在剩余的评估周期中保持低水平

注意:我不想将sig1设置为禁用iff(sig1)


参见1800-2012 LRM第16.9.9节“序列条件”“sig1下降后,其在剩余评估周期内保持较低”是先决条件还是条件的一部分?换句话说,如果sig1保持低位,您是想检查sig4==sig3,还是想检查sig1是否保持低位,以及检查sig4=sig3?谢谢!还有一个问题:如何扩展此属性以验证16个连续周期(sig4==sig3)[*16]上的结果/满意序列?同时确保sig1==1'b0;您也可以在结果中使用through,但在一个简单的情况下,您只需执行
(!sig1&&sig4==sig3)[*16]
在上述情况下,如果sig1是一个主要输入,那么工具将尝试找到一个反例,其中sig1是1'b1。我试着在结果中使用“贯穿”,但没有成功。我可以试试下面的东西吗?(!sig1)在整个(##[1:$]首次匹配($fall(sig2))##0 sig3 |->sig4==sig3)您不需要我的许可就可以尝试任何代码。:)这不是我在最初的回答中提出的吗?正式的工具可能有一些我不知道的额外的编码规则。:-)很抱歉有这么愚蠢的评论。我已经试过了。正式的工具总是试图为结果找到反例。因为sig1是主要输入,所以我不能像前面提到的那样放置它()。无论如何,谢谢你:)
property prop1(sig1,sig2,sig3,sig4);
    @(posedge clk)
    (!sig1) throughout (##[1:$] first_match($fell(sig2)) ##0 sig3) 
          |-> sig4 == sig3;
endproperty