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 seulement si une condition est vraie. L'instruction if vérifie une condition.
Si la `condition` est vraie (1), le code à l'intérieur `executes`. Si la `condition` est fausse (0), le code est ignoré.
Syntaxe :
if (condition) begin
// Le code s'exécute lorsque condition est true
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
resetvaut 1 (true), le code à l'intérieur debeginetends'exécute →countdevient 0 - Si
resetvaut 0 (false), 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 par souci de cohérence.
Instruction If dans un bloc Always
always @(posedge clk) begin
if (reset)
count <= 0;
endRemarque : Pour une seule instruction, begin et end sont optionnels. 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.
Une 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 peut être n'importe quelle expression | Les valeurs non nulles (et connues) sont traitées comme vraies, zéro comme faux |
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
enablevaut1,outdoit être égal àa & b - Lorsque
enablevaut0,outdoit rester à0(ne pas changer)
Le code de départ initialise out = 0 et teste les deux cas.
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;
// TODO: Ajouter une instruction if (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// Cas de test 2 : enable = 0
enable = 0;
out = 0;
// TODO: out devrait 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