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:

Signály slouží ke dvěma účelům. První je komunikace mezi entitami. V tomto případě si můžeme signál představit jako výstupní porty a dráty vedoucí po plošném spoji od jedné součástky ke druhé. Druhým je komunikace mezi procesy. V takovém případě použití signálů vede na syntetizaci registrů a tak na sekvenční obvody. K přiřazení do signálu se používá operátor <=. Do signálu smí zapisovat pouze jeden jediný proces. V obou případech, pokud k signálu přistupujeme (uvnitř nějakého procesu), pak je v něm pořád původní hodnota až do skončení běhu procesu, kde se do něj zapíše nová hodnota. To znamená, že je možné uvnitř procesu provést například výměnu dvou signálů bez pomocné proměnné:

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

Proměnné slouží ke komunikaci uvnitř procesu. Jejich použití je identické s proměnnými v programech, přístup k nim je sekvenční a vedou na vytvoření kombinační logiky v obvodu. K přiřazení slouží operátor =.

Čá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:

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;

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í

Hradlo

Sčítačka

Kodér

Dekodér

Multiplexor

Demultiplexor

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

Klopný obvod D

Klopný obvod RS

Register

Čítač

Konečný automat

Další informace zde: https://www.fit.vutbr.cz/study/courses/INP/private/cvic/inp_vhdl_opora.pdf

Shrnutí

VHDL slouží pro návrh obvodů - hardwarovou implementaci algoritmů (rychlost, spotřeba, paralelismus, avšak složitější návrh, méně flexibility, dražší výroba)

strukturální a behaviorální popis, první je popis struktury, tedy zapojení jednotlivých obvodových prvků do sebe, druhý pak popisuje chování, tedy algoritmy, obvodovou implementaci neřeší, obvykle se kombinují oba (musíme popsat, co dělá to, co do sebe zapojujeme)

prvky popisu:

signál - v podstatě proměnná, komunikace mezi entitami, v HW je to registr, zapojený do ostatních součástí pomocí vodiče (std_logic) nebo sběrnice (std_logic_vector)

entita - vnějšek švábu, obsahuje definici vstupů a výstupů (tedy názvy drátů) (např. hradlo - 2 vstupy, 1 výstup)

architektura - celý šváb, obsahuje jméno entity a seznam procesů, popisuje chování konkrétní entity (např. hradlo and, entita hradlo, proces násobení)

proces - část chování architektury, která při změně signálů ze svého sensitivity listu nastaví výstupní signály (děje se tak při dokončení kódu), může dále obsahovat svoje vnitřní proměnné

kombinační obvod, např. entita se vstupy A a B, výstupy C a S, proces ADD(A, B), obsah C ⇐ A AND B, S ⇐ A XOR B, architektura využívající zmíněnou entitu a proces (je to poloviční sčítačka)

sekvenční obvod - obsahuje vnitřní proměnnou, která reprezentuje vnitřní stav, mění se na základě vstupů, na jejím základě (Moore)/na jejím základě a na základě vstupů (Mealy) pak nastavíme výstupy

dataflow popis - popis datového toku, například C ⇐ A AND B, což značí, že hodnoty A a B přivedeme do hradla AND a výstup napojíme do C (tedy obvykle v těle procesů)

strukturální popis - například popis entity, jakou entitu používá architektura

behaviorální popis - například seznam procesů, které architektura obsahuje