VHDL

Z Wikipedii, wolnej encyklopedii
Przejdź do nawigacji Przejdź do wyszukiwania

VHDL (ang. Very High Speed Integrated Circuit Hardware Description Language) – język opisu sprzętu używany w komputerowym projektowaniu układów cyfrowych typu FPGA i ASIC.

Historia[edytuj | edytuj kod]

Język powstał w latach 80. w ramach projektu finansowanego przez Departament Obrony USA. Miał być używany do dokumentowania zachowania układów ASIC. W 1987 roku stał się standardem IEEE. Język ten ma rozbudowaną składnię, dzięki czemu jest bardzo elastyczny.

VHDL ma składnię podobną do języka Pascal i Ada[1]. Jest niejako potomkiem języka ALGOL. VHDL nie jest case sensitive, tzn. nie rozróżnia wielkości liter w kodzie.

Początkowo języka używano do dokumentowania układów ASIC, ale pomysł symulowania układów opisanych językiem VHDL był na tyle kuszący, że szybko opracowano symulatory logiczne mogące czytać pliki VHDL. Zmieniła się więc funkcja języka, gdyż zaczęto używać go do tworzenia i testowania modeli układów ASIC. Obecnie można układ zdefiniowany przy pomocy VHDL nie tylko zasymulować, ale także stworzyć jego fizyczną aplikację, np. w ramach architektury FPGA. W razie potrzeby nie nastręcza trudności zmiana technologii docelowej, gdyż jest ona niezależna od samego opisu projektu w VHDL.

Standard języka był rewidowany trzykrotnie: w latach 1993, 2002 i 2008. Wersja z roku 1993 (IEEE Std 1076-1993) jest obecnie najpopularniejsza (większość narzędzi jest zgodna z tym standardem). Na początku roku 2009 opublikowano najnowszą wersję standardu – IEEE Std 1076-2008[2], popularnie zwaną VHDL 2008. Ten dokument prezentuje nową, znacznie usprawnioną wersją języka, zawierającą rozszerzoną składnię, większy zestaw operatorów, uporządkowane standardowe pakiety biblioteczne, dołączony interfejs proceduralny dla C/C++ (VHPI), podzbiór języka PSL itp.

VHDL a język programowania[edytuj | edytuj kod]

VHDL jest przede wszystkim językiem opisu sprzętu. Może być jednak używany jako język programowania ogólnego przeznaczenia, pod warunkiem że ma się dostęp do symulatora, na którym można uruchomić kod.

Struktura języka VHDL[edytuj | edytuj kod]

Obiekty[edytuj | edytuj kod]

Do zapisu i pamiętania danych w języku VHDL służą obiekty. Podstawowymi obiektami języka VHDL są sygnały, zmienne, stałe i pliki. Podczas deklarowania obiektów muszą być także zdefiniowane typy, które służą do wyrażania wartości obiektów.

  • Sygnały są funkcjami czasu, co oznacza, że wartości sygnałów są przyporządkowane wartościom na osi czasu podczas symulacji działania opisywanych układów. W części deklaracyjnej jednostki wprowadzane są nazwy sygnałów zewnętrznych.
  • Zmienne nie są funkcjami czasu i mogą być stosowane pomocniczo tylko w obrębie procesu lub podprogramu do zapamiętywania wyników pośrednich.
  • Stałe umożliwiają przypisanie nazwy wartościom stałym określonego typu. Do tego celu stosuje się deklarację constant o składni
  • Pliki służą do trwałego przechowywania danych, co wykorzystuje się głównie przy wykonywaniu testów.

Przykładowa deklaracja zmiennej:

variable nazwa_zmiennej : nazwa_typu [ograniczenie] [:=wartosc_poczatkowa];

Typy[edytuj | edytuj kod]

Obiekty operują na różnych typach danych. Typy określa się poprzez podanie nazwy, zbioru wartości oraz zbioru operacji. Wyróżnia się typy skalarne (numeryczne, wyliczeniowe oraz fizyczne), typy złożone (tablice oraz rekordy) oraz typy wektorowo-skalarne.

Atrybuty[edytuj | edytuj kod]

Atrybuty pozwalają na identyfikację pewnych cech deklarowanych typów i obiektów. Atrybut związany jest z typem lub obiektem przez apostrof i zwraca wynik stanowiący poszukiwaną cechę obiektu lub typu. W komercyjnych zastosowaniach stosowane są także specyficzne atrybuty, opisane w dokumentacji użytkowej. Można również definiować własne atrybuty.

Pakiety i biblioteki[edytuj | edytuj kod]

Pakiety (ang. package) są to zbiory, w których umieszczane są deklaracje typów i podtypów, stałych i sygnałów, a także funkcje i procedury. Pakiety stosowane są w projektach, aby nie opisywać typowych prostych modeli np. przerzutników, multiplekserów czy rejestrów (modele te określane są "prymitywami"). Pakiety mogą być standardowe (ujęte w normach IEEE) lub niestandardowe (tworzone indywidualnie).

Instrukcje współbieżne[edytuj | edytuj kod]

Instrukcje współbieżne to wszystkie instrukcje, które można bezpośrednio w ciele architektury. Zachowanie układu jest niezależne od kolejności instrukcji przyporządkowania sygnałów. W języku VHDL istnieje sześć takich instrukcji:

  • przypisanie do sygnału (<=),
  • instrukcja współbieżnego wywołania procedury,
  • instrukcja procesu process,
  • instrukcja łączenia komponentów port map,
  • instrukcja powielania generate,
  • instrukcja blokowa block.

Instrukcje sekwencyjne[edytuj | edytuj kod]

Instrukcje sekwencyjne służą do opisu sekwencyjnych oraz kombinacyjnych układów cyfrowych. Stosowane są, gdy trzeba wprowadzić kolejność operacji lub uwarunkowania czasowe wewnątrz opisywanych układów. Istnieją dwie takie instrukcje:

  • instrukcja przypisywania podstawowego do sygnału,
  • instrukcja wywołania procedury,
  • przypisanie do zmiennej,
  • instrukcja czekania wait,
  • instrukcja warunkowa if-then-else,
  • instrukcja wyboru case,
  • instrukcja pętli loop oraz związane z nią instrukcje exit i next,
  • instrukcja pusta null,
  • instrukcja testowa assert.

Funkcje i procedury[edytuj | edytuj kod]

Funkcja jest podprogramem, którego parametrami są wyłącznie syngały wejściowe i który jako wynik zwraca jedną wartość określonego typu. Funkcja jest traktowana jako wyrażenie, które można stosować tylko w obrębie procesu lub podprogramu. Funkcja przed wywołaniem musi być zadeklarowana. Deklarację funkcji umieszcza się globalnie w odrębnym i zadeklarowanym pakiecie lub lokalnie w nagłówku procesu.

Procedura jest podprogramem, który na liście parametrów ma zarówno wejścia i wyjścia. Wywołanie procedury jest traktowane jak instrukcja, która może być współbieżna lub sekwencyjna, zależne od miejsca jej użycia. Procedura może zwracać więcej niż jeden wynik. Podobnie jak funkcja, procedura musi być zadeklarowana globalnie lub lokalnie.

Zobacz też[edytuj | edytuj kod]

Przypisy[edytuj | edytuj kod]

  1. Marc Schlickling: Timing Model Derivation: Static Analysis of Hardware Description Languages. Saarbrücken: Universität des Saarlandes, 2012, s. 62–63. ISBN 978-3-8442-4513-4. [dostęp 2016-02-07]. (ang.).
  2. IEEE Standard VHDL Language Reference Manual.

Bibliografia[edytuj | edytuj kod]

  • Józef Kalisz, Podstawy elektroniki cyfrowej, WKiŁ, Warszawa, 2007, s. 402–404, ISBN 978-83-206-1667-5.
  • Józef Kalisz: Język VHDL w praktyce. Warszawa: Wydawnictwo Komunikacji i Łączności, 2002. ISBN 83-206-1440-6.

Linki zewnętrzne[edytuj | edytuj kod]