Мне нужно проверить значение сигнала после определенного периода времени, когда возникает фронт часов. Например, я хочу проверить, что, если сигнал b утверждается на высоком уровне 1 пс после того, как происходят часы posedge.
Предоставляет ли SVA синтаксис для этого?
система-verilog-утверждения не предназначались для проверки синхронизации на уровне шлюза. Verilog уже предоставляет ряд встроенных и оптимизированных проверок времени, таких как $setuphold и $skew. См. раздел 31. Проверка времени в IEEE 1800-2017 SystemVerilog LRM.
Проверки синхронизации обычно выражаются в виде ограничений — либо утверждение происходит при наименее через 1 пс после фронта тактового сигнала, либо при самый через 1 пс после фронта тактового сигнала. Кроме того, долженb
будет устанавливаться после каждого фронта тактового сигнала? Независимо от ответов на эти вопросы можно использовать SVA для моделирования проверки синхронизации, но вам придется вручную создавать уравнения на основе реальных требований. Например
property p;
realtime timestamp;
@(posedge c) ($rose(a), timestamp = $realtime) =>
@(posedge b) $realtime - timestamp < 1ps;
endproperty
@yildizabdullah, я обновил код, чтобы отразить ваши дополнительные требования.
Разве оператор импликации не должен быть |=>
, а не =>
?
Если a высокое, то b должно утверждаться на высоком уровне 1 пс после того, как происходят часы posedge, это на самом деле то, что я хочу проверить.