Základní bloky VHDL kódu

Entita

- definuje vstupní a výstupní signály bloku a jejich typ. Entita nříká nic o funkci bloku.

entity pulscitacka is
port
(
   A, B : in  bit;
   S, C : out bit
);
end pulscitacka;

-- konec entity půl-sčítačky

Architektura

- definuje vnitřní funkci bloku. V případě půl-sčítačky obsahuje výpočet součtu (xor) a přenos. Příkazy v architektuře jsou konkurenční!

architecture RTL of pulscitacka is

begin
S <= A xor B;
C <= A and B;
end pulscitacka;

Komponenta

- Pomocí kompenent lze vkládat hotové entity do architektury na vyšší úrovni. Tak lze např. realizovat úplnou sčítačku pomocí dvou půlsčítaček a jednoho hradla OR.

architecture STRUCT of scitacka is
component pulscitacka
port
(
    A, B : in  bit;
    S, C : out bit
);
end component
component ORGATE
port
(
    A, B : in  bit;
    RES  : out bit
);
end component

signal W_SUM, W_CARRY1, W_CARRY2: bit;

begin

MODULE1: pulscitacka
port map
(
    A, B, W_SUM, W_CARRY1
);

MODULE2: pulscitacka
port map
(
    W_SUM, CARRY_IN, SUM, W_CARRY2
);

MODULE3: ORGATE
port map
(
    W_CARRY2, W_CARRY1, CARRY
);

end STRUCT;


Úlná sčítačka dle sestaveného kódu

Konfigurace

- určuje entitě architekturu.

configuration cfg_scitacka of scitacka is
for STRUCT -- výběr architektury STRUCT
-- používá defaultní pravdila konfigurace
end for;
enc configuration cfg_scitacka;

Process

- zaveden z důvodu konkurenčního vykonávání příkazů v tělě architektury. Process jakožto celek probíhá také konkurenčně, ale jeho tělo je zpracováváno sekvenčně. Process obsahuje tzv. sensitivity list, na který je citlivý a to tak, že pokud dojde ke změně signály, který je v sensitivity listu uveden, tento proces se spustí. Pokud proces sensitivity list neobsahuje, spouští se neustále dokola. V tom případě musí proces obsahovat příkaz WAIT, kterým se spouštění procesu řídí. Platí ovšem to, že pokud proces sensitivity list obsahuje, nesmí se příkazu WAIT použít.

entity and_or_xor is
port
(
    A, B                : in  bit;
    Z_OR, Z_AND, Z_XOR  : out bit
);
end and_or_xor;

architecture RTL of and_or_xor is
begin

a_o_x: process(A, B)
begin
Z_OR <=  A or B;
Z_AND <= A and B;
Z_XOR <= A xor B;
end process a_o_x;

end RTL;