tgoop.com/cpu_design/113
Last Update:
System Verilog Assertion и синтаксический сахар, разбираемся |=>
или |->
##1
В рамках данной рубрики мы уже обсуждали подходы для описания процедурных блоков always
(ссылаясь на утекшие код-стайл гайдлайны от Intel), оператор inside
, а теперь добрались до SVA.
Наткнулся на интересное сообщение от Юрия Панчула в чате Школы Синтеза.
Обсуждается вопрос, как лучше описывать задержку для проверки выражение в следующем такте: через |=>
, что является синтаксическим аналогом неблокирующего присваивания, или через оператор |-> ##N
(привет задержкам в синтезируемом коде).
Небольшой ликбез для энтузиастов, которые еще не сталкивались с ассёршинами.
SystemVerilog Assertions (SVA) используются для проверки соответствия поведения цифровой схемы заданным требованиям и свойствам. Это позволяет выявлять ошибки в проектировании на ранних этапах верификации и ускоряет процесс разработки.
Например, мы знаем, что в одном такте не может произойти N взаимоисключающих событий, такое условие мы можем описать при помощи SVA, объединяя сигналы оператором конкатенации и используя функцию $onehot
. Смотри пример для csr блока в дизайне scr1.
Вернемся к нашему синтаксическому сахару
Основные доводы для замены |=>
на |->
##1
из статьи Каммингса:
1) для описания SVA достаточно |->
, а оператор |=>
избыточная надстройка, заменяемая |->
##1
;
2) инженер может перепутать операторы |->
и |=>
, а при явном описании величины задержи ##1, ##N, ##0
выстрелить в ногу становится сложнее;
3) поговаривают, что в ARM в кодстайл гайде запрещается использовать |=>
Доверяем ли мы инженерам ARM'а в этом вопросе?
"At multiple DAC conferences many years ago (~2004 and ~2005), my colleague, Alan Hunter of
ARM shared that ARM engineers were not allowed to use |=> instead they were required to use
|-> ##1"
Подробнее ознакомиться с сабжем можно в статье Каммингса [линк на pdf], раздел 9. А обсудить описание SVA или почему опять инженерам нечем заняться кроме придумывание очередного гайдлайна всегда можно в комментариях 💬
#bestpractice