Menu
Coddy logo textTech

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;
endcase

Se 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;
endcase

Regras Importantes

RegraExplicação
Todos os valores de case devem ser únicosSem valores duplicados
Os valores devem corresponder à largura de bits2'b01 não 1'b1
default é opcional, mas recomendadoCaptura valores não mapeados
Sem default, valores não mapeados causam latchesEm lógica combinacional

Case vs If-Else

 CaseIf-Else
Melhor paraUma variável, muitos valoresCondições complexas
LegibilidadeMuito claroPode ficar confuso
ExemploMultiplexador, decodificadorComparador, verificações de intervalo
challenge icon

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;
endcase

Para 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;
endcase

Sempre 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ão 1'b1)
  • Use case para uma variável vs. muitos valores; use if-else para 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
  
endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos