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 enlaza dos puntos de un circuito. Una vez colocado el cable, la conexión es permanente y está siempre 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 denomina asignación continua.
La asignación continua utiliza la palabra clave assign para crear una conexión permanente entre un cable y una expresión. El cable toma continuamente el valor de la expresión, 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 asignación continua |
wire_name | El cable que se está controlando (no puede ser reg) |
expression | El valor que controla el cable |
Ejemplo sencillo
wire out;
assign out = a & b;Esto significa: out siempre es 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
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.
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
endmoduleTodas las asignaciones se ejecutan en paralelo, continuamente.
Usos comunes
Las asignaciones continuas se utilizan para:
- Lógica combinacional simple (AND, OR, XOR)
- Conectar cables entre sí
- Crear búferes de tres estados
- Controlar salidas a partir de expresiones combinacionales
Desafío
Qué hacer:
- Añade la asignación continua que falta y que hace que
zsea igual ax AND y.
Pruébalo tú mismo
module continuous_challenge (
input x,
input y,
output z
);
// TODO: Añade la asignación continua faltante que hace 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 VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operadores, parte 1
Operadores aritméticosOperador móduloOperadores de comparaciónRepaso: matemáticas simplesOperadores bit a bit7Asignaciones y compuertas
Asignación continuaAsignación con operadoresPrimitivas de compuertas integradasCompuertas AND, OR y NOTCompuertas XOR y XNORRepaso: 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 condicionalRepaso: desafío de operadores11Bucles
Bucle ForBucle WhileBucle de repeticiónBucle infinitoInstrucción DisableRepaso: patrones de bucles3Sistema numérico
Representación binariaNúmeros con tamañoNúmeros sin tamañoNúmeros negativosValores especiales X y ZRepaso: formatos numéricos6Módulos
Estructura de módulosPuertos de entrada y salidaPuertos inoutInstanciación de módulosAsignación de puertos por nombreAsignación de puertos por ordenRepaso: construir un móduloPractica por tu cuenta: Compilador de Verilog online