У нас может быть два подхода: причина, а затем эффект или эффект из-за причины .
Причина, а затем эффект приближения :
Вы можете использовать утверждение на основе времени вперед , утверждающее, что при срабатывании s_test
значение b
должно возрастать в течение 1-5 тактов временного окна:
s_test.triggered |-> ##[1:5] $rose(b);
Эффект затем вызывает приближение :
В качестве альтернативы, если s_test
является сигналом , тогда вы можете использовать клейкую логику, которая отслеживает последние 5 значенийs_test
.После этого утверждение проверяет, что более ранние значения s_test
должны иметь по крайней мере 1'b1, когда b
возрастает с 0 до 1.
bit[1:5] earlier;
always @(posedge clk) begin
earlier <= {s_test, earlier[1:5]}; // shift for 5 clocks
end
p1_past20: assert property(@(posedge clk)
$rose(b) |-> $countones(earlier) >= 1);
Подобное обсуждение доступно здесь и ссылка более здесь .