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 enfocamos en la asignación bloqueante.
La asignación bloqueante utiliza el operador =. Se llama "bloqueante" porque bloquea la ejecución de la siguiente instrucción hasta que la asignación actual esté completa. 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 donde 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 vs Non-Blocking
Blocking (=) | Non-blocking (<=) | |
|---|---|---|
| Ejecución | Una después de otra | Todas a la vez |
| ¿La siguiente línea espera? | Sí | No |
| Usos | Lógica combinacional | Lógica secuencial (flip-flops) |
Importante: No use Blocking para Flip-Flops
Desafío
Agrega las asignaciones bloqueantes faltantes para intercambiar los valores de x e y utilizando 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 Verilog?Hardware vs SoftwareNiveles de abstracción de diseñoTu primer móduloComentarios4Operadores Parte 1
Operadores aritméticosOperador de móduloOperadores de comparaciónRepaso - Matemáticas simplesOperadores bit a bit7Asignación y Compuertas
Asignación ContinuaAsignación con OperadoresPrimitivas de Compuertas IntegradasCompuertas AND OR NOTCompuertas XOR XNORResumen - 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 condicionalResumen - Desafío de operadores3Sistema de numeración
Representación binariaNúmeros con tamaño definidoNúmeros sin tamaño definidoNúmeros negativosValores especiales X y ZResumen - Formatos de números6Módulos
Estructura del móduloPuertos de entrada y salidaPuertos InoutInstanciación de módulosMapeo de puertos por nombreMapeo de puertos por ordenResumen: Construye un módulo9Bloques procedimentales
Bloque AlwaysBloque InitialLista de sensibilidadAsignación bloqueanteAsignación no bloqueanteResumen - Always vs Initial