Menu
CoddyTech

Задержки вентилей

Часть раздела Основы путешествия по Verilog на Coddy. Урок 68 из 90.

В предыдущем уроке мы рассмотрели общие задержки, используемые, например, так: #10 a = b;. Они заставляют ждать перед выполнением инструкции.

В этом уроке мы рассмотрим задержки логических элементов — особенности встроенных примитивов логических элементов, таких как and, or и not. Задержка логического элемента моделирует время, необходимое аппаратному логическому элементу для формирования выходного сигнала после изменения входных сигналов.

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

Разница между общей задержкой и задержкой логического элемента

 Общая задержкаЗадержка логического элемента
Синтаксис#10 a = b;and #5 (out, a, b);
Позиция# перед оператором# внутри примитива логического элемента
НазначениеОжидание перед выполнениемМоделирование времени распространения сигнала через логический элемент

Синтаксис:

gate_type #(delay) (output, input1, input2, ...);

#(delay) задаёт, сколько единиц времени требуется логическому элементу для отклика.

Простой пример

and #5 (out, a, b);

Этому элементу И требуется 5 единиц времени, чтобы изменить выход после изменения a или b.

Задержка логического элемента с несколькими входами

nand #8 (out, a, b, c, d);   // 4-входовый NAND с задержкой в 8 единиц времени

Важные правила

ПравилоОбъяснение
Задержка указывается после имени логического элементаand #5 (out, a, b)
Значение задержки задаётся в единицах времениЗависит от директивы timescale
Все входы влияют на выходИзменение любого входа может изменить выход, но только после задержки
Не синтезируетсяЗадержки логических элементов используются только для моделирования
challenge icon

Задание

Добавь в этот модуль недостающие задержки вентилей. Используй для каждого вентиля разную задержку.

Что нужно сделать:

  1. Вентиль AND: задержка 5 единиц времени
  2. Вентиль OR: задержка 3 единицы времени
  3. Вентиль NOT: задержка 2 единицы времени

Попробуйте сами

module gate_delay_challenge;
  reg a, b;
  wire and_out, or_out, not_out;
  
  // TODO: Добавьте логический элемент AND с задержкой 5 единиц времени (входы a, b)
  
  // TODO: Добавьте логический элемент OR с задержкой 3 единицы времени (входы a, b)
  
  // TODO: Добавьте логический элемент NOT с задержкой 2 единицы времени (вход a)
  

  initial begin
    $monitor("Time %0t: a=%b, b=%b | and=%b, or=%b, not=%b", 
              $time, a, b, and_out, or_out, not_out);
    
    a = 1; b = 1;
    #10 $finish;
  end
endmodule
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog