Menu
CoddyTech

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 być oznaczony nazwą.

Wyłączanie za pomocą pętli forever

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 blok o nazwie counter.
    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, instrukcja disable counter zostanie wykonana i zatrzyma cały blok counter, co natychmiast zatrzyma 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

Tut pętla forever działa nieprzerwanie wewnątrz bloku o nazwie counter. Instrukcja disable counter znajduje się w osobnym bloku initial. Po 50 jednostkach czasu instrukcja disable counter zostaje wykonana i zatrzymuje blok counter, co z zewnątrz kończy pętlę forever.

Ważne zasady

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

Wyzwanie

Otrzymujesz 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: Wyświetl "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