2015-10-23 1 views
0

On suppose a= 4'b1110, b= 4'b0010Quelle est la différence entre une logique et/ou et un peu et/ou?

Quelle est la différence entre A & & B et A & B et quelle est la différence entre A || B et A | B? Quel est le résultat de chacun d'eux et comment cela se fait-il?

J'ai essayé de lire certaines des questions/réponses sur SO, mais je n'ai pas trouvé de réponses définitives.

+0

l'un est l'opération de bit, l'autre est logique. on produit une séquence de bits dans un type de données entier différent, on donne booléen définitivement. – HuStmpHrrr

Répondre

3

logical traite uniquement des valeurs true/false. Les bits composant sont non pertinents, il y a juste tout-zéros (faux), et pas-tous-zéros (vrai).

bitwise fait exactement ce que son nom l'indique - il considère les bits individuels.

a = 42 00101010 
b = 23 00010111 
c = 0  00000000 

a || b -> true  a && b -> true 
a | b -> 63   a & b -> 2 
a || c -> true  a && c -> false 
a | c -> 42   a & c -> 0 

De façon plus détaillée:

a || b -> 00101010 
      || 00010111 
      ----------- 
      00111111 -> 63, which is non-zero, therefore -> TRUE 

a | b est exactement la même chose, mais comme il est seulement traiter les bits, le calcul s'arrête à 63.

a && b -> 00101010 
      && 00010111 
      ----------- 
      00000010 -> 2 -> non-zero, therefore -> TRUE 

Si l'on ajoute à d = 21:

a && d -> 42 && 21 ->  00101010 
         && 00010101 
         ----------- 
          00000000 -> all-zeroes, therefore false 
+0

Pouvez-vous donner un exemple de quand le résultat d'une opération logique sera tous des zéros? – ninesalt

+0

'a && c' ........... puisque les bits invididuels ne sont pas pertinents. a && c -> 0 –

+1

Comme il s'agit de Verilog, il est également important de noter que les opérateurs logiques produiront un résultat d'une longueur de 1 bit (ie, '1'b1' ou' 1'b0') alors que les opérateurs binaires produira un résultat qui est le même que la longueur de l'argument le plus long (ie, '2'b10 && 3'b010' se traduira par' 3'b010') – Unn

1

Il se fait en créant un banc d'essai Verilog et exécution d'une simulation:

module tb; 

reg [3:0] a, b; 
initial begin 
    a= 4'b1110; 
    b= 4'b0010; 
    $display("a&b = 'b%b", a&b); 
    $display("a&&b = 'b%b", a&&b); 
    $display("a|b = 'b%b", a|b); 
    $display("a||b = 'b%b", a||b); 
    #5 $finish; 
end 

endmodule 

/* 

Output: 

a&b = 'b0010 
a&&b = 'b1 
a|b = 'b1110 
a||b = 'b1 

*/ 

Reportez-vous à la norme IEEE Std 1800-2012 pour plus des détails sur les opérateurs Verilog.