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 de um valor, enquanto outros bits podem ser ignorados. Por exemplo, em um codificador de prioridade, você quer encontrar o primeiro bit 1, independentemente dos outros bits.
Uma instrução case comum exigiria que você listasse todas as combinações possíveis dos bits indiferentes, o que é impossível para barramentos largos.
casez e casex resolvem esse problema permitindo que você marque determinados bits como "não importa" usando ?, z ou x.
Casez vs Casex vs Case Regular
| Instrução | Bits irrelevantes | Ideal para |
|---|---|---|
case | Nenhum | Correspondência exata |
casez | z ou ? | Codificadores de prioridade (recomendado) |
casex | x, z ou ? | Evite (oculta bugs) |
casezignora os bits que sãozou?(recomendado)casextambém ignora os bitsx, o que pode ocultar erros de simulação
Sempre use casez, não casex. casex é perigoso porque ignora valores x (que geralmente indicam registradores não inicializados ou erros de simulação). casez é a alternativa mais segura porque não trata x como valor indiferente.
Exemplo
casez (data)
4'b???1: out = 0; // Bit0 must be 1, others don't matter
4'b??1?: out = 1; // Bit1 must be 1, others don't matter
4'b?1??: out = 2; // Bit2 must be 1, others don't matter
4'b1???: out = 3; // Bit3 must be 1, others don't matter
endcase? significa "não importa". Esse bit pode ser 0, 1 ou qualquer valor.
Desafio
O que fazer:
Adicione a instrução casez que está faltando 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
Experimente você mesmo
module decoder (
input [3:0] in,
output reg [3:0] out
);
always @(*) begin
// TODO: Adicionar a 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. 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