You are on page 1of 43

Capitolul 4

Introducere ȋ n
modelarea VHDL

2010 Proiectarea sistemelor digitale 1


Tematica
ØScurt istoric
ØCaracteristici
ØEtapele sintezei şi implementării
ØStructura unui program VHDL
ØModele VHDL
ØTipuri de date
Ø

2010 Proiectarea sistemelor digitale 2


Ce este VHDL?
 VHDL – Very High-Speed Integrated Circuits
Hardware Description Language

Este un limbaj de programare dezvoltat şi optimizat pentru descrierea funcȋională


a sistemelor digitale, care oferă:

posibilitatea descrierii la nivel de detalii a funcȋ ionării componentelor electronice de


la nivelul de poartă logică până la microprocesoare şi ASIC. Modelele VHDL realizate
pot fi ȋ nglobate ca blocuri ȋ n descrierea unor circuite complexe, pentru simulare.
posibilitatea descrierii funcȋionale/structurale a unui circuit digital ȋn scopul sintezei
automate.
posibilităȋi pentru programare structurată.
posibilitatea descrierii naturale a unor evenimente concurente, specifice funcȋionării
reale a circuitelor digitale.
posibilitatea generării şi execuȋiei unor programe speciale pentru verificarea
funcȋionării unei scheme descrise VHDL. Astfel de programe se numesc test bench şi
fac parte obligatoriu din orice proiect alaturi de modelul circuitului sintetizat/analizat. Ele
conȋin descrierea stimulilor şi a rezultatelor ce ar trebui obȋinute prin aplicarea
acestora, ȋn scopul depistării automate prin comparare a unor erori funcȋionale.

2010 Proiectarea sistemelor digitale 3


Scurt istoric
Este un produs al proiectului VHSIC al Departamentului Apararii SUA (anii 70 şi 80),
iniȋ iat pentru a surmonta durata mare a ciclului de viaȋ ă al produselor hardware;
1983-1985 sunt dezvoltate principalele elemente ale limbajului (versiunea 7.2) de către
firmele Intermetrics, IBM şi TI;
1986 toate drepturile sunt transferate către IEEE
În 1987 a devenit standardul IEEE 1076, completat şi dezvoltat ȋn 1993 ca standard
IEEE 1164;
1994 este revizuit şi redenumit VHDL 1076-1993;
Din 1996 IEEE 1076.3 devine standard VHDL pentru sinteză.
2000 este revizuit şi redenumit VHDL 1076-2000;
2002este revizuit şi redenumit VHDL 1076-2002;
2007 este revizuit şi redenumit VHDL 1076c-2007; se introduce VHDL Procedural
Interface (VHPI); VHPI permite accesul unor programe scrise ȋn
limbaj procedural la un model VHDL, atât ȋnaintea cât şi pe durata
simulării;
2009 este revizuit şi redenumit VHDL 1076-2008.
Detalii:
http://www.people.vcu.edu/~rhklenke/tutorials/vhdl/modules/m10_23/sld010.htm

2010 Proiectarea sistemelor digitale 4


Caracteristici
Există unele deosebiri ȋntre a scrie VHDL pentru sinteză şi a scrie VHDL pentru
simulare;
Este posibil ca un program VHDL săfie perfect din punct de vedere sintactic dar
neimplementabil datorită unor greşeli generate de neȋȋn elegerea fenomenelor la
nivel fizic.
Un proiect scris ȋn VHDL permite sinteza şi simularea pentru o mare varietate de
tehnologii, familii de PLD, CPLD, FPGA etc., ȋntr-un timp relativ scurt.
La nivele superioare, proiectantul poate să se concentreze pe descrierea
funcȋională a schemelor şi nu pe detalii de implementare.
Pot fi realizate teste de performanȋă pentru diversele variante de sinteză ȋn
scopul fundamentării unei decizii privind soluȋia optimă.
În anumite situaȋii este necesară intervenȋia proiectantului pentru a elimina
anumite anomalii din soluȋia generată automat.

2010 Proiectarea sistemelor digitale 5


Portabilitatea
cod
 VHDL


Compilator C1 Compilator C2 ... Compilator Cn

SPLD CPLD FPGA

Fig. 4.1

2010 Proiectarea sistemelor digitale 6


Nivele de descriere ȋ n VHDL

Vom considera un comparator de egalitate pe 2 biȋi cu schema bloc din Fig.
 
4.2 şi schema de structură din Fig. 4.3.

a(0)
a
a(1)
a(0) x(0)
aeqb b(0)
aeqb
b(0)
b a(1)
b(1) b(1) x(1)

Fig. 4.2 Fig. 4.3

Pot fi puse ȋn evidenȋă 4 modalităȋi de a descrie schema analizată:

2010 Proiectarea sistemelor digitale 7


Nivele de descriere ȋ n VHDL

descrierea structurală:

u1: xor2 port map (a(0), b(0), x(0));


u2: xor2 port map (a(1), b(1), x(1));
u3: nor2 port map (x(0), x(1), aeqb);
descrierea prin ecuaȋii logice:
aeqb <= (a(0)XOR b(0))NOR (a(1)XOR b(1));
descrierea cu instrucȋiuni concurente:
aeqb <=‘1’ when a=b else ‘0’;
descrierea cu instrucȋiuni secvenȋiale:
if a=b then aeqb <= ‘1’;
else aeqb <= ‘0’;

2010 Proiectarea sistemelor digitale 8


Dezavantaje

Sunt legate de calitatea compilatoarelor, de posibilitatea de a


specifica diverse directive de sinteză cu scopul de a controla
criteriile de optimalitate, de bibliotecile de PLD, CPLD, FPGA, de
calitatea simulării.

2010 Proiectarea sistemelor digitale 9


Etapele sintezei şi implementării
selectie proiect VHDL directive
dispozitiv sinteza

sinteza software

rezultat sinteza

program PLD

Model
simulare Fisier pentru
Fisier
(VHDL Stimuli programare
raport
sau alt test PLD
model)

software simulare

Forme Fisier
de unda de date

Fig. 4.4

2010 Proiectarea sistemelor digitale 10


Termeni specifici
Entitatea (entity). Reprezintǎ blocul de bazǎ al oricǎrui proiect ȋi conȋine
descrierea elementelor constitutive ala proiectului. Dacǎ proiectul are o structurǎ
ierarhicǎ, entitatea de la nivelul cel mai ȋ nalt (top-level entity) va conȋ ine
entitǎȋi de nivel inferior.

Arhitectura (architecture). Orice entitate care poate fi simulatǎ are o descriere a


arhitecturii. Arhitectura descrie comportamentul (behavior) entitǎȋii. O entitate
poate avea mai multe arhitecturi, funcȋionale sau structurale.

Configurarea (configuration). O instrucȋiune de configurare este utilizatǎ


pentru a lega o componentǎ de o anumitǎ pereche entitate-arhitecturǎ.
Configurarea poate fi consideratǎ ca o listǎ de componente (parts list) pentru un
proiect.

Pachet (package). Un pachet este o colecȋie de tipuri de date ȋi subprograme


utilizate ȋn cadrul proiectului.

2010 Proiectarea sistemelor digitale 11


Termeni specifici
Driver. Reprezintǎ sursa unui semnal. Un semnal poate avea mai multe surse.

Magistrala (bus). Deȋi ȋn mod uzual prin magistralǎ ȋnȋelegem un grup de


semnale cu funcȋiune asemǎnǎtoare, ȋn VHDL magistrala desemneazǎ un tip
special de semnal ale cǎrui surse pot fi deconectate.

Atribut (attribute). Un atribut reprezintǎ date ataȋate unui obiect VHDL sau
date predefinite despre un obiect VHDL.

Generic. Desemneazǎ un parametru care transferǎ informaȋie cǎtre o entitate.


De exemplu numǎrul concret de intrǎri de selecȋie ale unui multiplexor poate fi
precizat printr-un generic. Permite scrierea unor ȋabloane pentru diverse
dispozitive.

Proces (process). Este unitatea fundamentalǎ ȋn execuȋia unui proiect VHDL.

2010 Proiectarea sistemelor digitale 12


Structura unui program VHDL
Entity

Entity declaration

Interface declaration

Architecture body

Functional declaration

Fig. 4.5

2010 Proiectarea sistemelor digitale 13


Declararea entităȋ ii
descrie intrările şi ieşirile entităȋii proiectate.
declaraȋia entităȋii reprezintă o cutie neagră pentru care se cunosc intrările şi
ieşirile dar nu se ştie nimic despre legătura dintre acestea.
se recomandă să fie utilizate tipuri de variabile conform standardului IEEE
1164 adică:
std_logic pentru scalari;
std_logic_vector pentru vectori.
Port – orice semnal de intrare/ieşire.
Într-un program fiecare port se reprezintă printr-o variabilă căreia putem să-i
asignăm valori şi pe care o putem utiliza ȋn expresii. Particularităȋile porturilor
vor fi discutate mai târziu.
pentru fiecare port trebuie să precizăm:
un nume (mnemonic);
o direcȋie (mod);
un tip de dată.

2010 Proiectarea sistemelor digitale 14


Declararea entităȋ ii
Exemplu: descrierea entităȋii pentru un MUX 4 cu schema bloc din Fig.
4.6.

entity MUX4 is
port(
EN: in std_logic;
S: in std_logic_vector (1 downto 0);
I: in std_logic_vector (3 downto 0);
Y: out std_logic
);
end MUX4;
EN
I(3..0)
Y
S(1..0)

Fig. 4.6

2010 Proiectarea sistemelor digitale 15


Moduri
Modul descrie direcȋia ȋn care este transferată data printr-un port.

Pot fi definite 4 moduri (Fig. 4.7):


in;
out; in
out
buffer;
inout.
buffer

inout
in

in
out

Fig. 4.7
2010 Proiectarea sistemelor digitale 16
Moduri
in – port unidirecȋional care transferă date numai dinspre exterior către
interior.

out – port unidirecȋional care transferă date numai dinspre sursa internă catre
exterior. Nu poate fi utilizat pentru implementarea unei reacȋii deoarece data din
acest port nu poate fi citită.

buffer – port unidirecȋional analog unui port declarat mod out dar care permite
utilizarea pentru reacȋii interne. Nu trebuie confundat cu un port bidirecȋional
deoarece nu poate transfera date de la o sursă externă. Un port buffer poate fi
conectat doar la un semnal intern sau la un port buffer al unei alte entităȋi. Nu
poate fi conectat la un port out sau inout al altei entităȋi.

inout – port bidirecȋional. Semnalul poate fi generat dintr-o sursă internă sau
externă. Poate fi utilizat şi pentru implementarea unor reacȋii interne. Poate
ȋnlocui oricare dintre celelalte 3 moduri dar nu este recomandat deoarece
schemele vor fi greu de citit şi ȋnȋeles.

2010 Proiectarea sistemelor digitale 17


Tipuri de date
Tipurile de date utilizate depind de standardul cu care se lucrează.

conform standardului IEEE 1076/93 putem utiliza tipurile:


boolean;
bit;
bit_vector;
integer.

conform standardului IEEE 1164 putem utiliza tipurile:


std_ulogic;
std_logic;
std_ulogic_vector;
std_logic_vector.

2010 Proiectarea sistemelor digitale 18


Tipuri de date
Precizarea bibliotecii ce va fi utilizatăpentru declararea tipului datelor se face
prin clauzele library si use.

Exemplu:

library ieee;
use ieee.std_logic_1164.all

2010 Proiectarea sistemelor digitale 19


Arhitectura entităȋ ii (architecture body)
Arhitectura entităȋii este asociată cu o declaraȋie de entitate şi descrie
funcȋia realizată de entitate.

Existămai multe stiluri (style) de descriere a funcȋiei unei entităȋi:

funcȋ ional/comportamental (behavioral);


flux de date (dataflow);
structural (structural).

Pot fi utilizate şi combinaȋii ale celor 3 stiluri.

Descrierile funcȋ ională şi prin flux de date sunt descrieri funcȋionale ce nu


depind de structura schemei. Deosebirile apar la nivelul instrucȋiunilor utilizate.

2010 Proiectarea sistemelor digitale 20


Corpul arhitecturii (Architecture body)
Descrierea funcȋională utilizează conceptul de proces (process)
şi permite utilizarea unor instrucȋiuni secvenȋiale cum ar fi
if else sau loop.

Exemplu: Descrierea funcȋională a arhitecturii unui comparator de egalitate


pe 4 biȋi cu ieşirea activă pe nivel ridicat.

Fig. 4.8

2010 Proiectarea sistemelor digitale 21


Model funcȋ ional (1) - flux de date

Fig. 4.9

2010 Proiectarea sistemelor digitale 22


Model funcȋ ional (2)

2010 Proiectarea sistemelor digitale 23


Modelul funcȋ ional cu formule

Proiectarea sistemelor digitale 24


2010
Modelul structural

2010 Proiectarea sistemelor digitale 25


Identificatori ,
obiecte ,
tipuri de date ,
atribute
26
Identificatori (identifiers)
Numele unui obiect conȋine:

Litere
Cifre;
Sublinieri.

Observaȋ ii!

cu o singură excepȋie (valorile literale H,L,Z,…), nu are importanȋă dacă


utilizăm litere mari sau mici;
primul caracter va fi ȋntotdeauna o literă;
nu se acceptă două sublinieri alăturate;
ultimul caracter nu poate fi sublinierea.

2010 Proiectarea sistemelor digitale 27


Obiecte (data objects)
Păstreaza valori de un tip specificat. Pot fi:
constante;
semnale;
variabile;
fişiere.

Un obiect trebuie declarat ȋnainte de utilizare.


Constante – păstreaza o valoare ce nu poate fi modificată pe durata utilizării.
Se folosesc pentru a creşte claritatea programelor şi a simplifica realizarea
eventualelor modificări ȋn program.
Exemplu: pentru definirea lungimii unui registru putem utiliza declaraȋia
constant lung_reg: integer:=12;
Constantele pot fi definite ȋn pachet, entitate, arhitectură, sau proces.
Locul ȋn care este definită constanta stabileşte domeniul de vizibilitate al acesteia.

2010 Proiectarea sistemelor digitale 28


Obiecte (data objects)
Semnalele – pot reprezenta sârme deci pot interconecta componente.
Porturile sunt de asemenea semnale şi pot fi declarate explicit ca semnale.
Exemplu: signal numar: STD_LOGIC_VECTOR (3 downto 0) :=
"0000";

numar poate să reprezinte starea unui numărator şi ȋn acest caz el reprezintă


elemente de memorie sau cel puȋin sârmele ataşate la ieşirea elementelor de
memorie.
O valoare iniȋială poate fi ataşata semnalului, dar ȋn general ea nu are nici o
relevanȋă pentru sinteză deoarece nu există nici o garanȋie că la pornire
bistabilele vor trece ȋn starea iniȋială specificată.
Observaȋie!
Simbolul := indică asignarea imediată şi este utilizat pentru a indica valoarea
iniȋială a semnalului.
Simbolul <= este utilizat pentru asignarea unei valori care poate modifica forma de
undă a semnalului.
2010 Proiectarea sistemelor digitale 29
Obiecte (data objects)
Variabilele – sunt utilizate numai ȋn procese şi subprograme
fiind declarate ȋn zona de declaraȋie a procesului/subprogramului.
În sinteză se utilizează ca indici de variabilă sau pentru
păstrarea temporară a unor date.
Fişierele – sunt utilizate pentru păstrarea datelor de test şi a
rezultatelor testării.
Aliasurile nu sunt obiecte ci o alternativă de identificare a unui
obiect sau a unei părȋi a acestuia.
Exemplu:
alias top_addr : std_logic_vector (3 downto 0) is
address (31 downto 28);

2010 Proiectarea sistemelor digitale 30


Tipuri de date scalare
tipul enumerare – o listă de valori atomice pe care acest obiect
le poate primi.

Se utilizează frecvent pentru a desemna stările unei maşini


secvenȋiale:

Exemplu:
type stari is (S0, S1, S2, S3, err);
signal starea_curenta : stari;

Implementarea fizică a tipului enumerare este specifică


aplicaȋiei.

Exemplu: stari poate să reprezinte un set de elemente de


memorie care păstrează starea curentă ȋn implementarea one-hot.

Este un tip de dată ordonat ȋn funcȋie de poziȋia ȋn listă.

Exemplu: S0 – pondere minimă, err – pondere maximă.


2010 Proiectarea sistemelor digitale 31
Tipuri de date scalare
Un caz special de tip enumerare predefinit ȋl reprezintă std_logic.

type std_logic is ( ‘U’ , -- neinitializat


‘X’ , -- necunoscut fortat
‘0’ , -- 0 fortat
‘1’ , -- 1 fortat
‘Z’ , -- impedanta ridicata
‘W’ , -- necunoscut slab
‘L’ , -- 0 slab
‘H’ , -- 1 slab
‘-’ , -- nedefinit
)

Valorile ‘0’, ‘1’, ‘L’, ‘H’ sunt suportate de sinteză.


Pentru sinteza cu ieşiri tri-state se acceptă şi ‘Z’.
‘-’ este acceptată ȋn sinteză pentru a desemna valori nedefinite.
Valorile ‘U’, ‘X’, ‘W’ nu pot fi utilizate ȋn sinteză.

2010 Proiectarea sistemelor digitale 32


Tipuri de date scalare
tipul ȋ ntreg (integer)

variable a: integer range -255 to 255;

Intern, pentru sinteză tipul intreg poate fi reprezentat ca un vector cu semn.

Subtipul natural poate fi reprezentat printr-un vector fără semn.

Observaȋ ie! Nu toate compilatoarele acceptă atât vectori cu semn cât şi


vectori fără semn.

tipuri fizice – utilizate ca unităȋi de măsură.

Nu au relevanȋă pentru sinteză.


Pentru simulare este predefinit doar tipul time, dar pot fi definite şi alte tipuri.

2010 Proiectarea sistemelor digitale 33


Tipuri de date compozite
tabel (array);
ȋ nregistrare (record).

2010 Proiectarea sistemelor digitale 34


Tipuri de date compozite
Tabel – un obiect format din mai multe elemente de acelaşi tip.

Exemplu:

type std_ulogic_vector is array (natural range <>) of std_ulogic

Se utilizează pentru a desemna magistrale.

signal a : std_logic_vector (3 downto 0);

pot fi definite tabele bidimensionale (pentru tabele de adevar)

type tabel8x4 is array (0 to 7, 0 to 3) of bit;


constant exclusive_or: tabel8x4 :=(
“000_0”, “001_1”, “010_1”, “011_0”,
“100_1”, “101_0”, “110_0”, “111_1”
);

2010 Proiectarea sistemelor digitale 35


Tipuri de date compozite
Şirurile de biȋ i pot fi introduse direct ȋ n binar sau ca şiruri
octale ori hexazecimale.
Şirurile de caractere se introduc ȋntre ghilimele, prefixate cu o
literă prin care se precizează sistemul de numeraȋie folosit:
X, x pentru şir hexazecimal;
O, o pentru şir octal;
B, b pentru şir binar.
Exemple :
a<=X”ABBA”
a<=x”ABBA”
a<=O”125653”
a<=o” 125653”
a<=B”1010101110101011”
a<=b”1010101110101011”
a<=”1010101110101011”

2010 Proiectarea sistemelor digitale 36


Tipuri de date compozite
Înregistrarea – un obiect care conȋine elemente (câmpuri) de tipuri diferite.

Fiecare câmp poate fi referit prin numele său calificat cu numele ȋnregistrării
din care face parte.
Exemplu:
iocell is record
buffer_inp: std_logic_vector (7 downto 0);
enable: std_logic;
buffer_put: std_logic_vector (7 downto 0);
end record;
signal busa, busb, busc: iocell;
signal vec: std_logic_vector (7 downto 0);
busa.buffer_inp <=vec; -- un vector asignat altui vector
busb.buffer_inp <= busa.buffer_inp; --asignarea unui camp
busb.enable <=‘1’; -- asignarea unei valori
busc <= busb; --asignarea unui obiect

2010 Proiectarea sistemelor digitale 37


Tipuri şi subtipuri
Subtipul (subtype) este un tip cu restricȋie.

subtype byte is std_logic_vector (7 downto 0);


signal byte1, byte2: byte;
signal data1, data2: byte;
signal addr1, addr2: byte;
signal byte3, byte4: byte;
signal data3, data4: byte;
signal addr3, addr4: byte;

În acest caz if data1=data3 then… nu va genera eroare la


compilare deoarece tipul datelor este acelaşi.

2010 Proiectarea sistemelor digitale 38


Compatibilitatea tipurilor
Exemplu:

type indice is integer range 0 to 255;


signal int1: indice;
signal int2: integer range 0 to 255;
int1 <= int2;

subtype indice is integer range 0 to 255;


signal int1: indice;
signal int2: natural range 0 to 255;
int1 <= int2;

În ambele cazuri cele două semnale sunt considerate de acelaşi tip. Din această
cauză compararea lor sau asignarea nu vor produce eroare la compilare.

2010 Proiectarea sistemelor digitale 39


Compatibilitatea tipurilor
Exemplu:
entity pTest is
Port ( iaBus : in STD_LOGIC_VECTOR (7 downto 0);
iEnable : in STD_LOGIC;
oaBus: out STD_LOGIC_VECTOR (7 downto 0));
end pTest;
architecture Behavioral of pTest is
subtype indice is integer range 0 to 255;
signal int1: indice:=15;
signal int2: std_ulogic_vector (7 downto 0):="00000101";
begin
process(int1,int2)
begin
if int1<int2 then -- eroare
oaBus <=int1; -- eroare
else
oaBus <=int2; -- eroare
end if;
end process;
end Behavioral;

În acest caz compararea si asignarea valorilor vor genera eroare la compilare,


tipurile de date din cei doi membri nefiind considerate compatibile.

2010 Proiectarea sistemelor digitale 40


Atribute
Un atribut oferă informaȋie despre entităȋi, arhitecturi, tipuri
sau semnale.
Există câteva atribute predefinite pentru valori, semnale şi
intervale de valori, utile ȋn sinteză:
'left, 'right, 'high, 'low, 'length
Exemple:
type count is integer range 0 to 127;
type states is (idle, decision, read, write);
type word is array (15 downto 0) of std_logic;
count 'left=0 count'high=127 count'length=128
states'left=idle states'high=write states'length=4
word'left=15 word'high=15 word'length=16

count'right=127 count'low=0
states'right=write states'low=idle
word'right=0 word'low=0

2010 Proiectarea sistemelor digitale 41


Atribute
alte atribute:
'range – ne oferă o plajă de valori:

signal word: std_logic_vector (15 downto 0);


word'range= 15 downto 0

'event – semnalează apariȋia unui eveniment (modificarea valorii unui semnal)


Se utilizează frecvent ȋn descrierea comutării semnalelor de tact
if (clock=‘0’) and (clockȋ event) then …
-- pune in evidenta frontul cazator

'last_value – oferă ultima valoare a unui semnal inăintea modificării valorii acestuia

if (iClock = '0') and (iClock'event) and (iClock'last_value=’1’) then…

2010 Proiectarea sistemelor digitale 42


Intrebări ?
2010 Proiectarea sistemelor digitale 43

You might also like