Menu
Coddy logo textTech

Czym są opóźnienia

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

W Verilogu opóźnienia określają, kiedy wykonywana jest instrukcja lub kiedy zmienia się sygnał. Służą do modelowania rzeczywistych zachowań czasowych sprzętu.

Dlaczego opóźnienia są potrzebne

Rzeczywisty sprzęt potrzebuje czasu, aby sygnały przemieszczały się przewodami i bramkami. Opóźnienia pozwalają symulować to zachowanie czasowe.

  • W symulacji, bez opóźnień, wszystko dzieje się w chwili 0
  • Opóźnienia pozwalają rozłożyć zdarzenia w czasie
  • Pomagają testować projekty wrażliwe na czas, takie jak zegary i automaty stanów

Rodzaje opóźnień

Rodzaj opóźnieniaCel
Opóźnienia bramekOpóźnienie w bramkach logicznych
Opóźnienia przypisaniaOpóźnienie podczas przypisywania wartości
Dyrektywa timescaleUstawia jednostki czasu dla symulacji

Podstawowa składnia

Opóźnienie zapisuje się za pomocą #, po którym następuje liczba:

#10 clk = ~clk;   // Odczekaj 10 jednostek czasu, a następnie zmień stan zegara
#5 a = b;         // Odczekaj 5 jednostek czasu, a następnie przypisz a = b

Liczba po # oznacza liczbę jednostek czasu, które należy odczekać.

Prosty przykład

initial begin
  a = 0;
  #10 a = 1;   // Po 10 jednostkach czasu a przyjmuje wartość 1
  #5 a = 0;    // Po kolejnych 5 jednostkach czasu a przyjmuje wartość 0
end

Oś czasu:

  • Czas 0: a = 0
  • Czas 10: a = 1
  • Czas 15: a = 0

Opóźnienia w blokach always

always #5 clk = ~clk;   // Przełączaj sygnał zegarowy co 5 jednostek czasu

Tworzy to ciągły sygnał zegarowy (zakładając, że clk zostało najpierw zainicjalizowane wartością 0 w bloku initial. W przeciwnym razie ~x pozostaje x).

Ważne zasady

ZasadaWyjaśnienie
Symbol #Oznacza opóźnienie
Liczba po #Jak długo czekać, w jednostkach czasu
Opóźnienia się sumują#10 następnie #20 oznacza łącznie 30
Nie można syntezowaćOpóźnienia służą wyłącznie do symulacji
challenge icon

Wyzwanie

Co zrobić:

Dodaj brakujące opóźnienia, aby ten kod wyświetlał komunikaty w chwilach 0, 10, 25 i 40.

Spróbuj swoich sił

module delay_challenge;
  
  initial begin
    $display("Time %0t: Start", $time);
    // TODO: Dodaj opóźnienie, aby osiągnąć czas 10
    $display("Time %0t: After first delay", $time);
    // TODO: Dodaj opóźnienie, aby osiągnąć czas 25
    $display("Time %0t: After second delay", $time);
    // TODO: Dodaj opóźnienie, aby osiągnąć czas 40
    $display("Time %0t: End", $time);
    $finish;
  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