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.)
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).
Dans Verilog:
== 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.