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 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
end

Asignació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)
end

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

Bloqueante vs. no bloqueante

 Bloqueante (=)No bloqueante (<=)
EjecuciónUno tras otroTodo a la vez
¿La siguiente línea espera?SíNo
UsosLógica combinacionalLógica secuencial (flip-flops)

Importante: no uses asignaciones bloqueantes para los flip-flops

challenge icon

Desafío

Añade las asignaciones de bloqueo que faltan para intercambiar los valores de x y y usando 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

Practica por tu cuenta: Compilador de Verilog online