Menu
Coddy logo textTech

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
end

Blocking en bloques Always (Lógica combinacional)

always @(*) begin
  temp = a & b;    // Paso 1
  out = temp | c;  // Paso 2 (usa temp del paso 1)
end

El orden importa. Esto está bien para la lógica combinacional.

Blocking vs Non-Blocking

 Blocking (=)Non-blocking (<=)
EjecuciónUna después de otraTodas a la vez
¿La siguiente línea espera?No
UsosLógica combinacionalLógica secuencial (flip-flops)

Importante: No use Blocking para Flip-Flops

challenge icon

Desafío

Agrega las asignaciones bloqueantes faltantes para intercambiar los valores de x e y utilizando una variable temporal.

Qué hacer:

  1. Asigna el valor de x a temp (guarda x en temp)
  2. Asigna el valor de y a x (mueve y a x)
  3. Asigna el valor de temp a y (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
endmodule
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos