Verilog i FPGA
Aby przedstawić język opisu sprzętu Verilog należy w pierwszej kolejności przedstawić kilka pojęć związanych z cyfrowymi układami elektronicznymi.
Cyfrowy układ scalony jest zminiaturyzowanym układem elektronicznym zawierającym głównie elementy cyfrowe takie jak bramki, przerzutniki, komórki pamięci itp.
Układy te można podzielić na różne grupy w zależności od przyjętego kryterium. Można wprowadzić podział ze względu na sposób wykonania. Przy takim podziale wyróżniamy układy monolityczne i hybrydowe. Częsty podział to stopień scalenia, który kiedyś określony był przez grupy do których należał dany układ scalony. W tym przypadku układy technologicznie należały do jednej z grup począwszy od układów małej skali integracji (SSI) do ultra wielkiej skali integracji (ULSI). Obecnie, ze względu na używanie w układach cyfrowych przede wszystkim tranzystorów wprowadzono miernik upakowania określany jako ilość tranzystorów na mm2.
W świecie producentów układów cyfrowych dużo popularniejszym miernikiem użytej technologii jest rozmiar minimalnej długości kanału tranzystora użytego w układzie scalonym. Obecnie najnowsze układy scalone produkowane są w technologiach 90
i 45nm. W fazie laboratoryjnej znajdują się technologie 34 i 27 nm [1] [2].
Aby dostarczyć na rynek układ scalony należy przed wykonaniem krzemowej struktury, dostarczyć do fabryki odpowiedni wielowarstwowy projekt układu scalonego. Na początku okresu projektowania układów scalonych maski projektowano ręcznie. Projekt rysowano w skali np. tysiąc razy większej niż rozmiar układu, a następnie całość fotografowano zachowując docelowy rozmiar masek układu scalonego. Obecnie takie metody nie są już stosowane. W dzisiejszych czasach projektowanie cyfrowych układów scalonych podzielone zostało na dwie główne części:
- Faza opracowania netlisty
- Faza wykonania layout’u
Pierwszym etapem jest faza opracowania netlisty. Ze względu na stale zmieniające się technologie wykonywania krzemowych struktur układu scalonego, koniecznym było wprowadzenie standardu, dzięki któremu projekt układu cyfrowego będzie można ponownie użyć przy projektowaniu układu w innej technologii. Dzięki standaryzacji projekt procesora zaprojektowany przy użyciu języku opisu sprzętu Verilog lub VHDL lub za pomocą schematu, można zsyntezować do uniwersalnej postaci zwanej netlistą.
Drugi etap wykonania układu scalonego stanowi faza wykonania masek (layout). W tym przypadku, na podstawie dostarczonej netlisty wykonuje się projekt masek używanych do wytrawiania krzemu już z użyciem konkretnej technologii. Inne narzędzia na podstawie netlisty są w stanie wygenerować tzw. implementację umożliwiającą uruchomienie netlisty w układach FPGA.
Uważa się, że zaprojektowanie masek jest znacznie trudniejszą częścią wykonania układu scalonego. Śmiało założyć można, że na ogół jest to znacznie droższa część całego projektu. Cykl produkcyjny samego układu scalonego trwa na ogół nie mniej niż 3 miesiące, a koszt wykonania serii prototypowej to koszt setek tysięcy złotych. Z tego to powodu, dla obu etapów projektowania układów scalonych, producenci technologii, narzędzi i firmy niezależne dostarczają całą gamę oprogramowania testującego, na podstawie którego można określić i przetestować wszystkie parametry projektowanego układu.
Pomimo dobrych i sprawdzonych algorytmów użytych w tego typu narzędziach, symulacja ma poważną wadę. Symulacji na ogół nie da się wykonać w czasie rzeczywistym z uwzględnieniem oddziaływania zewnętrznych peryferii na testowany układ. Z tego to powodu powstał rynek specjalizowanych układów scalonych zwanych układami FPGA. Początki tych układów to znane wszystkim układy PLD zawierające dziesiątki programowalnych bramek konfigurowanych przy użyciu języka ABEL lub CUPL. Obecnie największe układy FPGA zawierają równowartość dziesiątek milionów bramek [3]. Tak duże rozmiary umożliwiają pracę układu z zaimplementowanymi projektami większości układów elektronicznych stosowanych w sprzęcie powszechnego użytku [3].
Dzięki układom FPGA, klient dostaje narzędzie skracające proces wykonania układu scalonego do czasu od kilkunastu minut do kilkudziesięciu godzin. Ta bardzo cenna technologia ma jednak pewne wady. Ze względu na cenę, układy FPGA nie nadają się do masowej produkcji. Poza tym najszybsze układy FPGA mogą pracować
z częstotliwościami zegara nie przekraczającymi 400..500MHz oraz zużywają więcej energii niż ich krzemowe odpowiedniki. Te pozornie duże wady, przy odpowiedniej metodologii projektowania, nie stanowią większego problemu przy projektowaniu
i testowaniu nowych układów cyfrowych.
Zaletą układów FPGA za to jest stosunkowo niski koszt układu przy jednostkowych produkcjach. Inną zaletą jest możliwość przeprojektowania logiki cyfrowej wgranej
w układ FPGA w sytuacji gdy w projekcie wykryto błąd lub z innych powodów których firma decyduje się na aktualizację implementacji.
W przypadku układów FPGA najtrudniejszą część stanowi opracowanie netlisty. Niezależnie czy netlista jest opracowywana dla projektu układu scalonego czy układu FPGA używa się do tego jednego z języków opisu sprzętu jakim są VHDL lub Verilog. Możliwe oczywiście jest użycie to tego celu schematu, języków Cupl lub Abel, jednak w praktyce te metody stosowane są tylko przy prostych rozwiązaniach. W przypadku układów FPGA to właśnie opracowanie tych źródeł wymaga największego nakładu pracy.
Model opisany w językach Verilog lub VHDL przedstawia reakcję układu na wymuszenia zewnętrzne i wewnętrzne jakie mogą pojawić się w trakcie pracy modelu. W przypadku układów FPGA, wykonanie implementacji, czyli wykonanie odpowiednika masek dla układu cyfrowego, sprowadza się do na ogół do prostego skonfigurowania narzędzia i uruchomienia procesu wykonywania implementacji.
Pomimo, że VHDL cieszy się coraz to większą popularnością to jednak Verilog jest standardem przy projektowaniu struktur krzemowych. Początki języka Verilog sięgają lat 80 kiedy to w 1984 Phil Moorby z firmy Gateway Design Automation opracował pierwszą wersję tego języka. Dzięki znanej obecnie firmie Cadence, język Verilog rozpowszechnił się bardzo szybko. Firma ta, jako nowy właściciel praw do tego języka upubliczniła jego specyfikację dzięki czemu pierwszy oficjalny standard był już dostępny w 1995 roku, a w latach późniejszych powstały kolejne dwa. Były to ulepszona wersja Verilog IEEE Std 1364-2001 oraz System Verilog zawierający dużo bogatsze funkcje umożliwiające testowanie opracowanych modułów [1] [2].
Język Verilog przypomina w składni język C. Posiada pętle, instrukcje warunkowe, a odpowiednikiem funkcji z języka C są moduły. Pomimo pewnych podobieństw do języka C, istnieje podstawowa różnica między językami opisu sprzętu, a językami używanymi do oprogramowywania procesorów. W przypadku klasycznego programu uruchamianego na procesorze, wszystkie instrukcje oraz funkcje wykonują się najczęściej sekwencyjnie. W przypadku języków Verilog lub VHDL każdy moduł działa współbieżnie do innych modułów. Sytuacje ta można porównać w oprogramowaniu do procesów z których każdy jest wykonywany na innym procesorze, przy założeniu, że wszystkie te procesory maja dostęp do wspólnych zasobów.
Pozycje wykorzystane bezpośrednio do opracowania treści artykułu:
- [1] Wikipedia. Wydanie polskie, www. pl.wikipedia.org, Pojęcia: Verilog, VHDL, Układ_scalony
- [2] Wikipedia. Wydanie angielskie, www. en.wikipedia.org. Pojęcia: Integrated_circuit, Flash_memory, USB, FireWire
- [3] http://forums.xilinx.com.
Autorem artykułu jest Krzysztof Fijak