web-dev-qa-db-fra.com

Quelle est la différence entre == et === dans Verilog?

Quelle est la différence entre:

if (dataoutput[7:0] == 8'bx) begin

et

if (dataoutput[7:0] === 8'bx) begin 

Après avoir exécuté dataoutput = 52'bx, le second donne 1, mais le premier donne 0. Pourquoi? (0 ou 1 est le résultat de la comparaison.)

27
user478571

Certains types de données dans Verilog, tels que reg, sont à 4 états. Cela signifie que chaque bit peut être l'une des 4 valeurs: 0,1, x, z.

Avec l'opérateur "égalité de casse", ===, les x sont comparés et le résultat est 1.

Avec ==, le résultat de la comparaison n'est pas 0, comme vous l'avez dit; le résultat est plutôt x, selon la norme IEEE Std (1800-2009), section 11.4.5 "Opérateurs d'égalité":

Pour les opérateurs d'égalité logique et d'inégalité logique (== et! =), Si, en raison de bits inconnus ou à haute impédance dans les opérandes, la relation est ambiguë, le résultat doit être une valeur inconnue de 1 bit (x).

25
toolic

Dans Verilog:

  • == teste l'égalité logique (tests pour 1 et 0, tous les autres donneront x)
  • === teste l'égalité logique à 4 états (teste pour 1, 0, z et x)
18
imightbewrong

== Pour comparer les bits (0 ou 1) === Pour comparer les 4 états (0, 1, x, z)

== peut être synthétisé dans un matériel (porte x-nor), mais === ne peut pas être synthétisé car x n'est pas un niveau logique valide en numérique, c'est en fait des tensions comprises entre 0 et 1. Et z n'est pas elle-même toute logique, elle montre la déconnexion du circuit.

5
Karan Shah