Datové typy a operátory

Datové typy

Každý signál musí mít definován typ. Každý tento typ má konečný počet možných hodnot, jež může signál nabývat. Typ a jeho velikost musí být určeny před deklarací signálu, přičemž tyto parametry nelze během programu měnit. Jazykem VHDL je definováno několik typů:
boolean - true/false
character - znak
integer - celé číslo
real - floating point číslo
string - řetězec
bit - 0/1
bit_vector - pole bitů
time - speciální typ, používaný pro zpoždění provádění příkazů

Uživatel má možnost vytvoření dalších typů nebo využít nějaké knihovny, ve které jsou další typy definovány.

Deklarace objektů

constant k1 : character := 'q';   -- konstanta znak q
variable v1 : integer;            -- proměnná typu integer
variable v2 : integer := 1000;    -- proměnná s předdefinovanou hodnotou
signal   s  : bit_vector(0 to 7); -- pole bitů o velikosti 8

Deklarace typů

type codes is (load,store,execute,crash); -- podobné jako flags
type shortint is range 0 to 127;          -- krátký integer
type bus is array(0 to 31) of bit;        -- pole bitů o velikosti 32
type q is record                          -- typ záznam
    p1 : integer;
    p2 : bus;
    p3 : real;
end record;

Deklarace podtypů

subtype shortint is integer range 0 to 7;
subtype shorterint is shortint range 0 to 3;

Logické operátory

and - logický součin
or - logický součet
nand - negovaný logický součin
nor - negovaný logický součet
xor - exclusive or
xnor - exclusive nor
not - negace

Relační operátory

= - rovno
/= - nerovno
> - větší než
< - menší než
>= - větší nebo rovno
<= - menší nebo rovno

Aritmetické operátory

+ - sčítání
- - odčítání
* - násobení
/ - dělení
mod - modulo
rem - zbytek
abs - absolutní hodnota
** - umocňování

Operátory posuvu

sll - logický posuv doleva
srl - logický posuv doprava
sla - aritmetický posuv doleva
sra - aritmetický posuv doprava
rol - rotace doprava
ror - rotace doleva

Přetypování

Jazyk VHDL má přísnou typovou kontrolu, takže pokud např. chceme porovnávat dva signály, musí mít stejný typ. Pokud chceme porovnat dva signály různéhp typu, musíme jeden ze signálů přetypovat.

entity signaly is
port
(
   s1 : in real;
   s2 : in integer
);
end signaly;

architecture prirazeni of signaly is
begin
    s1 <= real(s2);
end prirazeni;