Operadores de reducción
Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 25 de 90.
Los operadores de reducción trabajan sobre todos los bits de un solo vector y los reducen a un resultado de un solo bit. A diferencia de los operadores bit a bit que comparan dos números bit a bit, los operadores de reducción toman un número y realizan una operación a través de todos sus bits para producir un único resultado.
| Operador | Operación | Resultado |
|---|---|---|
& | AND de reducción | 1 si todos los bits son 1 |
| | OR de reducción | 1 si al menos un bit es 1 |
^ | XOR de reducción | 1 si un número impar de bits son 1 |
~& | NAND de reducción | 0 si todos los bits son 1 |
~| | NOR de reducción | 0 si al menos un bit es 1 |
~^ | XNOR de reducción | 1 si un número par de bits son 1 |
Cómo funcionan
AND de reducción (<strong>&</strong>):
&4'b1111 = 1 // todos los bits son 1
&4'b1011 = 0 // no todos los bits son 1
&4'b0000 = 0 // todos los bits son 0OR de reducción (<strong>|</strong>):
|4'b0000 = 0 // ningún bit es 1
|4'b0100 = 1 // al menos un bit es 1
|4'b1111 = 1 // todos los bits son 1XOR de reducción (<strong>^</strong>):
^4'b1010 = 0 // dos 1s (par) → 0
^4'b1000 = 1 // un 1 (impar) → 1
^4'b1111 = 0 // cuatro 1s (par) → 0Ejemplo de código
module reduction_demo;
reg [3:0] a, b, c;
reg and_red, or_red, xor_red;
initial begin
a = 4'b1111;
b = 4'b1010;
c = 4'b1000;
and_red = &a; // 1111 → 1
or_red = |b; // 1010 → 1
xor_red = ^c; // 1000 → 1
$display("&4'b1111 = %d", and_red);
$display("|4'b1010 = %d", or_red);
$display("^4'b1000 = %d", xor_red);
$finish;
end
endmoduleResultado:
&4'b1111 = 1
|4'b1010 = 1
^4'b1000 = 1Usos comunes
Comprobar si todos los bits son 1:
all_ones = &data; // 1 si data == 8'b11111111Comprobar si algún bit es 1:
any_one = |data; // 1 si data != 0Comprobar paridad (número impar de 1s):
odd_parity = ^data; // 1 si hay un número impar de 1sComprobar si todos los bits son 0:
all_zeros = ~|data; // 1 si data == 0Desafío
Escribe las expresiones de reducción correctas para cada tarea.
Qué hacer:
- Comprueba si todos los bits de
ason 1 y almacénalo enall_ones - Comprueba si algún bit de
bes 1 y almacénalo enany_one - Comprueba si
ctiene un número impar de 1's y almacénalo enodd_parity
Hoja de referencia
Los operadores de reducción actúan sobre todos los bits de un único vector y los reducen a un resultado de un solo bit.
| Operador | Operación | Resultado |
|---|---|---|
& | AND de reducción | 1 si todos los bits son 1 |
| | OR de reducción | 1 si al menos un bit es 1 |
^ | XOR de reducción | 1 si un número impar de bits son 1 |
~& | NAND de reducción | 0 si todos los bits son 1 |
~| | NOR de reducción | 0 si al menos un bit es 1 |
~^ | XNOR de reducción | 1 si un número par de bits son 1 |
Usos comunes:
all_ones = &data; // 1 si todos los bits son 1
any_one = |data; // 1 si algún bit es 1 (data != 0)
odd_parity = ^data; // 1 si hay un número impar de 1s
all_zeros = ~|data; // 1 si data == 0Pruébalo tú mismo
module reduction_challenge;
reg [3:0] a, b, c;
reg all_ones, any_one, odd_parity;
initial begin
a = 4'b1111;
b = 4'b0100;
c = 4'b1011;
all_ones = ______; // all bits 1?
any_one = ______; // any bit 1?
odd_parity = ______; // odd number of 1's?
$display("&4'b1111 = %d", all_ones);
$display("|4'b0100 = %d", any_one);
$display("^4'b1011 = %d", odd_parity);
$finish;
end
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