Menu
CoddyTech

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

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

Scrivere 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 impedenza

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

Sfida

Completa il codice scrivendo i valori corretti contenenti X e Z.

Cosa fare:

  1. Imposta a su un valore a 4 bit in cui il bit 1 è sconosciuto (gli altri sono 0)
  2. Imposta c in modo che tutti i bit siano sconosciuti (4 bit)
  3. Imposta d in 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
  
endmodule
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore Verilog online