VHDL/Jednostki projektowe
Z Wikibooks, biblioteki wolnych podręczników.
Projekty urządzeń opisywanych w języku VHDL składają się z tzn. modułów, komponentów, lub ogólnie jednostek projektowych. W dalszej części książki będzie stosowany zwrot komponent.
Spis treści |
[edytuj] Hierarchizacja projektu
Każde urządzenie, samo w sobie jest traktowane jako jeden komponent (jako jedna całość). Jednocześnie urządzenie główne może być zbudowane z pomniejszych komponentów (czyli prostszych urządzeń spełniających konkretne funkcje), które dopiero po połączeniu tworzą jedną całość.
Ponieważ, każdy z komponentów sam w sobie często traktowany jest jako osobny projekt, prowadzi to do zależności pomiędzy poszczególnymi komponentami, którą dalej nazywać będziemy hierarchią projektu.
[edytuj] Opis komponentu
Opis każdego komponentu składa się z dwóch części:
- opisu interfejsu - czyli deklaracji rodzajów portów oraz ich typów
- opis architektury - czyli opis tego jak zbudowany jest komponent (może istnieć wiele architektur dla jednego interfejsu)
Taka budowa opisów komponentów podyktowana jest tym, że architekturę komponentu o ściśle określonym interfejsie często można opisać na różny, ale równoważny pod względem funkcjonalnym, sposób.
[edytuj] Deklaracja interfejsu komponentu
Przykładowa deklaracja interfejsu komponentu o nazwie nazwa_komponentu wygląda następująco:
entity nazwa_komponentu is
[ generic deklaracje_generyczne ]
port ( nazwa_portów1 : rodzaj_portów typ_portów;
nazwa_portów2 : rodzaj_portów typ_portów
);
end nazwa_komponentu;
[edytuj] Rodzaje portów
Każdy z portów ma przypisany do siebie typ, określający jaki typ sygnału przez niego przepływa, oraz rodzaj. Rodzaj sygnału określa w którą stronę może następować przepływ sygnału należącego do interfejsu komponentu. Wyróżnia się następujące rodzaje portów:
- in - określa port wejściowy komponentu
- out - określa port wyjściowy komponentu
- inout - określa port, który może pełnić role portu wyjściowego, albo wejściowego (ale nie obu naraz)
- buffer - określa port, który może pełnić role portu wyjściowego, lub wejściowego (a więc i obu naraz)
[edytuj] Deklaracje generyczne (opcjonalne)
Deklaracja generic jest opcjonalna i określa lokalne stałe użyte do opisu czasu i rozmiaru wewnątrz komponentu. Generic może mieć wartość domyślną.
generic ( nazwa_stalej1 : typ_stalej [ := wartosc ];
nazwa_stalej2 : typ_stalej [ := wartosc ];
);
[edytuj] Deklaracja architektury komponentu
Przykładowa deklaracja architektury komponentu o nazwie nazwa_komponentu wygląda następująco:
architecture nazwa_architektury of nazwa_komponentu is [cześć deklaratywna] begin [cześć opisowa] end nazwa_architektury;
[edytuj] Opis Architektury
Opis architektury składa się z dwóch zasadniczych części:
- deklaratywnej
- opisowej
[edytuj] Cześć deklaratywna
Znajduje się miedzy słowami kluczowymi is oraz begin. W jej obrębie można następujące informacje:
[edytuj] Deklaracja sygnału wewnętrznego
signal nazwa_sygnałów : typ_sygnałów ;
Przykładowo:
signal sygnał_wewnętrzny1,sygnał_wewnętrzny2 : std_logic; signal sygnał_wewnętrzny3 : std_logic_vector(3 downto 0);
[edytuj] Deklaracja podkomponentu
component nazwa_podkomponentu
port ( nazwa_portów1 : rodzaj_portów typ_portów;
nazwa_portów2 : rodzaj_portów typ_portów
);
end component nazwa_komponentu;
[edytuj] Część opisowa
[edytuj] Przykłady kodu
Przykładami kodu wykorzystującymi informacje zawarte w tym rozdziale są:
- Bramka NAND - prosta deklaracja interfejsu wraz z opisem architektury
- Bramka XOR - komponent zbudowany z bramek NAND i posiadający sygnały wewnętrzne