|=> или |-> ##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
