Język do opisywania układów
Większość języków, które znasz (Python, JavaScript, Go), opisuje sekwencję instrukcji do wykonania przez procesor. Verilog opisuje układ. Zapisujesz, jakie istnieją przewody, jakie rejestry i jak płyną między nimi sygnały. Symulator może potem odtworzyć zachowanie układu, a narzędzie do syntezy może skompilować ten sam tekst do bramek i przerzutników prawdziwego chipa.
To definicja w jednym zdaniu. Przyswojenie jej konsekwencji zajmuje więcej czasu.
Ten fragment wygląda jak malutki program: module, blok initial, zadanie systemowe $display. Kliknij Uruchom, a zobaczysz hello from verilog. Pod spodem symulator nie wykonuje jednak funkcji: udaje, że płynie czas, i krok po kroku przesuwa układ do przodu. Dlatego $finish pojawia się wszędzie: ktoś musi powiedzieć symulatorowi, żeby się zatrzymał.
Co naprawdę znaczy "opis sprzętu"
Linia w C wykonuje się, gdy dotrze do niej licznik programu. Linia w Verilogu opisuje fragment układu, który istnieje zawsze. Weźmy:
assign y = a & b;
To nie znaczy "oblicz y raz". To znaczy "istnieje przewód y i w każdej chwili równa się a AND b". Zmień a albo b, a y natychmiast za nimi podąży. Kilka instrukcji assign w module to nie sekwencja, tylko równoległe opisy osobnych części układu.
To cecha, która definiuje Verilog, i źródło każdego błędu początkujących. Większość tego, co piszesz, opisuje rzeczy dziejące się współbieżnie, a nieliczne konstrukcje, które wyglądają jak uporządkowane instrukcje (w blokach initial i always), wyglądają tak tylko dlatego, że symulator udaje.
Co budujesz w Verilogu
Verilog spotkasz na każdym poziomie cyfrowego stosu:
- Logika kombinacyjna. Sumatory, multipleksery, dekodery, fragmenty ALU, czyli wszystko, gdzie wyjście zależy tylko od bieżących wejść.
- Logika sekwencyjna. Liczniki, rejestry przesuwne, maszyny stanów, czyli wszystko taktowane przez
posedge clk. - Rdzenie procesorów. Od procesorów z zadań na studiach po otwarte rdzenie RISC-V trafiające do prawdziwego krzemu: RTL to zwykle Verilog albo SystemVerilog.
- Projekty FPGA. Logika ładowana do układów FPGA firm Xilinx lub Intel (sieci, przetwarzanie obrazu, sterowanie w systemach wbudowanych) jest w przeważającej mierze pisana w Verilogu.
- Układy ASIC. Dedykowane chipy w twoim telefonie, routerze czy samochodzie: ich projekt front-end to HDL, a Verilog jest jednym z dwóch dominujących wyborów.
Do nauki nie potrzebujesz żadnego z tych urządzeń. Wszystko w tej dokumentacji działa w symulatorze w przeglądarce.
Symulacja a synteza
Verilog można "uruchomić" na dwa sposoby i nie są one tym samym:
- Symulacja odtwarza zachowanie układu programowo. Symulator (Icarus Verilog, Verilator, ModelSim, narzędzia komercyjne) czyta twoje moduły razem z testbenchem, czyli kodem, który steruje wejściami, i generuje wynik: logi tekstowe, przebiegi, raporty zaliczone/niezaliczone.
- Synteza bierze podzbiór Veriloga i kompiluje go do netlisty prawdziwych bramek. Mapowaniem zajmuje się narzędzie producenta (Vivado, Quartus, narzędzia typu design compiler w dużych firmach). Syntezowany Verilog musi przestrzegać dodatkowych reguł: bloki
initiali wywołania$displaynie istnieją w krzemie.
Edytor w przeglądarce na tych stronach wykonuje symulację. To wszystko, czego potrzebujesz, dopóki nie wypuszczasz prawdziwego chipa albo nie programujesz układu FPGA.
Verilog a SystemVerilog
Szukając informacji, zobaczysz obie nazwy. SystemVerilog to nadzbiór: zachowuje każdą konstrukcję Veriloga i dodaje funkcje nastawione głównie na weryfikację (klasy, losowe testowanie z ograniczeniami, asercje, interfejsy, znacznie bogatszy system typów). Wszystko, czego się tu nauczysz, jest poprawnym SystemVerilogiem. W praktyce obie nazwy się zacierają: większość narzędzi przyjmuje oba, a większość plików i tak kończy się na .v. W całej tej dokumentacji mówimy "Verilog".
Verilog a VHDL
Oba to języki opisu sprzętu. Oba są standardami IEEE. Oba istnieją od lat 80. Różnice:
- Składnia. Verilog wywodzi się z C: nawiasy klamrowe, zwięzłe słowa kluczowe, luźniejsze reguły typów. VHDL wywodzi się z Ady: jest bardziej rozwlekły i znacznie surowszy w kwestii typów.
- Geografia. Verilog dominuje w komercyjnych projektach w USA. VHDL jest wciąż popularny w Europie, w projektach obronnych i w starszych bazach kodu.
- Możliwości. Pod względem tego, co da się w nich wyrazić, są mniej więcej równoważne. Wybieraj według tego, czego używa twój zespół.
Jeśli uczysz się HDL po raz pierwszy, Verilog ma łagodniejszy start: mniejszą składnię, więcej swobody i większą bibliotekę przykładów w sieci.
Jak ta dokumentacja uruchamia Verilog
Poniższy edytor korzysta pod spodem z Icarus Verilog (iverilog). Kompiluje twój kod źródłowy do symulatora i uruchamia go w piaskownicy. Nie potrzebujesz licencji Vivado, instalacji Quartusa ani płytki FPGA. Piszesz moduł i mały testbench, klikasz Uruchom i widzisz wynik oraz przebieg.
To kompletny 4-bitowy licznik razem z testbenchem. Moduł counter to testowany projekt (DUT), a moduł test porusza zegarem, zwalnia reset i w każdym cyklu wypisuje wartość. Uruchom go, a zobaczysz, jak count przechodzi od 0 do 15 i zaczyna od nowa. Otwórz kartę Przebieg, a zobaczysz to samo w postaci zmian napięcia.
Co dalej
Masz już dość kontekstu, żeby zacząć pisać moduły. Następna strona, Sprzęt a oprogramowanie, poświęca nieco więcej czasu zmianie modelu myślenia, bo to największa pojedyncza przeszkoda dla nowych programistów Veriloga. Potem instalacja lokalnego symulatora (opcjonalna, przeglądarka w zupełności wystarczy), napisanie pierwszego modułu od zera i reszta języka.
Nie spiesz się. Składnia jest niewielka, a prawdziwa praca to model myślenia.
Najczęściej zadawane pytania
Czym jest Verilog w prostych słowach?
Verilog to język opisu sprzętu (HDL), którym opisuje się układy cyfrowe w postaci tekstu. Zamiast pisać instrukcje wykonywane przez procesor, opisujesz przewody, rejestry, bramki i to, jak płyną między nimi sygnały. Symulator uruchamia potem ten opis, żeby można było sprawdzić zachowanie układu, a narzędzie do syntezy może zamienić ten sam opis w rzeczywisty układ chipa.
Do czego służy Verilog?
Verilog służy do projektowania i weryfikacji sprzętu cyfrowego: procesorów, kart graficznych, przełączników sieciowych, kontrolerów pamięci, bloków przetwarzania sygnałów, projektów FPGA, czyli wszystkiego, co zbudowane jest z bramek i przerzutników. Działa też w czystej symulacji, służąc do nauki logiki cyfrowej i prototypowania projektów, zanim powstanie jakikolwiek krzem.
Czy Verilog to język programowania?
Nie w zwykłym sensie. Kod w Verilogu opisuje strukturę i zachowanie sprzętu (sygnały, bramki i pamięć taktowaną zegarem), a nie sekwencję instrukcji procesora. Wiele linii, które piszesz, działa na chipie współbieżnie, a nie jedna po drugiej. Ta zmiana myślenia to największa przeszkoda przy przejściu z oprogramowania do Veriloga.
Jaka jest różnica między Verilogiem a SystemVerilogiem?
SystemVerilog to nadzbiór Veriloga. Zachowuje całą składnię Veriloga i dodaje funkcje przeznaczone głównie do weryfikacji: klasy, losowe pobudzenia z ograniczeniami, asercje, interfejsy i bogatsze typy danych. Narzędzia, które przyjmują SystemVerilog, przyjmują też zwykły Verilog. Przy większości wprowadzających zadań oba wyglądają identycznie.
Jaka jest różnica między Verilogiem a VHDL?
Verilog i VHDL to języki opisu sprzętu, które rozwiązują ten sam problem. Składnia Veriloga wywodzi się z C i jest bardziej zwięzła, a składnia VHDL wywodzi się z Ady i jest bardziej rozwlekła oraz surowsza w kwestii typów. Popularność w branży zależy od regionu i zespołu. Oba języki żyją i oba są ustandaryzowane (IEEE 1364/1800 dla Veriloga/SystemVeriloga, IEEE 1076 dla VHDL).
Czy Verilog jest trudny do nauki?
Składnia jest niewielka, mniejsza niż w C++. Trudność polega na oduczeniu się nawyków z programowania. W Verilogu większość instrukcji opisuje rzeczy, które dzieją się jednocześnie, a nie po kolei, a przypisanie blokujące w miejscu nieblokującego może zdecydować o tym, czy układ w ogóle działa. Spodziewaj się, że pierwszy tydzień będzie dezorientujący, zanim wszystko zaskoczy.