Menu
CoddyTech

Blok initial

Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 47 z 90.

Verilog ma dwa bloki proceduralne: initial (wykonuje się raz) i always (wykonuje się ciągle). Teraz omówimy blok initial.

Czym jest blok initial?

Blok initial wykonuje się tylko raz na początku symulacji (w chwili 0). Gdy zakończy działanie, nie wykonuje się ponownie.

Jest używane głównie w środowiskach testowych do:

  • Ustawiania wartości początkowych
  • Generowania sygnałów testowych
  • Wyświetlania komunikatów
  • Rozpoczynania symulacji

Składnia

initial begin
  // Instrukcje wykonują się jednokrotnie, po kolei
end

Podstawowy przykład

initial begin
  $display("Simulation started");
  $display("This runs once");
  $finish;
end

Wynik:

Simulation started
This runs once

Używanie bloku initial do generowania sygnałów testowych

initial begin
  a = 0;
  #10 a = 1;
  #10 a = 0;
  #10 $finish;
end

Zmienia to wartość a w chwilach: 0, 10 i 20.

initial a zawsze

 initialalways
Uruchamia sięRazCiągle (bez końca)
ZastosowanieTestbenche, inicjalizacjaSprzęt (przerzutniki, liczniki)
Syntezowalne?Tylko dla wartości początkowych (FPGA)Tak (z listą czułości)

Ważne uwagi

  • Bloki initial służą głównie do symulacji. Narzędzia syntezy nie potrafią zamienić opóźnień, takich jak #10, ani zadań, takich jak $display, na sprzęt
  • Używaj initial głównie w testbenchach. W module projektu używają go tylko narzędzia syntezy FPGA i tylko do ustawienia początkowej wartości rejestru lub pamięci
  • Jeśli testbench zawiera zegar działający bez przerwy (np. always #5 clk = ~clk;), symulacja będzie działać w nieskończoność, chyba że wywołasz $finish; gdy występuje tylko blok initial, symulator zatrzymuje się sam, gdy nie pozostają żadne zdarzenia, ale dodanie $finish to nadal dobra praktyka
challenge icon

Wyzwanie

Dodaj brakujący blok initial, który ustawia a na 0, a następnie po 10 jednostkach czasu ustawia a na 1.

Co zrobić:

  1. Dodaj initial begin i end
  2. Ustaw a = 0
  3. Odczekaj #10
  4. Ustaw a = 1
  5. Dodaj $finish, aby zakończyć symulację

Spróbuj swoich sił

module test;
  reg a;
  
  // TODO: Dodaj tutaj blok initial
  // Ustaw a = 0
  // Poczekaj #10
  // Ustaw a = 1
  // Dodaj $finish;, aby zakończyć symulację
  
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