Licznik bitów
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 87 z 90.
Wyzwanie
W tym rozdziale krok po kroku zbudujesz nadajnik UART. UART to skrót od Universal Asynchronous Receiver-Transmitter. Jest to prosty protokół sprzętowy, który umożliwia dwóm urządzeniom komunikowanie się za pomocą jednego przewodu (do nadawania) i drugiego przewodu (do odbierania).
Wyobraź sobie dwie osoby rozmawiające przez telefon: jedna mówi (nadaje), a druga słucha (odbiera). UART wysyła dane po jednym bicie naraz, używając bitów startu i stopu do oznaczenia początku i końca każdego bajtu.
Nadajnik UART wysyła 10 bitów: bit startu (1), bity danych (8), bit stopu (1). Aby śledzić, który bit wysyłamy, potrzebujemy licznika bitów, który zlicza od 0 do 10.
Jak działa licznik bitów
- Zacznij od 0
- W każdym cyklu zegara dodaj 1
- Gdy osiągnie 10, wróć do 0
- Powtarzaj bez końca
W tym zadaniu nie będziemy jeszcze zerować licznika: będziemy go tylko zwiększać.
Co należy zrobić:
- Utwórz moduł o nazwie
uart_tx, który ma:- Jedno wejście:
clk - Jedno wyjście:
cnt(4 bity, typreg)
- Jedno wejście:
- Wewnątrz modułu:
- Ustaw
cntna 0 na początku, wewnątrz bloku initial - Dodaj blok
always @(posedge clk) - Zwiększaj
cnto 1 na każdym zboczu zegara
- Ustaw
Spróbuj swoich sił
// TODO: Utwórz moduł uart_tx z wejściem clk i wyjściem cnt (4 bity)
// TODO: Ustaw cnt na 0 na początku w bloku initial
// TODO: Dodaj blok always @(posedge clk)
// TODO: Zwiększ cnt o 1Wszystkie 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