Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12....

46
Descrieri structurale. Configuratii Capitolul 5

Transcript of Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12....

Page 1: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Descrieri structurale. ConfiguratiiConfiguratii

Capitolul 5

Page 2: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Cuprins

• 5.1. Descrieri structurale• 5.2. Parametri generici • 5.3. Configuratii

Page 3: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

5.1. Descrieri structurale

• Descriere structurala = atunci cind o arhitectura este modelata sub forma unui set de componente legate prin semnale.

• Comportarea arhitecturii nu rezulta in mod explicit din descrierea ei structuralaexplicit din descrierea ei structurala

• Instructiunea de baza: – instructiunea de instantiere de componente

(component instantiation statement)• Este o instructiune concurenta

• In partea de declaratii a arhitecturii apar declaratiile de componente

Page 4: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Declaratia de componente

component_declaration::=

COMPONENT component_name [IS]

[GENERIC(list_of_generics);]

[PORT(list_of_ports);]

END COMPONENT [component_name];

Page 5: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Declaratiile de componente

• Numele de componenta din declaratia de componenta poate fi acelasi sau diferit de numele entitatii care ii este asociata componentei.

• Daca este diferit atunci arhitectura se poate compila, dar nu se poate simula (decit daca

• Daca este diferit atunci arhitectura se poate compila, dar nu se poate simula (decit daca exista si o configuratie).

• Porturile au nume, tip si mod (directie)• Declaratiile de componente pot aparea si in

PACKAGE DECLARATION– Daca package-ul e vizibil in arhitectura atunci nu mai

trebuie declarata componenta in arhitectura

Page 6: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Instructiunea de instantiere de componente

component_instantiation_statement ::=

label: component_name [GENERIC MAP (generic_association_list)] (generic_association_list)]

[PORT MAP(port_association_list)] ;

Page 7: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Instantierea de componente

• Instructiunea de instantiere de componenta are obligatoriu eticheta:– Eticheta poate fi orice identificator legal si

este considerata numele instantierii de componentacomponenta

• Numele componentei trebuie sa fie acelasi cu numele din declaratia de componenta

• Clauza PORT MAP face asocierea intre porturile formale si cele actuale.

Page 8: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Porturi• Porturile formale sint cele din declaratia de

componenta• Porturile actuale pot fi:

– Porturi ale entitatii pe care o modelam– Semnale interne ale acesteia.

• Pentru un port formal de intrare un port actual • Pentru un port formal de intrare un port actual poate fi si o expresie.

• Ca port actual se poate folosi si cuvintul cheie OPEN, adica portul respectiv e neconectat– Un port de intrare poate fi lasat OPEN doar daca la

declararea sa se specifica o valoare initiala– Nu poate fi lasat neconectat un port care e unconstrained array

– Orice alt port poate fi lasat neconectat.

Page 9: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Modurile porturilor

• IN: portul poate fi doar citit, nu si scris– E implicit, adica, daca nu se precizeaza modul unui

port, acesta va fi considerat IN

• OUT: portul poate fi doar scris, nu si citit• INOUT: poate fi atit citit cit si scris• INOUT: poate fi atit citit cit si scris

– Poate avea mai multe drivere, caz in care trebuie sa fie semnal rezolvat.

• BUFFER: poate fi atit citit cit si scris– Poate avea un singur driver– Unui port formal BUFFER i se poate asocia un port

actual tot de mod buffer sau un semnal intern.

Page 10: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

PORT MAP• Asocierile din clauza PORT MAP pot fi

facute:– Pozitional– Dupa nume.

• La asocierea pozitionala• La asocierea pozitionala– Se specifica doar numele portului actual– Din pozitia pe care apare se stabileste carui

port formal ii este asociat– Ordinea trebuie sa corespunda cu ordinea

porturilor din declaratia de componenta.

Page 11: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

PORT MAP

• La asocierea dupa nume:– se specifica nume_port_formal => port_actual

– Nu conteaza ordinea in care sint scrise porturile– Fiecare port formal din asocierea dupa nume este vizibil doar in

respectiva instructiune de instantiere de componenta.

• Asocierea pozitionala poate genera erori greu • Asocierea pozitionala poate genera erori greu de depanat !

• Reguli de asociere– 1. Trebuie sa coincida tipul portului formal si al celui

actual– 2. Daca portul formal se poate citi atunci si portul actual

trebuie sa se poata citi; daca portul formal poate fi scris, atunci si portul actual trebuie sa poata fi scris.

Page 12: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

PORT MAP• Regulile de asociere sint valabile atit pt maparea

pozitionala cit si pt maparea dupa nume.• Se considera ca un semnal intern poate fi atit citit cit si

scris => acesta se poate asocia oricarui port formal daca tipurile lor corespund.

• Consecinte ale regulilor:– Daca un port actual are modul OUT atunci el nu poate fi asociat – Daca un port actual are modul OUT atunci el nu poate fi asociat

unui port formal IN sau INOUT – Daca un port actual are modul IN atunci nu poate fi asociat unui

port formal OUT sau INOUT.– Daca un port actual are modul INOUT el poate fi asociat unui

port formal avind modul IN, OUT sau INOUT• Se pot face asocieri de porturi si pentru

– vectori (de ex de biti): x(3 DOWNTO 1) => y, unde y este BIT_VECTOR(2 DOWNTO 0)

– Sau bucati de vectori: a(4 downto 1) => b(5 downto 2);

Page 13: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

PORT MAP (actualizat)

• Conform editiei din 2002 a “1076 IEEE Standard VHDL Language Reference Manual”:– Pt un port formal de mod IN actualul poate avea

modul IN, INOUT sau BUFFER– Pt un port formal de mod OUT actualul poate fi OUT, – Pt un port formal de mod OUT actualul poate fi OUT,

INOUT sau BUFFER– Pt un port formal de mod INOUT actualul poate fi

INOUT sau BUFFER– Pt un port formal de mod BUFFER, actualul poate fi

OUT, INOUT sau BUFFER

Page 14: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Exemplu: generatorul de paritate

V(3)

V(2)

V(1)

s1

s3 parxor1

inv1V(1)

V(0) s2

xor2

xor3

inv1

impar

Reluam exemplul cu generatorul de paritate descris structural, dar ii adaugam si o iesire pentru paritate impara, numita impar, care are valoarea ‘1’ atunci cind vectorul de intrare v contine un numar impar de biti de ‘1’).

Se pune problema care este modul portului impar al entitatii parity_gen ?

Nu poate fi nici IN, nici OUT, doar INOUT sau BUFFER. In acest caz e mai potrivit modul BUFFER deoarece nu vrem ca un semnal extern sa comande acest port, adica vrem ca semnalul impar sa aiba o singura sursa.

Page 15: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

ENTITY circ_paritate ISPORT(v: IN BIT_VECTOR(3 DOWNTO 0);

par: OUT BIT;impar: BUFFER BIT);

END circ_paritate;

ARCHITECTURE struct OF circ_paritate ISCOMPONENT xor_gate IS

GENERIC(del: TIME:=3ns);PORT(x1,x2: IN BIT;

y: OUT BIT);END COMPONENT;

COMPONENT inv_gate IS COMPONENT inv_gate IS GENERIC(del: TIME:=4ns);PORT(x: IN BIT; y: OUT BIT);

END COMPONENT;

SIGNAL s1, s2, s3: BIT;

BEGINxor1: xor_gate PORT MAP(y => s1, x2=> v(2), x1=> v(3));-- mapare dupa numexor2: xor_gate PORT MAP(v(1), v(0), s2); --mapare pozitionalaxor3: xor_gate PORT MAP(x1=>s1, x2=>s2, y=>impar);

--corect conform standardului, dar nu si pt VeriBest !!inv1: inv_gate PORT MAP(x=>impar, y=>par);

Page 16: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

-- secventa care e acceptata de VeriBest:--xor3: xor_gate PORT MAP(x1=>s1, x2=>s2, y=>s3);--inv1: inv_gate PORT MAP(x=>s3, y=>par);--impar<=s3;

END ARCHITECTURE struct;

CONFIGURATION cfg_circ_paritate OF circ_paritate ISFOR struct

FOR ALL: xor_gate USE ENTITY WORK.poarta_xor(behave);END FOR;FOR inv1: inv_gate USE ENTITY WORK.inversor(behave);END FOR;END FOR;

END FOR;END CONFIGURATION;

Page 17: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

ENTITY test ISEND;

ARCHITECTURE test OF test ISCOMPONENT circ_paritate IS

PORT(v: IN BIT_VECTOR(3 DOWNTO 0);par: BUFFER BIT;impar: OUT BIT);

END COMPONENT;SIGNAL vector: BIT_VECTOR(3 DOWNTO 0);SIGNAL paritate_para, paritate_impara: BIT;

BEGIN

et: circ_paritate PORT MAP(vector, paritate_para, paritate_impara);et: circ_paritate PORT MAP(vector, paritate_para, paritate_impara);

vector <= "0000", "0001" AFTER 20ns, "0010" after 40ns,"0011" AFTER 60ns,"0100" after 80ns,"0101" after 100ns, "0110" after 120ns, "0111" after 140ns,"1000" after 160ns, "1001" after 180ns, "1010" after 200ns, "1011" after 220ns,"1100" after 240ns, "1101" after 260ns, "1110" after 280ns, "1111" after 300ns;

END;

CONFIGURATION cfg_test OF test ISFOR test

FOR all: circ_paritateUSE CONFIGURATION WORK.cfg_circ_paritate;

END FOR;END FOR;

END CONFIGURATION;

Page 18: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

5.2.Parametri generici (Generics)

• Sint folositi pt a transmite valori catre componente• Prin declararea unui parametru generic se creeaza

– Un obiect din clasa constantelor– Avind modul IN (poate fi doar citit)– Este vizibil in toate arhitecturile entitatii

• Valoarea unui generic poate fi specificata:– In declaratia de entitate– In declaratia de componente– in instructiunea de instantiere de componente– In configuratii

• Fiecare caz le poate suprascrie pe cele de dinainte• Este o eroare daca un generic nu este initializat

Page 19: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Parametri generici

• In instantierile de componente: – Specificarea valorii cu GENERIC MAP– Se poate face pozitional sau dupa nume– Parametrul generic actual va fi o valoare

• Daca numele parametrului generic din declaratia de componenta difera de cel din declaratia de entitate atunci, pt a putea simula arhitectura, trebuie sa existe si o configuratie– In configuratie se va face asocierea (legarea -

binding) intre cele doua nume ale param generici

Page 20: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Parametri generici

• Rezulta ca in configuratii GENERIC MAP poate face doua lucruri:– Asocierea (binding) intre parametrul generic din

declaratia de componenta si cel din declaratia de entitate

– Maparea unei valori– Maparea unei valori• In general parametrii generici sint folositi pt a

specifica intirzieri, dar au si alte utilizari:– Se poate parametriza numarul de intrari al unei porti

sau ale unui circuit– Se poate parametriza dimensiunea unui registru, a

unei magistrale, a unui ALU, etc.

Page 21: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Exemplu: poarta cu N intrariENTITY generic_or_gate IS

GENERIC( del: TIME:=5ns; n: INTEGER:=2);PORT(x: IN BIT_VECTOR(n-1 DOWNTO 0); y : OUT BIT);

END generic_or_gate;ARCHITECTURE behave OF generic_or_gate ISBEGIN

PROCESS(x)VARIABLE: temp: BIT:=‘0’;VARIABLE: temp: BIT:=‘0’;

BEGINtemp:=‘0’;FOR i IN n-1 DOWNTO 0 LOOP

temp:=temp OR x(i);EXIT WHEN temp=‘1’;

END LOOP;y<= temp AFTER del;

END PROCESS;END ARCHITECTURE;

Page 22: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Exemplu de registru

ENTITY registru IS

GENERIC(n: NATURAL:=8);

PORT( intrare_paralela: IN BIT_VECTOR(n-1 DOWNTO 0);

iesire_paralela: OUT BIT_VECTOR(n-1 DOWNTO 0);

reset, clock, comanda1, comanda2: IN BIT;reset, clock, comanda1, comanda2: IN BIT;

intrare_seriala: IN BIT);

END registru;

Page 23: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

5.3. Configuratii

• Au doua utilizari:– Fac legatura intre o entitate si una din

arhitecturile sale (exemplul cu gen paritate)– Fac legatura intre componente si perechile

entitate - arhitectura corespunzatoare entitate - arhitectura corespunzatoare • In descrieri structurale• E utilizarea tipica

• Exista:1. Configuration specification2. Configuration declaration

Page 24: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Configuratii

• Configuration specification– Asocierile se fac direct in arhitectura– Utila pentru proiecte mici (daca se fac modificari

atunci trebuie recompilata arhitectura)• Configuration declaration• Configuration declaration

– Este o unitate de proiectare separata– Avantaj: nu necesita recompilarea arhitecturii daca se

fac modificari• O instantiere de componenta nu poate fi legata (asociata) atit in configuration specification cit si in configuration declaration, ci doar in una din acestea.

Page 25: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Configuratii

• Exista doua stiluri de configuratii:1. Cu perechi entitate-arhitectura

– Se foloseste USE ENTITY WORK.entit(arhitect);

2. Stilul lower level configuration:– Se folosesc configuratii pt a lega componente de entitati;– Se folosesc configuratii pt a lega componente de entitati;– In forma: USE CONFIGURATION

WORK.nume_configuratie;

– Diferenta intre cele doua stiluri apare daca arhitectura entitatii asociata componentei e descrisa structural

Page 26: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Configuratii: exemple

inv

a b

Presupunem ca avem o poarta inversor numita inv, avind o intrare asi o iesire b, ambele de tip BIT, ca in figura urmatoare:

Presupunem ca avem si o entitate test, fara porturi, care contine o Presupunem ca avem si o entitate test, fara porturi, care contine o componenta numita neg, ce va fi asociata entitatii inv, si doua semnale interne, s1 si s2, conectate ca in figura urmatoare:

et

s1 s2

test

Page 27: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Configuratii: exempleENTITY inv IS

GENERIC(tp: TIME :=5ns);PORT(a: IN BIT; b: OUT BIT);

END ENTITY inv;ARCHITECTURE beh OF inv ISBEGIN

b <= NOT a AFTER tp;b <= NOT a AFTER tp;END ARCHITECTURE beh;

ARCHITECTURE alta OF inv ISBEGIN…END alta;

CONFIGURATION inv_cfg OF inv ISFOR behEND FOR;

END CONFIGURATION inv_cfg;

Page 28: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Configuration specification: exempluENTITY test ISEND test;

ARCHITECTURE netlist_config_spec OF test IS

COMPONENT neg IS

GENERIC (tp: TIME :=3ns);--GENERIC(tp1: TIME :=3ns);

PORT(x: IN BIT; y : OUT BIT);PORT(x: IN BIT; y : OUT BIT);END COMPONENT;SIGNAL s1, s2: BIT;

FOR et:neg -- FOR ALL:neg -- FOR OTHERS:neg

USE ENTITY WORK.inv(beh) --USE CONFIGURATION WORK.inv_cfg

GENERIC MAP(tp =>7ns)-- GENERIC MAP(tp => tp1)

PORT MAP(a=>x, b=>y); BEGIN

et: neg GENERIC MAP(10ns) PORT MAP(s1,s2);

END ARCHITECTURE;

Page 29: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Configuration specificationSintaxa:

FOR list_of_component_labels:

USE ENTITY entity_name[(architecture_body)]

[GENERIC MAP(generic_association_list)]

[PORT MAP(port_association_list)];[PORT MAP(port_association_list)];

list_of_component_labels: - e lista etichetelor instructiunilor de instantiere de componenta

- poate fi in forma: - et1, et2, et3:

- ALL:

- OTHERS:

Instantieri diferite ale aceleiasi componente pot fi legate la entitati diferite.

De asemenea limbajul permite legarea unor componente diferite de aceeasi entitate (daca nr si tipul porturilor permite) - pt depanare, dar e confuz !

Page 30: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Configuration specificationSe poate si:

USE WORK.ALL; -- inainte de entitate sau arhitectura cu config specification

USE ENTITY inv(beh) GENERIC MAP() PORT MAP();

Asocierea parametrilor generici poate avea doua semnificatii:

1. Se suprascrie valoarea anterioara a parametrului generic

2. Se asociaza param generici din entitate cu cei din declaratia de componenta atunci cind au nume diferite (in exemplu, daca la COMPONENT neg am fi avut atunci cind au nume diferite (in exemplu, daca la COMPONENT neg am fi avut GENERIC (tp1: TIME: = 3ns) atunci in configuratie trebuia sa avem:

GENERIC MAP(tp => tp1)

PORT MAP: face legatura intre porturile din entitate si cele din declaratia de componenta, atunci cind au nume diferite

Portul formal e cel din entity declaration, iar cel actual e cel din declaratia de componenta (in PORT MAP avem (port_formal => port_actual)

Dezavantajul la configuration specification este ca atunci cind se fac schimbari (unei componente i se asociaza o alta entitate sau arhitectura) va trebui recompilata intreaga arhitectura. Acest dezavantaj e inlaturat de configuration declaration.

Page 31: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Configuration declaration: exempluARCHITECTURE netlist_config_decl OF test IS

COMPONENT neg ISGENERIC (tp: TIME :=3ns);--GENERIC(tp1: TIME :=3ns);PORT(x: IN BIT; y : OUT BIT);

END COMPONENT;SIGNAL s1, s2: BIT;

BEGINBEGINet: neg GENERIC MAP(10ns) PORT MAP(x=>s1,y=>s2);

END ARCHITECTURE;USE WORK.ALL;CONFIGURATION cfg_test OF test IS

FOR netlist_config_declFOR et: neg USE ENTITY inv(beh) GENERIC

MAP(tp=>5ns) PORT MAP(a=>x, b=>y);--FOR ALL: neg USE CONFIGURATION inv_cfg GENERIC

--MAP(tp => tp1) PORT MAP(a=>x, b=>y);END FOR;

END FOR;END CONFIGURATION;

Page 32: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Configuration declaration:sintaxaCONFIGURATION configuration_name OF entity_name IS

block_configuration

END [CONFIGURATION][configuration_name];

block_configuration::=

FOR block_nameFOR block_name

component_configurations

block_configurations

END FOR;

Unde block_name poate fi

- numele unei architecture body (intotdeauna pt cel mai exterior bloc din configuration declaration

- eticheta unei instructiuni BLOCK (nu discutam acest caz)

- eticheta unei instructiuni GENERATE (nu discutam acest caz)

Page 33: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Configuration declaration: sintaxacomponent_configuration::=

FOR list_of_component_labels: component_name [binding_indication;]

[block_configuration]

END FOR;

Daca apare block_configuration in component configuration atunci aceasta defineste asocierile (bindings) componentelor de pe urmatorul nivel ierarhic.defineste asocierile (bindings) componentelor de pe urmatorul nivel ierarhic.

Pentru binding_indication exista urmatoarele forme (aceasta e valabil si pt configuration specification):

1. USE ENTITY nume_entitate[(nume_arhitectura)];

2. USE CONFIGURATION nume_configuratie;--lower level configuration

3. USE OPEN; -- adica nu se asociaza nici o entitate respectivei componente !!

• Legarea (binding) se va face eventual mai tirziu (de ex in cazul configuratiei incrementale)

Page 34: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Lower level configurationUrmatorul exemplu scoate in evidenta diferenta intre lower level configuration si configuratii de tip perechi entitate-arhitectura, in cazul unei descrieri structurale pe mai multe niveluri.

Entitatea test din exemplele anterioare este componenta unei alte entitati, numita big_test, care nu are porturi, conform figurii urmatoare:

test

et

a b

et1

big_test

Se prezinta cite un exemplu de configuratie de tip lower level, respectiv cu perechi entitate(arhitectura) pentru configuratia entitatii big_test.

Page 35: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Entitatea big_test cu arhitectura ei si configuratie in stilul lower level configuration:

ENTITY big_test ISEND big_test;ARCHITECTURE netlist OF big_test IS

COMPONENT test ISEND COMPONENT;

BEGINBEGINet1: testEND ARHITECTURE netlist;CONFIGURATION cfg_big_test OF big_test IS

FOR netlistFOR ALL: test USE CONFIGURATION WORK.cfg_test;END FOR;

END FOR;END CONFIGURATION;

Page 36: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

O alta configuratie, in stilul entitate-arhitectura:CONFIGURATION cfg_big_test_2 OF big_test IS

FOR netlist

FOR ALL: test USE ENTITY WORK.test(netlist_config_decl);

-- generic map sau/si port map daca era cazul

FOR netlist_config_decl

FOR et: neg USE ENTITY WORK.inv(beh) PORT MAP(a=>x, b=>y);

END FOR;

--daca erau si alte componente mai avem--daca erau si alte componente mai avem

--FOR all: compo--

--END FOR

END FOR;

END FOR;

END FOR;

END CONFIGURATION;

A doua configuratie (cfg_big_test_2 ) e mai lunga, dar mai flexibila deoarece componentele interne (in acest caz doar neg) pot fi asociate intr-un mod mai flexibil unor perechi entitate(arhitectura).

Page 37: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Reguli de legare implicita• Pt a evita scrierea unor secvente lungi de cod, limbajul

are citeva reguli de legare implicita a componentelor:• Pt o instantiere de componenta:

– 1. Daca exista si este vizibila o entitate care are acelasi nume ca si componenta, atunci componenta va fi legata de entitate. Daca nu exista o astfel de entitate, atunci in mod implicit apare USE OPENOPEN

– 2. Daca entitatea de la regula 1 are mai multe arhitecturi, atunci se foloseste ultima arhitectura compilata. Este o eroare daca entiatatea nu are nici o arhitectura compilata.

– 3. Pentru fiecare port sau generic din instantierea de componenta trebuie sa existe in entitate un port sau generic care sa corespunda ca nume, tip si mod. Daca un generic sau port din entitate nu este asociat, atunci este tratat ca si OPEN. Daca asocierea de porturi / generice nu poate fi facuta, atunci se semnaleaza eroare.

Page 38: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Instantiere directaNu se mai declara componente in partea de declaratii a arhitecturii, iar asocierea (binding) cu perechile entitate(arhitectura) se face direct in instructiunea de instantiere de componente.

Exemplu:

ARCHITECTURE netlist3 OF test IS

SIGNAL s1,s2: BIT;SIGNAL s1,s2: BIT;

BEGIN

et: ENTITY WORK.inv(beh) PORT MAP (a=>s1, b=>s2);

--et: CONFIGURATION WORK.inv_cfg PORT MAP(s1,s2);

END ARCHITECTURE netlist3;

Page 39: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Instantiere directa: sintaxa

Sintaxa instructiunii de instantiere de componenta din instantierea directa:

component_label: ENTITY entity_name[(architecture_name)]

[GENERIC MAP (generic_association_list)]

[PORT MAP (port_association_list)];[PORT MAP (port_association_list)];

Sau:component_label: CONFIGURATION configuration_name

[GENERIC MAP (generic_association_list)][PORT MAP (port_association_list)];

Page 40: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Configuratii incrementale

• In VHDL exista asa-numita configuratie incrementala, adica:– Exista configuration specification, dar nu e completa

(nu s-a facut legarea tuturor porturilor si genericelor sau exista porturi sau generice OPEN)

– Aceasta legare se poate face mai tirziu, in – Aceasta legare se poate face mai tirziu, in configuration declaration

– Se pot chiar suprascrie valorile unor parametri generici din configuration declaration.

• In configuration declaration nu mai e nevoie de USE ENTITY deoarece entitatea apare in configuration specification.

Page 41: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Analogia placa-soclu-circuit• Propusa de Alex Stanculescu• O entitate care are o descriere structurala poate fi

comparata cu o placa pe care se realizeaza o schema

• Arhitectura entitatii ar corespunde etapei de conectare a soclurilor circuitelor prin trasee de conectare a soclurilor circuitelor prin trasee de cablaj:– Instantieri de componente = socluri– PORT MAP = trasee

• In acest moment placa nu este functionala pt ca nu au fost puse circuitele in socluri– Aceasta etapa corespunde configuratiei -> se realizeaza

functionarea placii (in VHDL se face legarea componentelor de entitati).

Page 42: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Functii de conversie in configuratiiIn practica pot aparea situatii in care porturile componentei si cele ale entitatii asociate sa aiba tipuri diferite.

Pentru a putea face asocierea trebuiesc utilizate functii de conversie in configuratie.

Exemplu:

ENTITY circuit IS

PORT(q: INOUT std_logic;PORT(q: INOUT std_logic;

clk, reset: IN std_logic;

iesire: OUT std_logic);

END ENTITY;

Entitatea circuit va fi asociata unei componente (denumita tot circuit) dintr-o descriere structurala in care se lucreaza cu tipul mvl in loc de std_logic.

Presupunem ca intr-un package avm functiile de conversie:

- to_mvl ();--face conversie de la std_logic la mvl

- to_std_logic();-- face conversie de la mvl la std_logic

Page 43: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Functii de conversie in configuratiiPACKAGE conversii IS

FUNCTION to_mvl(x: IN std_logic) RETURN mvl;

FUNCTION to_std_logic(x: IN mvl) RETURN std_logic;

END PACKAGE;

PACKAGE BODY conversii IS

….

END PACKAGE BODY;END PACKAGE BODY;

USE ….--pt a face vizibile tipurile std_logic si mvl

ENTITY x IS

END;

ARCHITECTURE y OF x ISCOMPONENT circuit IS

PORT(ctr: INOUT mvl;clk, res: IN mvl;ies: OUT mvl);

END COMPONENT;

Page 44: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Functii de conversie in configuratiiBEGIN

….

END ARCHITECTURE;

CONFIGURATION cfg_x OF x IS

FOR y

FOR ALL: circuit USE ENTITY WORK circuit(arhitectura) PORT MAP(

to_mvl(q) => to_std_logic(ctr),

clk => to_std_logic(clk), reset => to_std_logic(res),

to_mvl(iesire)=>ies);

END FOR;

END cfg_x;

Conform analogiei, entitatea e in “soclul” componenta, deci:

- pentru intrari, conversia e dinspre tipul portului componentei spre cel al entitatii

- pentu iesiri e dinspre tipul portului entitatii spre cel al componentei

- pentru porturi INOUT apar ambele functii de conversie, dupa directia de curgere a informartiei.

Page 45: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

COMPONENT circuit

ENTITY circuitclk

clk

reset

iesire ies

res

reset

q

ctr

Page 46: Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12. 14. · declaratia de componenta si cel din declaratia de entitate – Maparea unei valori

Functii de conversie

• Functiile de conversie se pot utiliza de fiecare data cind se face o asociere de generice, porturi sau parametri in:– Apeluri de funcii– Apeluri de funcii– Apeluri de proceduri– Port map – Generic map