Menu
Coddy logo textTech

Special Values X And Z

Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 17 de 90.

X e Z são valores especiais que nos fornecem informações sobre o estado do hardware durante a simulação.

X (Desconhecido), para depuração

X aparece na simulação para indicar problemas no seu design.

Quando você vê X, isso geralmente significa:

  • Registrador não inicializado: você esqueceu de definir um valor antes de usá-lo
  • Múltiplos drivers: duas coisas diferentes estão tentando controlar o mesmo wire ao mesmo tempo
  • Violação de temporização: um sinal mudou no momento errado, criando um estado instável

X não existe no hardware real. É uma ferramenta de simulação que informa que há algo errado com seu projeto, para que você possa corrigi-lo antes de construir o chip de fato.

Sem X, você pode ver 0s ou 1s aleatórios e não perceber que há um problema. X torna os bugs visíveis.

Causas comuns:

reg a;           // Inicialmente X (desconhecido)
reg b;
assign b = a;    // b se torna X porque a é X

Z (Alta impedância)

Z representa um estado de alta impedância ou desconectado.

  • Um sinal é Z quando não está sendo controlado por nada
  • Z significa "este fio está desconectado"
  • Usado para buffers de três estados e barramentos compartilhados

Causas comuns:

wire c;          // Inicialmente Z (não conectado)
assign c = 1'bZ; // Explicitly set to Z

Escrevendo X e Z em Verilog

Você pode atribuir valores X e Z assim como 0 e 1:

reg [3:0] data;

data = 4'b10X0;    // Bit 1 is unknown (0-indexed from the right)
data = 4'b01Z1;    // Bit 1 está em alta impedância
data = 4'bXXXX;    // All bits unknown
data = 4'bZZZZ;    // Todos os bits em alta impedância

X e Z em Formas de Onda

Nas formas de onda da simulação:

  • X aparece como uma linha vermelha ou "X"
  • Z aparece como uma linha no meio ou "Z"

Isso ajuda você a depurar seu projeto, mostrando onde os sinais são desconhecidos ou estão desconectados.

Notas importantes

  • X se propaga pela lógica (X AND 0 = 0, mas X AND 1 = X)
  • Z geralmente é usado para barramentos de três estados
  • Na síntese, X e Z podem ser tratados de forma diferente
  • Sempre inicialize os sinais reg para evitar X na simulação
challenge icon

Desafio

Conclua o código escrevendo os valores corretos que contêm X e Z.

O que fazer:

  1. Defina a como um valor de 4 bits em que o bit 1 é unknown (os demais, 0)
  2. Defina c com todos os bits unknown (4 bits)
  3. Defina d com todos os bits high-impedance (4 bits)

Experimente você mesmo

module xz_challenge;
  wire [3:0] a, c, d;
  
  assign a = 4'b______;   // Bit 1 is X (others 0)
  assign c = 4'b______;   // Todos os 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
  
endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos

Pratique por conta própria: Compilador de Verilog online