Menu
Coddy logo textTech

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

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

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

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

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

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

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

Синтаксис:

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

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

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

and #5 (out, a, b);

Этому AND gate требуется 5 time unit, чтобы изменить свой output после изменения a или b.

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

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

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

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

Задание

Добавьте пропущенные задержки вентилей в этот `module`. Используйте разные задержки (`delay`) для каждого вентиля (`gate`).

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

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

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

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

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

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