Menu
Coddy logo textTech

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
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 frente a Non-blocking

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

Importante: no uses Blocking para flip-flops

challenge icon

Desafío

Añade las asignaciones bloqueantes que faltan para intercambiar los valores de x y y usando una variable temporal.

Qué hacer:

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