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óźnienia | Cel |
|---|---|
| Opóźnienia bramek | Opóźnienie w bramkach logicznych |
| Opóźnienia przypisania | Opóźnienie podczas przypisywania wartości |
| Dyrektywa timescale | Ustawia 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 = bLiczba 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
endOś 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 czasuTworzy 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
| Zasada | Wyjaś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 |
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
Ta 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