Asignación bloqueante
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.
La asignación bloqueante utiliza el operador =. Se denomina «bloqueante» porque bloquea la ejecución de la siguiente instrucción hasta que se completa la asignación actual. El código se ejecuta paso a paso, en orden.
Sintaxis:
variable = expression;Cuándo usar la asignación bloqueante
La asignación bloqueante (=) se utiliza para la lógica combinacional: circuitos cuyas 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
endAsignación bloqueante 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.
Bloqueante vs. no bloqueante
Bloqueante (=) | No bloqueante (<=) | |
|---|---|---|
| Ejecución | Uno tras otro | Todo a la vez |
| ¿La siguiente línea espera? | Sí | No |
| Usos | Lógica combinacional | Lógica secuencial (flip-flops) |
Importante: no uses asignaciones bloqueantes para los flip-flops
Desafío
Añade las asignaciones de bloqueo que faltan para intercambiar los valores de x y y usando una variable temporal.
Qué hacer:
- Asigna el valor de
xatemp(guarda x en temp) - Asigna el valor de
yax(mueve y a x) - Asigna el valor de
tempay(mueve la x guardada 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ño4Operadores, parte 1
Operadores aritméticosOperador móduloOperadores de comparaciónRepaso: matemáticas simplesOperadores bit a bit7Asignaciones y compuertas
Asignación continuaAsignación con operadoresPrimitivas de compuertas integradasCompuertas AND, OR y NOTCompuertas XOR y XNORRepaso: circuito de compuertas lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU5Operadores, parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalRepaso: desafío de operadores11Bucles
Bucle ForBucle WhileBucle de repeticiónBucle infinitoInstrucción DisableRepaso: patrones de bucles3Sistema numérico
Representación binariaNúmeros con tamañoNúmeros sin tamañoNúmeros negativosValores especiales X y ZRepaso: formatos numéricos6Módulos
Estructura de módulosPuertos de entrada y salidaPuertos inoutInstanciación de módulosAsignación de puertos por nombreAsignación de puertos por ordenRepaso: construir un módulo9Bloques procedurales
Bloque AlwaysBloque InitialLista de sensibilidadAsignación bloqueanteAsignación no bloqueanteRepaso: Always vs InitialPractica por tu cuenta: Compilador de Verilog online