Descrieri structurale configuratii
This presentation is the property of its rightful owner.
Sponsored Links
1 / 46

Descrieri structurale. Configuratii PowerPoint PPT Presentation


  • 56 Views
  • Uploaded on
  • Presentation posted in: General

Descrieri structurale. Configuratii. 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.

Download Presentation

Descrieri structurale. Configuratii

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Descrieri structurale configuratii

Descrieri structurale. Configuratii

Capitolul 5


Cuprins

Cuprins

  • 5.1. Descrieri structurale

  • 5.2. Parametri generici

  • 5.3. Configuratii


5 1 descrieri structurale

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 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

Declaratia de componente

component_declaration::=

COMPONENT component_name [IS]

[GENERIC(list_of_generics);]

[PORT(list_of_ports);]

END COMPONENT [component_name];


Declaratiile de componente

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 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

Instructiunea de instantiere de componente

component_instantiation_statement ::=

label: component_name [GENERIC MAP (generic_association_list)]

[PORT MAP(port_association_list)] ;


Instantierea de componente

Instantierea de componente

  • Instructiunea de instantiere de componenta are obligatoriu eticheta:

    • Eticheta poate fi orice identificator legal si este considerata numele instantierii de componenta

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

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


Porturi

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 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

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

    • 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

PORT MAP

  • Asocierile din clauza PORT MAP pot fi facute:

    • Pozitional

    • Dupa nume.

  • 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 map1

PORT MAP

  • La asocierea dupa nume:

    • se specificanume_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 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 map2

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 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

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, 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

Exemplu: generatorul de paritate

Fig 5 (dupa fig 2.3 din [EKP98]). Generatorul de paritate modificat

V(3)

s1

V(2)

par

s3

xor1

inv1

V(1)

xor3

impar

s2

V(0)

xor2

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.


Descrieri structurale configuratii

ENTITY circ_paritate IS

PORT(v: IN BIT_VECTOR(3 DOWNTO 0);

par: OUT BIT;

impar: BUFFER BIT);

END circ_paritate;

ARCHITECTURE struct OF circ_paritate IS

COMPONENT xor_gate IS

GENERIC(del: TIME:=3ns);

PORT(x1,x2: IN BIT;

y: OUT BIT);

END COMPONENT;

COMPONENT inv_gate IS

GENERIC(del: TIME:=4ns);

PORT(x: IN BIT; y: OUT BIT);

END COMPONENT;

SIGNAL s1, s2, s3: BIT;

BEGIN

xor1: xor_gate PORT MAP(y => s1, x2=> v(2), x1=> v(3));-- mapare dupa nume

xor2: xor_gate PORT MAP(v(1), v(0), s2); --mapare pozitionala

xor3: 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);


Descrieri structurale configuratii

-- 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 IS

FOR 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 CONFIGURATION;


Descrieri structurale configuratii

ENTITY test IS

END;

–- dupa [EKP98]

ARCHITECTURE test OF test IS COMPONENT 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);

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 IS

FOR test

FOR all: circ_paritate

USE CONFIGURATION WORK.cfg_circ_paritate;

END FOR;

END FOR;

END CONFIGURATION;


5 2 parametri generici generics

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

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 generici1

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

  • 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 intrari

Exemplu: poarta cu N intrari

ENTITY 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 IS

BEGIN

PROCESS(x)

VARIABLE: temp: BIT:=‘0’;

BEGIN

temp:=‘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

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;

intrare_seriala: IN BIT);

END registru;


5 3 configuratii

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

      • In descrieri structurale

      • E utilizarea tipica

  • Exista:

    • Configuration specification

    • Configuration declaration


Configuratii

Configuratii

  • Configuration specification

    • Asocierile se fac direct in arhitectura

    • Utila pentru proiecte mici (daca se fac modificari atunci trebuie recompilata arhitectura)

  • 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.


Configuratii1

Configuratii

  • Exista doua stiluri de configuratii:

    • Cu perechi entitate-arhitectura

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

    • Stilul lower level configuration:

      • 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

Configuratii: exemple

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

a

b

Fig 6. Inversor

inv

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:

s1

s2

et

test

Fig 7. Entitatea test ce contine inversorul


Configuratii exemple1

Configuratii: exemple

ENTITY inv IS

GENERIC(tp: TIME :=5ns);

PORT(a: IN BIT; b: OUT BIT);

END ENTITY inv;

ARCHITECTURE beh OF inv IS

BEGIN

b <= NOT a AFTER tp;

END ARCHITECTURE beh;

ARCHITECTURE alta OF inv IS

BEGIN

END alta;

CONFIGURATION inv_cfg OF inv IS

FOR beh

END FOR;

END CONFIGURATION inv_cfg;


Configuration specification exemplu

Configuration specification: exemplu

ENTITY test IS

END 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);

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 specification

Configuration specification

Sintaxa:

FOR list_of_component_labels:

USE ENTITY entity_name[(architecture_body)]

[GENERIC MAP(generic_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 specification1

Configuration specification

  • Se 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:

  • Se suprascrie valoarea anterioara a parametrului generic

  • 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 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 exemplu

Configuration declaration: exemplu

ARCHITECTURE netlist_config_decl OF test IS

COMPONENT neg IS

GENERIC (tp: TIME :=3ns);

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

PORT(x: IN BIT; y : OUT BIT);

END COMPONENT;

SIGNAL s1, s2: BIT;

BEGIN

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

END ARCHITECTURE;

USE WORK.ALL;

CONFIGURATION cfg_test OF test IS

FOR netlist_config_decl

FOR 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 sintaxa

Configuration declaration:sintaxa

CONFIGURATION configuration_name OF entity_name IS

block_configuration

END [CONFIGURATION][configuration_name];

block_configuration::=

FOR 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 sintaxa1

Configuration declaration: sintaxa

  • component_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.

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

  • USE ENTITY nume_entitate[(nume_arhitectura)];

  • USE CONFIGURATION nume_configuratie;--lower level configuration

  • 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 configuration

Lower level configuration

Urmatorul 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

Fig 8. Entitatea big_test, ce contine entitatea test din fig 7.

a

b

et

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

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

ENTITY big_test IS

END big_test;

ARCHITECTURE netlist OF big_test IS

COMPONENT test IS

END COMPONENT;

BEGIN

et1: test

END ARHITECTURE netlist;

CONFIGURATION cfg_big_test OF big_test IS

FOR netlist

FOR ALL: test USE CONFIGURATION WORK.cfg_test;

END FOR;

END FOR;

END CONFIGURATION;


Descrieri structurale configuratii

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

--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

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 OPEN

    • 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 directa

Instantiere directa

Nu 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;

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

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)];

Sau:

component_label: CONFIGURATION configuration_name

[GENERIC MAP (generic_association_list)]

[PORT MAP (port_association_list)];


Configuratii incrementale

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 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

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 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 configuratii

Functii de conversie in configuratii

In 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;

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 configuratii1

Functii de conversie in configuratii

PACKAGE 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;

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

ENTITY x IS

END;

ARCHITECTURE y OF x IS

COMPONENT circuit IS

PORT(ctr: INOUT mvl;

clk, res: IN mvl;

ies: OUT mvl);

END COMPONENT;


Functii de conversie in configuratii2

Functii de conversie in configuratii

BEGIN

….

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.


Descrieri structurale configuratii

COMPONENT circuit

clk

ENTITY circuit

clk

ies

iesire

reset

q

res

ctr

Fig 9. Functii de conversie in configuratii.


Functii de conversie

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 proceduri

    • Port map

    • Generic map


  • Login