Menu
Coddy logo textTech

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

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

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

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

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

Разница между общей задержкой и задержкой вентиля

 Общая задержка (General Delay)Задержка вентиля (Gate Delay)
Синтаксис#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-входовый И-НЕ с задержкой в 8 единиц времени

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

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

Задание

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

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

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

Шпаргалка

Задержки вентилей моделируют время распространения сигнала во встроенных примитивах вентилей.

Синтаксис:

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

Примеры:

and  #5 (out, a, b);         // Вентиль AND, задержка 5 единиц времени
or   #3 (out, a, b);         // Вентиль OR, задержка 3 единицы времени
not  #2 (out, a);            // Вентиль NOT, задержка 2 единицы времени
nand #8 (out, a, b, c, d);   // 4-входовый NAND, задержка 8 единиц времени

Ключевые моменты:

  • # ставится после имени вентиля, перед списком портов
  • Любое изменение входного сигнала запускает задержку перед обновлением выхода
  • Задержки вентилей предназначены только для симуляции — они не синтезируемы

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

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Проверьте себя

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

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