Tehnici de proiectare asistat‚a de calculator Capitole de...

30
Tehnici de proiectare asistat˘a de calculator Capitole de curs Dr. Doru Todinca Departamentul Calculatoare Universitatea “Politehnica” Timi¸ soara

Transcript of Tehnici de proiectare asistat‚a de calculator Capitole de...

Page 1: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

Tehnici de proiectare asistata de calculatorCapitole de curs

Dr. Doru Todinca

Departamentul CalculatoareUniversitatea “Politehnica” Timisoara

Page 2: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

Cuprins

1 Introducere 1

2 Constructori de baza ai limbajului VHDL 4

2.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.2 Entitati (Entity declarations) . . . . . . . . . . . . . . . . . . . . . . 4

2.3 Arhitecturi (Architecture body) . . . . . . . . . . . . . . . . . . . . . 5

2.4 Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3 Elemente de baza ale limbajului VHDL 13

3.1 Identificatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.2 Obiecte de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.3 Tipuri de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.3.1 Tipuri scalare . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.3.2 Tipuri compuse . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.3.3 Subtipuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.4 Expresii si operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4 Descrieri structurale. Configuratii 23

4.1 Instructiunea GENERATE . . . . . . . . . . . . . . . . . . . . . . . . 23

Lista figurilor 28

i

Page 3: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

Capitolul 1

Introducere

Obiectul cursului de TPAC (Tehnici de Proiectare Asistata de Calculator) va fi lim-

bajul VHDL.

Initialele VHDL provin de la VHSIC Hardware Description Language, iar VHSIC

ınseamna Very High Speed Integrated Cicruits, si a fost un program dezvoltat ın anii

1980 de catre Departamentul Apararii al Statelor Unite, cu scopul de a se realiza

progrese semnificative ın priectarea si dezvoltarea de circuite integrate pe scara larga

si foarte larga.

La programul VHSIC au luat parte un numar mare de companii, care utilizau

diverse formalisme (de obicei limbaje sau unelte proprii) pentru descrierea, simularea

sau sinteza circuitelor integrate. Au aparut astfel probleme legate de schimbul de

informatii ıntre firmele participante la proiect. Solutia propusa a fost dezvoltarea

unui limbaj de descriere hardware (HDL – Hardware Description Language) care sa

permita:

• descrierea unor proiecte sau parti ale unor proiecte ıntr-o forma standardizata

• simularea circuitelor la diverse niveluri de descriere

• sinteza automata a circuitelor descrise ın limbajul respectiv.

Astfel s-a dezvoltat limbajul VHDL, care a fost adoptat ca standard IEEE ın

anul 1987, devenind standardul IEEE Std. 1076-1987. Standardul (limbajul) a fost

re-actualizat ın anul 1993: IEEE Std. 1076-1993.

Descrierea (reprezentarea) unui sistem digital poate fi facuta la diferite niveluri de

abstractizare si ın domenii (planuri) distincte (domeniul comportamental, domeniul

structural si domeniul fizic). Nivelurile de descriere ale unui sistem sau circuit sunt,

ın ordine crescatoare a gradului de abstractizare:

1

Page 4: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 1. INTRODUCERE 2

1. circuit: ın domeniul comportamental structural, elementele componente sunt

tranzistoare, rezistoare si capacitoare, iar in domeniul comportamental se uti-

lizeaza ecuatii diferentiale pentru a descrie functionarea acestora.

2. logic: componentele structurale sunt reprezentate de porti logice si bistabile,

iar ın planul comportamental, functionarea sistemului este descrisa de ecuatii

logice booleene.

3. nivelul transferului ıntre registri (Register Transfer sau RT-level, ın limba en-

gleza): ın plan comportamental functionarea e descrisa de operatiile de transfer

ıntre registri, iar ın plan structural, elementele sunt: registre, ALU (unitati

aritmetice si logice), multiplexoare, etc.

4. nivelul sistem: este cel mai abstract nivel de reprezentare. Functionarea e

descrisa prin algoritmi sau procese (de exemplu procese VHDL), iar elementele

structurale sunt unitati centrale (CPU), memorii, magistrale.

In domeniul fizic, nivelul sistem e reprezentat de placi cu circuite, nivelul RT de

macro-celule sau de chip-uri, nivelul logic de celulele standard ale unui producator de

circuite integrate, iar nivelul circuit, de layout-ul tranzistoarelor.

Limbajul VHDL acopera nivelurile 2–4 (de la nivelul logic pana la nivelul sistem),

dar nu si nivelul circuit.

De altfel limbajul VHDL a fost definit ın termeni de simulare si mecanismul de

simulare pentru VHDL este extrem de riguros. Ca o consecinta a definirii seman-

ticii limbajului VHDL ın termeni de simulare, exista instructiuni si constructii ale

limbajului care sunt mai dificil de sintetizat.

In cadrul acestui curs se va studia limbajul VHDL ın primul rand din punct de

vedere al modelarii si simularii sistemelor digitale, fara a se insista pe aspectele legate

de sinteza automaa a circuitelor.

Limbajele de descriere hardware ın general si limbajul VHDL ın particular, au

elemente comune limbajelor de programare de nivel ınalt, cum ar fi structurile de

date si instructiunile, dar au si elemente specifice, care ın mod normal nu se regasesc

ın limbajele de programare de nivel ınalt (Pascal, C, etc). Cele mai importante

elemente specifice limbajelor de descriere hardware sunt:

• mecanismul de simulare, care permite ordonarea evenimentelor, avansul timpu-

lui, etc, astfel ıncat rezultatele simularii sa fie deterministe, adica sa nu depinda

de sistemul de operare, de tipul calculatorului pe care se efectueaza simularea,

etc

Page 5: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 1. INTRODUCERE 3

• timpul: ın limbajele de descriere hardware exista si tipul timp (time), reprezen-

tat prin numere ıntregi sau flotante, ın VHDL folosindu-se numere ıntregi, a

caror reprezentare depinde mai putin de implementare decat reprezentarea nu-

merelor flotante

• elementele de descriere structurala: limbajele de descriere hardware permit de-

scrierea felului ın care se leaga ıntre ele componentele unui proiect

• paralelismul (concurenta: deoarece hardware-ul functioneaza concurent, si lim-

bajele de descriere hardware trebuie sa permita modelarea concurena a executiei

proceselor. Limbajul VHDL este un limbaj concurent, dar are si structuri ın

cadrul carora instructiunile se executa secvential (procesele si subprogramele).

Page 6: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

Capitolul 2

Constructori de baza ai limbajuluiVHDL

2.1 Introducere

Un circuit sau sistem poate fi modelat ın VHDL sub forma unui set de elemente de

proiectare (design units). Elementele de proiectare existente ın VHDL sunt urma-

toarele:

1. entity declaration – declaratia entitatii sau mai pe scurt, entitatea

2. architecture body – corpul arhitecturii sau arhitectura

3. package declaration

4. package body – corpul package-ului

5. configuration declaration – configuratia

Vom anzliza pe rand constructorii de baza ai limbajului VHDL.

2.2 Entitati (Entity declarations)

O declaratie de entitate specifica numele entitatii si interfata acesteia cu exteriorul,

reprezentata prin porturile sale.

Sintaxa unei declaratii de entitate este:

entity_declaration::=

ENTITY entity_name IS

entity_header

[entity_declarative_part]

4

Page 7: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 2. CONSTRUCTORI DE BAZA 5

[BEGIN

entity_statement_part]

END [ENTITY][entity_name];

entity_header::=

[PORT_clause][GENERIC_clause]

Pentru descrierea sintaxei limbajului vom apela la notatia BNF, ın care semnificatia

simbolurilor este:

::= – se defineste

[] – secventa optionala

{} – secventa optionala repetabila

| – alternative logice

Limbajul VHDL nu este “case-sensitive’, adica nu face deosebirea ıntre litere mari

si mici, dar ın acest curs vom scrie cu majuscule cuvintele cheie ale limbajului.

Deci, o declaratie de entitate contine cuvantul cheie ENTITY si numele entitatii,

urmata de un header si, ın mod optional, de o parte de declaratii si de una de

instructiuni, tot optionala. Asupra acestora vom reveni mai tarziu, pe parcursul

cursului.

Headerul entitatii contine clauza PORT, prin care se declara porturile entitatii

(semnalele prin care aceasta comunica cu mediul exterior) si clauza GENERIC. Parametrii

generici apartin clasei constantelor si sunt vizibili ın toate arhitecturile care apartin

unei entitati. Un exemplu tipic de utilizare a lor este pentru a specifica ıntarzierile

care apar pe circuit, ıntre intrarile si iesirile sale.

Declaratia de entitate se ıncheie cu cuvantul cheie END urmat eventual de cuvantul

cheie ENTITY sau/si de numele entitatii. Simbolul ; de la sfarsitul declaratiei este

obligatoriu.

Exemplu:

2.3 Arhitecturi (Architecture body)

Declaratia de entitate nu precizeaza nimic despre implementarea entitatii. Acest lucru

se face utilizand arhitecturile. O entitate poate avea oricate arhitecturi, de exemplu

o arhitectura care o descrie din punct de vedere comportamental si o alta arhitectura

care o descrie din punct de vedere structural.

Page 8: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 2. CONSTRUCTORI DE BAZA 6

Sintaxa:

architecture_body::=

ARCHITECTURE architecture_name OF entity_name IS

architecture declarative part

BEGIN

architecture statement part

END [ARCHITECTURE][architecture_name];

Dupa cuvantul cheie ARCHITECTURE urmeaza numele arhitecturii si entitatea

careia ıi este asociata, iar apoi o parte de declaratii.

Corpul arhitecturii se afla ıntre BEGIN si END si contine instructiuni con-

curente, si anume:

• instructiuni PROCESS

• instructiuni BLOCK

• apeluri concurente de proceduri

• instructiuni ASSERT concurente

• asignari concurente de semnale

• instantieri de componente

• instructiuni GENERATE

Observatie: ın VHDL o arhitectura poate contine orice combinatie de descrieri

structurale si comportamentale, dar pentru claritate ın exemplele urmatoare vom

face distinctie ıntre stilul comportamental (concurent sau secvential) si cel structural.

Exemplu: vom descrie un circuit generator de paritate ın trei moduri: structural,

comportamental concurent si comportamental secvential. Circuitul are 4 intrari de

tip BIT (un tip enumerare predefinit ın limbajul VHDL, avand valorile ’0’ si ’1’,

corespunzator celor doua valori din logica booleana) si o iesire, care va avea valoarea

’1’ daca un numar par de intrari au valoarea ’1’, respectiv va avea valoarea ’0’ daca

un numar impar de intrari au valoarea ’1’.

-- fisierul PORTI.vhd

ENTITY poarta_xor IS

GENERIC(del: TIME:=3ns);

Page 9: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 2. CONSTRUCTORI DE BAZA 7

PORT(x1,x2: IN BIT;

y: OUT BIT);

END poarta_xor;

ARCHITECTURE behave OF poarta_xor IS

-- simbolul pentru comentariu !

-- declaratii de semnale, etc,

-- NU se pot declara variabile in arhitectura

BEGIN

y <= x1 XOR x2 AFTER del;

END behave;

ENTITY inversor IS

GENERIC(del: TIME:=4ns);

PORT(x: IN BIT;

y: OUT BIT);

END inversor;

ARCHITECTURE behave OF inversor IS

-- declaratii

BEGIN

y <= NOT x AFTER del;

END behave;

Primul fisier contine descrierile celor doua (tipuri de) porti (sau-exclusiv si in-

versor), care vor fi utilizate ın descrierea structurala a generatorului de paritate.

Cele doua entitati contin cate o clauza generic (folosita pentru a declara parametrul

generic del, de tip TIME, ce reprezinta timpul de propagare al fiecarei porti, precum

si o clauza PORT, care specifica porturile fiecarei entitati.

Fiecare din arhitecturi contine o singura instructiune, si anume o asignare con-

curenta de semnal (concurent signal assignement).

Urmatorul fisier contine descrierea entitatii generatorului de aritate si trei arhi-

tecturi ale acestuia.

------------------

--

-- fisier ENTITATE circuit_paritate

Page 10: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 2. CONSTRUCTORI DE BAZA 8

--

-------------------

ENTITY circ_paritate IS

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

y: OUT 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(1), x1=> v(0));

-- mapare dupa nume

xor2: xor_gate PORT MAP(v(2), v(3), s2); --mapare pozitionala

xor3: xor_gate GENERIC MAP(del => 4ns) PORT MAP(s1, s2, s3);

inv1: inv_gate PORT MAP(x=>s3, y=>y);

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;

Page 11: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 2. CONSTRUCTORI DE BAZA 9

END CONFIGURATION;

ARCHITECTURE comport_concurent1 OF circ_paritate IS

SIGNAL t1, t2, t3: BIT;

BEGIN

y<=NOT t3 AFTER 11ns;

t3<=t2 XOR t1;

t2<=v(2) XOR v(3);

t1<=v(0) XOR v(1);

END;

ARCHITECTURE comport_concurent2 OF circ_paritate IS

BEGIN

y<= NOT(v(0) XOR v(1) XOR v(2) XOR v(3) ) AFTER 11ns;

END ARCHITECTURE;

Entitatea circ paritate are o iesire y, pe un bit si o intrare v, care este un vector

de 4 biti (BIT V ECTOR este un tip predefinit ın VHDl si este un tablou de biti de

dimensiune nespecificata – unconstrainned array).

Arhitectura struct prezinta o descriere structurala a circuitului. In partea de

declaratii a arhitecturii se declara componentele care vor fi utilizate, adica o poarta

de tip sau-exclusiv, (componenta xor gate) si o componenta inversor inv gate. Se

observa ca numele componentelor difera de numele entitatilor (poarta xor si inversor).

Numele porturilor sunt la fel ca la entitati, dar ın general pot sa difere. De asemenea

se mai declara 3 semnale interne, s1, s2 si s3, care sunt folosite ın corpul arhitecturii,

pentru interconectarea componentelor.

Corpul arhitecturii struct contine doar instructiuni de instantiere de componente,

si anume 3 instantieri ale portii sau-exclusiv si o instantiere a inversorului. Fiecare

instructiune de instantiere de componente are o eticheta (label), care este obligato-

rie, urmata de precizarea tipului componentei care este instantiata si de maparea

genericelor si a porturilor.

Daca se face si maparea genericelor, atunci pentru instanta respectiva a componen-

tei, valoarea parametrului generic va fi cea precizata prin GENERIC MAP, iar daca

GENERIC MAP lipseste, atunci se pastreaza valoarea de la declarare a parametrului

Page 12: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 2. CONSTRUCTORI DE BAZA 10

generic.

Maparea porturilor consta ın a stabili corespondenta ıntre portul formal din declaratia

de componenta si portul actual, care este semnalul care se leaga la portul respectiv.

Portul actual poate fi sau un semnal intern sau un port al entitatii care este descrisa

(circ paritate ın cazul nostru). Daca portul formal este un port al entitatii, atunci

exista reguli care precizeaza ce fel de port actual ıi corespunde unui port formal (tre-

buie sa corespunda tipul lor si directia : IN, OUT, INOUT, etc). Nu se poate lega

un port formal OUT la un port actual IN (sau un IN la un OUT). Mai multe detalii

se vor prezenta ın capitolul de modelare structurala.

Maparea porturilor se poate face dupa nume, ca ın cazul instructiunilor cu etichetele

xor1 si inv1 sau pozitional, cum se ıntampla la instructiunile cu etichetele xor2 si

xor3. La maparea dupa nume se precizeaza numele portului formal, simboluk =>,

urmat de numele portului actual, iar ordinea ın care se mapeaza porturile nu con-

teaza. La maparea pozitionala nu mai apar numele portutilor formale, ci pe pozitia

corespunzatoare portului formal din declaratia componentei se trece numele portului

actual care se mapeaza la acel port actual..

Observatii:

1. Este important sa nu se confunde simbolukl =>, folosit la maparea dupa nume,

cu simbolul <=, utilizat la instructiunile de asignare de semnal.

2. “Directia’ simbolului => este ıntotdeauna de la portul formal spre portul

actual, indiferent de directia porturilor (IN¡ OUT sau INOUT).

3. Maparea pozitionala poate fi o sursa de erori foarte greu de detectat !! Com-

pilatorul nu semnaleaza eroare daca unui port formal i se asociaza un alt port

actual avqnd decat cel dorit, dar avand modul (directia) si tipul compatibile cu

portul actual (de exemplu, daca la intrarea de reset a unui circuit se mapeaza

semnalul extern de clock).

La descrierea structurala se foloseste si o configuratie (configuration declara-

tion), care face legatura (binding) ıntre componentele declarate ın arhitectura struct

si perechole entitate - arhitectura asociate componentelor respective. In exemplul

nostru, componentei xor gate i se asociaza entitatea poarta xor cu arhitectura be-

have, iar componentei inv gate i se asociaza entitatea inversor cu arhitectura behave.

Asupra configuratiilor vom reveni mai pe larg ıntr-un capitol ulterior.

Se observa ca nu conteaza ordinea ın care apar instructiunile de instantiere de

componente.

Page 13: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 2. CONSTRUCTORI DE BAZA 11

Arhitectura comport concurent1 foloseste 4 instructiuni de asignare concurenta

de semnale si se observa ca se poate stabili o corespondenta ıntre ecuatiile logice din

aceasta arhitectura si portile logice din arhitectura struct. Deoarece cele 4 instructiuni

de asignare de semnal sunt concurente, nu conteaza ordinea ın care sunt scrise.

Arhitectura comport concurent2 foloseste o singura asignare concurenta de sem-

nal, scriind ıntr-o forma mai condensata ecuatiile logice din arhitectura comport concurent1.

Intr-un alt fisier a fost descrisa o arhitectura comportamentala secventiala a en-

titatii circ paritate, dupa cum urmeaza:

----------------

--

--fisier arhitectura

--contine arhitectura "comport_secvential" a entiatatii "circ_paritate"

--

----------------

ARCHITECTURE comport_secvential OF circ_paritate IS

BEGIN

PROCESS(v)

-- semnalul v constituie LISTA DE SENZITIVITATE a procesului

-- partea de declaratii a procesului:

-- se pot declara constante si variabile,

-- NU se pot declara semnale !

VARIABLE nr_de_1 : INTEGER:=0;

BEGIN

nr_de_1:=0;

FOR i IN 0 TO 3 LOOP

IF v(i)=’1’ THEN

nr_de_1 := nr_de_1 +1;

-- nu exista operatori ++, +=, etc :)

END IF;

END LOOP;

IF nr_de_1 MOD 2=0 THEN

Page 14: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 2. CONSTRUCTORI DE BAZA 12

y<= ’1’ AFTER 1 ns;

ELSE

y<=’0’ AFTER 1 ns;

END IF;

END PROCESS;

END;

Arhitectura contine o singura instructiune, instructiunea compusa PROCESS,

care are o parte de declaratii si corpul procesului, ıntre BEGIN si END PROCESS.

‘In partea de declaratii se declara variabila nr de 1, de tip INTEGER, care este si

initializata cu zero.

Instructiunile din cadrul unui proces se executa ın mod secvential (ın ordinea

ın care sunt scrise). In acest exeplu apar instructiuni de asignare de variabil, de

ciclare si instructiuni IF. Se observa ca nu exista nici o legatura ıntre arhitectura

comport secvential si posibilele scheme hardare care descriu functionarea genera-

torului de paritate, descrierile comportamentale secventiale avand de obicei un nivel

de abstractizare mai ınalt decat descrierile comportamentale concurente sau decat

cele structurale.

2.4 Package

Observatie: nu am gasit o traducere potrivita pentru “package”.

Un PACKAGE declaration (declaratie de package) este o colectie de declaratii de

subprograme, tipuri, constante, componente etc, grupate astfel ıncat diverse unitati

de proiectare sa le poata utiliza.

Corpul unui package (PACKAGE BODY) contine detaliile “ascunse” ale imple-

mentarii unui package, care nu sunt vizibile din exterior (ın mod tipic corpul sub-

programelor, eventual subprograme auxiliare, care ajuta doar la implementarea celor

declarate ın partea de declaratii a package-ului).

Pentru a face vizibil continutul unui package se folosesc clauze USE, ın una din

formele:

USE package_name.identifier;

USE package_name.ALL;

Prima forma face vizibil doar identificatorul respectiv, iar a doua forma face viz-

ibile toate declaratiile din package declaration.

Si asupra package-lor se va reveni ıntr-un capitol viitor.

Page 15: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

Capitolul 3

Elemente de baza ale limbajuluiVHDL

Elementele de baza ale limbajului VHDL sunt obiectele de date (data objects) care

pot avea diferite tipuri de date, literalii (constante) si operatorii.

Limbajul VHDL este puternic tipizat si nu permite operatii ıntre ıntregi si reali

sau ıntre elemente de tip BIT si de tip BOOLEAN.

3.1 Identificatori

In VHDL exista doua tipuri de identificatori: de baza si extinsi. Un identificator de

baza este compus dintr-o secventa de unul sau mai multe caractere (litere mari si mici,

cifre si caracterul underscore “ ”). Primul caracter trebuie sa fie o litera, iar ultimul nu

poate fi underscore, de asemenea nu pot aparea doua caractere underscore succesive.

NU se face deosebire ıntre litere mari si mici. Nu este permis ca un identificator de

baza sa aiba acelasi nume ca si un cuvant rezervat al limbajului.

Un identificator extins consta ıntr-o secventa de caractere cuprinsa ıntre doua

caractere backslash, de exemplu \test\ sau \2c\.Comentarii Comentariile ın VHDL ıncep de la secventa −− si se continua pana

la sfsitul randului curent.

3.2 Obiecte de date

Obiectele de date contin valori de un anumit tip si sunt create printr-o declarare de

obiect (object declaration). In VHDL exista urmatoarele patru clase de obiecte de

date:

13

Page 16: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 3. ELEMENTE DE BAZA ALE LIMBAJULUI VHDL 14

1. Constante. O constanta este initializata la declararea sa si nu ısi schimba val-

oarea ın timpul executiei programului. Exemplu:

CONSTANT pi: REAl:=3.14159;

O constanta primeste o valoare ınaintea simularii. Constantele declarate ın

subprograme sunt initializate la fiecare apelare a subprogramului.

In VHDL exista si constante amanate (deferred constants). Acestea pot apare

doar ın package-uri, si anume sunt declarate ın PACKAGE declaration, dar nu

sunt initializate decat ın PACKAGE BODY.

Se pot declara constante ın package-uri, ın entitati, arhitecturi, procese si sub-

programe. Parametrii generici apartin implicit clasei constantelor.

2. Variabile. Spre deosebire de constante, valoqrea unei variabile poate fi modifi-

cata si dupa declarare. Ca si constantele, o variabila are la un moment dat o

singura valoare. La declararea unei variabile aceasta poate fi initializata ın mod

explicit, sau daca nu, variabila va fi initializata implicit (cu valoarea cea mai

din stanga a tipului variabilei). Spre deosebire de semnale, atunci cand se exe-

cuta o instructiune de asignare de variabila, valoarea variabilei se actualizeaza

instantaneu.

Se pot declara variabile DOAR ın procese si subprograme. In VHDL 93 a fost

introduse variabile globale, dar nu se recomanda utilizarea lor deoarece sunt o

sursa de nedeterminism.

3. Semnale. Semnalele se folosesc pentru a lega partile unui proiect: semnalele

sunt obiecte prin intermediul carora se face comunicarea ıntre procese si ıntre

subcomponentele unei entitati.

Spre deosebire de constante si variabile, un semnal nu are doar o singura valoare

la un moment dat, ci are o forma de unda proiectata constand din perechi

(valoare, moment de timp). Spre deosebire de variabile, valoarea unui semnal

NU se actualizeaza instantaneu ın urma executiei unei instructiuni de asignare

de semnal, ci doar se planifica un set de valori pentru semalul respectiv.

NU se pot declara semnale ın procese si subprograme, ci doar ın package, entitati

si arhitecturi. Porturile unei entitati apartin implicit clasei semnalelor. Un

semnal poate fi initializat explicit la declararea sa, altfel va fi initializat implicit,

conform acelorlasi reguli ca si ın cazul variabilelor. Exemplu de initializare

explicita:

Page 17: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 3. ELEMENTE DE BAZA ALE LIMBAJULUI VHDL 15

SIGNAL x: INTEGER:=-5;

4. Fisiere. Fisierele vor fi discutate ıntr-un capitol ulterior.

Parametrii formali ai unei functii pot sa fie constante sau semnale, iar parametrii

formali ai unei proceduri pot apartine oricarei clase.

3.3 Tipuri de date

Un tip de date este un nume asociat cu un set de valori si un set de operatii. In VHDL

exista tipuri predefinite care sunt descrise ın package-ul STANDARD, de asemenea

se pot defini noi tipuri.

Pot exista urmatoarele categorii de tipuri:

1. tipuri scalare

2. tipuri compuse, care pot fi tipuri tablou (ARRAY): toate elementele sunt de

acelasi tip, sau RECORD: elementele au tipuri diferite

3. tipuri ACCESS (pointeri)

4. tipuri fisier (FILE types).

In acest capitol ne vom referi doar la tipuri scalare si la tipuri compuse.

3.3.1 Tipuri scalare

Exista urmatoarele tipuri scalare:

• tipuri enumerare

• tipuri ıntregi

• tipuri flotante

• tipuri fizice

Tipuri enumerare

Contin un set de valori definite de catre utilizator. Exemplu:

TYPE state IS (ready, waiting, run);

Tipuri enumerare predefinite:

Page 18: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 3. ELEMENTE DE BAZA ALE LIMBAJULUI VHDL 16

• CHARACTER

• BIT, cu valorile ′0′ si ′1′

• BOOLEAN cu valorile FALSE si TRUE

• SEVERITY LEVEL cu valorile (NOTE, WARNING, ERROR, FAILURE)

In package-ul std logic 1164 exista

TYPE std_ulogic IS (’U’, ’X’, ’0’, ’1’, ’Z’, ’W’, ’L’, ’H’, ’-’);

Fiecarui element al unui tip enumerare ıi corespunde pozitia sa ın cadrul tipului:

cel mai din stanga element are pozitia 0, iar apoi valoarea pozitiei se incrementeaza

de la stanga spre dreapta.

Tipuri ıntregi

Contin un set de valori ıntregi ıntr-un anumit domeniu. Exemplu:

TYPE index IS RANGE 0 TO 7;

TYPE small IS RANGE -10 TO 10;

Tipul INTEGER e predefinit ın limbaj, continand valori cel putin ıntre −(231−1)

si (231 − 1)). Doimeniul numerelor ıntregi e dependent de implementare, dar trebuie

sa acopere intervalul specificat.

Tipurile ENUMERARE si INTREGI se numesc TIPURI DISCRETE.

Tipuri flotante

Tipurile flotante (floating point type) aproximeaza numerele reale, precizia reprezentarii

fiind dependenta de implementare. Definirea unui astfel de tip ınseamna definirea

domeniului valorilor, ca ın exemplul urmator:

TYPE level IS -1.00 TO 1.00;

Tipul REAL e predefinit, avand domeniul de valori dependent de implementare,

dar cel putin ıntre −1.0E38 si 1.0E38.

Page 19: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 3. ELEMENTE DE BAZA ALE LIMBAJULUI VHDL 17

Tipuri fizice

Sunt tipuri numerice folosite pentru a reprezenta marimi fizice cum ar fi: timpi,

lungimi, curenti, tensiuni etc.

Declaratia unui tip fizic include specificarea unei unitati de baza si eventual a unor

unitati secundare care sa fie multipli ıntregi ai unitatii de baza.

In VHDL tipul TIME este un tip fizic predefinit, ca ın exemplul de mai jos. De

asemenea se mai prezinta un alt exemplu de tip fizic, curent:

TYPE TIME IS RANGE -2,147_483_647 TO 2_147_483_647

-- implementation dependent

UNITS

fs; -- femtosecond (unitate de baz’a)

ps = 1000 fs; -- picosecond

ns = 1000 ps; -- nano

us = 1000 ns; -- micro

ms = 1000 us; -- milliseconds

sec = 1000 ms;-- second

min = 60 sec;

hr = 60 min;

END UNITS;

TYPE current IS RANGE 0 TO 1E9

UNITS

nA; --nano ampere

ua = 1000 nA;

mA = 1000 ua;

Amp = 1000 mA;

END UNITS;

3.3.2 Tipuri compuse

Tipuri tablou

Un tip tablou este un tip compus din elemente de acelasi tip. Numele unui element

de tip tablou poate contine unul sau mai multi indici pentru a putea fi accesat. Un

tablou poate avea oricate dimensiuni. Limbajul permite ca unui obiect de tip tablou

sa ıi fie asignata ca valoare un alt obiect de tip tablou ıntr-o singura instructiune de

asignare.

Page 20: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 3. ELEMENTE DE BAZA ALE LIMBAJULUI VHDL 18

Exemple:

TYPE address_word IS ARRAY (0 TO 23) OF BIT;

TYPE data_word IS ARRAY (0 TO 7) OF BIT:

TYPE ROM_mem IS ARRAY(0 TO 125) OF data_word;

TYPE RAM_meme IS ARRAY(125 DOWNTO 0, 125 DOWNTO 0) OF BIT;

-- Daca avem urmatoarele declaratii:

VARIABLE rom1: ROM_mem;

VARIABLE ram1: RAM_mem;

--Pentru doi indecsi intregi i si j, un element al celor doua

--tablouri va fi accesat astfel:

rom1(i)(j):= ’0’;

ram1(i,j):=’1’;

-- rom1(i) este un vector de 8

--biti, iar ram1(i) este un vector de 125 de biti.

ram1(3):=(OTHERS=>’1’);

-- toti cei 125 de biti primesc valoarea ’1’

-- (OTHERS=>’1’) se numeste aggregate value (valoare agregata)

Exista si tablouri de dimensiuni nelimitate (unconstrained arrays). Ele sunt

folosite ın mod obligatoriu pentru functii de rezolutie (o functie de rezolutie are ca

unic parametru de intrare un unconstrained array al tipului de baza si returneaza tipul

de baza). De asemenea sunt utile pentru proceduri si functii de conversie. Exemplu:

TYPE stacktype IS ARRAY(INTEGER RANGE <>) OF data_word;

In VHDL exista predefinite:

TYPE BIT_VECTOR IS ARRAY(NATURAL RANGE <>) OF BIT;

TYPE STRING IS ARRAY(POSITIVE RANGE <>) OF CHARACTER;

Page 21: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 3. ELEMENTE DE BAZA ALE LIMBAJULUI VHDL 19

Tipuri ınregistrare (RECORD)

Descriu obiecte ce contin elemente de tipuri diferite.

Exemplu:

TYPE features IS RECORD

size: RANGE 100 TO 200;

price: RANGE 20.0 TO 200.0;

delay: TIME;

VARIABLE x1, x2: features;

--Se pot face urmatoarele asignari:

x1:=(70, 37.5, 40ns); --aggregate

x2:=x1;

x2.delay:=15ns;

3.3.3 Subtipuri

Un subtip se obtine dintr-un tip de baza prin specificarea valorii unei constrangeri.

Operatiile care se pot face cu elementele unui subtip sunt aceleasi ca si pentru tipul

de baza.

Exemple:

SUBTYPE small_int IS INTEGER RANGE -9 TO 9;

--INTEGER e tipul de baza, iar

--RANGE -9 TO 9 este constrangerea

SUBTYPE bit8 IS BIT_VECTOR(7 DOWNTO 0);

SUBTYPE bit32 IS BIT_VECTOR(31 DOWNTO 0);

-- Subtipuri predefinite in limbaj:

SUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGER’HIGH;

SUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGER’HIGH;

--unde INTEGER’HIGH este valoarea maxima a tipului INTEGER

Se pot defini si subtipuri fara constrangeri, care sunt ca si un alt nume dat tipului

de baza:

SUBTYPE intregi IS INTEGER;

Page 22: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 3. ELEMENTE DE BAZA ALE LIMBAJULUI VHDL 20

3.4 Expresii si operatori

Expresiile sunt formule care descriu calculul unei valori. Expresiile combina elemente

primare cu operatori. Elementele primare pot fi obiecte de date. apeluri de functii,

expresii cu paranteze.

In expresii se pot ıntalni urmatoarele categorii de operatori:

1. logici

2. relationali

3. de deplasare si rotire (shift operators)

4. de adunare

5. de multiplicare

6. combinati

Precedenta operatorilor creste de la 1 la 6.

Operatori logici

Acestia sunt: AND, OR, NAND, NOR, XOR, XNOR, NOT. Ei sunt definiti pentru

operanzi de tip BIT sau BOOLEAN sau pentru tablouri unidimensionale cu elemente

de tip BIT sau BOOLEAN. Operatorii de tip AND si OR sunt de tip scurtcircuit,

adica, pentru operatorul AND, daca unul din operanzi este sau FALSE) restul ex-

presiei nu se mai evalueaza. La fel pentru operatorul OR, daca un operand este sau

TRUE), rezultatul expresiei este imediat evaluat la sau TRUE).

Atentie, operatorii NAND si NOR nu sunt asociativi si din aceasta cauza o expresie

de forma:

a NAND b NAND c

este ilegala !

Operatorul unar NOT are aceeasi precedenta ca si operatorii combinati.

Operatori relationali

Sunt:

• =

Page 23: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 3. ELEMENTE DE BAZA ALE LIMBAJULUI VHDL 21

• / =

• <

• <=

• >

• >=

Operatorii de egalitate (=) si inegalitate (/ =) sunt definiti pentru orice tip cu

exceptia fisierelor, iar ceilalti operatori relationali sunt definiti pentru orice tip scalar

sau pentru tablouri unidimensionale cu elemente de tip discret (enumerare sau intregi)

(tablouri discrete). Pentru tablouri discrete comparatia se face element cu element

de la stanga spre dreapta.

Operatori de deplasare si rotire

Operandul din stanga este un tablou cu elmente de tip BIT sau BOOLEAN, iar

operandul din dreapta este un numar ıntreg. Daca operandul din dreapta este un

numar negativ, atunci se executa operatia opusa (deplasarea sau rotirea la stanga cu

un numar de pozitii devine deplasare, respectiv rotire la dreapta cu acelasi numar de

pozitii).

Operanzıi sunt: SLL, SRL (deplasare logica la dreapta, respectiv la stanga), SLA,

SRA (deplasare aritmetica la stanga, respectiv dreapta), ROL - rotire la stanga si

ROR rotire la dreapta.

Operatori de adunare

Operatorii de adunare sunt + − &. Pentru primii doi operatori operanzii trebuie sa fie

ambii de acelasi tip numeric, iar rezultatul are acelasi tip ca si operanzii. Operatorii

+ si − mai pot fi folisiti ca operatori unari, de semn, ın acest caz avand o precedenta

mai mare decat a operatorilor binari. Operatorul & este utilizat pentru concatenarea

sirurilor.

Operatori de multiplicare

Opratorii de multiplicare sunt: ınmultire ∗, ımpartire /, modulo MOD si rest REM

(reminder). Operatorii de ınmultire si ımpartire sunt definiti pentru operanzi de

acelasi tip, fie ıntreg fie flotant, iar rezultatul are tipul operanzilor. Operatorul de

ınmultire poate avea un operand de tip ıntreg sau flotant si unul de tip fizic, iar

Page 24: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 3. ELEMENTE DE BAZA ALE LIMBAJULUI VHDL 22

rezultatul va fi de tip fizic. Se permite ımpartirea a doi operanzi avand acelasi tip

fizic, iar rezultatul este de tip ıntreg.

Operatorii MOD si REM sunt pentru operanzi de tip ıntreg si determina restul

ımpartirii, tot de tip ıntreg. Rezultatul unei operatii REM are semnul primului

operand: a REM b = a − (a/b) ∗ b, iar rezultatul operatiei MOD are semnul celui

de-al doilea operand. Operatia a MOD b se defineste astfel: exista un numar ıntreg

n astfel ıncat a MOD b = a− b ∗ n.

Exemple: (−7)REM4 = (−7)REM(−4) = −3, 7MOD(−4) = −1.

Operatori combinati

Cei doi operatori combinati sunt ABS, care determina valoarea absoluta a operandu-

lui si este definit pentru orice tip numeric si ∗∗: operatorul de putere (exponential),

la care operandul din stanga poate fi ıntreg sau flotant, iar operandul din dreapta

(exponentul) este de tip ıntreg. Asa cum s-a mentionat mai ınainte, operatorul logic

NOT are aceeasi precedenta ca si ABS si operatorul putere.

Page 25: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

Capitolul 4

Descrieri structurale. Configuratii

4.1 Instructiunea GENERATE

Consideram un bistabil de tip D reprezentat prin entitatea dff_1, arhitectura behave

si avand configuratia implicita dff_cfg:

ENTITY dff_1 IS

GENERIC(tp: time:=1ns);

PORT(d, clk, reset: IN BIT;

q, qb: OUT BIT);

END dff_1;

ARCHITECTURE behave OF dff_1 IS

BEGIN

PROCESS(reset, clk, d)

BEGIN

IF(reset=’0’) AND reset’EVENT THEN

q<=’0’ AFTER tp;

qb<=’1’ AFTER tp;

ELSIF(clk=’1’) AND clk’EVENT AND clk’LAST_VALUE=’0’ THEN

q<= d AFTER tp;

qb<=NOT d AFTER tp;

END IF;

END PROCESS;

END ARCHITECTURE;

CONFIGURATION dff_cfg OF dff_1 IS

FOR behave END FOR;

23

Page 26: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 4. DESCRIERI STRUCTURALE. CONFIGURATII 24

END CONFIGURATION;

Instructiunea GENERATE este utilizata in special pentru descrierea structurilor

regulate si reprezinta un mecanism de compliare conditionata ın VHDL.

Sintaxa instructiunii este:

label_id: generation_scheme GENERATE

concurrent_statements

END GENERATE [label_id];

Schema de generare (generation scheme) poate fi de tip FOR sau IF. Daca este de

tip FOR, indexul utilizat nu trebuie declarat, iar daca schema este de tip IF, acesta

nu are ramuri ELSIF sau ELSE. De asemenea, IF si FOR nu au nici o semantica de

executie (nici o legatura cu instructiunile secventiale IF si LOOP).

Instructiunile concurente din corpul lui GENERATE sunt ın mod tipic (dar nu

neaparat) instantieri de componente. Compilatorul expandeaza codul din interiorul

lui GENERATE. De exemplu daca se utilizeaza o schema de generare de tip FOR cu

5 iteratii si ın corpul lui GENERATE se utilizeaza o instructiune de instantiere de

componenta, atunci vor aparea 5 instantieri de componenta ın codul expandat.

Se va prezenta un exemplu de utilizare a instructiunii GENERATE.

Cu ajutorul bistabil descris mai ınainte dorim sa descriem un registru de deplasare

pe 4 biti, utilizand instructiunea GENERATE.

O posibila descriere a registrului de deplasare ar fi:

-- Instructiunea GENERATE cu

-- schema de generare de tip FOR

ENTITY shift_reg IS

GENERIC(len: NATURAL:=4);

PORT(reset, clock, a: IN BIT; b:OUT BIT);

END shift_reg;

ARCHITECTURE shift_gen_1 OF shift_reg IS

COMPONENT dff IS

GENERIC(tp:TIME:=1ns);

PORT(d, clk, reset: IN BIT;

q, qb: OUT BIT);

END COMPONENT;

Page 27: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 4. DESCRIERI STRUCTURALE. CONFIGURATII 25

SIGNAL z: BIT_VECTOR(0 TO 4);

BEGIN

z(0)<=a;

g: FOR i IN 0 TO 3 GENERATE

dffx: dff PORT MAP(z(i), clock, reset, z(i+1), OPEN);

END GENERATE;

b<=z(4);

END shift_gen_1;

Dezavantajul acestei descrieri este ca nu sunt tratate unitar, ın cadrul instructiunii

GENERATE, bistabilele de la capetele registrului de deplasare. Acest lucru se poate

face combinand schema de generare de tip FOR cu scheme de tip IF:

-- Instructiunea GENERATE cu scheme de generare de tip

-- FOR si IF

ARCHITECTURE shift_gen_2 OF shift_reg IS

COMPONENT dff IS

GENERIC(tp:TIME:=1ns);

PORT(d, clk, reset: IN BIT;

q, qb: OUT BIT);

END COMPONENT;

SIGNAL z:BIT_VECTOR(1 TO len-1);

BEGIN

g1: FOR i IN 0 TO (len-1) GENERATE

g2: IF i=0 GENERATE

dffx: dff PORT MAP(d=>a, clk=> clock,

reset=>reset, q=>z(1), qb=>OPEN);

END GENERATE g2;

g3: IF i=(len-1) GENERATE

dffx: dff PORT MAP(d=>z(len-1), clk=>clock,

reset=>reset, q=>b, qb=>OPEN);

END GENERATE; --g3

g4: IF (i>0) AND (i<len-1) GENERATE

dffx: dff PORT MAP(z(i), clock,

Page 28: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 4. DESCRIERI STRUCTURALE. CONFIGURATII 26

reset, z(i+1), OPEN);

END GENERATE g4;

END GENERATE; -- g1

END ARCHITECTURE shift_gen_2;

Configuratia pentru registrul de deplasare se poate face ın felul urmator:

-- Configuratia pentru arhitectura shift_gen_2 va fi:

CONFIGURATION cfg_gen OF shift_reg IS FOR shift_gen_2

FOR g1

FOR g2

FOR ALL: dff USE CONFIGURATION WORK.dff_cfg;

END FOR;

END FOR;--g2

FOR g3

FOR ALL: dff USE ENTITY WORK.dff_1(behave);

END FOR;

END FOR;--g3

FOR g4

FOR ALL: dff USE ENTITY WORK.dff_1(behave);

END FOR;

END FOR;--g4

END FOR; -- g1

END FOR; -- shift_gen_2 END cfg_gen;

Un exemplu de entitate de test a registrului de deplasare:

entity test_shift_reg is

end;

architecture a_test of test_shift_reg is

COMPONENT shift_reg IS

GENERIC(len: NATURAL:=4);

PORT(reset, clock, a: IN BIT; b:OUT BIT);

END COMPONENT;

SIGNAL insig, r, cl, outsig: BIT;

BEGIN

l: shift_reg PORT MAP(r, cl, insig, outsig);

Page 29: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

CAPITOLUL 4. DESCRIERI STRUCTURALE. CONFIGURATII 27

cl<=NOT cl AFTER 50ns;

r<=’1’, ’0’ after 3ns, ’1’ after 40ns;

insig<=’1’ after 145ns, ’0’ after 380ns, ’1’ after 1680ns;

end;

configuration cfg_test of test_shift_reg is

for a_test

for l: shift_reg use configuration work.cfg_gen;

end for;

end for;

end cfg_test;

Page 30: Tehnici de proiectare asistat‚a de calculator Capitole de cursstaff.cs.upt.ro/~todinca/TPAC/Curs/CursTpac.pdf · 2009-11-02 · Primul fl»sier cont»ine descrierile celor dou‚a

Lista figurilor

28