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. Ela é uma alternativa mais limpa para múltiplos comandos if-else ao comparar a mesma variável a muitos valores diferentes.

A instrução case compara uma expressão a uma lista de valores e executa o bloco correspondente. É 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 receberá atribuição e fará o latch do seu valor anterior. Isso cria memória não intencional (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
Os valores de case devem ser únicosCom duplicatas, apenas o primeiro ramo correspondente é executado
Os valores devem corresponder à largura de bits2'b01 e 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 está faltando 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 o case statement
    // 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