Instrukcja wyłączania
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 62 z 90.
Instrukcja disable zatrzymuje wykonywanie nazwanego bloku (takiego jak pętla forever, blok begin-end lub zadanie). Przydaje się do wychodzenia z pętli, które w przeciwnym razie działałyby bez końca.
Składnia:
disable block_name;Blok musi mieć etykietę w postaci nazwy.
Wyłączanie za pomocą pętli nieskończonej
initial begin : counter // counter nadaje blokowi nazwę counter.
forever begin
#10 count = count + 1;
if (count == 5) begin
disable counter; // disable counter zatrzymuje cały ten nazwany blok.
end
end
endPętla forever znajduje się wewnątrz nazwanego bloku counter. Instrukcja disable counter jest umieszczona wewnątrz pętli. Gdy count osiągnie 5, wykonywana jest instrukcja disable counter, która zatrzymuje cały blok counter, a tym samym natychmiast zatrzymuje również pętlę forever.
Wyłącz w osobnym bloku
initial begin : counter
forever begin
#10 count = count + 1;
end
end
initial begin
#50;
disable counter; // Zatrzymuje blok counter z zewnątrz
endTutaj pętla forever działa nieprzerwanie wewnątrz nazwanego bloku counter. Instrukcja disable counter znajduje się w osobnym bloku initial. Po 50 jednostkach czasu wykonywana jest instrukcja disable counter i zatrzymuje blok counter, co z zewnątrz przerywa pętlę forever.
Ważne zasady
| Zasada | Wyjaśnienie |
|---|---|
| Blok musi mieć nazwę | begin : block_name |
| Wyłączenie natychmiast zatrzymuje wykonywanie | Kod zatrzymuje się w tym momencie |
| Można użyć z dowolnego miejsca | Z dowolnego bloku w module |
Przydatne do zatrzymywania pętli forever | W przeciwnym razie nigdy się nie zatrzymują |
Wyzwanie
Masz moduł z licznikiem, który działa bez końca.
Co zrobić:
Uzupełnij pusty blok, zastępując każdy komentarz odpowiednim kodem:
- Dodaj
#50;, aby odczekać 50 jednostek czasu - Dodaj
disable counter;, aby zatrzymać blok licznika - Dodaj
$display("Counter stopped");, aby wyświetlić komunikat - Dodaj
$finish;, aby zakończyć symulację
Spróbuj swoich sił
module disable_challenge;
integer count;
initial begin
count = 0;
fork
begin : counter
forever begin
#10 count = count + 1;
$display("count = %d", count);
end
end
begin
// Krok 1: Poczekaj 50 jednostek czasu
// Krok 2: Wyłącz blok counter
// Krok 3: Wypisz "Counter stopped"
// Krok 4: Zakończ symulację
end
join
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