Asignación con operadores
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 38 de 90.
Una vez que comprendas la asignación continua, puedes combinarla con operadores para crear lógica útil. La declaración assign puede usar cualquier operador para controlar un cable.
Sintaxis básica
assign wire_name = expression;La expresión puede incluir:
- Operadores aritméticos (
+,-,*,/) - Operadores bit a bit (
&,|,^,~) - Operadores lógicos (
&&,||,!)
- Operadores de comparación (
>,<,==,!=) - Operadores de desplazamiento (
<<,>>) - Operador condicional (
? :)
Ejemplos con diferentes operadores
AND bit a bit:
assign out = a & b;Suma:
assign sum = a + b;Comparación:
assign is_greater = (a > b);Condicional (multiplexor):
assign out = sel ? a : b;Desplazamiento:
assign shifted = data << 2;Concatenación:
assign bus = {high_byte, low_byte};Ejemplo de Código
module assign_operators (
input [3:0] a, b,
input sel,
output [3:0] and_out,
output [4:0] sum_out,
output is_equal,
output mux_out
);
assign and_out = a & b; // AND bit a bit
assign sum_out = a + b; // Suma
assign is_equal = (a == b); // Comparación
assign mux_out = sel ? a : b; // Condicional (multiplexor)
endmoduleMúltiples operadores en una sola asignación
Puedes combinar operadores en una sola expresión:
assign result = (a & b) | (c ^ d);
assign final = (a + b) > (c - d);
assign parity = ^data; // Reducción XOR (número impar de 1's)Precedencia de operadores
Verilog sigue la precedencia de operadores estándar. Usa paréntesis ( ) para que tu intención sea clara:
// Poco claro
assign out = a & b | c;
// Claro
assign out = (a & b) | c;Desafío
Agrega las instrucciones assign que faltan según las tareas.
Qué hacer:
- Haz que
and_resultsea igual ainput_a AND input_b(a nivel de bits) - Haz que
or_resultsea igual ainput_a OR input_b(a nivel de bits) - Haz que
xor_resultsea igual ainput_a XOR input_b(a nivel de bits) - Haz que
not_resultsea igual aNOT input_a(a nivel de bits)
Pruébalo tú mismo
module assign_challenge (
input input_a,
input input_b,
output and_result,
output or_result,
output xor_result,
output not_result
);
// TODO: Añade las sentencias assign para:
// and_result = input_a & input_b
// or_result = input_a | input_b
// xor_result = input_a ^ input_b
// not_result = ~input_a
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