Obsah

Silno, naozaj silno nedokončené. Práce prebiehajú priebežne. Až toto zmizne, bude hotovo.

Principy VHDL

VHDL

Jazyk VHDL je jazyk určený k popisu číslicových obvodů. Umožňuje popisovat číslicové obvody strukturálně (popisem zapojení obvodu) nebo behaviorálně (popisem chování obvodu algoritmem). Umožňuje implicitní popis paralelizmu.

Zdrojový kód ve VHDL se skládá z dvou částí. První částí je popis vnější struktury obvodu, prováděný pomocí tzv. entit. Entita představuje jednu komponentu ve VHDL, její rozhraní a nastavení. Můžeme si ji představit i jako jednu součástku elektrického obvodu. K Entitě může být přiřazena jedna, nebo několik architektur, které popisují vnitřní strukturu a chování entity, tedy to co tato součástka dělá. Architektura se pak skládá z jednotlivých procesů, které popisují chování vnitřních bloků obvodu.

Uchovávání stavu ve VHDL

K uchovávání stavu se (obdobně jako proměnné v klasických programovacích jazycích používají dvě struktury:

    ram(0) <= ram(1);
    ram(1) <= ram(0);
 

Části kódu ve VHDL

Entita

Entita slouží na identifikaci komponenty a popisu jejího rozhraní. Popis entity obsahuje název entity, nastavení pro generické proměnné a zejména popis rozhraní obvodu.

V reálu si to můžete představit jako černej šváb s nožičkama o kterým víte který nožíčky k čemu slouží.

entity invertor_gen is
 
   -- počet invertorů
   generic (
      len: integer := 4  
   ); 
 
   port (
      I : in std_logic_vector (len - 1 downto 0);
      O : out std_logic_vector (len - 1 downto 0)
   );
end invertor_gen;

Architektura

Popisuje vnitřek entity.

Popisovat ji může třemi způsoby, které lze kombinovat:

architecture name_of_architecture of name_of_entity is --architekturu lze ale použítt pi pro jinou entitu
    -- Deklarační část, je vyhrzena pro deklarace signálů, konstant nebo typů použitých uvnitř architektury
begin
    -- Příkazy (provádějí se paralelně, jsou to procesy)
end architecture name_of_architecture;

Proces

Proces je vnitřní jednotka architektury (něco podobného jako funkce u běžných programů). V jedné architektuře může být mnoho procesů. Všechny procesy běží vzájemně paralelně (opravdu paralelně, nejedná se o přepínání kontextu jako u programů). Pokud je nutné procesy mezi sebou synchronizovat, je nutné k tomu využít signálů. V hlavičce procesu je jeho název a sensitivity list, což je seznam signálů, které vyvolají jeho spuštění (při simulaci, ve skutečnosti běží proces pořád).

Tělem procesu je pak popis reakce na vstup. Příkazy uvnitř procesu se provádějí sekvenčně, je však nutné si uvědomit chování signálů, se kterými se pracuje uvnitř (viz uchovávání stavu).

name_of_process: process (sensitivity_list) --sensitivity list určuje na jaké vstupy má proces reagovat
    -- Deklarace proměnných, konstant a typů použitých uvnitř procesu
begin
    -- Sekvenční příkazy
end process name_of_process;

Příklady obvodů

Kombinační

Sekvenční

Hodinově synchronní sekvenční obvody obsahují jeden základní obrat VHDL a tou je reakce na hodinový signál. Pokud je tento pojmenován např. CLK, pak uvnitř procesu umístíme kód, který zajistí reakci na náběžnou hranu (předpoklad je, že CLK je v sensitivity listu):

if CLK'event and CLK = '1' then
  -- tělo procesu
end if

Shrnutí