Special Values X And 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 geben.
X (Unknown), zur Fehlersuche
X erscheint in der Simulation, um auf Probleme in deinem Design hinzuweisen.
Wenn du X siehst, bedeutet das oft:
- Nicht initialisiertes reg: Du hast vergessen, einen Wert festzulegen, bevor du es verwendest
- Mehrere Treiber: Zwei verschiedene Dinge versuchen gleichzeitig, dasselbe wire 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 Simulationswerkzeug, das dir mitteilt, dass etwas mit deinem Design nicht stimmt, damit du es vor dem Bau des tatsächlichen Chips beheben kannst.
Ohne X könntest du zufällige 0en oder 1en sehen und nicht erkennen, dass ein Problem vorliegt. X macht Fehler sichtbar.
Häufige Ursachen:
reg a; // Anfangs X (unbekannt)
reg b;
assign b = a; // b wird X, weil a X istZ (hochohmig)
Z stellt einen Zustand mit hoher Impedanz oder getrennten Zustand dar.
- Ein Signal ist Z, wenn es von nichts angesteuert wird
- Z bedeutet „dieser Draht ist nicht angeschlossen“
- 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 wie 0 und 1 zuweisen:
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 hochohmigX und Z in Wellenformen
In Simulationswellenformen:
- X erscheint als rote Linie oder als „X“
- Z erscheint als Linie in der Mitte oder als „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 schreibst.
Was zu tun ist:
- Setze
aauf einen 4-Bit-Wert, bei dem Bit 1 unknown ist (others 0). - Setze
cauf all bits unknown (4 Bit). - Setze
dauf all bits high-impedance (4 Bit).
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 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 Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler