Pętla for
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 58 z 90.
Pętle w Verilogu pozwalają wielokrotnie wykonywać blok kodu. Są szczególnie przydatne w środowiskach testowych do generowania powtarzalnych wzorców testowych, inicjalizowania pamięci i iterowania po tablicach. W przeciwieństwie do opisów sprzętu, które działają równolegle, pętle wykonują się sekwencyjnie, dzięki czemu idealnie nadają się do symulacji i testowania.
Najczęściej używaną pętlą jest pętla <strong>for</strong>, która powtarza się określoną liczbę razy. Pętla for wielokrotnie wykonuje blok kodu, a zmienna pętli zmienia się przy każdej iteracji. Masz dokładną kontrolę nad liczbą jej wykonań.
Składnia:
for (initialization; condition; increment) begin
// Kod do powtórzenia
end| Część | Co robi | Przykład |
|---|---|---|
initialization | Ustawia wartość początkową | i = 0 |
condition | Kiedy zatrzymać | i < 10 |
increment | Zmienia się w każdej pętli | i = i + 1 |
Prosty przykład
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
endWynik:
i = 0
i = 1
i = 2
i = 3
i = 4Pętla wykonuje się 5 razy (i = 0, 1, 2, 3, 4).
Pętla for w stanowiskach testowych
Pętle for są powszechnie używane do testowania wszystkich kombinacji wejściowych:
integer test_value;
for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
$display("test_value = %d", test_value);
endTestuje to wszystkie 16 możliwych wartości sygnału 4-bitowego.
Pętla for z tablicami
reg [7:0] memory [0:9];
integer i;
initial begin
for (i = 0; i < 10; i = i + 1) begin
memory[i] = i * 8;
end
endInicjuje to 10 lokalizacji pamięci.
Ważne zasady
| Zasada | Wyjaśnienie |
|---|---|
Zmienna pętli musi być typu integer lub reg | Nie może być typu wire |
Używaj begin/end dla wielu instrukcji | Wymagane dla więcej niż jednej linii |
| Unikaj nieskończonych pętli | Upewnij się, że warunek w końcu stanie się fałszywy |
| Najlepiej używać w testbenchach | Większości pętli nie można syntezować |
Wyzwanie
Co zrobić:
Dodaj brakującą pętlę for, aby wypisać liczby od 0 do 3.
Spróbuj swoich sił
module for_challenge;
integer i;
initial begin
$display("Printing 0 to 3:");
// TODO: Dodaj pętlę for
// Zainicjalizuj i = 0
// Powtarzaj pętlę, dopóki i < 4
// Zwiększ i = i + 1
// Wewnątrz pętli wypisz za pomocą: $display("i = %d", i);
$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