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 elementi diversi stanno cercando di controllare lo stesso filo contemporaneamente
- Violazione temporale: un segnale è cambiato nel momento sbagliato, creando uno stato instabile
X non esiste nell'hardware reale. È uno strumento di simulazione che ti segnala che qualcosa 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)
wire b;
assign b = a; // b diventa X perché a è XZ (Alta impedenza)
Z rappresenta uno stato di alta impedenza o scollegato.
- Un segnale è Z quando non è pilotato da nulla
- Z significa «questo filo è scollegato»
- Usato per buffer tri-state e bus condivisi
Cause comuni:
wire c; // Inizialmente Z (non collegato)
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 nelle forme d'onda
Nelle forme d'onda 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 a tre stati
- Durante la sintesi, X e Z possono essere trattati diversamente
- 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
cin modo che tutti i bit siano sconosciuti (4 bit) - Imposta
din modo che tutti i bit siano 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