Blok always
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 46 z 90.
Blok proceduralny to blok kodu, w którym instrukcje wykonują się jedna po drugiej, sekwencyjnie, tak jak w językach programowania, takich jak C czy Python. Verilog ma dwa bloki proceduralne: initial (wykonuje się raz) i always (wykonuje się ciągle). Zacznijmy od bloku always.
Blok always działa nieprzerwanie. Powtarza się bez końca po rozpoczęciu symulacji. Służy do opisywania sprzętu, który musi działać stale, takiego jak przerzutniki, liczniki i logika kombinacyjna.
Podstawowa składnia:
always @(sensitivity_list) begin
// Kod, który wykonuje się wielokrotnie
end@(sensitivity_list) informuje blok, kiedy ma się wykonać. Bez niego (i bez opóźnienia, takiego jak #5 wewnątrz), blok zapętlałby się w nieskończoność i zawiesił symulację.
Przykład bloku always: licznik
Oto przykład tego, jak możemy użyć bloku always, aby utworzyć licznik.
module counter (
input clk,
output reg [3:0] count
);
always @(posedge clk) count <= count + 1;
endmoduleJak działa ten kod
| Część | Znaczenie |
|---|---|
always | Wykonuj ten kod wielokrotnie, bez końca |
@(posedge clk) | Poczekaj, aż sygnał zegara zmieni się z 0 na 1 (zbocze narastające) |
count <= count + 1 | Pobierz bieżącą wartość count, dodaj 1 i zapisz ją z powrotem |
Blok wykonuje się przy każdym narastającym zboczu zegara. Za każdym razem count zwiększa się o 1.
Lista czułości @(posedge clk) informuje, że kod ma być wykonywany tylko na zboczach zegara, a nie w sposób ciągły. Bez tego pętla działałaby bez końca, bez opóźnienia.
Blok always z wieloma sygnałami
Możesz wymienić konkretne sygnały:
always @(a or b) begin
out = a & b;
endTo uruchamia się, gdy zmieni się a lub b.
Wyzwanie
Dodaj brakujący blok always, aby ten moduł działał.
Jak to działa:
- Przy każdym narastającym zboczu zegara
out1zmienia stan (przełącza się) z 0 na 1 lub z 1 na 0 out2podąża zaout1(ma taką samą wartość jakout1)
Co zrobić:
- Dodaj blok
always @(posedge clk) - Wewnątrz spraw, by
out1zmieniał stan (użyjout1 = ~out1) - Spraw, by
out2miało taką samą wartość jakout1
Spróbuj swoich sił
module toggler (
input clk,
output reg out1,
output reg out2
);
initial begin
out1 = 0;
out2 = 0;
end
// TODO: Dodaj blok always z posedge clk
// out1 zmienia stan przy każdym takcie zegara
// out2 podąża za out1
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