Menu
Coddy logo textTech

Gate Delays

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

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

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

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

Разница между общей задержкой и задержкой gate

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

Синтаксис:

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

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

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

and #5 (out, a, b);

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

Задержка gate с несколькими inputs

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

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

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

Задание

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

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

  1. AND gate: задержка 5 time unit
  2. OR gate: задержка 3 time unit
  3. NOT gate: задержка 2 time unit

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

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