Menu
Coddy logo textTech

Logical Operators

Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 24 sur 90.

Les opérateurs logiques agissent sur des valeurs entières et renvoient un single result : 1 (vrai) ou 0 (faux). Contrairement aux opérateurs bitwise, qui agissent bit par bit, les opérateurs logiques traitent toute la valeur comme étant soit vraie (non-zero), soit fausse (zero).

TypeExempleRésultat
AND bit à bit4'b1010 & 4'b11004'b1000 (multiple bits)
AND logique(4'b1010 && 4'b1100)1 (single bit)

Opérateurs logiques disponibles

OpérateurSignificationDescription
&&ET logiqueVrai si both opérandes sont vrais (non-zero)
||OU logiqueVrai si au moins un opérande est vrai
!NON logiqueVrai si l’opérande est faux (zéro)

Comment ils fonctionnent

ET logique (<strong>&&</strong>) :

(5 && 3)   // 1 (les deux non nuls)
(5 && 0)   // 0 (le second est zéro)
(0 && 0)   // 0 (les deux sont zéro)

OU logique (<strong>||</strong>) :

(5 || 3)   // 1 (au moins un non-zéro)
(5 || 0)   // 1 (premier non-zéro)
(0 || 0)   // 0 (les deux zéro)

NON logique (<strong>!</strong>) :

!5         // 0 (non-zéro devient false)
!0         // 1 (zéro devient true)

Exemple de code

module logical_demo;
  reg [3:0] a, b;
  reg and_res, or_res, not_res;
  
  initial begin
    a = 5;
    b = 0;
    
    and_res = (a && b);   // 5 && 0 = 0
    or_res  = (a || b);   // 5 || 0 = 1
    not_res = !a;         // !5 = 0
    
    $display("5 && 0 = %d", and_res);
    $display("5 || 0 = %d", or_res);
    $display("!5     = %d", not_res);
    $finish;
  end
endmodule

Sortie :

5 && 0 = 0
5 || 0 = 1
!5     = 0

Utilisation courante

Les opérateurs logiques sont utilisés dans les instructions if et les conditions :

if (a && b)           // Vrai si a et b sont tous les deux non nuls
  $display("Both true");

if (a || b)           // Vrai si au moins un est non nul
  $display("At least one true");

if (!reset)           // Vrai lorsque reset vaut 0
  $display("Reset is inactive");
challenge icon

Défi

Écrivez les expressions logiques correctes pour chaque tâche.

À faire :

  1. Vérifiez si value1 ET value2 sont toutes deux vraies et stockez le résultat dans and_out
  2. Vérifiez si value1 OU value2 est vraie et stockez le résultat dans or_out
  3. Vérifiez si value1 est fausse et stockez le résultat dans not_out

Essayez vous-même

module logical_challenge;
  reg [3:0] value1, value2;
  reg and_out, or_out, not_out;
  
  initial begin
    value1 = 4'd12;
    value2 = 4'd5;
    
    and_out = ______;   // value1 && value2
    or_out  = ______;   // value1 || value2
    not_out = ______;   // !value1
    
    $display("%d && %d = %d", value1, value2, and_out);
    $display("%d || %d = %d", value1, value2, or_out);
    $display("!%d     = %d", value1, not_out);
    $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

Entraînez-vous par vous-même : Compilateur Verilog en ligne