У нас есть конструктор, который назначил временный результат переменной в комбинационном блоке всегда, чтобы улучшить читаемость.Его код выглядит примерно так:
logic second_condition;
always_comb begin
if (condition) begin
second_condition = long_statement;
if (second_condition) begin
(...)
end
end
end
Проблема здесь в том, что second_condition
возможно описывает защелку, но, поскольку эта защелка не имеет нагрузки (она не используется ни в каком другом блоке всегда), она оптимизированапрочь, и нет никаких предупреждений о выводе защелок во время синтеза.Некоторые производители инструментов, кажется, называют это «защелкой».Примечательно, что итератор цикла также может рассматриваться как защелка.
Это абсолютно безопасно для всех инструментов или стоит руководствоваться принципами кодирования, чтобы никогда этого не делать?В этом случае вы можете просто добавить присвоение к нулю в верхней части блока always_comb, чтобы удалить «висячую защелку».