Menu
Coddy logo textTech

Case Statement

Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 55 de 90.

A instrução case permite escolher entre muitas ações diferentes com base no valor de uma única expressão. Ela é uma alternativa mais limpa a várias instruções if-else ao comparar a mesma variável com muitos valores diferentes.

A instrução case compara uma expressão com uma lista de valores e executa o bloco correspondente. É como um desvio de múltiplos caminhos.

Sintaxe:

case (expression)
  value1: statement1;
  value2: statement2;
  default: default_statement;
endcase

É altamente recomendável sempre incluir <strong>default</strong> em uma instrução <strong>case</strong> combinacional. Sem default, se sel assumir um valor inesperado (como X ou Z), out não será atribuído e irá reter seu valor anterior. Isso cria uma memória não intencional (um latch) em vez de uma lógica puramente combinacional.

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.

Várias instruções por caso

Use begin e end para várias 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
Os valores de case devem ser únicosCom duplicatas, somente o primeiro ramo correspondente é executado
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 latchesNa lógica combinacional

Case vs If-Else

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

Desafio

Conclua o case statement

O que fazer:

Adicione a instrução case ausente 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

Experimente você mesmo

module mux4 (
  input [1:0] select,
  input in0, in1, in2, in3,
  output reg result
);
  
  always @(*) begin
    // TODO: Adicione a instrução case
    // select=00 -> result = in0
    // select=01 -> result = in1
    // select=10 -> result = in2
    // select=11 -> result = in3
    // default -> 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

Pratique por conta própria: Compilador de Verilog online