К сожалению, ваше решение зависит от того, какой симулятор вы используете.Я попробовал четыре и получил различное поведение на каждом.
Я думаю, что ваше решение таково:
example3 : assert property(
@(posedge clk) disable iff(reset)
A |-> s_eventually B)
else
$error("%t - Assertion example3 failed", $time);
на основе его работы на двух симуляторах и моего понимания SVA.В одном симуляторе оператор $error
в блоке действий фактически выполняется и отображается сообщение "Assertion example3 failed
";в другом отображается общее сообщение об ошибке.
s_
означает «сильный».Утверждение означает, что B
должно произойти за некоторое время до окончания симуляции.
Вот MCVE .На ваш вопрос было бы легче ответить, если бы вы включили что-то вроде этого.
module M;
bit stop; bit clk; initial while (!stop) #5 clk = ~clk;
bit A, B;
initial begin
#20 A = 1;
#10 A = 0;
// #10 B = 1;
#10 B = 0;
#50 stop = 1;
end
example1 : assert property(
@(posedge clk)
A |-> B[->1])
else
$error("%t - Assertion example1 failed", $time);
example2 : assert property(
@(posedge clk)
A |-> eventually [0:7] B)
else
$error("%t - Assertion example2 failed", $time);
example3 : assert property(
@(posedge clk)
A |-> s_eventually B)
else
$error("%t - Assertion example3 failed", $time);
final
$display("Finished!");
endmodule
https://www.edaplayground.com/x/2RtF