Opérateurs bit à bit
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 23 sur 90.
Les opérateurs bit à bit effectuent des opérations sur chaque bit individuel d'un nombre. Contrairement aux opérateurs arithmétiques (+, -, *, /) qui traitent les nombres comme des valeurs globales, les opérateurs bit à bit travaillent bit par bit.
Opérateurs au niveau du bit disponibles
| Opérateur | Opération | Description |
|---|---|---|
& | AND | Le bit de sortie est 1 seulement si les deux bits d'entrée sont 1 |
| | OR | Le bit de sortie est 1 si au moins un des bits d'entrée est 1 |
^ | XOR | Le bit de sortie est 1 si les bits d'entrée sont différents |
~ | NOT | Inverse tous les bits (0 devient 1, 1 devient 0) |
Lorsque vous utilisez des opérateurs au niveau du bit, Verilog traite les nombres comme du binaire en coulisses.
reg [3:0] a, b;
a = 4'd10; // Décimal 10 = binaire 1010
b = 4'd12; // Décimal 12 = binaire 1100
c = a & b; // Fonctionne de la même manière que l'utilisation directe du binaireVous pouvez écrire des nombres en décimal, hexadécimal ou binaire — Verilog les convertit en binaire pour les opérations bit à bit.
Comment fonctionne le bit à bit
Chaque opérateur travaille sur des paires de bits (ou des bits uniques pour NOT) :
Exemple avec des nombres de 4 bits :
a = 1010 (binaire)
b = 1100 (binaire)
ET : a & b = 1000
(1&1=1, 0&1=0, 1&0=0, 0&0=0)
OU : 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)
NON : ~a = 0101
(~1=0, ~0=1, ~1=0, ~0=1)Exemple de code
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
endmoduleSortie :
a = 1010
b = 1100
a & b = 1000
a | b = 1110
a ^ b = 0110
~a = 0101Défi
Calculez les résultats bit à bit pour les valeurs données.
Ce qu'il faut faire :
- Calculez
a & bet stockez le résultat dansand_res - Calculez
a | bet stockez le résultat dansor_res - Calculez
a ^ bet stockez le résultat dansxor_res - Calculez
~aet stockez le résultat dansnot_res
Aide-mémoire
Les opérateurs bit à bit travaillent sur chaque bit individuel d'un nombre :
| Opérateur | Opération | Le bit de sortie est 1 quand... |
|---|---|---|
& | ET (AND) | Les deux bits d'entrée sont à 1 |
| | OU (OR) | Au moins un bit d'entrée est à 1 |
^ | XOR | Les bits d'entrée sont différents |
~ | NON (NOT) | Inverse tous les bits (unaire) |
// a = 1010, b = 1100
a & b = 1000 // ET
a | b = 1110 // OU
a ^ b = 0110 // XOR
~a = 0101 // NON
Essayez vous-même
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
endmoduleCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1Introduction
Qu'est-ce que VerilogHardware vs SoftwareNiveaux d'abstraction de conceptionVotre premier moduleCommentaires4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Assignation et portes logiques
Assignation continueAssignation avec opérateursPrimitives de portes intégréesPortes AND OR NOTPortes XOR XNORRécapitulatif - Circuit à portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'ALU2Types de données
Type WireType RegEntiers et RéelsVecteursTableauxParamètresRécapitulatif - Déclarer des signaux5Opérateurs - Partie 2
Opérateurs logiquesOpérateurs de réductionOpérateurs de décalageOpérateur de concaténationOpérateur conditionnelRécapitulatif - Défi sur les opérateurs11Boucles
Boucle ForBoucle WhileBoucle RépéterBoucle InfinieInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres avec tailleNombres sans tailleNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats de nombres6Modules
Structure d'un modulePorts d'entrée et de sortiePorts InoutInstanciation de moduleMappage de ports par nomMappage de ports par ordreRécapitulatif - Créer un module9Blocs procéduraux
Bloc AlwaysBloc InitialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - Always vs Initial12Projet Multiplexeur
Conception d'un Mux 2 vers 1Conception d'un Mux 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à états