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 é 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
Conclua o código escrevendo os valores corretos que contêm X e Z.
O que fazer:
- Defina
acomo um valor de 4 bits em que o bit 1 é unknown (os demais, 0) - Defina
ccom todos os bits unknown (4 bits) - Defina
dcom 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. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online