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 wire físico que une dos puntos en un circuito. Una vez que el wire está en su lugar, la conexión es permanente y always 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 wire y mantenerlo conectado para siempre. El proceso de hacer esto se llama continuous assignment.
La asignación continua utiliza la palabra clave assign para crear una conexión permanente entre un wire y una expression. El wire toma continuamente el valor de la expression — al igual que un cable físico.
Piensa en ello como soldar un cable en lugar de escribir un valor una sola vez.
Sintaxis
assign wire_name = expression;| Parte | Significado |
|---|---|
assign | Palabra clave que inicia la continuous assignment |
wire_name | El wire siendo impulsado (no puede ser reg) |
expression | El valor que impulsa el wire |
Ejemplo simple
wire out;
assign out = a & b;Esto significa: out es always equal a a AND b. Siempre que a o b cambia, out cambia inmediatamente.
Cómo funciona
A diferencia de un reg que almacena un valor, un wire con continuous assignment 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
endmoduleSalida:
a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1Cada vez que a o b cambia, c se actualiza automáticamente.
Multiple Assignments
Puedes tener múltiples asignaciones continuas en un `module`:
module multiple_assign (
input a, b, c,
output x, y
);
assign x = a & b;
assign y = x | c; // y depende de x
endmoduleAll assignments se ejecutan en paralelo, continuously.
Usos comunes
Las asignaciones continuas (continuous assignments) se utilizan para:
- Lógica combinacional simple (AND, OR, XOR)
- Conectar cables (
wire) entre sí - Crear búferes de tres estados (tri-state)
- Manejar salidas (
output) a partir de expresiones combinacionales
Desafío
Qué hacer:
- Add la assignment continuous missing that makes
zequal ax AND y.
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
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ódulo