Pętla nieskończona
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 61 z 90.
Pętla forever powtarza blok kodu nieprzerwanie, w nieskończoność. Nigdy nie zatrzymuje się sama.
Pętla forever wykonuje się wielokrotnie bez końca. Przydaje się do generowania zegarów i innych ciągłych sygnałów w modułach testowych.
Składnia:
forever begin
// Kod, który powtarza się bez końca
endProsty przykład
forever begin
$display("This prints forever");
endTo będzie drukować bez końca i spowoduje awarię symulacji. Zawsze dodawaj opóźnienie lub warunek zatrzymania.
Generowanie zegara (częste zastosowanie)
Najczęstszym zastosowaniem forever jest generowanie zegara:
initial begin
clk = 0;
forever begin
#5 clk = ~clk; // Przełączaj co 5 jednostek czasu
end
endTworzy to zegar, który działa przez całą symulację.
Na zawsze z Disable
Możesz zatrzymać pętlę forever za pomocą instrukcji disable:
initial begin : clock_gen // Nazwa dodana tutaj
clk = 0;
forever begin
#5 clk = ~clk;
end
endinitial begin
#100;
disable clock_gen; // Teraz to działa
endPętla forever a inne pętle
| Pętla | Zatrzymuje się? | Kiedy używać |
|---|---|---|
for | Tak (po ustalonej liczbie iteracji) | Znana liczba powtórzeń |
while | Tak (gdy warunek jest fałszywy) | Nieznany warunek zatrzymania |
repeat | Tak (po ustalonej liczbie iteracji) | Znana liczba powtórzeń |
forever | Nie (nigdy) | Sygnały ciągłe (zegar) |
Ważne zasady
| Zasada | Wyjaśnienie |
|---|---|
| Musi zawierać opóźnienie | #10 lub @(posedge clk) |
| Bez opóźnienia symulacja się zawiesza | Nieskończona pętla bez upływu czasu |
Użyj razem z disable, aby zatrzymać | W przeciwnym razie symulacja nigdy się nie kończy |
| Najlepiej używać w testbenchach | Nie podlega syntezie |
Wyzwanie
Co zrobić:
Dodaj brakującą pętlę forever, aby wygenerować zegar, który zmienia stan co 10 jednostek czasu.
Spróbuj swoich sił
module forever_challenge;
reg clk;
initial begin
clk = 0;
// TODO: Dodaj pętlę forever, aby zmieniać stan clk co 10 jednostek czasu
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