Используя always_latch или always_ff, разработчики намерены вывести защелку или последовательную логику соответственно, но если логика неверна, программные средства могут предупредить проектировщика, что предполагаемая аппаратная логика не выводится должным образом.
например:
always_ff @ (posedge clk or negedge rst)
begin
if (!rst)
a <= '0;
end
Для приведенной выше коды дизайнера предназначен, чтобы получить только последовательную логику и не защелки, но защелка будет генерироваться в действительности (любой статическим инструмент генерирует предупреждающее сообщение, как «Защелка будет выведено для логики »)
Аналогичным образом для нижеследующего кода разработчики намерены вывести аппаратную защелку, чтобы инструмент (лучше понять вашу логику) и не сообщит об этом.
always_latch
begin
if (rst)
a <= b;
end
Защелка представляет собой последовательную логику, которая работает на уровнях часов вместо краев часов.
В целом лучшей практикой является использование Неблокирующая задания для последовательной логики и блокировки заданий для комбинаторной логики, которая подробно описана в Разделе 5.0 Verilog Coding Guidelines из Nonblocking Assignments in Verilog Synthesis, Coding Styles That Kill!
Руководящий принцип № 2: При моделировании защелки, используйте неблокирующие назначения.
Как правило, защелка использует разрешающий сигнал: 'если (о) а <= B;' – toolic