You are on page 1of 26

GLAVNI DIJELOVI VHDL KODA

LIBRARY , ENTITY, ARCHITECTURE

* Library (ieee, std, work...)


Library (biblioteka)
Package (paket)
Funkcije
Procedure
Komponente
Konstante
Tipovi podataka

DEKLARACIJE BIBLIOTEKA

LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY std;
USE std.standard.all;
LIBRARY work;
USE work.all;

kraj iskaza

--

komentar

* Std_logic_1164 -

paket ieee biblioteke specificira logiki


sistem sa vie nivoa;
std je izvorna biblioteka (tipovi podataka, i/o tekst i sl.)
za VHDL okruenje.
* Work biblioteka sadri na dizajn odnosno na .vhd file.
Ieee biblioteka sadri nekoliko paketa ukljuujui sljedee:
* Std_logic_1164 specificira STD_LOGIC (8 nivoa) i STD_ULOGIC
(9 nivoa) logike sisteme sa vie vrijednosti.
* Std_logic_arith specificira SIGNED i UNSIGNED tipove
podataka i odgovarajuu aritmetiku
* Std_logic_signed sadri funkcije koje omoguava izvravanje
operacija sa STD_LOGIC_VECTOR podacima, ukoliko su bili tip
SIGNED.
* Std_logic_unsigned - sadri funkcije koje omoguava
izvravanje operacija sa STD_LOGIC_VECTOR podacima,
ukoliko su bili tip UNSIGNED.

ENTITET

* Entitet je lista sa specifikacijama za sve ulazne i izlazne pinove


(portove) kola.

Sintaksa:
ENTITY ime_entiteta IS
PORT (
ime_porta:tip signala;

ime_porta:tip signala;
...);
END ime_entiteta;

* Signal moe biti IN, OUT, INOUT ili BUFFER.


* Tip signala moe biti BIT, STD_LOGIC, INTEGER
* Ime entiteta moe biti bilo koja rije osim VHDL rezervisanih
rijei.

ARCHITECTURE

* Arhitektura je dio gdje opisujemo kako e se kolo ponaati.


Sintaksa:
ARCHITECTURE architecture_name OF entity_name IS
deklaracije
BEGIN
code
END architecture_name;

Arhitektura se sastoji iz dva dijela:

* dio deklaracije
* dio koda

(deklaracija signala i konstanti) i

TIPOVI PODATAKA
-Predefinisani tipovi podataka i
-korisniki definisani tipovi podataka (TYPE ... IS RANGE...)
VHDL sadri serije pre-definisanih tipova podataka specificiranim
kroz IEEE 1076 i IEEE 1164 standarde. Mnogi od njih su u sljedeim
bibliotekama:

* Paket standard bibliotke std definie BIT, BOOLEAN, INTEGER i


REAL tipove podataka
* Paket std_logic_1164 biblioteke ieee - definie STD_LOGIC i
STD_ULOGIC tipove podataka.
* Paket std_logic_arith biblioteke ieee - definie SIGNED i
UNSIGNED tipove podataka.
* Paketi std_logic_signed i std_logic_unsigned biblioteke ieee
sadri funkcije koje omoguavaju izvravanje operacija sa
STD_LOGIC_VECTOR kada su podaci bili SIGNED ili UNSIGNED.

PRIMJERI
BIT (i BIT_VECTOR)
SIGNAL x:BIT

-- x je deklarisan kao signal od jednog digita tipa BIT.


SIGNAL y: BIT_VECTOR (3 DOWNTO 0)
-- y je 4-bitni vektor, sa krajnjim lijevim bitom koji je MSB
SIGNAL w: BIT_VECTOR (0 TO 7)
-- w je 8-bitni vektor, sa krajnjim desnim bitom koji je MSB
Navedeni signali e biti ispravni kada im nakon deklaracije
dodijelimo vrijednosti : , , <=

OPERATORI I ATRIBUTI
Operatori u VHDLu

* Operatori dodjele:
<= dodjela vrijednosti signalu;
:= dodjela vrijednosti varijablama ili konstantama. Koristi se i za
dodjelu inicijalne vrijednosti;
=> dodjela vrijednosti individualnim elementima vektora.
* Logiki operatori
not, and, or, nand, nor, xor, xnor
* Aritmetiki operatori
+, -, *, /, **, MOD, ABS
* Relacijski operatori
=, /=, <, >, >=,<=
* Operatori pomaka, shift operatori
sll, srl, sla, sra, rol, ror
* Operatori grupisanja/vezivanja
&, (, , ,)

KONKURENTNI KOD
VHDL kod moe biti konkurentan/paralelan ili sekvencijalan.
- Iskazi unutar PROCESS bloka, FUNCTION bloka ili PROCEDURE bloka
su sekvencijalni, sve ostalo je paralelno.
Konkurentni kod se naziva i dataflow kod.
U konkurentnom kodu se mogu koristiti:

* Operatori,
* WHEN iskaz,
* GENERATE iskaz,
* BLOCK iskaz

Operatori u VHDLu

Tip operatora

Operatori

Tipovi podataka

Logiki

not,and,nand,or,nor,xor,xnor

Bit,bit_vector,std_logic,std_l
ogic_vector,std_ulogic,std_ul
ogic_vector

Aritmetiki

+,-,*,**,/

Integer, signed,unsigned

Op. usporedbe

=,/=,<,<=,>,>=

Svi navedeni

Oper. pomaka

sll,srl,sla, sra,rol, ror

Bit_vector

Op. grupisanja

&, (, , , )

Svi kao i za logike operatore


+ signed i unsigned

WHEN iskaz
Pojavljuje se u dvije forme

* WHEN/ELSE (jednostavni WHEN)


sintaksa
dodjela WHEN vrijednost ELSE
dodjela WHEN vrijednost ELSE
...;

* WITH/SELECT/WHEN (selektovani WHEN)


sintaksa
WITH identifikator SELECT
dodjela WHEN vrijednost,
dodjela WHEN vrijednost,
...;

Primjer:: MUX 4u1


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux IS
PORT ( a,b,c,d,s0,s1 : IN STD_LOGIC;
y : OUT STD_LOGIC);
END mux;
ARCHITECTURE arch OF mux IS
BEGIN
y <= (a AND NOT s1 AND NOT s0) OR
(b AND NOT s0 AND s1) OR
(c AND s0 AND NOT s1) OR
(d AND s0 AND s1);
END arch;

Primjer MUX 4u1 (WHEN/ELSE i WITH/SELECT/WHEN)


U entitetu: Sel: in std_logic_vector (1 downto 0)

...
ARCHITECTURE mux1 OF mux IS BEGIN
y<= a WHEN sel=00 ELSE
b WHEN sel=01 ELSE
c WHEN sel=10 ELSE
d;
END mux1;

U entitetu: Sel: in std_logic_vector (1 downto 0)

...
ARCHITECTURE mux1 OF mux IS BEGIN
WITH sel SELECT
y<= a WHEN sel=00,
b WHEN sel=01,
c WHEN sel=10,
d WHEN OTHERS;
END mux1;

Znak , umjesto ; ili else

SEKVENCIJALNI KOD
Procesi, funkcije i procedure su dijelovi koda koji se izvravaju
sekvencijalno.
Sekvencijalni kod se takoe naziva behavioral kod.
Izrazi unutar navedenih blokova mogu biti

* IF
* WAIT
* CASE i
* LOOP.

PROCESS
PROCESS je sekvencijalni dio koda. Karakterie ga prisustvo IF,
WAIT,CASE i LOOP izraza, kao i lista osjetljivosti (osim u sluaju
koritenja WAIT).
PROCESS se izvrava svaki put kada se signal u listi osjetljivosti
promijeni.
Sintaksa:
PROCESS (lista osjetljivosti)
VARIABLE ime tip:=inicijalna vrijednost
BEGIN
Sekvencijalni kod
END PROCESS;

Koritenje VARIJABLI je opcionalno, te ukoliko se koriste moraju biti


deklarisane u deklarativnom dijelu PROCESSa, prije rijei BEGIN.
Koriste se samo u sekvencijalnom dijelu koda.

IF ISKAZ
sintaksa:
IF uslov THEN dodjela;
ELSIF uslov THEN dodjela;
...
ELSE dodjela:
END IF;

WAIT iskaz
sintaksa:
WAIT UNTIL signal;
WAIT ON signal1, signal2,...;
WAIT FOR time;

-- prihvata samo jedan signal


--prihvata vie signala
--samo za simulacije (primjer: WAIT FOR 5ns)

CASE iskaz
CASE identifikator IS
WHEN vrijednost=>dodjele;

WHEN vrijednost=>dodjele;
...
END CASE;

Primjer:
CASE control IS
WHEN 00=> x<=a; y<=b;
WHEN 01=> x<=b; y<=c;
...
END CASE;

LOOP iskaz
LOOP se koristi kada se pojavi potreba za ponavljanjem odreenog
dijela koda nekoliko puta.

Nekoliko je naina koritenja LOOP iskaza

* FOR/LOOP (petlja se ponavlja odreeni broj puta)


* WHILE/LOOP (petlja se ponavlja dok je uslov zadovoljen)
* EXIT (zaustavljanje petlje)
* NEXT (izlazak iz petlje)

Primjer:: MUX 4u1 - IF iskaz


library ieee;
use ieee.std_logic_1164.all;
entity mux_4u1 is
port (x0,x1,x2,x3 : in std_logic;
s : in std_logic_vector(1 downto 0);
f : out std_logic);
end mux_4u1;
architecture archmux4u1 of mux_4u1 is
begin
process (x0,x1,x2,x3,s)
begin
if (s = "00") then f <= x0;
elsif (s = "01") then f <= x1;
elsif (s = "10") then f <= x2;
else f <= x3;
end if;
end process;
end archmux4u1;

Primjer: MUX 4u1 - CASE iskaz


library ieee;
use ieee.std_logic_1164.all;

entity mux_4u1 is
port (x0,x1,x2,x3 : in std_logic;
s : in std_logic_vector(1 downto
0);
f : out std_logic);
end mux_4u1;
architecture archmux4u1 of mux_4u1 is
begin
process (x0,x1,x2,x3,s)
begin
CASE s IS
WHEN 00 =>f <=x0;
WHEN 01 =>f <=x1;
WHEN 10 =>f <=x2;
WHEN others =>f <=x3;
END CASE;
end archmux4u1;

SIGNALI, VARIJABLE I KONSTANTE


VHDL ima dva naina prosljeivanja ne-statikih vrijednosti: preko
signala i preko varijabli.
Signal moe biti deklarisan u paketu, entitetu ili arhitekturi, dok
varijabla moe biti deklarisana samo unutar sekvencijalnog koda.
Vrijednost varijable se nikada ne prosljeuje van PROCESS bloka
direktno, ukoliko postoji potreba za tim, vrijednost se prvo dodijeli
signalu.
Promjena vrijednosti varijable je trenutna to znai kada joj
izmijenimo vrijednost, moemo je koristiti odmah u narednom liniji
koda.
U VHDLu, takoe mogu biti koritene i konstante (CONSTANT i
GENERIC) ukoliko se pojavi potreba za definisanjem defaultnih
vrijednosti.
Konstante i signali mogu biti globalni i mogu se koristiti i u
sekvencijalnom i u konkurentnom dijelu koda, dok varijabla moe biti
samo lokalna i moe se koristiti samo u sekvencijalnom dijelu koda.

CONSTANT
Moe biti deklarisana u paketu, entitetu ili arhitekturi.

* Ako je deklariemo unutar paketa onda je globalna.


* Ukoliko je deklarisana u entitetu onda je globalna za sve arhitekture
koje slijede taj entitet.

* Ukoliko je deklarisana unutar arhitekture onda je globalna za cijelu


tu arhitekturu.

Najee se sree deklaracija unutar arhitekture ili paketa.


Sintaksa
CONSTANT ime:tip:=vrijednost;

SIGNAL
Signal slui za prosljeivanje vrijednosti unutar i van kola. Signal
zapravo prikazuje unutranje konekcije. Svi portovi unutar entiteta
su po defaultu signali.
Sintaksa:

SIGNAL ime: tip := inicijalna vrijednost;

* Deklaracija signala moe biti na istom mjestu gdje i deklaracija


konstante.

* Izmjena signala nije trenutna kao kod varijable.


* Operator dodjele za signal jeste <=.

VARIABLE

* Koristi se unutar sekvencijalnog dijela koda


* Njena vrijednost ne moe biti direktno proslijeena van
* Promjena vrijednosti je trenutna i kao takva moe se koristiti
odmah u narednoj liniji koda.

Sintaksa:
VARIABLE ime:tip:=inicijalna vrijednost;
Primjeri:

CONSTANT set_bit:BIT:=1;
SIGNAL control:BIT:=0;
VARIABLE varb1:BIT:=0;

Koritena literatura:

- Digital logic and microprocessor design with


VHDL (Enoch O. Hwang)

- Circuit design with VHDL (Volnei A. Pedroni)


- VHDL programming by example (Douglas L.
Perry))