System verilog SystemVerilog断言:一旦A被断言,A将保持高位,直到B被反断言,然后A将最终处于低位
我试图写一个断言: 一旦A被断言,A将保持高位,直到B被取消断言。在此之后,A将最终取消声明 我写的断言是:System verilog SystemVerilog断言:一旦A被断言,A将保持高位,直到B被反断言,然后A将最终处于低位,system-verilog,verification,system-verilog-assertions,System Verilog,Verification,System Verilog Assertions,我试图写一个断言: 一旦A被断言,A将保持高位,直到B被取消断言。在此之后,A将最终取消声明 我写的断言是: my_assertion : assert property( @(posedge clk) disable iff(reset) $rose(A) |-> A throughout !B [->1] ## [0:$] !A) else $display("Assertion failed") 在取消断言时,断言失败。伙计们,你们能告诉我我的断言哪里做错
my_assertion : assert property(
@(posedge clk) disable iff(reset)
$rose(A) |-> A throughout !B [->1] ## [0:$] !A)
else $display("Assertion failed")
在取消断言时,断言失败。伙计们,你们能告诉我我的断言哪里做错了吗?“[0:$]”是否未正确使用?
在整个过程中的优先级高于;参见§16.9顺序操作表16-1
因此A贯穿始终!B[->1]##[0:$]!A
是整个(!B[->1]#[0:$]!A)
中的样本AA。这会失败,因为在上一个循环中,A
必须为高(整个的左侧)和低(整个的右侧),这将始终被评估为false
我相信期望的行为是:(A贯穿!B[->1])\!A
我认为您的问题是由于运算符优先级。当取消评估时,此操作不会失败:
$rose(A) |-> (A throughout !B [->1]) ## [0:$] !A
而您所写的内容与以下内容相同:
$rose(A) |-> A throughout (!B [->1] ## [0:$] !A)
它永远不会通过,因为A
不能同时为真和假