Blocking Assignment
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 49 de 90.
Verilog tiene dos tipos de asignaciones procedimentales: bloqueantes (=) y no bloqueantes (<=). En esta lección, nos centramos en la asignación bloqueante.
Blocking assignment uses el operador =. Se denomina «bloqueante» porque bloquea la ejecución de la siguiente instrucción hasta que se completa la assignment actual. El código se ejecuta paso a paso, en orden.
Sintaxis:
variable = expression;Cuándo usar la asignación Blocking
La asignación Blocking (=) se utiliza para la lógica combinacional: circuitos en los que las salidas cambian inmediatamente cuando cambian las entradas, sin reloj y sin memoria.
Ejemplos de lógica combinacional:
- Puertas AND / OR / XOR
- Sumadores y restadores
- Multiplexores
- Decodificadores
Ejemplo de Verilog:
always @(*) begin
sum = a + b; // Asignación bloqueante
carry = a & b; // Asignación bloqueante
endBlocking en bloques always (lógica combinacional)
always @(*) begin
temp = a & b; // Paso 1
out = temp | c; // Paso 2 (usa temp del paso 1)
endEl orden importa. Esto está bien para la lógica combinacional.
Blocking frente a Non-blocking
Blocking (=) | Non-blocking (<=) | |
|---|---|---|
| Ejecución | Uno después de otro | Todos a la vez |
| ¿La siguiente línea espera? | Sí | No |
| Uses | Lógica combinacional | Lógica secuencial (flip-flops) |
Importante: no uses Blocking para flip-flops
Desafío
Añade las asignaciones bloqueantes que faltan para intercambiar los valores de x y y usando una variable temporal.
Qué hacer:
- Assign el valor de
xatemp(guarda x en temp) - Assign el valor de
yax(mueve y a x) - Assign el valor de
tempay(mueve el x guardado a y)
Pruébalo tú mismo
module swap;
reg x, y;
reg temp;
initial begin
x = 1;
y = 0;
$display("Before swap: x=%d, y=%d", x, y);
// TODO: Paso 1 - Asigna x a temp
// TODO: Paso 2 - Asigna y a x
// TODO: Paso 3 - Asigna temp a y
$display("After swap: x=%d, y=%d", x, y);
$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 Design5Operators 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