Assignment Delays
Часть раздела Основы путешествия по Verilog на Coddy. Урок 69 из 90.
На предыдущих уроках мы рассмотрели общие задержки (#10 a = b;) и задержки вентилей (and #5 (out, a, b);). Теперь мы рассмотрим задержки assignment — задержки, которые возникают внутри процедурного блока (например, initial или always) как часть оператора присваивания.
Задержка присваивания ожидает в течение указанного времени, затем выполняет присваивание. Задержка размещается after символа # и before присваивания.
Синтаксис:
variable = #delay expression;В отличие от общей задержки #10 a = b; (задержка, затем присваивание), задержка присваивания a = #10 b; получает значение b в этот момент, ждёт 10 единиц времени, затем присваивает его a.
Assignment Delay против General Delay
| General Delay | Assignment Delay | |
|---|---|---|
| Синтаксис | #10 a = b; | a = #10 b; |
| Когда считывается значение? | В момент assignment (after delay) | Немедленно (before delay) |
| Какое значение присваивается? | Значение b в этот момент | Значение b в time 0 (или в момент считывания) |
| Когда присваивается значение? | After delay | After delay |
Пример: разница
initial begin
b = 1;
#5 b = 0;
// Общая задержка
#10 a1 = b; // Ждёт 10, затем читает b (b=0) → a1=0
// Задержка присваивания
a2 = #10 b; // Читает b сейчас (b=0), ждёт 10, затем присваивает → a2=0
endЗдесь оба дают одинаковый result. Разница появляется, когда b changes во время delay.
Пример ключевого различия
To show b changing during the delay, we need two separate initial blocks that run in parallel:
initial begin
b = 1;
a1 = #10 b; // Читает b=1 в момент времени 0, присваивает a1=1 в момент времени 10
end
initial begin
#5 b = 0; // Изменяет b на 0 в момент времени 5 (во время задержки)
end- В момент time 0:
a1считываетb = 1 - В момент time 5:
bchanges на0(покаa1still ожидает) - В момент time 10:
a1получает значение1(значение, считанное в момент time 0), а не0
При общей задержке #10 a2 = b; в отдельном блоке значение b считывалось бы в момент time 10 (значение 0).
Важные правила
| Правило | Объяснение |
|---|---|
= идёт перед # | a = #10 b;, а не a #10 = b; |
| Значение считывается немедленно | Правая часть вычисляется сразу |
| Assignment происходит after delay | Левая часть gets значение позже |
| Только для процедурных block | Используется в initial или always |
Задание
Что нужно сделать:
Add пропущенную assignment delay, чтобы a gets значение b after 15 time units, но reads b немедленно.
Попробуйте сами
module assignment_challenge;
reg a, b;
// Отдельный блок для изменения b во время задержки
initial begin
b = 1;
// TODO: Добавить задержку присваивания
// a должен получить b через 15 единиц времени
// Прочитать b сейчас, присвоить после задержки
end
initial begin
#5 b = 0; // Изменяет b во время задержки
#20 $display("Time %0t: a = %b", $time, a);
$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