Continuous Assignment
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 que el cable está colocado, 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 continuous utiliza la palabra clave assign para crear una conexión permanente entre un wire y una expresión. El wire 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 es always equal 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 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.
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
endmoduleAll asignaciones se ejecutan en paralelo, continuously.
Usos comunes
Las continuous assignment se utilizan para:
- Lógica combinacional simple (AND, OR, XOR)
- Conectar wire entre sí
- Crear búferes triestado
- Controlar output a partir de expresiones combinacionales
Desafío
Qué hacer:
- Add la asignación continuous missing que 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 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ño4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPractica por tu cuenta: Compilador de Verilog online