#verilog #system-verilog
#verilog #system-verilog
Вопрос:
что такое операторы подстановки в system verilog? Я искал в сети, но есть некоторая двусмысленность.
Также они синтезируемы?
Ответы на нижеприведенные вопросы?
4'b1010 ==? 4'b10x0
4'b10x0 ==? 4'b1010
Комментарии:
1. Ответ на первую часть вопроса можно найти в любом руководстве или документации verilog. Вторая часть о синтезируемости интересна, и я голосую за повторное открытие вопроса.
Ответ №1:
Похоже, вы не искали в IEEE 1800-2017 SystemVerilog LRM. Раздел 11.4.6 Операторы равенства подстановочных знаков определяет этот оператор. Поиск дал бы много других примеров, подобных приведенному здесь .
Операторы равенства подстановочных знаков предназначены для синтеза, если X отображается в RHS как литеральное или постоянное выражение. X в RHS рассматриваются как совпадения безразличия. Символы X в LHS ничему не соответствуют и используются только при моделировании. inside
Оператор и case inside
условный оператор используют это асимметричное сопоставление подстановочных знаков для synthesizable don’t carets.
Ответ №2:
Из раздела 5.5 «Стандарта IEEE для синтеза уровня передачи регистров Verilog» стандарта IEEE Std 1364.1-2002 (1364 — это базовая спецификация, расширенная IEEE-1800, а 1361.1 определяет синтезируемое подмножество 1364):
The value x may be used in case item expressions (may be mixed
with other expressions, such as 4'b01x0) in a casex statement to
imply a don't care value for synthesis.
Поскольку оператор подстановки является очевидным расширением выражения casex, можно было бы разумно ожидать, что он предназначен для синтеза. Я не знаю о стандарте IEEE для 1800, который определяет синтезируемое подмножество; или если эта информация содержится в самом стандарте IEEE-1800.
Покойный Стюарт Сазерленд в своей статье предложил список синтезируемых конструкций для IEEE-1800, который включал равенство подстановочных знаков: https://sutherland-hdl.com/papers/2006-DVCon_SystemVerilog_synthesis_subset_paper.pdf
С практической точки зрения, окончательный способ проверить такой вопрос — это создать небольшой пример, используя эту конструкцию, и передать его в инструмент синтеза, который вы на самом деле планируете использовать, и посмотреть, получите ли вы предупреждения, ошибки или рабочий код!