Casex e Casez
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 56 de 90.
Às vezes, você só se importa com bits específicos em um valor, enquanto outros bits podem ser ignorados. Por exemplo, em um codificador de prioridade, você deseja encontrar o primeiro bit 1, independentemente dos outros bits.
Uma instrução case comum exigiria que você listasse cada combinação possível dos bits don't-care — o que é impossível para barramentos largos.
<strong>casez</strong> e <strong>casex</strong> resolvem este problema ao permitir que você marque certos bits como "don't care" usando ?, z ou x.
Casez vs Casex vs Regular Case
| Instrução | Bits Don't-Care | Melhor Para |
|---|---|---|
case | Nenhum | Correspondência exata |
casez | z ou ? | Codificadores de prioridade (recomendado) |
casex | x, z, ou ? | Evitar (esconde bugs) |
<strong>casez</strong>ignora bits que sãozou?(recomendado)<strong>casex</strong>também ignora bitsx— o que pode esconder erros de simulação
Sempre use <strong>casez</strong>, não <strong>casex</strong>. casex foi criado primeiro, mas os engenheiros perceberam que era perigoso porque ele ignora valores x (que frequentemente indicam registradores não inicializados ou erros de simulação). casez foi introduzido como uma alternativa mais segura.
Exemplo
casez (data)
4'b???1: out = 0; // Bit0 deve ser 1, os outros não importam
4'b??1?: out = 1; // Bit1 deve ser 1, os outros não importam
4'b?1??: out = 2; // Bit2 deve ser 1, os outros não importam
4'b1???: out = 3; // Bit3 deve ser 1, os outros não importam
endcaseO ? significa "não importa" — esse bit pode ser 0, 1 ou qualquer coisa.
Desafio
O que fazer:
Adicione a instrução casez que falta para fazer este decodificador funcionar.
Como funciona:
input = 4'b???1→out = 4'b0001input = 4'b??1?→out = 4'b0010input = 4'b?1??→out = 4'b0100input = 4'b1???→out = 4'b1000- Padrão →
out = 4'b0000
Folha de consulta
casez permite a correspondência de padrões com bits "don't-care" (não importa) usando ? ou z, sendo útil para codificadores de prioridade onde apenas bits específicos importam.
| Instrução | Bits Don't-Care | Notas |
|---|---|---|
case | Nenhum | Correspondência exata |
casez | z ou ? | Recomendado |
casex | x, z, ou ? | Evite — oculta bugs |
Sempre prefira casez em vez de casex. O casex ignora valores x, o que pode mascarar registradores não inicializados ou erros de simulação.
casez (data)
4'b???1: out = 0; // Bit0 deve ser 1, outros não importam
4'b??1?: out = 1; // Bit1 deve ser 1, outros não importam
4'b?1??: out = 2; // Bit2 deve ser 1, outros não importam
4'b1???: out = 3; // Bit3 deve ser 1, outros não importam
default: out = 0;
endcaseO ? significa "don't care" — aquele bit pode ser 0, 1 ou qualquer coisa.
Experimente você mesmo
module decoder (
input [3:0] in,
output reg [3:0] out
);
always @(*) begin
// TODO: Adicionar instrução casez
// in = 4'b???1 -> out = 4'b0001
// in = 4'b??1? -> out = 4'b0010
// in = 4'b?1?? -> out = 4'b0100
// in = 4'b1??? -> out = 4'b1000
// default -> out = 4'b0000
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