Detalii privind circuitele FPGA (Field Programmable Gate Array).

Σχετικά έγγραφα
5.4. MULTIPLEXOARE A 0 A 1 A 2


2. Circuite logice 2.4. Decodoare. Multiplexoare. Copyright Paul GASNER

Curs 10 Funcţii reale de mai multe variabile reale. Limite şi continuitate.

Metode iterative pentru probleme neliniare - contractii

Analiza în curent continuu a schemelor electronice Eugenie Posdărăscu - DCE SEM 1 electronica.geniu.ro

5.5. REZOLVAREA CIRCUITELOR CU TRANZISTOARE BIPOLARE

Componente şi Circuite Electronice Pasive. Laborator 3. Divizorul de tensiune. Divizorul de curent

2.2. ELEMENTE DE LOGICA CIRCUITELOR NUMERICE

Circuite logice programabile

5. FUNCŢII IMPLICITE. EXTREME CONDIŢIONATE.


Cursul nr. 6. C6.1 Multiplexorul / Selectorul de date


Codificatorul SN74148 este un codificator zecimal-bcd de trei biţi (fig ). Figura Codificatorul integrat SN74148

Problema a II - a (10 puncte) Diferite circuite electrice

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor X) functia f 1

V O. = v I v stabilizator

ANEXA 4. OPERAŢII ARITMETICE IMPLEMENTĂRI

MARCAREA REZISTOARELOR

(a) se numeşte derivata parţială a funcţiei f în raport cu variabila x i în punctul a.

Fig Impedanţa condensatoarelor electrolitice SMD cu Al cu electrolit semiuscat în funcţie de frecvenţă [36].

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor

Metode de interpolare bazate pe diferenţe divizate

Planul determinat de normală şi un punct Ecuaţia generală Plane paralele Unghi diedru Planul determinat de 3 puncte necoliniare

2. Circuite logice 2.5. Sumatoare şi multiplicatoare. Copyright Paul GASNER

Electronică anul II PROBLEME

CIRCUITE LOGICE CU TB

Componente şi Circuite Electronice Pasive. Laborator 4. Măsurarea parametrilor mărimilor electrice

1.7. AMPLIFICATOARE DE PUTERE ÎN CLASA A ŞI AB

6.4. REGISTRE. Un registru care îndeplineşte două sau mai multe funcţii din cele 4 prezentate mai sus se numeşte registru universal.

Laborator 11. Mulţimi Julia. Temă

V.7. Condiţii necesare de optimalitate cazul funcţiilor diferenţiabile

CIRCUITE COMBINAŢIONALE UZUALE

DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE


Curs 14 Funcţii implicite. Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi"

4.2. CIRCUITE LOGICE ÎN TEHNOLOGIE INTEGRATĂ

Seminar 5 Analiza stabilității sistemelor liniare

Aplicaţii ale principiului I al termodinamicii la gazul ideal

Curs 2 DIODE. CIRCUITE DR

a n (ζ z 0 ) n. n=1 se numeste partea principala iar seria a n (z z 0 ) n se numeste partea

GENERATOR DE SECVENŢE BINARE PSEUDOALEATOARE

Curs 1 Şiruri de numere reale

RĂSPUNS Modulul de rezistenţă este o caracteristică geometrică a secţiunii transversale, scrisă faţă de una dintre axele de inerţie principale:,

Sisteme diferenţiale liniare de ordinul 1

Curs 4 Serii de numere reale

III. Serii absolut convergente. Serii semiconvergente. ii) semiconvergentă dacă este convergentă iar seria modulelor divergentă.

riptografie şi Securitate

Circuite cu tranzistoare. 1. Inversorul CMOS

LUCRAREA NR. 1 STUDIUL SURSELOR DE CURENT

CIRCUITE CU DZ ȘI LED-URI

Capitolul 4 Amplificatoare elementare

Tabelul tranziţiilor este prezentat mai jos. La construirea sumatorului folosim bistabile de tip JK: (3.1)

SEMINAR 14. Funcţii de mai multe variabile (continuare) ( = 1 z(x,y) x = 0. x = f. x + f. y = f. = x. = 1 y. y = x ( y = = 0

Asupra unei inegalităţi date la barajul OBMJ 2006

R R, f ( x) = x 7x+ 6. Determinați distanța dintre punctele de. B=, unde x și y sunt numere reale.

COLEGIUL NATIONAL CONSTANTIN CARABELLA TARGOVISTE. CONCURSUL JUDETEAN DE MATEMATICA CEZAR IVANESCU Editia a VI-a 26 februarie 2005.

5 STRUCTURI PROGRAMABILE

Arhitectura Calculatoarelor. Fizică - Informatică an II. 2. Circuite logice. Copyright Paul GASNER 1

Integrala nedefinită (primitive)

Lucrarea Nr. 5 Circuite simple cu diode (Aplicaţii)

COMPARATOARE DE TENSIUNE CU AO FĂRĂ REACŢIE

CIRCUITE CU PORŢI DE TRANSFER CMOS

a. 11 % b. 12 % c. 13 % d. 14 %

Introducere. Tipuri de comparatoare.

Seminariile Capitolul X. Integrale Curbilinii: Serii Laurent şi Teorema Reziduurilor

Ovidiu Gabriel Avădănei, Florin Mihai Tufescu,

2.2.1 Măsurători asupra semnalelor digitale

Definiţia generală Cazul 1. Elipsa şi hiperbola Cercul Cazul 2. Parabola Reprezentari parametrice ale conicelor Tangente la conice

2. Circuite logice 2.2. Diagrame Karnaugh. Copyright Paul GASNER 1

Subiecte Clasa a VII-a

C U R S U L Comanda şi alimentarea motorului pas cu pas

ELECTRONICĂ DIGITALĂ

Fig Dependenţa curentului de fugă de temperatură. I 0 este curentul de fugă la θ = 25 C [30].

Valori limită privind SO2, NOx şi emisiile de praf rezultate din operarea LPC în funcţie de diferite tipuri de combustibili

Proiectarea filtrelor prin metoda pierderilor de inserţie

10. Unitati de executie integrate

Stabilizator cu diodă Zener

3.5. STABILIZATOARE DE TENSIUNE CU CIRCUITE INTEGRATE.

4. Măsurarea tensiunilor şi a curenţilor electrici. Voltmetre electronice analogice

Tranzistoare bipolare şi cu efect de câmp

Cap.3 CLASE DE CIRCUITE LOGICE COMBINAŢIONALE

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

SIGURANŢE CILINDRICE

Subiecte Clasa a VIII-a

CIRCUITE BASCULANTE BISTABILE

CAPITOLUL 5. CIRCUITE LOGICE COMBINAŢIONALE

AUTOMATE FINITE. Un automat cu stări finite se defineşte formal prin cvintuplul

Conice. Lect. dr. Constantin-Cosmin Todea. U.T. Cluj-Napoca

UTILIZAREA CIRCUITELOR BASCULANTE IN NUMARATOARE ELECTRONICE

Functii Breviar teoretic 8 ianuarie ianuarie 2011

Lucrarea nr. 5 STABILIZATOARE DE TENSIUNE. 1. Scopurile lucrării: 2. Consideraţii teoretice. 2.1 Stabilizatorul derivaţie

Lucrarea Nr. 11 Amplificatoare de nivel mare

Aparate de măsurat. Măsurări electronice Rezumatul cursului 2. MEE - prof. dr. ing. Ioan D. Oltean 1

Circuite electrice in regim permanent

BARAJ DE JUNIORI,,Euclid Cipru, 28 mai 2012 (barajul 3)

Propagarea Interferentei. Frecvente joase d << l/(2p) λ. d > l/(2p) λ d

Capitolul 14. Asamblari prin pene

Capitolul 4. Integrale improprii Integrale cu limite de integrare infinite

Transcript:

Detalii privind circuitele FPGA (Field Programmable Gate Array). 1. Introducere. Obiective urmarite: principii, implementare, programarea circuitelor logice configurabile din punctul de vedere al proiectarii celulelor, cat si al strategiei de interconectare FPGA reprezinta circuite integrate care pot fi programate de catre utilizator. FPGA contin: functii versatile, interconexiuni configurabile, interfete de I/E adaptabile conform specificatiilor utilizatorului. Structura uzuala a unui circuit FPGA este data in fig.1. Fig.1. Structura uzuala a unui circuit FPGA este data in fig.1. 1

In figura 2 se prezinta implementarea unei functii simple (XOR cu 3 intrari): trei ploturi din stanga sunt configurate ca intrari, un bloc logic este utilizat pentru a crea un XOR cu 3 intrari, un plot din dreapta este configurat ca iesire, liniile de interconectare programabile asigura propagarea semnalelor in sistem. Fig.2 Implementarea unei functii XOR cu 3 intrari Circuitul echivalent, corespunzator implementarii din figura 2, este prezentat in figura 3. Fig.3. Circuitul echivalent, corespunzator implementarii din figura 2. 2

Circuitele FPGA se prezinta ca simple componente sau ca macroblocuri, in proiectele de sisteme pe o singura pastila/chip (Fig.4): Fig.4. FPGA ca simple componente sau ca macroblocuri proiectele de sisteme pe un singur chip in cazul sistemelor de comunicatie, blocurile logice configurabile pot fi modificate dinamic in vederea adaptarii la protocoale de comunicatii mai performante; in situatia sistemelor de putere redusa, logica poate implementa mai multe task-uri in serie, in loc de a incorpora tot hardware-ul corespunzator, care nu va opera in paralel niciodata. 2. Circuite logice configurabile. Blocurile logice programabile trebuie sa fie capabile sa implementeze toate functiile logice de baza: NOT, AND,..,XOR, XNOR etc Pentru implementarea acestora se pot folosi mai mule abordari, de exemplu: multiplexoare, tabele asociative (lookup tables). 2.1. Multiplexoare Multiplexoarele cu doua intrari pot fi utilizate ca generatoare programabile de functii, dupa cum se poate vedea din tabela 1 si din figura 5. 3

Tab. 1. Programarea intrarilor unui multiplexor, in vederea implementarii a patru functii logice. Fig.5. Implementarea unor functii logice cu ajutorul multiplexoarelor cu doua intrari de date si una de activare. (fpgamux.sch). Nota: Se observa ca in cazul de fata, una din variabilele, care se prelucreaza, (B) este folosita ca intrare, ceea ce nu corespunde principiilor de baza ale FPGA. Pentru a depasi acest aspect se recomanda ca variabilele A si B sa fie aplicate la doua intrari de selectie. Astfel se vaor utiliza multiplexoare 4:1. Alte functii ( XOR) necesita cel putin doua multiplexoare (Fig. 6): cu o iesire de tip buffer, un multiplexor cu doua intrari are minim 6 tranzistoare si 3 etaje, care introduc intarzieri: doua inversoare si un tranzistor de trecere. un MUX cu 4 intrari are 18 etaje, care introduc intarzieri, astfel implementarile cu multiplexoare nu sunt eficiente. 4

Fig.6. Functia XOR necesita cel putin doua multiplexoare, pentru implementare. 2.2. Tabele asociative (Look Up Tables). Look Up Table (LUT) este cel mai versatil circuit pentru a crea o functie logica programabila/configurabila. LU.T descris in Tab.2. are ca intrari F0,F1 si F2. Iesirea Fout genereaza o expresie logica bazata pe 8 informatii logice elementare Value[0],, Value[7]. In cazul unui XOR, cu 3 intrari, setul de valori pentru iesirea Fout, dat in tabela de adevar, trebuie atribuit componentelor Value[0],, Value[7]. In schema din figura 7 se atribuie manual Fout, din tabela de adevar, fiecaruia dintre cele 8 butoane. Fout genereaza functia XOR pentru intrarile F0,F1 si F2. Tab.2. Tabela de adevar a portii XOR, cu 3 intari, pentru implementarea in forma de tabela asociativa. 5

Fig. 7. Iesirea f genereaza functia logica Fout, in conformitate cu tabela asociativa stocata in punctele de memorare Value[i]. Punctele de memorare. Punctele de memorare sunt utilizate pentru stocarea valorilor logice ale functiei date in tabela de adevar a acesteia. Punctele de memorare sunt componentele esentiale ale blocurilor logice configurabile. In ceea ce priveste posibilitatile de a stoca un singur bit de informatie, exista mai multe abordari. Astfel, in figura 8 se prezinta un registru de deplasare formatdin bistabile de tip D, in care bistabilui i memoreaza informatia logica Value[i]. Bistabilele D sunt inlantuite pentru a reduce numarul semnalelor de control la un semnal de ceas ClockProg si la un semnal de date DataProg. 6

Fig.8. Informatia de tabela asociativa (look-up information LUI) este data prin intermediul unui registru de deplasare cu bistabile de tip D (active pe fronturile negative- LutDreg.sch). Configurarea unui LUT cu 3 intrari intr-o poarta XOR cu 3 intrari respecta strict protocolul descris in figura 9. Se genereaza o serie de 8 fronturi cazatoare de catre semnalul ClockProg. Aceasta se obtine prin configurarea unui generator de impulsuri cu o serie de 0-1, dupa cum se prezinta mai jos: Fig.9 Programarea pentru ClockProg pentru a genera 8 fronturi active (FpgaLutDreg.sch) 7

La fiecare front activ, registrul de deplasare este alimentat cu o noua valoare prezentata secvential la intrarea DataProg. Mai intai trebuie sa fie introdusa Value[7] si ultima Value[0]. Impulsul DataProg trebuie sa descrie tabela de adevar in ordine inversa, dupa cum se arata in figura 10. Fig.10. La sfarsitul celei de-a opta perioada de ceas, LUT este configurat ca un XOR, cu 3 intrari (LutDreg.sch). Cele mai multe proiecte FPGA utilizeaza registre de tip D, pentru a stoca configurarea LUT. Informatia de configurare se pierde la disparitia tensiunii de alimentare. 2.3. Fuzibile si Antifuzibile Pentru a retine configurarea in absenta tensiunii de alimentare trebuie sa se utilizeze memorii nonvolatile. O astfel de memorie nonvolatila, programabila pentru o singura data, poarta denumirea de fuzibil. De regula, se utilizeaza ca fuzibil un contact intre doua straturi de metal, contact care va fi distrus de la aplicarea unui curent de intensitate mare (Fig11).Desi aceasta metoda provoaca distrugeri si in vecinatatea contactului, nu este nevoie de un strat specific, din punct de vedere tehnologic, ca in tehnologia CMOS λ 8

Fig.11. Contacte bazate pe fuzibile. Un circuit de comanda cu o latime mare a canalului (cativa μm), alimentat de la o sursa de tensiune mare (V DDH ) va asigura un curent apreciabil prin driver. Schema circuitului fuzibil este prezentata in figura 12. Fig.12. Programarea fuzibilelor. Atunci cand se activeaza comanda BlowFuse sunt activate si ambele tranzistoare NMOS si PMOS, ceea ce conduce la trecerea unui curent apreciabil prin fuzibil, care topeste fuzibilul si intrerupe calea de curent. Curentul trebuie sa depaseasca valoarea de 15mA. In contrast cu fuzibilul antifuzibilul are starea normala deschis (figura.13). O tensiune mare (cca 10V) aplicata intre straturile metal1 si metal2 distruge oxidul, asigurand un traseu conductiv intre straturile de metal. Utilizarea unei tensiuni ridicate in circuit implica o utilizare atenta a tehnologiei MOS si a diver-elor de I/E specifice pentru astfel de valori ale tensiunii manipulate. O alta structura intalnita, care se chiama ONO (Oxid-Nitrura-Oxid), asigura o cale rezistiva atunci cand este programata. Valoarea tipica a rezistentei este de 500 Ohm. Statistic, valoarea 9

rezistentei este in limite mult mai mari pentru S i O 2 decat pentru ONO, ceea ce face fuzibilul ONO mult mai atractiv, in ciuda unor etape suplimentare in procesul de fabricatie. Fig.13. Principiul antifuzibilului si distributiile comparative ale rezistentelor pentru ONO si S i O 2 Pentru programarea circuitelor FPGA, EEPROM si FRAM se folosesc alte tipuri de memorii nonvolatile. Aceste memorii nu sunt alterate atunci cand nu sunt alimentate si pot fi reprogramate de un numar mare de ori. 2.4. Implementare in DSCH. In DSCH in meniul de simboluri (Fig.14) s-a introdus simbolul tebelei asociative LUT, care este echivalenta cu schema din figura 8. O proprietate importanta a simbolului LUT consta in abilitatea de a stoca programarea interna conform cu ceea ce realizeaza o memorie nonvolatila. Simbolul pentru pentru LUT, in interfata cu utilizatorul, este dat in figula 14. Pentru completarea tabelei asociative se pot utiliza trei metode: una consta in definirea fiecarui element al tabloului cu cifrele 0 si 1. Numerele corespund combinatiilor logice ale intrarilor F2F1F0. De exemplu cifra 4 in zecimal va fi codificata 100 in binar, ceea ce corespunde la F2=1, F1=0 si F0=0. O alta solutie consta in selectarea descrierii functiei din lista. Informatia logica Fout este atribuita fiecarei combinatii de intrari ale LUT. O a treia solutie rezida in aceea ca utilizatorul introduca o descriere bazata pe intrarile F0,F1 si F2, cat si pe operatorii: "~" (NOT), "&' (And), " " (Or) si "^" sa (XOR), urmand ca sa activeze butonul Fill LUT, pentru transferarea rezultatului expresiei catre tabela. 10

1. Blocul Logic Programabil. Blocul Logic Programabil (BLP) consta in doua tabele asociative, un registru D si cateva multiplexoare. Pentru realizarea BLP exista numeroase solutii. Fig.14. Simbolul LUT. In figura 15 se prezinta o structura simpla care are similaritati cu cea utilizata in circuitele XC5200. BLP contine doua structuri active: LUT si registrul D, care pot functiona indepenedent sau impreuna. Iesirea LUT este conectata direct la iesirea blocului Fout. Iesirea poate fi aplicata si la intrarea registrului D, datorita multiplexorului contraolat de DataIn_Fout. Reteaua DataOut poate transfera direct semnalul DataIn, ceea ce face ca celula sa fie transparenta. Semnalaul DataOut poate, de asemenea, furniza semnalul nq, in functie de starea multiplexorului controlat de DataIn_nQ. 11

Fig. 15. BLP simplu, care include un LUT si un registru D. (FpgaCell2.SCH). Blocul consta acum intr-un LUT si un bistabil D. In continuare se vor inlantui semnalele DataIn_Fout si DataIn_nQ in structura unui registru de deplasare format din doua bistabile suplimentare. Fiecare bistabil utilizeaza acelasi semnal de ceas si aceeasi date de intrare inlantuite. Circuitul complet se prezinta in figura 16. Fig.16. LUT, bistabilul D si registrul de deplasare, inclusiv doua circuite multiplexoare. (FpgaBlockStructure.SCH) 12

Configurarea blocului se efectueaza pe baza a 10 fronturi active, ale semnalului ColckProg, si a 10 semnale de date pe intrarea DataProg. Informatia care se transfera catre capatul cel mai indepartat al registrului este definita in primul ciclu, in timp ce bistabilul cel mai apropiat al registrului este configurat cu data transferata in ultimul ciclu (Tab.3) Tab.3. Informatia seriala (data)utilizata pentru programarea punctelor de memorie ale LUT-ului. 2. Interconectarea blocurilor. In acest paragraf este prezentata strategia de interconectare a blocurilor logice. Mai intai se vor examina punctele de interconectare programabile si matricile de conectare programabile. In continuare se va discuta implementarea globala a structurii. 2.1. Punctele programabile de interconectare (PPI). PPI (PIP Programmable Interconnect Point) se regaseste in meniul Advanced Switches Symbols), din figura 17. PPI au doua stari: On si Off, care pot fi impuse prin dubla activare pe simbol si un click pe butonul "On/off". Fig.17. PPI (PIP) in paleta de simboluri. 13

Fig.18. Modificarea starii PIP (FpgaPip.SCH). Puntea poate fi realizata cu o poarta de transmisie (PT), controlata cu un bistabil D (Fig.19). Atunci cand informatia de programare este 0 PT este deschisa, legatura absenta intre Interco1 si Interco2. PT asigura o legatura rezistiva ( 100 Ω) intre Interco1 si Interco2. Fig. 19. Structura interna a PIP si ilustrarea comportarii sale On/Off (FpgaPip.SCH). 14

Pentru a asigura cea mai mare flexibilitate de rutare PPI se vor grupa sub forama de matrice. In figura 20 se prezinta exemple de matrici 3 x 3 si 3 x 2. Legatura intre In1 si Out1, In2 si Out2, In3 si Out3 se realizeaza prin programarea unor PIP-puri. O unealta specifica de rutare asigura acest task, dar se poate face si manual. In DSCH pentru a schimba starea (0 1 0) unui PIP se tasteaza O pe simbolu grafic. Fig.20. Matrice de PIP-uri (FpgaPip.SCH). Matrice de comutare. Matricea de comutarea reprezinta un PPI complex, care implica o gama larga de combinatii in cadrul unei intersectii de interconexiuni. Figura 21 reprezinta o matrice de comutare. Matricea contine 6 punti configurabile intre doua interconexiuni principale. Simbolul matricii de comutare se regaseste in meniul asigurat de aplicatia DSCH la sectiunea: "Advanced" set of "Switches" symbols. Printr-un click dublu pe simbolul matricii se pot accesa cele 6 comutatoare On/Off Fig.21. Modificarea starii matricii (FpgaMatrix.SCH). 15

Pentru a usura programarea matricei, in DSCH exista comenzi simple. Astfel starea matricii poate fi modificata plasand cursorul pe simbol si activand urmatoarele taste: - Dezactivarea matricii: o ; - Activarea matricii: O ; - Activarea legaturii orizontale: - - Activarea legaturii verticale: In figura 22 se dau exemple de matrici de comutare 3x2 si 3x3. Exemplele de rutare sunt numeroase. Ele imbunatatesc configurabilitatea blocurilor logice. Fig.22 matrice de comutare 3x2 si un exemplu de strategie de rutare intre 6 intrari si 6 iesiri (fpgamatrix.sch). Implementarea Matricilor de Comutare. Din punct de vedere practic, matricea de comutare poate fi construita prin regruparea a 6 porti de transmisie (Fig.23). Fiecare poarta de transmisie este controlata de un bistabil D asociat care memoreaza configuratia dorita. Bistabilele D sunt inlantuite pentru utilizarea unei singure intrari DataIn si a unui semnal de ceas LoadClock, care sunt suficiente pentru configurarea matricii. 16

Fig. 23. Porti de transmisie amplasate pe liniile de rutare in vederea construirii matricii. (FpgaMatrix3.SCH). Tablouri de Blocuri. Blocurile configurabile sunt asociate cu PIP-uri si cu matrici de comutare pentru a crea un nucleu complet configurabil. In figura 24 se propune un exemplu de bloc dublu configurabil si rutarea lui configurabila asociata. Fig. 24. Blocuri configurabile, matrice de comutare, I/E configurabile si tablouri de PIP-uri. (fpga2blocks.sch). 17

Exemplu de Sumator Complet. Tabela de adevar si expresia logica pentru Sumatorul Complet sunt reamintite in Tab.3. Implementarea sumei (Sum) si a transportului (Carry) se realizeaza prin programarea a doua tabele asociative corespunzator tabelelor de adevar. Sumator complet A B C SUM CARRY RESULT 0 0 0 0 0 0 0 0 1 1 0 1 0 1 0 1 0 1 0 1 1 0 1 2 1 0 0 1 0 1 1 0 1 0 1 2 1 1 0 0 1 2 1 1 1 1 1 3 Tab.3. Tabela de adevar a sumatorului complet. Diagrama generala de implementare a unui sumator complet este data in figura 25. Unul din blocurile logice programabile genereaza functia Sum, pentru valorile date ale intrarilor A,B si C. Informatia necesara configurarii Blocului 1, ca functie suma (XOR cu 3 intrari) este data in Tab.4. Semnalul Sum se propaga in afara blocului, in regiunea interfetei de iesire, prin exploatarea resurselor de interconectare si a matricii de comutare. Celalalt bloc logic programabil, Blocul 2, asigura generarea semnalului Carry, ca functie de aceleasi intrari A,B si C. Programarea Blocului 2 rezulta din Tab.4. Rezultatul carry este exportat in zona de iesire, in modul in care s-a procedat si pentru semnalul Sum. Fig. 25. Functiile SUM si CARRY care realizeaza un sumator complet in FPGA. (fpgafulladder.sch). 18

Tab. 9. Datele sub forma seriala utilizate pentru a configura blocurile logice 1 si 2, ca SUM si CARRY. Simularea Sumatorului Complet implementat in doua blocuri configurabile(fpgafulladder.sch) este prezentata in figura 26. Fig. 26. Simularea Sumatorului Complet implementat in doua blocuri configurabile (fpgafulladder.sch). Secventa de programare este continuta sub forma unor transe liniare ProgBlock1 si ProgBlock2. Dupa cum se vede din diagrama temporala prezentata in figura 27, ceasul de programare 19

ClockPgm este activ numai in faza de initializare, pentru a deplasa informatia de programare in punctele de memorare din blocuri, pentru configurarea fiecarui multiplexor. Rutarea semnalelor A,B si C ca si a semnalelor Sum si Carry a fost efectuata manual, in circuitul din figura 26. In realitate, exista unelte pentru plasare/rutare, care genereaza automat structura electrica pornind de la schema initiala. Astfel, se evita erorile manuale, limitandu-se conflictele si omisiunile. Fig.27. Diagrama temporala a Sumatorului Complet.(fpgaFullAdder.SCH) Exemplu Divizor de ceas. Cel de-al doilea exemplu propus pentru implementare in FPGA este cel al unui divizor de ceas. In figura 28 sunt date structura generala si diagrama temporala ale divizorului de ceas cu 4. Acesta necesita doua registre D, cu reactie de la nd la intrarea D. 20

Fig.28. Diagrama si simularea tipica pentru un divizor de ceas cu4. (ClockDiv4.SCH) Schema bloc generala a implementarii unui divizor de ces este data in figura 29. Fig.29: Implementarea unui divizor de ceas cu 2 in 2 blocuri configurabile (FpgaDiv4.SCH). Fiecare bloc logic programabil este configurat ca un etaj de divizare a ceasului. Informatia necesara pentru configurarea Blocului1, ca un simplu bistabil D, este prezentata in Tab.9. Aceasta informatie/data sub forma seriala creaza o cale directa de la DataIn catre intrarea bistabilului D, al celulei Dreg, iar nd se propaga conform figurii 30. In afara blocului programabil, semnalul nq se propaga catre intrarea DataIn. De observat ca tabela asociativa este 21

inactiva in aceasta configuratie. Celalalt bloc logic Block2 este, de asemenea, programat ca un bistabil Dreg cu reactie de la nq la DataIn. Fig.30. Utilizarea blocului configutabil ca bistabil Dreg.SCH) Tab. 9 Data seriala utilizata pentru a configura blocurile logice 1 si 2 ca divizoare de ceas. (FpgaDiv4.SCH) In figura 32 se prezinta rezultatele simularii contorului. Primele nanosecunde sunt dedicate programarii blocului. Dupa programare contorul opereaza in conformitate cu specificatiile din figura 28. De remarcat intarzierea importanta a raspunsului la fronturile active, datorate complexitatii intrinseci a blocului configurat si a intarzierii in calea de interconectare prin punctele de conectare si matricea de comutare. 22

Fig.31. Rutarea divizorului de ceas cu 2 in doua blocuri configurabile. (FpgaDiv4.SCH) Fig.32. Diagramele temporale ale circuitului divizor de ceas. (ClockDiv4.SCH). 23

5 Concluzii. Acest curs constituie o introducere in domeniul FPGA, din punctul de vedere al proiectarii celulei de baza: s-au prezentat multiplexorul si tabela asociativa pentru constructia circuitelor logice configurabile; au fost examinate programarea punctelor de memorie folosind bistabile Dreg inlantuite, cat si fuzibilele; s-au descris punctele de interconectare programabile, matricile de comutare, cat si implementarile lor in DSCH; s-au realizat: implementarea unui sumator complet si a unui divizor de ceas utilizand doua blocuri logice configurabile, puncte de interconectare programabile si o matrice de comutare..bibliografie. [1]. E.Sicard, S. Delmas-Bendhia. DEEP SUBMICRON CMOS DESIGN. Cap 9. Field Programmable Gate Array. 24

ANEXE. A1. Diverse implementari pentru Dreg (dreg.sch). 25

A2. Registru de deplasare pe 8 biti realizat cu bistabile Dreg, active pe frontul negativ al ceasului (Dreg_de_deplasare_8_1.sch): A3. LUT cu 3 intrari (LutAND.sch): 26

A4. Fisierul Verilog pentru schema din figura 25 (fpgafulladder.sch) // DSCH 2.7f // 10/31/2011 7:39:23 PM // C:\Iacob_Unelte\Export dsch2\fpgafulladder1.sch module fpgafulladder1( ProgBlock2,ClockPgm,MainReset,ProgBlock1,C,A,B,kbd21, kbd22,kbd23,kbd24,carry,sum); input ProgBlock2,ClockPgm,MainReset,ProgBlock1,C,A,B,kbd21; input kbd22,kbd23,kbd24; output Carry,Sum; wire w49,w50,w51,w52,w53,w54,w55,w56; wire w57,w58,w59,w60,w61,w62,w63,w64; wire w65,w66,w67,w68,w69,w70,w71,w72; wire w73,w74,w75,w76,w77,w78,w79,w80; 27

wire w81,w82,w83,w84,w85,w86,w87,w88; wire w89,w90,w91,w92,w93,w94,w95,w96; wire w97,w98,w99,w100,w101,w102,w103,w104; wire w105,w106,w107,w108,w109,w110,w111,w112; wire w113,w114,w115,w116,w117,w118,w119,w120; wire w121,w122,w123,w124,w125,w126,w127,w128; wire w129,w130,w131,w132,w133,w134,w135,w136; not #(92) sub_1(w49,kbd23); dreg #(6) sub_2(w51,w52,progblock2,w50,clockpgm); nmos #(134) sub_3(w55,w53,w54); // not #(92) sub_4(w56,kbd22); not #(92) sub_5(w57,kbd21); and #(15) sub_6(w58,w49,w56,kbd21); nmos #(134) sub_7(w55,w59,w60); // nmos #(134) sub_8(w55,w61,w62); // and #(15) sub_9(w62,w49,kbd22,kbd21); and #(15) sub_10(w63,w49,kbd22,w57); nmos #(134) sub_11(w55,w64,w63); // dreg #(17) sub_12(w10,w66,w65,kbd24,w4); and #(15) sub_13(w67,kbd23,kbd22,w57); mux #(33) sub_14(w11,w8,w66,w68); and #(15) sub_15(w60,kbd23,kbd22,kbd21); nmos #(134) sub_16(w55,w69,w70); // nmos #(134) sub_17(w55,w71,w58); // dreg #(6) sub_18(w73,w74,w59,w72,clockpgm); dreg #(6) sub_19(w59,w77,w75,w76,clockpgm); mux #(12) sub_20(w65,w8,carry,w73); nmos #(134) sub_21(w55,w51,w78); // nmos #(134) sub_22(w55,w75,w67); // and #(15) sub_23(w70,kbd23,w56,kbd21); and #(15) sub_24(w78,w49,w56,w57); and #(15) sub_25(w54,kbd23,w56,w57); dreg #(6) sub_26(w68,w80,w73,w79,clockpgm); dreg #(6) sub_27(w75,w82,w69,w81,clockpgm); dreg #(6) sub_28(w71,w84,w51,w83,clockpgm); dreg #(6) sub_29(w61,w86,w64,w85,clockpgm); dreg #(6) sub_30(w64,w88,w71,w87,clockpgm); dreg #(6) sub_31(w53,w90,w61,w89,clockpgm); dreg #(6) sub_32(w69,w92,w53,w91,clockpgm); buf #(135) sub_33(carry,w55); not #(92) sub_34(w93,kbd23); dreg #(6) sub_35(w95,w96,progblock1,w94,clockpgm); 28

nmos #(134) sub_36(w99,w97,w98); // not #(92) sub_37(w100,kbd22); not #(92) sub_38(w101,kbd21); and #(15) sub_39(w102,w93,w100,kbd21); nmos #(134) sub_40(w99,w103,w104); // nmos #(134) sub_41(w99,w105,w106); // and #(15) sub_42(w106,w93,kbd22,kbd21); and #(15) sub_43(w107,w93,kbd22,w101); nmos #(134) sub_44(w99,w108,w107); // dreg #(17) sub_45(w26,w110,w109,kbd24,vss); and #(15) sub_46(w111,kbd23,kbd22,w101); mux #(33) sub_47(w27,w25,w110,w112); and #(15) sub_48(w104,kbd23,kbd22,kbd21); nmos #(134) sub_49(w99,w113,w114); // nmos #(134) sub_50(w99,w115,w102); // dreg #(6) sub_51(w117,w118,w103,w116,clockpgm); dreg #(6) sub_52(w103,w121,w119,w120,clockpgm); mux #(12) sub_53(w109,w25,sum,w117); nmos #(134) sub_54(w99,w95,w122); // nmos #(134) sub_55(w99,w119,w111); // and #(15) sub_56(w114,kbd23,w100,kbd21); and #(15) sub_57(w122,w93,w100,w101); and #(15) sub_58(w98,kbd23,w100,w101); dreg #(6) sub_59(w112,w124,w117,w123,clockpgm); dreg #(6) sub_60(w119,w126,w113,w125,clockpgm); dreg #(6) sub_61(w115,w128,w95,w127,clockpgm); dreg #(6) sub_62(w105,w130,w108,w129,clockpgm); dreg #(6) sub_63(w108,w132,w115,w131,clockpgm); dreg #(6) sub_64(w97,w134,w105,w133,clockpgm); dreg #(6) sub_65(w113,w136,w97,w135,clockpgm); buf #(135) sub_66(sum,w99); endmodule // Simulation parameters in Verilog Format always #1000 MainReset=~MainReset; #2000 C=~C; #4000 A=~A; #8000 B=~B; // Simulation parameters // ProgBlock2 PWL 1.00 0 2.00 0 3.00 0 4.00 0 29

//+ 5.00 0 6.00 1 7.00 1 8.00 1 //+ 9.00 1 10.00 1 11.00 1 12.00 0 //+ 13.00 0 14.00 1 15.00 1 16.00 0 //+ 17.00 0 18.00 0 19.00 0 20.00 0 //+ 21.00 0 // ClockPgm PWL 1.00 0 2.00 1 3.00 0 4.00 1 //+ 5.00 0 6.00 1 7.00 0 8.00 1 //+ 9.00 0 10.00 1 11.00 0 12.00 1 //+ 13.00 0 14.00 1 15.00 0 16.00 1 //+ 17.00 0 18.00 1 19.00 0 20.00 1 //+ 21.00 0 // MainReset CLK 10 10 // ProgBlock1 PWL 1.00 0 2.00 1 3.00 1 4.00 0 //+ 5.00 0 6.00 1 7.00 1 8.00 0 //+ 9.00 0 10.00 0 11.00 0 12.00 1 //+ 13.00 1 14.00 0 15.00 0 16.00 1 //+ 17.00 1 18.00 1 19.00 1 20.00 0 //+ 21.00 0 // C CLK 20 20 // A CLK 40 40 // B CLK 80 80 // kbd21 CLK 160 160 // kbd22 CLK 320 320 // kbd23 CLK 640 640 // kbd24 GND 30