Menu
Coddy logo textTech

Sentencia Case

Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 55 de 90.

La declaración case te permite elegir entre muchas acciones diferentes según el valor de una sola expresión. Es una alternativa más limpia a múltiples declaraciones if-else cuando se compara la misma variable con muchos valores diferentes.

La declaración case compara una expresión con una lista de valores y ejecuta el bloque coincidente. Es como una ramificación múltiple.

Sintaxis:

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

Se recomienda encarecidamente incluir siempre <strong>default</strong> en una sentencia <strong>case</strong> combinacional. Sin default, si sel toma un valor inesperado (como X o Z), out no se asignará y retendrá (hará latch) su valor anterior. Esto crea memoria no deseada (un latch) en lugar de lógica combinacional pura.

Ejemplo simple

case (sel)
  2'b00: out = a;
  2'b01: out = b;
  2'b10: out = c;
  default: out = 0;
endcase

Si sel es 00, out recibe a. Si sel es 01, out recibe b. Si sel es 10, out recibe c.

De lo contrario, out obtiene 0.

Múltiples declaraciones por caso

Utiliza begin y end para múltiples declaraciones:

case (state)
  2'b00: begin
    out = a;
    flag = 1;
  end
  2'b01: begin
    out = b;
    flag = 0;
  end
  default: out = 0;
endcase

Reglas importantes

ReglaExplicación
Los valores de case deben ser únicosSi hay duplicados, solo se ejecuta la primera rama que coincida
Los valores deben coincidir en ancho de bits2'b01 no 1'b1
default es opcional pero recomendadoCaptura valores no mapeados
Sin default, los valores no mapeados causan latchesEn lógica combinacional

Case vs If-Else

 CaseIf-Else
Ideal paraUna variable, muchos valoresCondiciones complejas
LegibilidadMuy claraPuede volverse desordenado
EjemploMultiplexor, decodificadorComparador, comprobaciones de rango
challenge icon

Desafío

Completa la instrucción case

Qué hacer:

Añade la instrucción case que falta para hacer que este multiplexor funcione.

Cómo funciona:

  • Cuando select = 2'b00, result = in0
  • Cuando select = 2'b01, result = in1
  • Cuando select = 2'b10, result = in2
  • Cuando select = 2'b11, result = in3

Pruébalo tú mismo

module mux4 (
  input [1:0] select,
  input in0, in1, in2, in3,
  output reg result
);
  
  always @(*) begin
    // TODO: Añadir sentencia case
    // select=00 -> result = in0
    // select=01 -> result = in1
    // select=10 -> result = in2
    // select=11 -> result = in3
    // default -> result = 0
  end
  
endmodule
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos