Использование «висящих» защелок в комбинационных блоках - PullRequest
0 голосов
/ 02 января 2019

У нас есть конструктор, который назначил временный результат переменной в комбинационном блоке всегда, чтобы улучшить читаемость.Его код выглядит примерно так:

logic second_condition;

always_comb begin
  if (condition) begin
    second_condition = long_statement;
    if (second_condition) begin
      (...)
    end
  end
end

Проблема здесь в том, что second_condition возможно описывает защелку, но, поскольку эта защелка не имеет нагрузки (она не используется ни в каком другом блоке всегда), она оптимизированапрочь, и нет никаких предупреждений о выводе защелок во время синтеза.Некоторые производители инструментов, кажется, называют это «защелкой».Примечательно, что итератор цикла также может рассматриваться как защелка.

Это абсолютно безопасно для всех инструментов или стоит руководствоваться принципами кодирования, чтобы никогда этого не делать?В этом случае вы можете просто добавить присвоение к нулю в верхней части блока always_comb, чтобы удалить «висячую защелку».

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Поскольку second_condition - это промежуточный сигнал, который полностью содержится в блоке Always_comb, объявите его в блоке Always_comb.

always_comb begin
  logic second_condition;

  if (condition) begin
    second_condition = long_statement;
    if (second_condition) begin
      (...)
    end
  end
end

Presto!Не надо бояться всяких надоедливых "висящих защелок".

0 голосов
/ 03 января 2019

В вашем коде вы создаете защелку с condition & second_condition.Ни один из них не определяет нагрузку защелки.Нагрузка применяется к чему-то внутри (...), которое вы забыли указать.

always_comb - это контракт с системным верилогом, и предполагается, что в блоке нет защелки.Любой SV-компилятор должен выдавать ошибку, если видит этот код.Проверьте ваш лог-файл, вместо этого могут быть предупреждения.Должно быть сообщение об ошибке.

, если вам нужны защелки, вместо этого используйте always_latch.

Если вы беспокоитесь о временной переменной, синтезатор должен оптимизировать ее (если это хороший синтезатор: -)).

...