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 dão informações sobre o estado do hardware durante a simulação.
X (Unknown) — Para Depuração
X aparece na simulação para indicar problemas com o seu projeto.
Quando você vê X, geralmente significa:
- Registrador não inicializado — você se 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 temporização (timing) — um sinal mudou no momento errado, criando um estado instável
X não existe em 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 construir o chip real.
Sem 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 se torna X porque a é XZ (High Impedance)
Z representa um estado de alta impedância (high-impedance) ou desconectado (disconnected).
- Um sinal é Z quando não está sendo acionado 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; // Explicitly set to ZEscrevendo 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ânciaX 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"
Eles 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 em simulação
Desafio
Complete o código escrevendo os valores corretos contendo X e Z.
O que fazer:
- Defina
acomo um valor de 4 bits onde o bit 1 é unknown (outros 0) - Defina
ccomo todos os bits unknown (4 bits) - Defina
dcomo 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
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo