Давайте рассмотрим простой пример d-триггера с асинхронным сбросом.
q должен быть обновлен с помощью d на следующем фронте часов, это можно записать с помощью простого утверждения оператора импликации.
Однако как зафиксировать поведение сброса в assertion. Я пробовал подписаться на несколько
assert @(posedge rst) (1'b1 |-> !Q);
assert @(posedge rst) (1'b1 ##0 !Q);
оба эти утверждения терпят неудачу, я думаю, потому что нет следующей постановки первого?
assert @(posedge clk) ($rose(rst) |-> !Q);
проходит, но требует свободных часов и устанавливается между двумя краями часов (не заданное поведение для первого)
assert #0 (not (rst & Q));
Насколько я понимаю, это правильное немедленное утверждение, однако я не вижу, как это проходит / не работает в средстве просмотра сигналов. Более того, я думаю, что не смогу написать прикрытие по последнему типу утверждений.