Общее эмпирическое правило, упомянутое во всех книгах, которые я до сих пор читал, заключается в том, что вы должны использовать неблокирующие присваивания в всегда блоках, которые управляются нарастающим или спадающим фронтом тактового сигнала. Наоборот, для описания комбинаторной логики необходимо использовать блокирующие присваивания. Это правило кажется мне понятным, и авторы примеров тщательно его соблюдают.
Однако я заметил следующий фрагмент Verilog в одном из рабочих кодов:
always @* begin
in_ready <= out_ready || ~out_valid;
end
Обратите внимание, что используется неблокирующее присваивание <=
. Я не думаю, что в этом случае это имеет какое-либо значение, потому что нет множественных назначений. Однако я не могу найти никакого объяснения этому. Так вот вопрос - имеет это значение или нет, как в рамках данного всегда блока, так и в рамках более крупной конструкции?