Operadores bit a bit
Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 23 de 90.
Los operadores bit a bit realizan operaciones sobre cada bit individual de un número. A diferencia de los operadores aritméticos (+, -, *, /) que tratan a los números como valores completos, los operadores bit a bit trabajan bit por bit.
Operadores bit a bit disponibles
| Operador | Operación | Qué hace |
|---|---|---|
& | AND | El bit de salida es 1 solo si ambos bits de entrada son 1 |
| | OR | El bit de salida es 1 si al menos uno de los bits de entrada es 1 |
^ | XOR | El bit de salida es 1 si los bits de entrada son diferentes |
~ | NOT | Invierte todos los bits (0 se convierte en 1, 1 se convierte en 0) |
Cuando utilizas operadores bit a bit, Verilog trata los números como binarios internamente.
reg [3:0] a, b;
a = 4'd10; // Decimal 10 = binario 1010
b = 4'd12; // Decimal 12 = binario 1100
c = a & b; // Funciona igual que usar binario directamentePuedes escribir números en decimal, hex o binario; Verilog los convierte a binario para operaciones bit a bit.
Cómo funcionan los operadores bit a bit
Cada operador trabaja sobre pares de bits (o bits individuales para NOT):
Ejemplo con números de 4 bits:
a = 1010 (binario)
b = 1100 (binario)
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)Ejemplo 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
endmoduleSalida:
a = 1010
b = 1100
a & b = 1000
a | b = 1110
a ^ b = 0110
~a = 0101Desafío
Calcula los resultados bit a bit para los valores dados.
Qué hacer:
- Calcula
a & by almacénalo enand_res - Calcula
a | by almacénalo enor_res - Calcula
a ^ by almacénalo enxor_res - Calcula
~ay almacénalo ennot_res
Hoja de referencia
Los operadores bit a bit (bitwise) trabajan sobre cada bit individual de un número:
| Operador | Operación | El bit de salida es 1 cuando... |
|---|---|---|
& | AND | Ambos bits de entrada son 1 |
| | OR | Al menos uno de los bits de entrada es 1 |
^ | XOR | Los bits de entrada son diferentes |
~ | NOT | Invierte todos los bits (unario) |
// a = 1010, b = 1100
a & b = 1000 // AND
a | b = 1110 // OR
a ^ b = 0110 // XOR
~a = 0101 // NOT
Pruébalo tú mismo
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 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