Opóźnienia przypisań
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 69 z 90.
W poprzednich lekcjach omówiliśmy opóźnienia ogólne (#10 a = b;) oraz opóźnienia bramek (and #5 (out, a, b);). Teraz omówimy opóźnienia przypisania, czyli opóźnienia występujące wewnątrz bloku proceduralnego (takiego jak initial lub always) jako część instrukcji przypisania.
Opóźnienie przypisania odczekuje określony czas, a następnie wykonuje przypisanie. Opóźnienie umieszcza się po symbolu # i przed przypisaniem.
Składnia:
variable = #delay expression;W przeciwieństwie do ogólnego opóźnienia #10 a = b; (opóźnienie, a następnie przypisanie), opóźnienie przypisania a = #10 b; pobiera w danym momencie wartość b, czeka 10 jednostek czasu, a następnie przypisuje ją do a.
Opóźnienie przypisania a opóźnienie ogólne
| Opóźnienie ogólne | Opóźnienie przypisania | |
|---|---|---|
| Składnia | #10 a = b; | a = #10 b; |
| Kiedy odczytywana jest wartość? | W chwili przypisania (po opóźnieniu) | Natychmiast (przed opóźnieniem) |
| Jaka wartość jest przypisywana? | Wartość b w danym momencie | Wartość b w chwili 0 (lub w chwili odczytu) |
| Kiedy wartość jest przypisywana? | Po opóźnieniu | Po opóźnieniu |
Przykład: różnica
initial begin
b = 1;
#5 b = 0;
// Ogólne opóźnienie
#10 a1 = b; // Czeka 10, po czym odczytuje b (b=0) → a1=0
// Opóźnienie przypisania
a2 = #10 b; // Odczytuje teraz b (b=0), czeka 10, po czym przypisuje → a2=0
endOba dają tutaj ten sam wynik. Różnica pojawia się, gdy b zmienia się podczas opóźnienia.
Przykład kluczowej różnicy
To show b changing during the delay, we need two separate initial blocks that run in parallel:
initial begin
b = 1;
a1 = #10 b; // Odczytuje b=1 w chwili 0, przypisuje a1=1 w chwili 10
end
initial begin
#5 b = 0; // Zmienia b na 0 w chwili 5 (podczas opóźnienia)
end- W chwili 0:
a1odczytujeb = 1 - W chwili 5:
bzmienia się na0(gdya1nadal czeka) - W chwili 10: do
a1przypisywana jest wartość1(wartość odczytana w chwili 0), a nie0
W przypadku ogólnego opóźnienia #10 a2 = b; w osobnym bloku, b zostałoby odczytane w chwili 10 (wartość 0).
Ważne zasady
| Zasada | Wyjaśnienie |
|---|---|
= występuje przed # | a = #10 b;, a nie a #10 = b; |
| Wartość jest odczytywana natychmiast | Prawa strona jest obliczana od razu |
| Przypisanie następuje po opóźnieniu | Lewa strona otrzymuje wartość później |
| Tylko w blokach proceduralnych | Używane w initial lub always |
Wyzwanie
Co zrobić:
Dodaj brakujące opóźnienie przypisania, aby a otrzymało wartość b po 15 jednostkach czasu, ale odczytało b natychmiast.
Spróbuj swoich sił
module assignment_challenge;
reg a, b;
// Osobny blok do zmiany b w czasie opóźnienia
initial begin
b = 1;
// TODO: Dodaj opóźnienie przypisania
// a powinno otrzymać wartość b po 15 jednostkach czasu
// Odczytaj b teraz, przypisz po opóźnieniu
end
initial begin
#5 b = 0; // Zmienia b w czasie opóźnienia
#20 $display("Time %0t: a = %b", $time, a);
$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