Operadores Bitwise
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 23 de 90.
Operadores bitwise realizam operações em cada bit individual de um número. Ao contrário dos operadores aritméticos (+, -, *, /) que tratam os números como valores inteiros, os operadores bitwise trabalham bit a bit.
Operadores Bitwise Disponíveis
| Operador | Operação | O Que Faz |
|---|---|---|
& | AND | O bit de saída é 1 apenas se ambos os bits de entrada forem 1 |
| | OR | O bit de saída é 1 se pelo menos um dos bits de entrada for 1 |
^ | XOR | O bit de saída é 1 se os bits de entrada forem diferentes |
~ | NOT | Inverte todos os bits (0 torna-se 1, 1 torna-se 0) |
Quando você usa operadores bitwise, o Verilog trata os números como binários nos bastidores.
reg [3:0] a, b;
a = 4'd10; // Decimal 10 = binário 1010
b = 4'd12; // Decimal 12 = binário 1100
c = a & b; // Funciona da mesma forma que usar binário diretamenteVocê pode escrever números em decimal, hexadecimal ou binário—o Verilog os converte para binário para operações bit a bit.
Como o Bitwise Funciona
Cada operador trabalha em pares de bits (ou bits únicos para NOT):
Exemplo com números de 4 bits:
a = 1010 (binário)
b = 1100 (binário)
AND: a & b = 1000
(1&1=1, 0&1=0, 1&0=0, 0&0=0)
OR: a | b = 1110
(1|1=1, 0|1=1, 1|0=1, 0|0=0)
XOR: a ^ b = 0110
(1^1=0, 0^1=1, 1^0=1, 0^0=0)
NOT: ~a = 0101
(~1=0, ~0=1, ~1=0, ~0=1)Exemplo de Código
module bitwise_demo;
reg [3:0] a, b;
reg [3:0] and_res, or_res, xor_res, not_res;
initial begin
a = 4'b1010;
b = 4'b1100;
and_res = a & b; // 1010 & 1100 = 1000
or_res = a | b; // 1010 | 1100 = 1110
xor_res = a ^ b; // 1010 ^ 1100 = 0110
not_res = ~a; // ~1010 = 0101
$display("a = %b", a);
$display("b = %b", b);
$display("a & b = %b", and_res);
$display("a | b = %b", or_res);
$display("a ^ b = %b", xor_res);
$display("~a = %b", not_res);
$finish;
end
endmoduleSaída:
a = 1010
b = 1100
a & b = 1000
a | b = 1110
a ^ b = 0110
~a = 0101Desafio
Calcule os resultados bitwise para os valores fornecidos.
O que fazer:
- Calcule
a & be armazene emand_res - Calcule
a | be armazene emor_res - Calcule
a ^ be armazene emxor_res - Calcule
~ae armazene emnot_res
Folha de consulta
Operadores bitwise (bit a bit) trabalham em cada bit individual de um número:
| Operador | Operação | O bit de saída é 1 quando... |
|---|---|---|
& | AND | Ambos os bits de entrada são 1 |
| | OR | Pelo menos um bit de entrada é 1 |
^ | XOR | Os bits de entrada são diferentes |
~ | NOT | Inverte todos os bits (unário) |
// a = 1010, b = 1100
a & b = 1000 // AND
a | b = 1110 // OR
a ^ b = 0110 // XOR
~a = 0101 // NOT
Experimente você mesmo
module bitwise_challenge;
reg [3:0] a, b;
reg [3:0] and_res, or_res, xor_res, not_res;
initial begin
a = 4'b1101;
b = 4'b1011;
and_res = ______; // a & b
or_res = ______; // a | b
xor_res = ______; // a ^ b
not_res = ______; // ~a
$display("a = %b", a);
$display("b = %b", b);
$display("a & b = %b", and_res);
$display("a | b = %b", or_res);
$display("a ^ b = %b", xor_res);
$display("~a = %b", not_res);
$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