Menu
Coddy logo textTech

What Are Delays

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

В Verilog задержки управляют тем, когда выполняется оператор или когда изменяется сигнал. Они используются для моделирования поведения реального оборудования во времени.

Зачем нужны задержки

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

  • В симуляции без задержек всё происходит в момент времени 0
  • Задержки позволяют распределять события во времени
  • Они помогают тестировать проекты, чувствительные к времени, например clock и машины состояний

Типы задержек

Тип задержкиНазначение
Задержки логических элементовЗадержка прохождения через логические элементы
Задержки присваиванияЗадержка при присваивании значений
Директива TimescaleЗадаёт единицы времени для моделирования

Базовый синтаксис

delay записывается с помощью #, за которым следует число:

#10 clk = ~clk;   // Подождать 10 единиц времени, затем переключить clock
#5 a = b;         // Подождать 5 единиц времени, затем присвоить a = b

Число после # — это количество единиц времени, которое нужно подождать.

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

initial begin
  a = 0;
  #10 a = 1;   // После 10 единиц времени a становится 1
  #5 a = 0;    // После ещё 5 единиц времени a становится 0
end

Timing:

  • Time 0: a = 0
  • Time 10: a = 1
  • Time 15: a = 0

Задержки в блоках Always

always #5 clk = ~clk;   // Переключать тактовый сигнал каждые 5 единиц времени

Это создаёт непрерывный тактовый сигнал (при условии, что clk был first инициализирован значением 0 в блоке initial. В противном случае ~x остаётся равным x).

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

ПравилоОбъяснение
Символ #Обозначает задержку
Число после #Сколько единиц времени нужно подождать
Задержки суммируются#10, затем #20 — всего ожидается 30
Не подлежит синтезуЗадержки предназначены только для симуляции
challenge icon

Задание

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

Add пропущенные задержки, чтобы этот код выводил сообщения в моменты времени 0, 10, 25 и 40.

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

module delay_challenge;
  
  initial begin
    $display("Time %0t: Start", $time);
    // TODO: Добавить задержку, чтобы достичь времени 10
    $display("Time %0t: After first delay", $time);
    // TODO: Добавить задержку, чтобы достичь времени 25
    $display("Time %0t: After second delay", $time);
    // TODO: Добавить задержку, чтобы достичь времени 40
    $display("Time %0t: End", $time);
    $finish;
  end
  
endmodule

quiz iconПроверьте себя

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

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

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