Boucle While
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 59 sur 90.
La boucle while répète un bloc de code tant qu'une condition est vraie. Contrairement à la boucle for, elle ne possède pas de compteur intégré — vous devez mettre à jour la variable de boucle vous-même.
Une boucle while vérifie une condition avant chaque itération. Si la condition est vraie, la boucle s'exécute. Si elle est fausse, la boucle s'arrête.
Syntaxe :
while (condition) begin
// Code à répéter
endExemple simple
integer i = 0;
while (i < 5) begin
$display("i = %d", i);
i = i + 1;
endRésultat :
i = 0
i = 1
i = 2
i = 3
i = 4La boucle s'exécute tant que i < 5.
Boucle While vs For
| Boucle For | Boucle While | |
|---|---|---|
| Compteur | Intégré | Vous le gérez |
| Quand l'utiliser | Nombre d'itérations connu | Moment de l'arrêt de la boucle inconnu |
| Syntaxe | for (i=0; i<5; i=i+1) | while (i < 5) |
Boucle While dans les Testbenches
Les boucles while sont utiles lorsque vous ne savez pas exactement de combien d'itérations vous avez besoin :
integer i = 0;
while (i < 16) begin
$display("Testing value %d", i);
i = i + 1;
endRecherche d'une valeur spécifique
integer i = 0;
reg [7:0] data;
while (data[i] != 1) begin
i = i + 1;
end
$display("First 1 found at position %d", i);Règles importantes
| Règle | Explication |
|---|---|
| La condition doit devenir fausse | Sinon, boucle infinie |
| Mettre à jour la variable de boucle à l'intérieur | Ou la boucle ne se termine jamais |
La variable de boucle doit être un integer | Ne peut pas être un reg |
Utiliser begin/end pour plusieurs instructions | Requis pour plus d'une ligne |
Défi
À faire :
Ajoutez la boucle while manquante pour afficher les nombres de 0 à 2.
Aide-mémoire
La boucle while répète un bloc de code tant qu'une condition est vraie. Vous devez mettre à jour la variable de boucle manuellement.
integer i = 0;
while (i < 5) begin
$display("i = %d", i);
i = i + 1;
endRègles clés :
- La variable de boucle doit être
integer(pasreg) - Mettez toujours à jour la variable de boucle à l'intérieur de la boucle pour éviter les boucles infinies
- Utilisez
begin/endpour plusieurs instructions
While vs For : Utilisez for lorsque le nombre d'itérations est connu ; utilisez while lorsque la condition d'arrêt est dynamique (par exemple, la recherche d'une valeur).
// Recherche du premier bit à 1
while (data[i] != 1) begin
i = i + 1;
endEssayez vous-même
module while_challenge;
integer i;
initial begin
i = 0;
$display("Printing 0 to 2:");
// TODO: Ajouter une boucle while
// Boucler tant que i < 3
// À l'intérieur, afficher i
// Incrémenter i de 1
$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