Pętla while
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 59 z 90.
Pętla while powtarza blok kodu dopóki warunek jest prawdziwy. W przeciwieństwie do pętli for nie ma wbudowanego licznika. Musisz samodzielnie aktualizować zmienną pętli.
Pętla while sprawdza warunek przed każdą iteracją. Jeśli warunek jest prawdziwy, pętla wykonuje się. Jeśli jest fałszywy, pętla się zatrzymuje.
Składnia:
while (condition) begin
// Kod do powtarzania
endProsty przykład
integer i = 0;
while (i < 5) begin
$display("i = %d", i);
i = i + 1;
endWynik:
i = 0
i = 1
i = 2
i = 3
i = 4Pętla działa tak długo, jak i < 5.
Pętla while a pętla for
| Pętla for | Pętla while | |
|---|---|---|
| Licznik | Wbudowany | Zarządzasz nim samodzielnie |
| Kiedy używać | Znana liczba iteracji | Nie wiadomo, kiedy pętla się zakończy |
| Składnia | for (i=0; i<5; i=i+1) | while (i < 5) |
Pętla while w stanowiskach testowych
Pętle while są przydatne, gdy nie wiesz dokładnie, ile iteracji potrzebujesz:
integer i = 0;
while (i < 16) begin
$display("Testing value %d", i);
i = i + 1;
endZnajdowanie konkretnej wartości
integer i = 0;
reg [7:0] data;
while (data[i] != 1) begin
i = i + 1;
end
$display("First 1 found at position %d", i);Ważne zasady
| Zasada | Wyjaśnienie |
|---|---|
| Warunek musi stać się fałszywy | W przeciwnym razie powstanie nieskończona pętla |
| Zmienną pętli aktualizuj wewnątrz | W przeciwnym razie pętla nigdy się nie zakończy |
Zmienna pętli musi być typu integer lub reg | Nie może być typu wire |
W przypadku wielu instrukcji użyj begin/end | Wymagane przy więcej niż jednym wierszu |
Wyzwanie
Co należy zrobić:
Dodaj brakującą pętlę while, aby wyświetlić liczby od 0 do 2.
Spróbuj swoich sił
module while_challenge;
integer i;
initial begin
i = 0;
$display("Printing 0 to 2:");
// TODO: Dodaj pętlę while
// Powtarzaj pętlę, dopóki i < 3
// Wewnątrz pętli wypisz i
// Zwiększ i o 1
$finish;
end
endmoduleTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Wprowadzenie
Czym jest VerilogSprzęt a oprogramowanieTwój pierwszy modułKomentarzePoziomy abstrakcji projektu4Operatory, część 1
Operatory arytmetyczneOperator moduloOperatory porównaniaPowtórka — prosta matematykaOperatory bitowe7Przypisania i bramki
Przypisanie ciągłePrzypisanie z operatoramiWbudowane prymitywy bramekBramki AND, OR i NOTBramki XOR i XNORPodsumowanie — układ z bramek logicznych10Podejmowanie decyzji
Instrukcja ifIf-elsePowtórka – prosty komparatorInstrukcja caseCaseX i CaseZPowtórka – projektowanie ALU13Odmierzanie czasu i opóźnienia
Czym są opóźnieniaOpóźnienia bramekOpóźnienia przypisańDyrektywa timescaleGenerowanie zegaraPodsumowanie — kontrola czasu2Typy danych
Typ WireTyp RegLiczby całkowite i rzeczywisteWektoryTabliceParametryPowtórka — deklarowanie sygnałów5Operatory — część 2
Operatory logiczneOperatory redukcjiOperatory przesunięciaOperator konkatenacjiOperator warunkowyPowtórzenie — wyzwanie z operatorami11Pętle
Pętla forPętla whilePętla repeatPętla nieskończonaInstrukcja wyłączaniaPowtórka — wzorce pętli3System liczbowy
Reprezentacja binarnaLiczby o określonej szerokościLiczby o nieokreślonej szerokościLiczby ujemneWartości specjalne X i ZPodsumowanie — formaty liczb6Moduły
Struktura modułuPorty wejściowe i wyjściowePorty dwukierunkoweInstancjonowanie modułuMapowanie portów według nazwMapowanie portów według kolejnościPodsumowanie — zbuduj moduł9Bloki proceduralne
Blok alwaysBlok initialLista czułościPrzypisanie blokującePrzypisanie nieblokującePodsumowanie — always a initial12Projekt multipleksera
Projekt multipleksera 2 do 1Projekt multipleksera 4 do 115Sterownik sygnalizacji świetlnej
Definiowanie stanówLogika maszyny stanówPoćwicz samodzielnie: Kompilator Verilog online