Menu
Coddy logo textTech

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

Z (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 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 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
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 con tutti i bit sconosciuti (4 bit)
  3. Imposta d con 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
  
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