Asignación con Operadores
Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 38 de 90.
Una vez que entiendas la asignación continua, puedes combinarla con operadores para crear lógica útil. La sentencia assign puede usar cualquier operador para controlar un wire.
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; // XOR de reducción (número impar de 1s)Precedencia de Operadores
Verilog sigue la precedencia de operadores estándar. Use paréntesis ( ) para que su intención sea clara:
// Poco claro
assign out = a & b | c;
// Claro
assign out = (a & b) | c;Desafío
Añade las sentencias assign faltantes basándote en las tareas.
Qué hacer:
- Haz que
and_resultsea igual ainput_a AND input_b(bit a bit) - Haz que
or_resultsea igual ainput_a OR input_b(bit a bit) - Haz que
xor_resultsea igual ainput_a XOR input_b(bit a bit) - Haz que
not_resultsea igual aNOT input_a(bit a bit)
Hoja de referencia
La sentencia assign admite varios operadores para la lógica combinacional:
assign wire_name = expression;Tipos de operadores:
- Bit a bit:
&,|,^,~ - Aritméticos:
+,-,*,/ - Lógicos:
&&,||,! - Comparación:
>,<,==,!= - Desplazamiento:
<<,>> - Condicional:
? : - Concatenación:
{ }
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; // Multiplexor
assign bus = {high, low}; // Concatenación
assign parity = ^data; // Reducción XORUtilice paréntesis para clarificar la precedencia:
assign out = (a & b) | c;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: Agregar sentencias de asignación 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 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