Dokumentacja Verilog
Zwięzła dokumentacja Verilog oparta na przykładach. Przeczytaj o zagadnieniu, zobacz kod i przećwicz go na ścieżce Coddy.
Zacznij ścieżkę Verilog z przewodnikiemGetting Started
- Co to jest Verilog?Proste wprowadzenie do Veriloga: czym jest, do czego służy, czym różni się od zwykłego języka programowania i dlaczego projektanci układów cyfrowych wciąż po niego sięgają po 40 latach.
- Sprzęt a oprogramowanieDlaczego po językach programowania Verilog wprawia w zakłopotanie: domyślna współbieżność, czas jako pojęcie pierwszej klasy i instrukcje, które nie wykonują się po kolei.
- Instalacja VerilogaZainstaluj Icarus Verilog i GTKWave, żeby kompilować i symulować Veriloga lokalnie. Możesz też pominąć instalację i używać edytora w przeglądarce: w tej dokumentacji zadziała jedno i drugie.
- Pierwszy modułNapisz od zera swój pierwszy kompletny moduł w Verilogu: deklarację, porty, fragment logiki kombinacyjnej i testbench, który nim steruje. Do uruchomienia w przeglądarce.
- KomentarzeJak pisać komentarze jednoliniowe i wieloliniowe w Verilogu oraz jakich wzorców dokumentowania używają projektanci układów cyfrowych, żeby moduły pozostały czytelne, gdy rosną.
Data Types & Numbers
- Wire i regDwa główne typy danych w Verilogu, `wire` do ciągłych połączeń i `reg` do przechowywania wartości w kodzie proceduralnym, oraz reguła, która za każdym razem pozwala wybrać właściwy.
- Wektory i tabliceJak deklarować sygnały wielobitowe za pomocą `[7:0]`, wycinać z nich bity, łączyć je i czym różni się wektor spakowany od tablicy pamięci.
- ParametryJak używać `parameter` i `localparam` do definiowania stałych czasu kompilacji, parametryzowania szerokości i głębokości oraz nadpisywania wartości przy tworzeniu instancji modułu.
- Literały liczboweJak Verilog zapisuje stałe: z rozmiarem i bez, podstawy `'b` `'h` `'d` `'o`, liczby ze znakiem, podkreślenia dla czytelności i pułapki, w które wpadają początkujący.
- Wartości X i ZSygnały w Verilogu mają cztery możliwe wartości, a nie dwie. Oto co naprawdę oznaczają w symulacji `x` (wartość nieznana) i `z` (wysoka impedancja) oraz jak je debugować.
Operators
- OperatoryPodstawowe operatory Veriloga: arytmetyczne, porównania, logiczne i warunkowy `?:`, razem z regułami i pułapkami dotyczącymi mieszanych szerokości i znaku.
- Operatory bitowe i redukcjaOperatory działające na bitach w Verilogu: bitowe AND/OR/XOR, ich odwrócone formy i operatory redukcyjne, które zwijają cały wektor do jednego bitu.
- Konkatenacja i replikacjaJak sklejać sygnały za pomocą `{}` i kopiować wzorzec N razy za pomocą `{N{...}}`. To niezbędne operatory Veriloga do budowania szerszych magistral z kawałków.
Modules & Structure
- Porty modułuJak deklarować porty modułu (input, output i inout), jak wygląda lista portów w stylu ANSI i kiedy wyjście powinno być `wire`, a kiedy `reg`.
- Instancje modułówJak utworzyć instancję jednego modułu w drugim, czym różnią się połączenia portów po nazwie i po pozycji oraz jakie wzorce z wieloma instancjami służą do budowy prawdziwych projektów.
- Przypisanie ciągłeJak działa `assign`: zawsze prawdziwa zależność, którą opisuje, co może, a czego nie może sterować, i w jakich wzorcach sprawdza się lepiej niż kod proceduralny.
Procedural Blocks
- Blok alwaysJak działają bloki `always`, czym różni się kombinacyjne `always @(*)` od taktowanego `always @(posedge clk)` i jakie reguły decydują o tym, jaki sprzęt powstaje z każdego z nich.
- Blok initialCzym bloki `initial` różnią się od `always`, dlaczego istnieją tylko w symulacji i do jakich typowych wzorców służą: pobudzenie, konfiguracja przebiegów, nagłówki logów.
- Blokujące i nieblokująceTemat, który początkującym w Verilogu myli się najczęściej. Co naprawdę znaczą `=` i `<=` wewnątrz bloku `always` i jaka reguła zapobiega większości wyścigów.
Control Flow
- If-elseJak działa `if`/`else` wewnątrz bloku `always`, pułapka zatrzasku, w którą wpadają początkujący, i koder priorytetowy, który powstaje z łańcucha `else if`.
- Instrukcja caseJak działa `case` przy czystym dekodowaniu wielu wariantów, dlaczego nigdy nie warto pomijać `default` i czym różnią się `case`, `casex` i `casez`.
- Pętle forCzym pętle `for` w Verilogu różnią się od swoich odpowiedników z programowania: syntezator rozwija je w równoległy sprzęt, zamiast wykonywać je iteracyjnie w czasie działania.
Sequential Logic & FSMs
- Logika taktowanaJak z taktowanych bloków `always` budować rejestry, liczniki, rejestry przesuwne i potoki. To podstawowy wzorzec każdego synchronicznego układu cyfrowego.
- Maszyny stanówJak pisać automat skończony (FSM) w Verilogu tak, jak robią to profesjonaliści: taktowany rejestr stanu, kombinacyjny blok następnego stanu i czysty podział, który łatwo czytać i syntezować.
Testbenches & Simulation
- Podstawy testbenchaJak napisać testbench w Verilogu: generowanie zegara, sekwencja resetu, pobudzenie, obserwacja i standardowy szkielet, który napędza każdą uruchamianą symulację.
- Display i MonitorJak działają `$display`, `$write` i `$monitor`: specyfikatory formatu, których będziesz używać, czym się różnią i kiedy które z nich jest właściwym narzędziem.
- Dumpfile i VCDJak dodać do testbencha zapis przebiegów VCD: `$dumpfile`, `$dumpvars`, wybór zakresu i jak obejrzeć wynikowy plik w GTKWave albo w edytorze w przeglądarce.
- Timescale i opóźnieniaJak dyrektywa `` `timescale `` ustala jednostkę `#delay`, jakie reguły obowiązują przy łączeniu różnych jednostek w wielu plikach i jak opóźnienia współgrają z logiką taktowaną zegarem.