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