Instruction If
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 52 sur 90.
L'instruction if est un bloc de prise de décision qui exécute du code uniquement lorsqu'une condition est vraie. L'instruction if vérifie une condition.
Si la condition est vraie (1), le code à l'intérieur s'exécute. Si la condition est fausse (0), le code est ignoré.
Syntaxe :
if (condition) begin
// Le code s'exécute quand la condition est vraie
endExemple simple
if (reset) begin
count = 0;
endDans cet exemple :
beginetendsont utilisés pour marquer le début et la fin du bloc de code
- Si
resetest 1 (vrai), le code à l'intérieur debeginetends'exécute →countdevient 0 - Si
resetest 0 (faux), le code à l'intérieur est ignoré → rien ne se passe
begin et end fonctionnent comme des accolades { } dans d'autres langages de programmation. Ils regroupent les instructions pour que Verilog sache quel code appartient à la condition if. Même s'il n'y a qu'une seule instruction ici, utiliser begin et end reste une bonne pratique pour la cohérence.
Instruction If dans un bloc Always
always @(posedge clk) begin
if (reset)
count <= 0;
endRemarque : Pour une instruction unique, begin et end sont facultatifs. Par exemple, dans le bloc always ci-dessus, aucun begin/end n'est nécessaire après if car il ne contient qu'une seule instruction.
La condition peut être n'importe quelle expression
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
endRègles importantes
| Règle | Explication |
|---|---|
| La condition doit être un bit unique | Ou une expression qui s'évalue à 0 ou 1 |
begin / end sont nécessaires pour plusieurs instructions | Comme { } dans d'autres langages |
Sans begin/end, une seule instruction suit | La ligne suivante uniquement |
Défi
Ce qu'il faut faire :
- Ajoutez l'instruction
ifmanquante pour que cela fonctionne.
- Lorsque
enableest1,outdoit être égal àa & b - Lorsque
enableest0,outdoit rester à0(ne pas changer)
Le code de départ initialise out = 0 et teste les deux cas.
Aide-mémoire
L'instruction if exécute le code uniquement lorsqu'une condition est vraie (1), et l'ignore lorsqu'elle est fausse (0).
if (condition) begin
// s'exécute quand la condition est vraie
endPour une instruction unique, begin/end sont facultatifs :
always @(posedge clk) begin
if (reset)
count <= 0;
endLes conditions peuvent être n'importe quelle expression s'évaluant à 0 ou 1 :
if (a > b) begin max = a; end
if (a && b) begin out = 1; end
if (data == 8'hFF) begin match = 1; endRègles clés :
- Utilisez
begin/endpour regrouper plusieurs instructions (comme{ }dans d'autres langages) - Sans
begin/end, seule la ligne qui suit immédiatement appartient auif
Essayez vous-même
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// Cas de test 1 : enable = 1
enable = 1;
// À FAIRE : Ajouter l'instruction if (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// Cas de test 2 : enable = 0
enable = 0;
out = 0;
// À FAIRE : out doit rester à 0
$display("enable=0: out = %d (should be 0)", out);
$finish;
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