Menu
Coddy logo textTech

Case Statement

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

La sentencia case te permite elegir entre muchas acciones diferentes según el valor de una sola expresión. Es una alternativa más clara que varias sentencias if-else al comparar la misma variable con muchos valores diferentes.

La instrucción case compara una expression con una lista de valores y ejecuta el bloque coincidente. Es como una bifurcación de múltiples opciones.

Sintaxis:

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

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

Ejemplo sencillo

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

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

De lo contrario, out obtiene 0.

Múltiples instrucciones por caso

Usa begin y end para varias instrucciones:

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 únicosCon duplicados, solo se ejecuta la primera rama coincidente
Los valores deben coincidir con el ancho de bits2'b01 no 1'b1
default es opcional, pero se recomiendaCaptura los valores no asignados
Sin default, los valores no asignados provocan latchesEn la lógica combinacional

Case frente a If-Else

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

Desafío

Completa la instrucción case

Qué hacer:

Add la instrucción case que falta para hacer funcionar este multiplexor.

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

Practica por tu cuenta: Compilador de Verilog online