Menu
Coddy logo textTech

Valores Especiais X e 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

O X aparece na simulação para indicar problemas com o seu projeto.

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 fio ao mesmo tempo
  • Violação de timing — um sinal mudou no momento errado, criando um estado instável

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

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

Causas comuns:

reg a;           // Inicialmente X (desconhecido)
reg b;
assign b = a;    // b torna-se 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 conduzido por nada
  • Z significa "este fio está desconectado"
  • Usado para buffers tri-state e barramentos compartilhados

Causas comuns:

wire c;          // Inicialmente Z (não conectado)
assign c = 1'bZ; // Definido explicitamente como 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;    // O bit 1 é desconhecido (indexado em 0 a partir da direita)
data = 4'b01Z1;    // O bit 1 é de alta impedância
data = 4'bXXXX;    // Todos os bits são desconhecidos
data = 4'bZZZZ;    // Todos os bits são de alta impedância

X e Z em Formas de Onda

Em formas de onda de simulação:

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

Estes ajudam você a depurar seu projeto, mostrando onde os sinais estão desconhecidos ou desconectados.

Notas Importantes

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

Desafio

Complete o código escrevendo os valores corretos contendo X e Z.

O que fazer:

  1. Defina a como um valor de 4 bits onde o bit 1 é desconhecido (outros 0)
  2. Defina c com todos os bits desconhecidos (4 bits)
  3. Defina d com todos os bits em alta impedância (4 bits)

Folha de consulta

X (Desconhecido) e Z (Alta Impedância) são valores especiais de simulação em Verilog.

X — Estado desconhecido (apenas simulação, não é hardware real):

  • Um reg não inicializado começa como X
  • Causado por: registradores não inicializados, múltiplos drivers, violações de temporização
  • Propaga-se através da lógica (X AND 1 = X, mas X AND 0 = 0)
  • Aparece como uma linha vermelha em formas de onda (waveforms)

Z — Estado de alta impedância / desconectado:

  • Um wire não conduzido começa como Z
  • Usado para buffers tri-state e barramentos compartilhados
  • Aparece como uma linha central em formas de onda (waveforms)

Escrevendo X e Z em Verilog:

reg [3:0] data;

data = 4'b10X0;    // Bit 1 is unknown
data = 4'b01Z1;    // Bit 1 is high-impedance
data = 4'bXXXX;    // All bits unknown
data = 4'bZZZZ;    // All bits high-impedance

assign c = 1'bZ;   // Explicitly set wire to Z

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