Menu
Coddy logo textTech

Instruction Case

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

L'instruction case vous permet de choisir entre plusieurs actions différentes en fonction de la valeur d'une seule expression. C'est une alternative plus propre à plusieurs instructions if-else lors de la comparaison de 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. C'est comme un branchement multidirectionnel.

Syntaxe :

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

Il est fortement recommandé de toujours inclure <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 assigné et va mémoriser (latch) sa valeur précédente. Cela crée une mémoire non intentionnelle (un latch) au lieu d'une logique combinatoire pure.

Exemple simple

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

Si sel est 00, out reçoit a. Si sel est 01, out reçoit b. Si sel est 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
Toutes les valeurs de cas doivent être uniquesPas de valeurs en double
Les valeurs doivent correspondre à la largeur de 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 verrous (latches)Dans la logique combinatoire

Case vs If-Else

 CaseIf-Else
Idéal pourUne seule variable, plusieurs valeursConditions complexes
LisibilitéTrès clairePeut devenir complexe
ExempleMultiplexeur, décodeurComparateur, vérifications de plage
challenge icon

Défi

Complétez l'instruction Case

Ce qu'il faut faire :

Ajoutez l'instruction case manquante pour faire fonctionner ce multiplexeur.

Comment ça fonctionne :

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

Aide-mémoire

L'instruction case permet de choisir entre plusieurs actions basées sur une seule expression — une alternative plus propre aux if-else enchaînés.

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

Pour plusieurs instructions par branche, utilisez begin/end :

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

Incluez toujours default dans la logique combinatoire. Sans cela, les valeurs non correspondantes (par exemple, X, Z) font que la sortie conserve sa valeur précédente, créant un latch involontaire.

Règles clés :

  • Toutes les valeurs de cas doivent être uniques
  • Les valeurs doivent correspondre à la largeur de bits de l'expression (par exemple, 2'b01, et non 1'b1)
  • Utilisez case pour une seule variable par rapport à plusieurs valeurs ; utilisez if-else pour des conditions complexes ou des plages de valeurs

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