Podprogramy

Funkce

Funkce musí být vždy ukončena příkazem return, který vrací hodnotu. Parametry musí být typu in.

function iszero(n : integer) return boolean is
begin
    -- zde jsou příkazy prováděny sekvenčně
    if n = 0 then
        return true;
    else
        return false;
    end if;
end;

entity subprograms is
port
(
    a : in  bit_vector (0 to 2);
    m : out bit_vector (0 to 2)
);
end subprograms;

architecture example of subprograms is

    function simple (w, x, y: bit) return bit is
    begin
        return (w and x) or y;
    end;

begin
    process (a)
    begin
        m(0) <= simple(a(0), a(1), a(2));
        m(1) <= simple(a(2), a(0), a(1));
        m(2) <= simple(a(1), a(2), a(0));
    end process;
end example

Procedura

V proceduře může být použito příkazu return, ale nikdy nevrátí hodnotu. Parametry mohou být typu in, out, inout.

procedure count (incr : boolean; big : out bit; num : inout integer) is

begin
    -- zde jsou příkazy prováděny sekvenčně
    if incr then
        num := num + 1;
    end if;

    if num > 101 then
        big := '1';
    else
        big := '0';
    end if;
end;

Poznámka

Výrazem podprogram je označována funkce, procedura a operátor. S operátory se zachází jako se speciálním typem funkce. Je nutné si uvědomit, že není dovoleno deklarovat nové operátory, je však možné vytvořit funkci s odlišnými vstupními parametry. Tato možnost se nazývá technika přetěžování (dva nebo více podprogramů mají stejný název a liší se v počtu nebo typu vstupních parametrů).