Operadores de Redução
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 25 de 90.
Os operadores de redução atuam em todos os bits de um único vetor e os reduzem a um resultado de um único bit. Ao contrário dos operadores bitwise que comparam dois números bit a bit, os operadores de redução recebem um número e realizam uma operação em todos os seus bits para produzir um único resultado.
| Operador | Operação | Resultado |
|---|---|---|
& | AND de Redução | 1 se todos os bits forem 1 |
| | OR de Redução | 1 se pelo menos um bit for 1 |
^ | XOR de Redução | 1 se um número ímpar de bits for 1 |
~& | NAND de Redução | 0 se todos os bits forem 1 |
~| | NOR de Redução | 0 se pelo menos um bit for 1 |
~^ | XNOR de Redução | 1 se um número par de bits for 1 |
Como Eles Funcionam
AND de Redução (<strong>&</strong>):
&4'b1111 = 1 // todos os bits são 1
&4'b1011 = 0 // nem todos os bits são 1
&4'b0000 = 0 // todos os bits são 0Redução OR (<strong>|</strong>):
|4'b0000 = 0 // nenhum bit é 1
|4'b0100 = 1 // pelo menos um bit é 1
|4'b1111 = 1 // todos os bits são 1Redução XOR (<strong>^</strong>):
^4'b1010 = 0 // dois 1's (par) → 0
^4'b1000 = 1 // um 1 (ímpar) → 1
^4'b1111 = 0 // quatro 1's (par) → 0Exemplo 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
endmoduleSaída:
&4'b1111 = 1
|4'b1010 = 1
^4'b1000 = 1Usos Comuns
Verificar se todos os bits são 1:
all_ones = &data; // 1 se data == 8'b11111111Verificar se algum bit é 1:
any_one = |data; // 1 se data != 0Verificar paridade (número ímpar de 1s):
odd_parity = ^data; // 1 se houver um número ímpar de 1sVerificar se todos os bits são 0:
all_zeros = ~|data; // 1 se data == 0Desafio
Escreva as expressões de redução corretas para cada tarefa.
O que fazer:
- Verifique se todos os bits de
asão 1 e armazene emall_ones - Verifique se algum bit de
bé 1 e armazene emany_one - Verifique se
ctem um número ímpar de 1s e armazene emodd_parity
Folha de consulta
Operadores de redução operam em todos os bits de um único vetor e os reduzem a um resultado de um único bit.
| Operador | Operação | Resultado |
|---|---|---|
& | AND de Redução | 1 se todos os bits forem 1 |
| | OR de Redução | 1 se pelo menos um bit for 1 |
^ | XOR de Redução | 1 se um número ímpar de bits forem 1 |
~& | NAND de Redução | 0 se todos os bits forem 1 |
~| | NOR de Redução | 0 se pelo menos um bit for 1 |
~^ | XNOR de Redução | 1 se um número par de bits forem 1 |
Usos comuns:
all_ones = &data; // 1 se todos os bits forem 1
any_one = |data; // 1 se qualquer bit for 1 (data != 0)
odd_parity = ^data; // 1 se houver um número ímpar de 1's
all_zeros = ~|data; // 1 se data == 0Experimente você mesmo
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 lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo