Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12....
Transcript of Descrieri structurale. Configuratiistaff.cs.upt.ro/~todinca/TPAC/Curs/tpac5.pdf · 2011. 12....
Descrieri structurale. ConfiguratiiConfiguratii
Capitolul 5
Cuprins
• 5.1. Descrieri structurale• 5.2. Parametri generici • 5.3. Configuratii
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
Declaratia de componente
component_declaration::=
COMPONENT component_name [IS]
[GENERIC(list_of_generics);]
[PORT(list_of_ports);]
END COMPONENT [component_name];
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
Instructiunea de instantiere de componente
component_instantiation_statement ::=
label: component_name [GENERIC MAP (generic_association_list)] (generic_association_list)]
[PORT MAP(port_association_list)] ;
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.
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.
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.
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.
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.
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);
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
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.
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);
-- 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;
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;
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
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
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.
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;
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;
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
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.
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
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
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;
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;
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 !
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.
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;
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)
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)
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.
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;
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).
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.
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;
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)];
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.
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).
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
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;
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.
COMPONENT circuit
ENTITY circuitclk
clk
reset
iesire ies
res
reset
q
ctr
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