Menu

Co to jest Verilog? Język opisu sprzętu dla początkujących

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.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

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 initial i wywołania $display nie 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.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ