Spezialwerte X und Z
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 17 von 90.
X und Z sind spezielle Werte, die uns Informationen über den Hardwarezustand während der Simulation geben.
X (Unbekannt) — Für das Debugging
X erscheint in der Simulation, um Probleme mit Ihrem Design anzuzeigen.
Wenn Sie X sehen, bedeutet das oft:
- Nicht initialisiertes Register — Sie haben vergessen, einen Wert zu setzen, bevor Sie ihn verwenden
- Mehrere Treiber — zwei verschiedene Dinge versuchen, denselben Draht gleichzeitig zu steuern
- Timing-Verletzung — ein Signal hat sich zum falschen Zeitpunkt geändert, was einen instabilen Zustand erzeugt hat
X existiert in realer Hardware nicht. Es ist ein Simulationswerkzeug, das Ihnen mitteilt, dass etwas mit Ihrem Design nicht stimmt, damit Sie es beheben können, bevor der eigentliche Chip gefertigt wird.
Ohne X sehen Sie möglicherweise zufällige Nullen oder Einsen und bemerken nicht, dass ein Problem vorliegt. X macht Fehler sichtbar.
Häufige Ursachen:
reg a; // Anfänglich X (unbekannt)
reg b;
assign b = a; // b wird zu X, da a X istZ (Hochohmigkeit)
Z repräsentiert einen hochimpedanten oder getrennten Zustand.
- Ein Signal ist Z, wenn es von nichts angesteuert wird
- Z bedeutet „dieser Draht ist getrennt“
- Wird für Tri-State-Puffer und gemeinsam genutzte Busse verwendet
Häufige Ursachen:
wire c; // Ursprünglich Z (nicht verbunden)
assign c = 1'bZ; // Explizit auf Z gesetztSchreiben von X und Z in Verilog
Sie können X- und Z-Werte genau wie 0 und 1 zuweisen:
reg [3:0] data;
data = 4'b10X0; // Bit 1 ist unbekannt (0-indiziert von rechts)
data = 4'b01Z1; // Bit 1 ist hochohmig (High-Impedance)
data = 4'bXXXX; // Alle Bits unbekannt
data = 4'bZZZZ; // Alle Bits hochohmigX und Z in Wellenformen
In Simulationswellenformen:
- X erscheint als rote Linie oder "X"
- Z erscheint als Linie in der Mitte oder "Z"
Diese helfen Ihnen beim Debuggen Ihres Designs, indem sie anzeigen, wo Signale unbekannt oder nicht verbunden sind.
Wichtige Hinweise
- X breitet sich durch die Logik aus (X AND 0 = 0, aber X AND 1 = X)
- Z wird normalerweise für Tri-State-Busse verwendet
- In der Synthese können X und Z unterschiedlich behandelt werden
- Initialisieren Sie reg-Signale immer, um X in der Simulation zu vermeiden
Aufgabe
Vervollständigen Sie den Code, indem Sie die korrekten Werte schreiben, die X und Z enthalten.
Was zu tun ist:
- Setzen Sie
aauf einen 4-Bit-Wert, bei dem Bit 1 unbekannt ist (andere 0) - Setzen Sie
cauf alle Bits unbekannt (4 Bits) - Setzen Sie
dauf alle Bits hochohmig (4 Bits)
Spickzettel
X (Unbekannt) und Z (Hochohmig) sind spezielle Simulationswerte in Verilog.
X — Unbekannter Zustand (nur Simulation, keine echte Hardware):
- Ein nicht initialisiertes
regbeginnt als X - Verursacht durch: nicht initialisierte Register, mehrere Treiber, Timing-Verletzungen
- Verbreitet sich durch die Logik (X AND 1 = X, aber X AND 0 = 0)
- Erscheint als rote Linie in Wellenformen
Z — Hochohmiger / getrennter Zustand:
- Ein nicht angesteuertes
wirebeginnt als Z - Wird für Tri-State-Puffer und gemeinsam genutzte Busse verwendet
- Erscheint als mittlere Linie in Wellenformen
Schreiben von X und Z in Verilog:
reg [3:0] data;
data = 4'b10X0; // Bit 1 ist unbekannt
data = 4'b01Z1; // Bit 1 ist hochohmig
data = 4'bXXXX; // Alle Bits unbekannt
data = 4'bZZZZ; // Alle Bits hochohmig
assign c = 1'bZ; // Wire explizit auf Z setzenProbier es selbst
module xz_challenge;
wire [3:0] a, c, d;
assign a = 4'b______; // Bit 1 is X (others 0)
assign c = 4'b______; // Alle 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
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen