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
Agregue las instrucciones assign faltantes según las tareas.
Qué hacer:
- Haga que
and_resultsea igual ainput_a AND input_b(bitwise) - Haga que
or_resultsea igual ainput_a OR input_b(bitwise) - Haga que
xor_resultsea igual ainput_a XOR input_b(bitwise) - Haga que
not_resultsea igual aNOT input_a(bitwise)
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 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