Форматирование
Нет ничего плохого во вложенном условном непрерывном присваивании, но есть способы сделать его более читабельным:
assign a = (b) ? '1
: (c&d) ? '0
: (f&h) ? '1
: '0;
Тем не менее, это все еще структура типа «if ... else if ... else if ... else», и вопрос, который вы должны задать себе, заключается в том, что этот код должен делать и как он будет «читать». Вышеупомянутое может быть легче читать (при синтезе того же кода), если это код, использующий структуру always и "" if ... else if ... else if ... else ".
Вот пример чистого использования вложенного условного непрерывного присваивания:
assign a = (state == STATE1) ? '1
: (state == STATE2) ? '0
: (state == STATE3) ? '1
/* default */ : '0;
Читаемость
Учтите, что показанная вами форма может сэкономить время при первоначальном наборе кода, но гораздо более важно, чтобы ваш код был читаемым. Будь то вы или другой дизайнер, просмотрев код через год или больше, они оценят форму, которая позволяет им быстро понять, что делает логика.
Кодирование можно ускорить без потери читабельности с помощью редактора, который поддерживает автоматически расширяющиеся фрагменты (или сокращения). Я использую vim с сокращениями, которые действительно ускоряют ввод всей блочной структуры, и сценариями выравнивания, которые позволяют мне вертикально выровнять заданный символ (например, «=» или «(») или строку при выборе.
person
Marcin K
schedule
15.04.2014
assign a = b | (~(c&d) & f & h)
? - person Qiu   schedule 15.04.2014a
не может быть одним битом, поскольку значения присваивания - это SystemVerilog'0
и'1
, поэтому ваше уравнение не обязательно эквивалентно. - person Greg   schedule 15.04.2014