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 während der Simulation Informationen über den Hardwarezustand liefern.
X (unbekannt), zur Fehlersuche
X erscheint in der Simulation, um auf Probleme mit deinem Design hinzuweisen.
Wenn du X siehst, bedeutet das oft:
- Nicht initialisiertes Register: Du hast vergessen, vor der Verwendung einen Wert festzulegen
- Mehrere Treiber: Zwei verschiedene Dinge versuchen, gleichzeitig dieselbe Leitung zu steuern
- Timing-Verletzung: Ein Signal hat sich zum falschen Zeitpunkt geändert und dadurch einen instabilen Zustand erzeugt
X existiert in echter Hardware nicht. Es ist ein Simulationstool, das dir mitteilt, dass etwas mit deinem Entwurf nicht stimmt, damit du es beheben kannst, bevor du den tatsächlichen Chip baust.
Ohne X siehst du vielleicht zufällige 0en oder 1en und bemerkst nicht, dass es ein Problem gibt. X macht Fehler sichtbar.
Häufige Ursachen:
reg a; // Anfangs X (unbekannt)
wire b;
assign b = a; // b wird zu X, weil a X istZ (Hochohmig)
Z steht für einen hochohmigen oder nicht verbundenen Zustand.
- Ein Signal ist Z, wenn es von nichts angesteuert wird
- Z bedeutet „diese Leitung ist nicht verbunden“
- Wird für Tri-State-Puffer und gemeinsam genutzte Busse verwendet
Häufige Ursachen:
wire c; // Anfangs Z (nicht verbunden)
assign c = 1'bZ; // Explicitly set to ZX und Z in Verilog schreiben
Du kannst X- und Z-Werte genauso zuweisen wie 0 und 1:
reg [3:0] data;
data = 4'b10X0; // Bit 1 is unknown (0-indexed from the right)
data = 4'b01Z1; // Bit 1 ist hochohmig
data = 4'bXXXX; // All bits unknown
data = 4'bZZZZ; // Alle Bits sind 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 dir beim Debuggen deines Designs, indem sie zeigen, 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
- Bei der Synthese können X und Z unterschiedlich behandelt werden
- Initialisiere reg-Signale immer, um X in der Simulation zu vermeiden.
Aufgabe
Vervollständige den Code, indem du die richtigen Werte mit X und Z einträgst.
Aufgabe:
- Setze
aauf einen 4-Bit-Wert, bei dem Bit 1 unbekannt ist (alle anderen 0) - Setze
cauf einen Wert, bei dem alle Bits unbekannt sind (4 Bits) - Setze
dauf einen Wert, bei dem alle Bits hochohmig sind (4 Bits)
Probier 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 sind 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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellenÜbe selbstständig: Online-Verilog-Compiler