2015-07-01 6 views
0

Только что начал изучать систему Verilog. Я смущен об использовании заявлений always_ff и always_latch. Первые будет использоваться в качестве:Система Verilog always_latch vs. always_ff

always_ff @ (posedge clk) 
begin 
    a <= b; 
end 

а второй:

always_latch 
begin 
    a <= b; 
end 

Первый активируются только по положительному фронту тактового сигнала, и в сочетании с неблокирующим присваиванием производит FF.

Очевидно, что always_latch представляет собой защелку, но зачем использовать неблокирующее назначение? Не было бы лучше использовать always_comb с назначением блокировки?

+0

Как правило, защелка использует разрешающий сигнал: 'если (о) а <= B;' – toolic

ответ

4

Используя 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: При моделировании защелки, используйте неблокирующие назначения.

+0

я модифицированные блок always_ff, ты прав, но теперь это будет сделать вывод защелки для «а», независимо от ввода привязанный к низким – Emman

2

С IEEE Std 1800-2012, разделом «9.2.2.3 тактного логик процедура always_latch»:

always_latch конструкция идентичен always_comb построить за исключением того, что программные средства должны выполнять дополнительные проверки и, если предупредить поведение в Конструкция always_latch не представляет собой фиксированную логику , тогда как в конструкции always_comb инструменты должны проверять и предупреждать, если поведение не представляет собой комбинационную логику.

Пример кода в Std показывает always_latch с использованием неблокирующего назначения.

 Смежные вопросы

  • Нет связанных вопросов^_^