Menu
CoddyTech

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 ist

Z (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 Z

X 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 hochohmig

X 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.
challenge icon

Aufgabe

Vervollständige den Code, indem du die richtigen Werte mit X und Z einträgst.

Aufgabe:

  1. Setze a auf einen 4-Bit-Wert, bei dem Bit 1 unbekannt ist (alle anderen 0)
  2. Setze c auf einen Wert, bei dem alle Bits unbekannt sind (4 Bits)
  3. Setze d auf 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
  
endmodule
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen

Übe selbstständig: Online-Verilog-Compiler