Valori speciali X e Z
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 17 di 90.
X e Z sono valori speciali che ci forniscono informazioni sullo stato dell'hardware durante la simulazione.
X (sconosciuto), per il debug
X appare nella simulazione per indicare problemi con il tuo progetto.
Quando vedi X, spesso significa:
- Registro non inizializzato: hai dimenticato di impostare un valore prima di usarlo
- Driver multipli: due cose diverse stanno cercando di controllare lo stesso filo contemporaneamente
- Violazione dei tempi: un segnale è cambiato nel momento sbagliato, creando uno stato instabile
X non esiste nell'hardware reale. È uno strumento di simulazione che ti segnala che c'è qualcosa che non va nel tuo progetto, così puoi correggerlo prima di costruire il chip vero e proprio.
Senza X, potresti vedere degli 0 o degli 1 casuali senza renderti conto che c’è un problema. X rende i bug visibili.
Cause comuni:
reg a; // Inizialmente X (sconosciuto)
reg b;
assign b = a; // b diventa X perché a è XZ (Alta impedenza)
Z rappresenta uno stato di alta impedenza o disconnesso.
- Un segnale è Z quando non è pilotato da nulla
- Z significa «questo filo è scollegato»
- Usato per buffer a tre stati e bus condivisi
Cause comuni:
wire c; // Inizialmente Z (non connesso)
assign c = 1'bZ; // Explicitly set to ZScrivere X e Z in Verilog
Puoi assegnare i valori X e Z proprio come 0 e 1:
reg [3:0] data;
data = 4'b10X0; // Bit 1 is unknown (0-indexed from the right)
data = 4'b01Z1; // Il bit 1 è ad alta impedenza
data = 4'bXXXX; // All bits unknown
data = 4'bZZZZ; // Tutti i bit sono ad alta impedenzaX e Z nei diagrammi temporali
Nei diagrammi temporali della simulazione:
- X appare come una linea rossa o una "X"
- Z appare come una linea al centro o una "Z"
Questi ti aiutano a eseguire il debug del tuo progetto mostrando dove i segnali sono sconosciuti o scollegati.
Note importanti
- X si propaga attraverso la logica (X AND 0 = 0, ma X AND 1 = X)
- Z viene solitamente usato per i bus tristato
- Durante la sintesi, X e Z possono essere trattati in modo diverso
- Inizializza sempre i segnali reg per evitare X nella simulazione
Sfida
Completa il codice scrivendo i valori corretti contenenti X e Z.
Cosa fare:
- Imposta
asu un valore a 4 bit in cui il bit 1 è sconosciuto (gli altri sono 0) - Imposta
ccon tutti i bit sconosciuti (4 bit) - Imposta
dcon tutti i bit ad alta impedenza (4 bit)
Provalo tu
module xz_challenge;
wire [3:0] a, c, d;
assign a = 4'b______; // Bit 1 is X (others 0)
assign c = 4'b______; // Tutti i bit sono X
assign d = 4'b______; // All bits Z
initial begin
$display("a = %b", a);
$display("c = %b", c);
$display("d = %b", d);
$finish;
end
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1Introduzione
Cos'è VerilogHardware e software a confrontoIl tuo primo moduloCommentiLivelli di astrazione della progettazione4Operatori - Parte 1
Operatori aritmeticiOperatore moduloOperatori di confrontoRiepilogo - Matematica sempliceOperatori bitwise7Assegnazioni e porte
Assegnazione continuaAssegnazioni con operatoriPrimitive di porte integratePorte AND, OR e NOTPorte XOR e XNORRiepilogo: circuito con porte logiche10Decisioni
Istruzione ifIf-ElseRiepilogo - Comparatore sempliceIstruzione caseCasex e casezRiepilogo - Progettazione di una ALU5Operatori Parte 2
Operatori logiciOperatori di riduzioneOperatori di scorrimentoOperatore di concatenazioneOperatore condizionaleRiepilogo - Sfida sugli operatori3Sistema numerico
Rappresentazione binariaNumeri con dimensione specificataNumeri senza dimensione specificataNumeri negativiValori speciali X e ZRiepilogo - Formati numerici6Moduli
Struttura di un moduloPorte di input e outputPorte InoutIstanziazione di un moduloMappatura delle porte per nomeMappatura delle porte per ordineRiepilogo - Costruire un modulo9Blocchi procedurali
Blocco alwaysBlocco initialLista di sensibilitàAssegnazione bloccanteAssegnazione non bloccanteRiepilogo: always vs initial12Progetto Multiplexer
Progettazione di un mux da 2 a 1Progettazione di un mux da 4 a 1Esercitati da solo: Compilatore Verilog online