Menu
Coddy logo textTech

Case Statement

Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 55 sur 90.

L’instruction case vous permet de choisir entre de nombreuses actions différentes en fonction de la valeur d’une seule expression. Il s’agit d’une alternative plus claire à plusieurs instructions if-else lorsque vous comparez la même variable à de nombreuses valeurs différentes.

L’instruction case compare une expression à une liste de valeurs et exécute le bloc correspondant. Elle fonctionne comme une branchement à plusieurs voies.

Syntaxe :

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

Il est fortement recommandé d’inclure toujours <strong>default</strong> dans une instruction <strong>case</strong> combinatoire. Sans default, si sel prend une valeur inattendue (comme X ou Z), out ne sera pas affecté et conservera sa valeur précédente comme un latch. Cela crée une mémoire involontaire (un latch) au lieu d’une logique purement combinatoire.

Exemple simple

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

Si sel vaut 00, out reçoit a. Si sel vaut 01, out reçoit b. Si sel vaut 10, out reçoit c.

Sinon, out reçoit 0.

Plusieurs instructions par cas

Utilisez begin et end pour plusieurs instructions :

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

Règles importantes

RègleExplication
Les valeurs de case doivent être uniquesEn cas de doublons, seule la première branche correspondante s’exécute
Les valeurs doivent correspondre à la largeur en bits2'b01 et non 1'b1
default est facultatif, mais recommandéCapture les valeurs non mappées
Sans default, les valeurs non mappées provoquent des verrousDans la logique combinatoire

Case ou If-Else

 CaseIf-Else
Idéal pourUne variable, plusieurs valeursConditions complexes
LisibilitéTrès clairPeut devenir confus
ExempleMultiplexeur, décodeurComparateur, vérifications de plages
challenge icon

Défi

Compléter l’instruction case

À faire :

Ajoute l’instruction case manquante pour faire fonctionner ce multiplexeur.

Fonctionnement :

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

Essayez vous-même

module mux4 (
  input [1:0] select,
  input in0, in1, in2, in3,
  output reg result
);
  
  always @(*) begin
    // TODO: Ajouter l'instruction case
    // select=00 -> result = in0
    // select=01 -> result = in1
    // select=10 -> result = in2
    // select=11 -> result = in3
    // default -> result = 0
  end
  
endmodule
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux

Entraînez-vous par vous-même : Compilateur Verilog en ligne