Blok initial
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 47 z 90.
Verilog ma dwa bloki proceduralne: initial (uruchamia się raz) i always (uruchamia się ciągle). Teraz omówmy blok initial.
Czym jest blok Initial?
Blok initial uruchamia się tylko raz na początku symulacji (w czasie 0). Gdy zakończy działanie, nie uruchamia się ponownie.
Służy głównie w testbenchach do:
- Ustawiania wartości początkowych
- Generowania sygnałów testowych
- Wyświetlania komunikatów
- Uruchamiania symulacji
Składnia
initial begin
// Instrukcje wykonują się raz, po kolei
endPodstawowy przykład
initial begin
$display("Simulation started");
$display("This runs once");
$finish;
endWynik:
Simulation started
This runs onceUżywanie bloku initial do sygnałów testowych
initial begin
a = 0;
#10 a = 1;
#10 a = 0;
#10 $finish;
endZmienia wartość a w chwilach: 0, 10 i 20.
Początkowo vs zawsze
initial | always | |
|---|---|---|
| Uruchamia się | Raz | Ciągle (bez końca) |
| Zastosowanie | Ławy testowe, inicjalizacja | Sprzęt (przerzutniki, liczniki) |
| Czy można syntezować? | Nie (tylko symulacja) | Tak (z listą czułości) |
Ważne uwagi
- Bloki
initialnie podlegają syntezie. Nie można przekształcić ich w sprzęt - Używaj
initialtylko w testbenchach - Jeśli testbench zawiera zegar działający bez końca (np.
always #5 clk = ~clk;), symulacja trwa w nieskończoność, chyba że wywołasz$finish; gdy występuje tylko blokinitial, symulator zatrzymuje się sam, gdy nie pozostają żadne zdarzenia, ale dodanie$finishnadal jest dobrą praktyką
Wyzwanie
Dodaj brakujący blok initial, który ustawia a na 0, a następnie po 10 jednostkach czasu ustawia a na 1.
Co należy zrobić:
- Dodaj
initial beginiend - Ustaw
a = 0 - Odczekaj
#10 - Ustaw
a = 1 - 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ę
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