Menu
Coddy logo textTech

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érateurOpérationDescription
&ANDLe bit de sortie est 1 seulement si les deux bits d'entrée sont 1
|ORLe bit de sortie est 1 si au moins un des bits d'entrée est 1
^XORLe bit de sortie est 1 si les bits d'entrée sont différents
~NOTInverse 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 binaire

Vous 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
endmodule

Sortie :

a = 1010
b = 1100
a & b = 1000
a | b = 1110
a ^ b = 0110
~a    = 0101
challenge icon

Défi

Calculez les résultats bit à bit pour les valeurs données.

Ce qu'il faut faire :

  1. Calculez a & b et stockez le résultat dans and_res
  2. Calculez a | b et stockez le résultat dans or_res
  3. Calculez a ^ b et stockez le résultat dans xor_res
  4. Calculez ~a et stockez le résultat dans not_res

Aide-mémoire

Les opérateurs bit à bit travaillent sur chaque bit individuel d'un nombre :

OpérateurOpérationLe 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
^XORLes 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
endmodule
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux