Assignment Delays
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 69 de 90.
En lecciones anteriores, vimos los retardos General (#10 a = b;) y los retardos de compuerta (and #5 (out, a, b);). Ahora veremos los retardos de assignment, que son retardos que ocurren dentro de un bloque procedural (como initial o always) como parte de una instrucción de asignación.
Un assignment delay espera un time especificado, después realiza la assignment. El delay se coloca after del símbolo # y antes de la assignment.
Sintaxis:
variable = #delay expression;A diferencia de un retraso General #10 a = b; (delay después assign), un retraso de assignment a = #10 b; toma el valor de b en ese momento, espera 10 unidades de time y después assigns ese valor a a.
Assignment Delay frente a General Delay
| General Delay | Assignment Delay | |
|---|---|---|
| Sintaxis | #10 a = b; | a = #10 b; |
| ¿Cuándo se lee el valor? | En el momento de la asignación (después del retraso) | Inmediatamente (antes del retraso) |
| ¿Qué valor se asigna? | Valor de b en ese momento | Valor de b en el tiempo 0 (o en el momento de lectura) |
| ¿Cuándo se asigna el valor? | Después del retraso | Después del retraso |
Ejemplo: La diferencia
initial begin
b = 1;
#5 b = 0;
// Retraso general
#10 a1 = b; // Espera 10, luego lee b (b=0) → a1=0
// Retraso de asignación
a2 = #10 b; // Lee b ahora (b=0), espera 10, luego asigna → a2=0
endAmbos dan el mismo result aquí. La diferencia aparece cuando b changes durante el delay.
Ejemplo de diferencia clave
To show b changing during the delay, we need two separate initial blocks that run in parallel:
initial begin
b = 1;
a1 = #10 b; // Lee b=1 en el tiempo 0, asigna a1=1 en el tiempo 10
end
initial begin
#5 b = 0; // Cambia b a 0 en el tiempo 5 (durante el retardo)
end- En el tiempo 0:
a1readsb = 1 - En el tiempo 5:
bchanges to0(mientrasa1sigue esperando) - En el tiempo 10: se asigna
1aa1(el valor leído en el tiempo 0), no0
Con un retraso general #10 a2 = b; en un bloque separado, b se leería en el tiempo 10 (valor 0).
Reglas importantes
| Regla | Explicación |
|---|---|
= va antes de # | a = #10 b;, no a #10 = b; |
| El valor se lee inmediatamente | El lado derecho se evalúa de inmediato |
| La asignación ocurre after el retraso | El lado izquierdo gets el valor más tarde |
| Solo para bloques procedurales | Se usa en initial o always |
Desafío
Qué hacer:
Add el delay de assignment que falta para que a gets el valor de b after 15 time units, pero reads b inmediatamente.
Pruébalo tú mismo
module assignment_challenge;
reg a, b;
// Bloque separado para cambiar b durante el retardo
initial begin
b = 1;
// TODO: Añadir retardo de asignación
// a debería obtener b después de 15 unidades de tiempo
// Leer b ahora, asignar después del retardo
end
initial begin
#5 b = 0; // Cambia b durante el retardo
#20 $display("Time %0t: a = %b", $time, a);
$finish;
end
endmoduleEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1Introducción
Qué es VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operators 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 LogicPractica por tu cuenta: Compilador de Verilog online