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 aux instructions if-else multiples lorsque l'on compare 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 une bifurcation à plusieurs voies.

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 verra sa valeur précédente verrouillée (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 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
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 de bits2'b01 et non 1'b1
default est optionnel 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 variable, plusieurs valeursConditions complexes
LisibilitéTrès clairePeut devenir confus
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 :

  • 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 une 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