Menu
Coddy logo textTech

Asignación Continua

Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 37 de 90.

En hardware, una conexión es un cable físico que une dos puntos en un circuito. Una vez que el cable está en su lugar, la conexión es permanente y siempre está activa. Si un extremo cambia, el otro extremo cambia inmediatamente.

En Verilog, necesitamos una forma de modelar este comportamiento. Queremos pasar un valor a un cable y mantenerlo conectado para siempre. El proceso de hacer esto se llama asignación continua.

La asignación continua utiliza la palabra clave assign para crear una conexión permanente entre un cable (wire) y una expresión. El cable toma continuamente el valor de la expresión, al igual que un cable físico.

Piénsalo como soldar un cable en lugar de escribir un valor una sola vez.

Sintaxis

assign wire_name = expression;
ParteSignificado
assignPalabra clave que inicia la asignación continua
wire_nameEl cable (wire) que está siendo controlado (no puede ser reg)
expressionEl valor que controla el cable (wire)

Ejemplo sencillo

wire out;
assign out = a & b;

Esto significa: out es siempre igual a a AND b. Cada vez que a o b cambia, out cambia inmediatamente.

Cómo funciona

A diferencia de un reg que almacena un valor, un wire con asignación continua se actualiza constantemente:

module continuous_demo;
  reg a, b;
  wire c;
  
  assign c = a & b;   // c sigue a AND b en todo momento
  
  initial begin
    a = 0; b = 0;
    #10 $display("a=%d, b=%d, c=%d", a, b, c);  // c=0
    
    a = 1;
    #10 $display("a=%d, b=%d, c=%d", a, b, c);  // c=0 (1&0=0)
    
    b = 1;
    #10 $display("a=%d, b=%d, c=%d", a, b, c);  // c=1 (1&1=1)
    
    $finish;
  end
endmodule

Salida:

a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1

Cada vez que a o b cambian, c se actualiza automáticamente.

Asignaciones múltiples

Puedes tener múltiples asignaciones continuas en un módulo:

module multiple_assign (
  input a, b, c,
  output x, y
);
  assign x = a & b;
  assign y = x | c;   // y depende de x
endmodule

Todas las asignaciones se ejecutan en paralelo, de forma continua.

Usos comunes

Las asignaciones continuas se utilizan para:

  • Lógica combinacional simple (AND, OR, XOR)
  • Conectar cables (wires) entre sí
  • Crear buffers de tres estados (tri-state)
  • Controlar salidas a partir de expresiones combinacionales
challenge icon

Desafío

Qué hacer:

  1. Añade la asignación continua que falta que haga que z sea igual a x AND y.

Hoja de referencia

La asignación continua crea una conexión permanente entre un cable (wire) y una expresión utilizando la palabra clave assign:

assign wire_name = expression;

El cable refleja continuamente el valor de la expresión; siempre que las entradas cambian, la salida se actualiza inmediatamente:

wire out;
assign out = a & b; // out es siempre igual a a AND b

Múltiples asignaciones se ejecutan en paralelo:

assign x = a & b;
assign y = x | c; // y depende de x, todas se actualizan continuamente

Reglas clave: solo wire (no reg) puede ser controlado por assign.

Pruébalo tú mismo

module continuous_challenge (
  input x,
  input y,
  output z
);
  
  // TODO: Añade la asignación continua que falta para que z sea igual a x AND y
  

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