Generowanie zegara
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 71 z 90.
Zegar to sygnał, który regularnie przełącza się między 0 a 1. Zegary są niezbędne w logice sekwencyjnej, takiej jak przerzutniki i liczniki.
Dlaczego generować sygnał zegarowy
W testbenchach potrzebujesz sygnału zegarowego do testowania układów sekwencyjnych. Sygnał zegarowy steruje działaniem przerzutników, rejestrów i automatów stanów.
Metody generowania zegara
| Metoda | Opis |
|---|---|
always z opóźnieniem # | Najczęściej stosowana metoda |
Pętla forever | Metoda alternatywna |
Pętla repeat | Do ustalonej liczby cykli |
Metoda 1: Blok always z opóźnieniem
reg clk;
initial begin
clk = 0;
end
always #5 clk = ~clk;clk = 0w chwili 0- Co 5 jednostek czasu
clkzmienia stan
- Okres = 10 jednostek czasu
- Częstotliwość = 1/10 = 0.1 na jednostkę czasu
Metoda 2: Pętla nieskończona
reg clk;
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
endTaki sam rezultat jak w przypadku metody always.
Metoda 3: Powtarzanie przez ustaloną liczbę cykli
reg clk;
initial begin
clk = 0;
repeat (10) begin
#5 clk = ~clk;
end
endGeneruje dokładnie 10 zboczy zegara (5 pełnych cykli), a następnie zatrzymuje się.
Wyzwanie
Dodaj brakujący kod, aby wygenerować zegar, który przełącza się co 4 jednostki czasu (okres = 8 jednostek czasu).
Co zrobić:
- Zainicjalizuj
clkwartością 0 w chwili 0, używając blokuinitial - Użyj bloku
alwaysz opóźnieniem, aby przełączaćclkco 4 jednostki czasu
Spróbuj swoich sił
module clock_challenge;
reg clk;
// TODO: Krok 1 - Dodaj blok initial, aby ustawić clk = 0
// TODO: Krok 2 - Dodaj blok always, aby zmieniać stan clk co 4 jednostki czasu
initial begin
$monitor("Time %0t: clk = %b", $time, clk);
#20;
$display("Clock generated for 20 time units");
$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