Valeurs spéciales X et Z
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 17 sur 90.
X et Z sont des valeurs spéciales qui nous donnent des informations sur l'état du matériel pendant la simulation.
X (Inconnu) — Pour le débogage
X apparaît dans la simulation pour indiquer des problèmes avec votre conception.
Lorsque vous voyez X, cela signifie souvent :
- Registre non initialisé — vous avez oublié de définir une valeur avant de l'utiliser
- Pilotes multiples — deux éléments différents tentent de contrôler le même fil en même temps
- Violation de timing — un signal a changé au mauvais moment, créant un état instable
X n'existe pas dans le matériel réel. C'est un outil de simulation qui vous indique que quelque chose ne va pas dans votre conception afin que vous puissiez le corriger avant de fabriquer la puce réelle.
Sans X, vous pourriez voir des 0 ou des 1 aléatoires et ne pas vous rendre compte qu'il y a un problème. X rend les bugs visibles.
Causes courantes :
reg a; // Initialement X (inconnu)
reg b;
assign b = a; // b devient X car a est XZ (Haute impédance)
Z représente un état de haute impédance ou déconnecté.
- Un signal est Z lorsqu'il n'est piloté par rien
- Z signifie "ce fil est déconnecté"
- Utilisé pour les tampons trois états (tri-state buffers) et les bus partagés
Causes courantes :
wire c; // Initialement Z (non connecté)
assign c = 1'bZ; // Explicitement défini sur ZÉcrire X et Z en Verilog
Vous pouvez assigner des valeurs X et Z tout comme 0 et 1 :
reg [3:0] data;
data = 4'b10X0; // Le bit 1 est inconnu (indexé à partir de 0 depuis la droite)
data = 4'b01Z1; // Le bit 1 est en haute impédance
data = 4'bXXXX; // Tous les bits sont inconnus
data = 4'bZZZZ; // Tous les bits sont en haute impédanceX et Z dans les formes d'onde
Dans les formes d'onde de simulation :
- X apparaît sous la forme d'une ligne rouge ou d'un « X »
- Z apparaît sous la forme d'une ligne au milieu ou d'un « Z »
Ceux-ci vous aident à déboguer votre conception en montrant où les signaux sont inconnus ou déconnectés.
Notes importantes
- X se propage à travers la logique (X AND 0 = 0, mais X AND 1 = X)
- Z est généralement utilisé pour les bus tri-state
- En synthèse, X et Z peuvent être traités différemment
- Toujours initialiser les signaux reg pour éviter X en simulation
Défi
Complétez le code en écrivant les valeurs correctes contenant X et Z.
Ce qu'il faut faire :
- Définissez
asur une valeur de 4 bits où le bit 1 est inconnu (les autres à 0) - Définissez
cavec tous les bits inconnus (4 bits) - Définissez
davec tous les bits en haute impédance (4 bits)
Aide-mémoire
X (Inconnu) et Z (Haute impédance) sont des valeurs de simulation spéciales en Verilog.
X — État inconnu (simulation uniquement, pas de matériel réel) :
- Un
regnon initialisé commence à X - Causé par : des registres non initialisés, des pilotes multiples, des violations de timing
- Se propage à travers la logique (X AND 1 = X, mais X AND 0 = 0)
- Apparaît sous forme de ligne rouge dans les chronogrammes (waveforms)
Z — État de haute impédance / déconnecté :
- Un
wirenon piloté commence à Z - Utilisé pour les tampons tri-state et les bus partagés
- Apparaît sous forme de ligne médiane dans les chronogrammes (waveforms)
Écrire X et Z en Verilog :
reg [3:0] data;
data = 4'b10X0; // Bit 1 is unknown
data = 4'b01Z1; // Bit 1 is high-impedance
data = 4'bXXXX; // All bits unknown
data = 4'bZZZZ; // All bits high-impedance
assign c = 1'bZ; // Explicitly set wire to ZEssayez vous-même
module xz_challenge;
wire [3:0] a, c, d;
assign a = 4'b______; // Bit 1 is X (others 0)
assign c = 4'b______; // Tous les bits X
assign d = 4'b______; // All bits Z
initial begin
$display("a = %b", a);
$display("c = %b", c);
$display("d = %b", d);
$finish;
end
endmoduleCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1Introduction
Qu'est-ce que VerilogHardware vs SoftwareNiveaux d'abstraction de conceptionVotre premier moduleCommentaires4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Assignation et portes logiques
Assignation continueAssignation avec opérateursPrimitives de portes intégréesPortes AND OR NOTPortes XOR XNORRécapitulatif - Circuit à portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'ALU2Types de données
Type WireType RegEntiers et RéelsVecteursTableauxParamètresRécapitulatif - Déclarer des signaux5Opérateurs - Partie 2
Opérateurs logiquesOpérateurs de réductionOpérateurs de décalageOpérateur de concaténationOpérateur conditionnelRécapitulatif - Défi sur les opérateurs11Boucles
Boucle ForBoucle WhileBoucle RépéterBoucle InfinieInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres avec tailleNombres sans tailleNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats de nombres6Modules
Structure d'un modulePorts d'entrée et de sortiePorts InoutInstanciation de moduleMappage de ports par nomMappage de ports par ordreRécapitulatif - Créer un module9Blocs procéduraux
Bloc AlwaysBloc InitialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - Always vs Initial12Projet Multiplexeur
Conception d'un Mux 2 vers 1Conception d'un Mux 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à états