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
X aparece na simulação para indicar problemas no seu design.
Quando você vê X, isso geralmente significa:
- Registrador não inicializado: você se esqueceu de definir um valor antes de usá-lo
- Vários drivers: duas coisas diferentes estão tentando controlar o mesmo fio 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 é XZ (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 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
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
Desafio
Complete o código escrevendo os valores corretos contendo X e Z.
O que fazer:
- Defina
acomo um valor de 4 bits em que o bit 1 é desconhecido (os demais são 0) - Defina
ccom todos os bits desconhecidos (4 bits) - Defina
dcom todos os bits em alta impedância (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. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
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ões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um MóduloPratique por conta própria: Compilador de Verilog online