Instrução Case
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 55 de 90.
A instrução case permite que você escolha entre muitas ações diferentes com base no valor de uma única expressão. É uma alternativa mais limpa a múltiplas instruções if-else ao comparar a mesma variável com muitos valores diferentes.
A instrução case compara uma expressão a uma lista de valores e executa o bloco correspondente. Ela funciona como um desvio de múltiplas vias.
Sintaxe:
case (expression)
value1: statement1;
value2: statement2;
default: default_statement;
endcaseÉ fortemente recomendado sempre incluir <strong>default</strong> em uma instrução <strong>case</strong> combinacional. Sem o default, se sel assumir um valor inesperado (como X ou Z), out não será atribuído e manterá (latch) seu valor anterior. Isso cria uma memória não pretendida (um latch) em vez de lógica combinacional pura.
Exemplo Simples
case (sel)
2'b00: out = a;
2'b01: out = b;
2'b10: out = c;
default: out = 0;
endcaseSe sel for 00, out recebe a. Se sel for 01, out recebe b. Se sel for 10, out recebe c.
Caso contrário, out recebe 0.
Múltiplas Instruções por Case
Use begin e end para múltiplas instruções:
case (state)
2'b00: begin
out = a;
flag = 1;
end
2'b01: begin
out = b;
flag = 0;
end
default: out = 0;
endcaseRegras Importantes
| Regra | Explicação |
|---|---|
| Todos os valores de case devem ser únicos | Sem valores duplicados |
| Os valores devem corresponder à largura de bits | 2'b01 não 1'b1 |
default é opcional, mas recomendado | Captura valores não mapeados |
Sem default, valores não mapeados causam latches | Em lógica combinacional |
Case vs If-Else
| Case | If-Else | |
|---|---|---|
| Melhor para | Uma variável, muitos valores | Condições complexas |
| Legibilidade | Muito claro | Pode ficar confuso |
| Exemplo | Multiplexador, decodificador | Comparador, verificações de intervalo |
Desafio
Complete a Instrução Case
O que fazer:
Adicione a instrução case que falta para fazer este multiplexador funcionar.
Como funciona:
- Quando
select = 2'b00,result = in0 - Quando
select = 2'b01,result = in1 - Quando
select = 2'b10,result = in2 - Quando
select = 2'b11,result = in3
Folha de consulta
A instrução case seleciona entre múltiplas ações com base em uma única expressão — uma alternativa mais limpa ao if-else encadeado.
case (expression)
value1: statement1;
value2: statement2;
default: default_statement;
endcasePara múltiplas instruções por ramificação, use begin/end:
case (sel)
2'b00: out = a;
2'b01: begin
out = b;
flag = 1;
end
default: out = 0;
endcaseSempre inclua default em lógica combinacional. Sem ele, valores não correspondentes (ex: X, Z) fazem com que a saída mantenha seu valor anterior, criando um latch indesejado.
Regras principais:
- Todos os valores do case devem ser únicos
- Os valores devem corresponder à largura de bits da expressão (ex:
2'b01, não1'b1) - Use
casepara uma variável vs. muitos valores; useif-elsepara condições complexas ou de intervalo
Experimente você mesmo
module mux4 (
input [1:0] select,
input in0, in1, in2, in3,
output reg result
);
always @(*) begin
// TODO: Adicionar instrução case
// select=00 -> result = in0
// select=01 -> result = in1
// select=10 -> result = in2
// select=11 -> result = in3
// padrão -> result = 0
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