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;
endcaseIl 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;
endcaseSi 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;
endcaseRègles importantes
| Règle | Explication |
|---|---|
Les valeurs de case doivent être uniques | En cas de doublons, seule la première branche correspondante s'exécute |
| Les valeurs doivent correspondre à la largeur de bits | 2'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
| Case | If-Else | |
|---|---|---|
| Idéal pour | Une variable, plusieurs valeurs | Conditions complexes |
| Lisibilité | Très claire | Peut devenir confus |
| Exemple | Multiplexeur, décodeur | Comparateur, vérifications de plage |
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
endmoduleCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1Introduction
Qu'est-ce que VerilogHardware vs SoftwareNiveaux d'abstraction de conceptionVotre premier moduleCommentaires4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Assignation et portes logiques
Assignation continueAssignation avec opérateursPrimitives de portes intégréesPortes AND OR NOTPortes XOR XNORRécapitulatif - Circuit à portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'ALU2Types de données
Type WireType RegEntiers et RéelsVecteursTableauxParamètresRécapitulatif - Déclarer des signaux5Opérateurs - Partie 2
Opérateurs logiquesOpérateurs de réductionOpérateurs de décalageOpérateur de concaténationOpérateur conditionnelRécapitulatif - Défi sur les opérateurs11Boucles
Boucle ForBoucle WhileBoucle RépéterBoucle InfinieInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres avec tailleNombres sans tailleNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats de nombres6Modules
Structure d'un modulePorts d'entrée et de sortiePorts InoutInstanciation de moduleMappage de ports par nomMappage de ports par ordreRécapitulatif - Créer un module9Blocs procéduraux
Bloc AlwaysBloc InitialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - Always vs Initial12Projet Multiplexeur
Conception d'un Mux 2 vers 1Conception d'un Mux 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à états