====== Jazyk VHDL ====== [[http://wiki.fituska.eu/index.php/Jazyk_VHDL|Fituška]], [[pitel:isz:principy_vhdl]], [[wp>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: * **Strukturálně** -- z čeho je komponenta složena * **Behaviorálně** -- co komponenta dělá * **Dataflow** -- datové toky signálů 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; ===== Procesy ===== 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;