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
endTiming:
- 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 |
| Не подлежит синтезу | Задержки предназначены только для симуляции |
Задание
Что нужно сделать:
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
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogАппаратное обеспечение и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design13Timing And Delays
What Are DelaysGate DelaysAssignment DelaysTimescale DirectiveClock GenerationRecap - Timing Control5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicПотренируйтесь самостоятельно: Онлайн-компилятор Verilog