Menu
Coddy logo textTech

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
end

Pę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
end

Tutaj 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

ZasadaWyjaśnienie
Blok musi mieć nazwębegin : block_name
Wyłączenie natychmiast zatrzymuje wykonywanieKod zatrzymuje się w tym momencie
Można użyć z dowolnego miejscaZ dowolnego bloku w module
Przydatne do zatrzymywania pętli foreverW przeciwnym razie nigdy się nie zatrzymują
challenge icon

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:

  1. Dodaj #50;, aby odczekać 50 jednostek czasu
  2. Dodaj disable counter;, aby zatrzymać blok licznika
  3. Dodaj $display("Counter stopped");, aby wyświetlić komunikat
  4. 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
endmodule
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online