Dyrektywa timescale
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 70 z 90.
Dyrektywa timescale ustawia jednostkę czasu i precyzję czasu na potrzeby symulacji. Informuje symulator, jak interpretować wartości opóźnienia, takie jak #10.
W poprzednich lekcjach używaliśmy opóźnień, takich jak #10, bez określania, co oznacza „10”. Czy to 10 nanosekund? 10 pikosekund? Dyrektywa timescale odpowiada na to pytanie.
Składnia:
`timescale time_unit / time_precision| Część | Znaczenie | Przykład |
|---|---|---|
time_unit | Podstawowa jednostka opóźnień | 1ns |
time_precision | Precyzja symulacji | 1ps |
Odwrócony apostrof ` przed timescale oznacza, że jest to dyrektywa kompilatora.
Przykład
`timescale 1ns / 1pstime_unit = 1ns→#10oznacza 10 nanosekundtime_precision = 1ps→ Symulacja zaokrągla do najbliższej pikosekundy
Typowe wartości skali czasu
| Jednostka czasu | Precyzja | Zastosowanie |
|---|---|---|
1ns / 1ns | Nanosekunda | Proste symulacje |
1ns / 1ps | Pikosekunda | Większa precyzja |
1ps / 1ps | Pikosekunda | Projekty o dużej szybkości |
1us / 1ns | Mikrosekunda | Wolne symulacje |
Jak wpływa na opóźnienia
`timescale 1ns / 1ps
initial begin
#10 a = 1; // Czeka 10 nanosekund
endBez timescale niektóre symulatory zakładają domyślną wartość (często 1 ns). Najlepiej zawsze ją określać.
Ważne zasady
| Zasada | Wyjaśnienie |
|---|---|
| Musi znajdować się poza modułami | Umieszczona przed definicją dowolnego modułu |
| Symbol backtick | `timescale, a nie 'timescale |
| Jednostka czasu ≥ precyzja czasu | 1ns / 1ps jest poprawne, 1ps / 1ns nie |
| Wpływa na wszystkie opóźnienia w pliku | Opóźnienia ogólne, opóźnienia bramek, opóźnienia przypisań |
Wyzwanie
Co zrobić:
Dodaj brakującą dyrektywę timescale, aby opóźnienia odpowiadały 10ns, 20ns i 30ns.
Spróbuj swoich sił
// TODO: Dodaj dyrektywę timescale (1ns / 1ps)
module timescale_challenge;
initial begin
$display("Time %0t", $time);
#10 $display("Time %0t (10ns = 10000ps)", $time);
#10 $display("Time %0t (20ns = 20000ps)", $time);
#10 $display("Time %0t (30ns = 30000ps)", $time);
$finish;
end
endmoduleTa 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