Proiectarea cu Circuite Logice Programabile
Capitolul I
Noțiuni toretice de bază privind circuitele logice programabile
Dispozitive logice programabile
Dispozitivele logice programabile, PLD (Programming Logic Device) au apărut ca o necesitate pentru eliminarea inconveniențelor pe care le prezentau circuitele logice universale MUX, ROM, în implementarea funcțiilor logice sub formă de produse, și anume:
generarea tuturor termenilor canonici produs deși, în general, nu sunt necesari toți;
formele minime/reduse ale funcțiilor nu pot fi implementate. Pentru implementarea acestora trebuie parcurs drumul invers, adică expandarea formelor reduse la formă canonică;
inexistența facilitații de implementare a funcției și prin negata acesteia, când funcția negată este mai simplă (unnele circuite MUX au atât ieșirea negată cât și nenegată).
Există o gamă largă de circuite integrate ale căror funcții logice pot fi „programate” in teriorul lor după îincheierea procesului de fabricare. Majoritatea acestor dispozitive folosesc tehnologii ce permit reprogramarea funcțiilor, ceea ce înseamnă că, dacă descoperiți o eroare de proiectare, o puteți corecta fără a înlocui dispozitivul sau a modifica fizic conexiunile. În această lucrare se va vace referința frecvent la posibilitațile și metodele de proiectare cu asemenea dispozitive.
Cronologic, matricele logice programabile (PLA – programmable logic array) au fost primele dispozitive logice programabile. Structura PLA constă în două niveluri de porți AND și OR, ale căror interconexiuni se programează de către utilizator. Folosind această structură, proiectantul poate realiza orice funcție logică până la un anumit nivel de complexitate aplicând teoria sintezei și minimizării circuitelor logice.
Figura 1. Porți ȘI, respectiv SAU: (a) reprezentare obișnuită; (b) reprezentare simplificată pentru circuitele PLD.
Structura PLA a fost îmbunătățită și costurile ei au fost reduse în urma apriției dispozitivelor logice matriceale programabile (PAL – programmable array logic device). la ora actuala ele sunt denumite generic dispozitive logice programabile (PLD – programmable logic device) și constituie varianta „MSI” a producției de circuite logice programabile.
Capacitatea in continuă creștere a circuitelor integrate a oferit producătorilor ocazia de a realiza PLD tot mai mari,pentru aplicații digitale de mai mare amploare. Însă, din motive de ordin tehnic, structura de bază cu doua niveluri AND-OR a PLD nu a putut fi realizată la dimensiuni mai mari. Pentru a ajunge totuși la dimensiunile dorite, producătorii de CI au conceput arhitecturi cu PLD complexe (CPLD). Un CPLD uzual este un ansamblu format din mai multe PLD și o structură de interconectare, toate realizate pe același cip. În plus față de PLD de sine stătătoare, structura de interconectare realizată pe cip este și ea programabilă, oferind o gamă largă de variante de circuite. CPLD pot ajunge la dimensiunile dorite prin mărirea numărului de PLD de sine stătătoare și prin dezvoltarea structurii de interconectare de pe cipul CPLD.
Cam în aceeași perioadă în care au fost inventate CPLD, alți producatori de CI au abordat în mod diferit problema extinderii dimensiunilor cipurilor logice programabile. Comparativ cu CPLD, matricele de porți logice in câmp (FPGA – field programmable gate array) conțin un număr mult mai mare de mici blocuri logice de sine stătătoare și dispun de o structura extinsă, ramificată, de interconectare, predominantă la nivelul întregului cip. Partizanii uneia sau alteia dintre căile de realizare ajunseseră să susțină cu argumente „religioase” superioritatea acestora, dar cel mai mare producator de dispozitive logice programabile de mari dimensiuni, compania Xilinx, Inc., a demonstrat ă ambele tipuri sunt utile, drept care le fabrică pe amândouă. Mai important decât arhitectura cipului este faptul ca ambele tipuri oferă posibilitatea de a scurta mult etapele de trecere din faza de proiect în cea de prototip și apoi în producție.
Un alt aspect aspect important pentru parcurgerea rapidă a drumului de la concepție la comercializare, în cazul roicărui produs realizat cu PLD, este proiectarea cu HDL (HDL= Hardware Description Language – Limbaj descriptor de echipamente). Limaje precum ABEL si VHDL, împreuna cu instrumentele virtuale ce le însoțesc, permit compilarea, sintetizarea și realizarea cu PLD, CPLD sau FPGA a unei noi scheme efectiv în câteva minute. Eficiența limbajelor ierarhizate, cu nivel înalt de structurare, cum este VHDL, este extrem de utilă proiectanților care lucrează cu sutele de mii sau milioanele de porți conținute în cele mai mari CPLD sau FPGA.
1.1.1. Matricea Logica Programabilă – PLA
O rețea logică programabilă cum mai este numită PLA (Programmable Logic Array), este similară ca și concept cu o memorie ROM, numai că aceasta nu realizează decodificarea completă a variabilelor și nu generează toți mintermii. Decodificatorul este înlocuit cu o rețea de porți ȘI care poate fi programată pentru a genera termenii produs ai variabilelor de intrare. Termenii produs sunt apoi conectați în mod selectiv cu porți SAU pentru a genera suma termenilor produs pentru funcțiile booleene necesare. Structura de bază a unui circuit PLA este prezentată în Figura 2.
Un circuit PLA poate implementa în mod direct un set de funcții logice exprimate printr-un tabel de adevăr. Fiecare intrare pentru care valoarea funcției este adevărată necesită un termen produs, și acestuia îi corespunde o linie de porți ȘI din primul etaj al circuitului PLA. Fiecare ieșire corespunde la o linie de porți SAU din al doilea etaj al circuitului. Numărul de porți SAU corespunde cu numărul de intrări din tabela de adevăr pentru care ieșirea este adevărată. Dimensiunea totală a circuitului PLA este egală cu suma dintre dimensiunea rețelei de porți ȘI și dimensiunea rețelei de porți SAU. Din Figura 1 se observă că dimensiunea rețelei de porți ȘI este egală cu numărul de intrări multiplicat cu numărul diferiților termeni produs, iar dimensiunea rețelei de porți SAU este egală cu numărul de ieșiri multiplicat cu numărul termenilor produs.
Figura 2. Structura generală a unui circuit PLA.
Un circuit PLA are două caracteristici care determină o implementare eficientă a unui set de funcții logice. Prima este că singurele intrări din tabelul de adevăr care necesită porți logice sunt cele cărora le corespunde o valoare adevărată pentru cel puțin o ieșire. A doua este că un anumit termen produs va avea o singură intrare în circuitul PLA, chiar dacă termenul produs este utilizat în mai multe ieșiri.
Structura internă a circuitului PLA care implementează aceste funcții este prezentată în Figura 3. Fiecare intrare trece printr-un buffer și un inversor. Există conexiuni programabile de la fiecare intrare și complementul acesteia la intrările fiecărei porți ȘI, indicate prin intersecțiile dintre liniile verticale și orizontale. Ieșirile porților ȘI au conexiuni programabile la intrările fiecărei porți SAU. Ieșirea fiecărei porți SAU constituie intrare într-o poartă SAU EXCLUSIV, iar cealaltă intrare poate fi programată fie la 1 logic, fie la 0 logic. Ieșirea este inversată dacă această intrare este 1 logic (deoarece X ⊕1 = X ), și rămâne neschimbată dacă această intrare este 0 logic (deoarece X ⊕ 0 = X ).
Modul de programare a circuitului PLA se poate specifica sub formă tabelară. De exemplu, pentru circuitul din Figura 3.41 programarea este specificată în Tabelul 1. Tabelul constă din trei secțiuni. Prima secțiune listează numerele termenilor produs. A doua secțiune specifică conexiunile necesare dintre intrări și porțile ȘI. A treia secțiune specifică conexiunile dintre porțile ȘI și porțile SAU. Fiecare variabilă de ieșire poate fi adevărată (A) sau complementată (C), ceea ce se controlează prin poarta SAU EXCLUSIV. Pentru fiecare termen produs, intrările sunt marcate cu 1, 0 sau –. Dacă o variabilă dintr-un termen produs apare sub formă necomplementată, variabila este marcată cu 1. Dacă o variabilă dintr-un termen produs apare sub formă complementată, ea este marcată cu 0. Dacă variabila lipsește din termenul produs, ea este marcată cu –. Variabilele de ieșire sunt marcate cu 1 pentru termenii produs care sunt incluși în cadrul funcției. O ieșire marcată cu A indică faptul că cealaltă intrare a porții SAU EXCLUSIV corespunzătoare trebuie conectată la 0, iar o ieșire marcată cu C indică o conectare la 1.
Tabelul 1. Tabelul de programare pentru circuitul PLA din Figura 3.41.
Figura 3. Structura internă a unui circuit PLA cu trei intrări, patru termeni produs și două ieșiri.
Pentru proiectarea unui sistem digital cu un circuit PLA, nu este necesar să se indice conexiunile interne ale circuitului, ci trebuie să se specifice doar tabela de programare. Circuitele PLA pot fi programate prin măști (în timpul fabricației) sau pot fi programate de către utilizator. Circuitele PLA programate de către utilizator se numesc FPLA (Field Programmable Logic Array).
1.1.2. Matricea Logica Programabilă cu nivel SAU fix – PAL
Circuitul PAL (Programmable Array Logic) este o variantă a circuitului PLA. Modificarile față de acesta constă în: existența numai a matricei ȘI programabile, matricea SAU fixă (neprogramabilă), invers față de circuitul ROM, și o facilitate ca unele dintre terminalele circuitului să poată poată fi utilizată atât ca intrări cât și ca ieșiri.
Fiecare linie de ieșire este conectată la un set fix de linii ale rețelei de porți ȘI. O asemenea ieșire a circuitului PAL poate implementa o expresie pe două nivele conținând cel mult opt termeni. Aceste modificări reduc flexibilitatea generării funcțiilor logice dar simplifică programarea și eficientizează utilizarea terminalelor circuitului.
Figura 4. Structura generală a unui circuit PAL.
O structură tipică de circuit PAL (PAL16L10) este prezentata in Figura 4., care, de fapt, este reprezentarea puțin simplificată a PAL16L8. În compunerea codului de denumire a circuitului primul număr specific numărule de terminale de intrare, în cazul acesta 16, iar al doilea este numărul terminalelor de ieșire , aici 8. Circuitul PAL16L8 are 20 de pini (sunt incluși și cel de masă și de alimentare), ceea ce înseamnă că numărul total de terminale de intrare și de ieșire necesar (16+8+2=26) este mai mare decât numărul de pini existenți (20). Această diferență rezultă din posibilitatea de utilizare a unor pini atât ca terminale de ieșire cât și ca terminale de intrare.
Există și circuite PLA sau PAL care conțin bistabile atașate prin conexiuni programabile la ieșirile rețelei de porți SAU, ceea ce permite implementarea unor circuite secvențiale de dimensiuni medii. Aceste circuite sunt cunoscute și cu denumirea de circuite logice programabile simple (SPLD – Simple Programmable Logic Device).
Avantajele circuitelor PAL sunt simplitatea utilizării în anumite aplicații și viteza mai ridicată. Aceste circuite sunt însă mai puțin flexibile decât circuitele PLA.
1.1.3. Circuitele logice programabile complexe – CPLD
Circuitele logice programabile complexe (CPLD – Complex Programmable Logic Device) sunt circuite PLD cu o densitate mai ridicată. Ele conțin un număr de blocuri funcționale, asemănătoare unor circuite PLD, fiecare bloc fiind compus din mai multe macrocelule (Figura 5). Există de asemenea o matrice de rutare pentru interconectarea blocurilor. Funcțiile logice simple pot fi implementate în cadrul uni singur bloc. Funcțiile mai complexe pot necesita mai multe blocuri, care vor fi interconectate prin matricea de rutare.
Figura 5. Structura generală a unui circuit CPLD.
1.1.4. Matrice de porți programabile în câmp – FPGA
Circuitele FPGA (Field Programmable Gate Array) au fost introduse în anul 1985 de compania Xilinx. De atunci au fost elaborate diferite tipuri de circuite FPGA de un număr de alte companii ca Actel, Altera, Atmel, Texas Instruments etc. Un circuit FPGA constă dintr-o rețea bidimensională de celule sau blocuri logice fiecare mai mic decât un PLD, fiind un fel de CPLD întors pe dos. De obicei, fiecare bloc logic poate fi programat pentru a implementa orice funcție logică a intrărilor sale. De aceea, aceste blocuri sunt numite de obicei blocuri logice configurabile (Configurable Logic Block – CLB). Cele mai multe blocuri logice conțin de asemenea unul sau două bistabile. Canalele și blocurile de comutare dintre aceste blocuri conțin resurse de interconectare, după cum se ilustrează în Figura 5. Aceste resurse conțin de obicei segmente de interconectare
de diferite lungimi. Interconexiunile conțin comutatoare programabile cu rolul de a conecta blocurile logice la segmentele de interconectare, sau un segment de interconectare la altul. În plus, există celule de I/E la periferia rețelei, care pot fi programate ca intrări sau ieșiri.
Figura 6. Structura unui circuit FPGA tipic.
Din punctul de vedere al tipului conexiunilor programabile, există două categorii principale de circuite FPGA: circuite cu memorii SRAM și circuite cu antifuzibile.
Circuite cu memorii SRAM. Programarea acestor circuite se realizează prin celule de memorie statică. Logica este implementată cu ajutorul unor tabele (lookup table) realizate din celulele de memorie, intrările funcțiilor controlând liniile de adresă. Fiecare tabelă de 2n celule de memorie implementează orice funcție cu n intrări. Una sau mai multe tabele, combinate cu bistabile, formează un
bloc logic configurabil. Aceste blocuri sunt aranjate într-un tablou bidimensional, segmentele de interconectare formând canale, similar cu rețelele de porți. Segmentele se conectează la pinii blocurile logice din canale și la alte segmente din blocurile de comutare prin intermediul tranzistoarelor de trecere controlate de celule ale memoriei de configurare. O secvență de configurare pentru circuitele cu memorii SRAM constă dintr-un singur cuvânt lung de programare. Logica din circuit încarcă cuvântul de programare, pe care îl citește serial dintr-o memorie externă de fiecare dată când circuitul este alimentat. Biții acestui cuvânt setează valorile tuturor celulelor memoriei de configurare din circuit, setând astfel valorile tabelelor și selectând segmentele care se vor conecta între ele. Circuitele cu memorii SRAM sunt reprogramabile. Ele pot fi actualizate în sistem, punând la dispoziția proiectanților noi opțiuni și posibilități de proiectare. Din această categorie de circuite FPGA fac parte cele ale firmelor Xilinx, Altera, AT&T.
Circuite cu antifuzibile. Un antifuzibil este un dispozitiv cu două terminale care în mod normal se află în starea de înaltă impedanță, iar atunci când este expus la o tensiune ridicată, trece în starea cu rezistență redusă (300-500 Ω). Antifuzibilele au dimensiuni reduse, astfel încât o arhitectură bazată pe antifuzibile poate conține sute de mii sau milioane de antifuzibile. Pentru simplificarea arhitecturii și a programării, circuitele FPGA bazate pe antifuzibile constau de obicei din rânduri de elemente logice configurabile cu canale de interconectare între ele, ca și rețelele de porți tradiționale. Un bloc logic poate fi programat prin conectarea pinilor săi de intrare la valori fixe sau la rețele de interconectare. Există antifuzibile la fiecare punct de intersecție între interconexiuni și pini din canal și la toate punctele de intersecție între interconexiuni în locurile în care canalele se intersectează. Din categoria circuitelor FPGA cu antifuzibile fac parte circuitele firmelor Actel, Quicklogic, Cypress.
1.2. Memorii ROM
Memoriile ROM (Read Only Memory) reprezintă o categorie de circuite programabile care se pot utiliza pentru implementarea unui set de funcții logice. Aceste memorii conțin un set de locații utilizate pentru stocarea informației binare. Conținutul acestor locații este fixat în momentul fabricației, aceste memorii fiind programate prin măști. Pe lângă acestea, există și memorii ROM programabile care utilizează fuzibile, numite PROM (Programmable ROM). Acestea pot fi înscrise de către utilizator, cu ajutorul unui echipament de programare corespunzător. De asemenea, există memorii PROM care pot fi șterse cu ajutorul razelor ultraviolete, și apoi pot fi reprogramate. Acestea se numesc EPROM (Erasable Programmable ROM). În fine, memoriile ROM care utilizează o tehnologie de ștergere prin impulsuri electrice se numesc EEPROM sau E2PROM (Electrically Erasable Programmable ROM). Diferitele variante de memorii ROM sunt nevolatile, deci își păstrează conținutul și după întreruperea tensiunii de alimentare.
O memorie ROM are k intrări și n ieșiri. Intrările furnizează adresa pentru memorie, iar ieșirile furnizează conținutul cuvântului selectat de adresa de la intrare. Numărul cuvintelor dintr-o memorie ROM este determinat de faptul că prin k linii de adresă se pot selecta 2k cuvinte. Memoria ROM nu are date de intrare, deoarece nu este posibilă operația de scriere. Memoriile ROM integrate dispun de una sau mai multe intrări de validare și ieșiri cu trei stări pentru a permite realizarea unor memorii de dimensiuni mai mari.
Figura 7. Logica internă a unei memorii ROM cu capacitatea de 32 × 8.
Considerăm, de exemplu, o memorie ROM cu capacitatea de 32×8, care conține 32 de cuvinte de 8 biți fiecare. Există 5 linii de intrare, care permit specificarea adreselor cuprinse între 0 și 31. Structura internă a acestei memorii este indicată în Figura 7. Intrările sunt decodificate în 32 ieșiri distincte cu ajutorul unui decodificator 5:32. Fiecare ieșire a decodificatorului reprezintă o adresă de memorie. Cele 32 de ieșiri sunt conectate prin intermediul unor conexiuni programabile la fiecare din cele opt porți SAU. Fiecare poartă SAU trebuie considerată ca având 32 de intrări. Pentru aceste porți s-a utilizat reprezentarea simplificată. Fiecare ieșire a decodificatorului este conectată prin intermediul unui fuzibil la una din intrările fiecărei porți SAU. Deoarece fiecare
poartă SAU are 32 de conexiuni interne programabile, și deoarece există opt porți SAU, această memorie ROM conține 32×8 = 256 de conexiuni programabile. În general, o memorie ROM cu capacitatea de 2k × n are un decodificator intern k:2k și n porți SAU. Fiecare poartă SAU are 2k intrări, care sunt conectate prin conexiuni programabile la fiecare din ieșirile decodificatorului.
Conținutul locațiilor unei memorii ROM poate fi specificat printr-o tabelă de adevăr. De exemplu, conținutul unei memorii ROM cu dimensiunea de 32×8 poate fi specificat printr-o tabelă de adevăr similară cu cea din Tabelul 3.13. Fiecare combinație a intrărilor din tabel specifică adresa unui cuvânt de 8 biți, a cărei valoare este indicate în coloanele ieșirilor. Tabelul 3.13 prezintă numai primele patru și ultimele patru cuvinte ale memoriei ROM; tabelul complet trebuie să conțină lista tuturor celor 32 de cuvinte.
Tabelul 2. Tabelul de adevăr al unei memorii ROM (parțial).
Programarea memoriei ROM conform tabelului de adevăr de mai sus conduce la configurația din Figura 3.38. Fiecare valoare 0 din tabelul de adevăr specifică un circuit deschis, și fiecare valoare 1 specifică un circuit închis. De exemplu, tabelul specifică un cuvânt cu valoarea 11000101 la adresa 00010. Cei patru biți de 0 din cadrul cuvântului sunt programați prin deschiderea conexiunilor dintre ieșirea 2 a decodificatorului și intrările porților SAU asociate cu ieșirile A5, A4, A3 și A1. Cei patru biți de 1 din cadrul cuvântului sunt marcați cu un × în schemă, pentru a indica un circuit închis. Atunci când intrarea memoriei ROM este 00010, ieșirea 2 a decodificatorului va fi la 1 logic, celelalte ieșiri fiind la 0 logic. Semnalul cu nivelul 1 logic de la ieșirea 2 a decodificatorului se propagă prin circuitele închise și porțile SAU la ieșirile A7, A6, A2 și A0, iar celelalte ieșiri rămân la 0 logic. Rezultatul este că la ieșirile de date se aplică cuvântul cu valoarea 11000101.
După cum s-a arătat anterior, un decodificator generează toți mintermii variabilelor de intrare. Prin inserarea unor porți SAU pentru însumarea mintermilor funcțiilor booleene, se poate implementa orice circuit combinațional. O memorie ROM conține atât un decodificator, cât și porți SAU în cadrul aceluiași circuit. Prin închiderea conexiunilor pentru mintermii incluși în cadrul funcției, ieșirile memoriei ROM pot fi programate pentru a reprezenta funcțiile booleene ale variabilelor de intrare dintr-un circuit combinațional.
Din punctul de vedere al unui circuit care implementează o funcție booleană, fiecare terminal de ieșire al unei memorii ROM este considerat separat ca ieșire a funcției booleene exprimate ca o sumă de mintermi. De exemplu, memoria ROM din Figura 8 poate fi considerată ca un circuit combinațional cu opt ieșiri, fiecare fiind o funcție a celor cinci variabile de intrare. Ieșirea A7 poate fi exprimată ca o sumă a mintermilor, în felul următor (punctele reprezintă mintermii de la 4 la 27, care nu apar în figură):
A7 (I4, I3, I2, I1, I0) = Σ (0, 2, 3, …, 29)
Figura 8. Programarea memoriei ROM conform Tabelului 2.
Deoarece o memorie ROM păstrează de fapt întregul tabel de adevăr al funcțiilor pe care le generează, o asemenea memorie poate fi utilizată pentru implementarea circuitelor combinaționale complexe direct din tabelul de adevăr. Procesul de citire a informațiilor memorate într-o memorie ROM este similar cu o căutare într-o tabelă (table lookup). Memoriile ROM sunt utile pentru implementarea unor circuite ale căror funcții sunt dificil de specificat prin ecuații logice, ca de exemplu convertoare de cod sau circuite pentru operații aritmetice complexe (înmulțire, împărțire), și pentru aplicații care necesită un număr moderat de intrări și un număr mare de ieșiri. Utilitatea memoriilor ROM este limitată de faptul că dimensiunea lor trebuie dublată cu fiecare nouă variabilă de intrare.
În practică, la implementarea unui circuit combinațional printr-o memorie ROM, nu este necesar să se deseneze schema logică sau să se indice conexiunile interne din cadrul memoriei. Trebuie să se specifice doar o anumită memorie ROM prin numărul circuitului și tabelul de adevăr al memoriei. Tabelul de adevăr conține toate informațiile necesare programării memoriei.
De exemplu, se consideră proiectarea unui circuit combinațional care acceptă la intrare un număr de 3 biți și generează la ieșire un număr binar egal cu pătratul numărului de la intrare. Prima etapă pentru proiectarea circuitului este întocmirea tabelului de adevăr. În cele mai multe cazuri, aceasta este singura operație necesară. În alte cazuri, se poate utiliza un tabel de adevăr parțial pentru memoria ROM ținând cont de anumite proprietăți ale variabilelor de ieșire. Tabelul 3 reprezintă tabelul de adevăr pentru circuitul proiectat.
Tabelul 3. Tabelul de adevăr pentru circuitul care generează pătratele valorilor de la intrare.
Pentru circuitul proiectat, sunt necesare trei intrări și șase ieșiri. Se observă că ieșirea B0 este egală întotdeauna cu intrarea A0, astfel încât nu este necesară generarea acestei ieșiri cu ajutorul memoriei ROM. De asemenea, ieșirea B1 este întotdeauna 0. Astfel, trebuie să se genereze doar patru ieșiri cu memoria ROM. Memoria trebuie să aibă minimum trei intrări și patru ieșiri. Cele trei intrări specifică opt cuvinte, deci dimensiunea minimă a memoriei necesare este de 8×4. Schema circuitului este prezentată în Figura 9.
Figura 9. Implementarea cu o memorie ROM a circuitului care generează
pătratele valorilor de la intrare.
1.3 Resursele hardware și software a circuitelor FPGA
Familiile moderne FPGA extind capacitate de conectare prin realizarea cablată a unor funcții de înalt nivel, crescând astfel performanțele și scăzând efortul de proiectare. Astfel de blocuri pot fi: blocuri generice DSP, multiplicatoare, blocuri PLL sau DLL, circuite I/O de mare viteză, memorii, registre de deplasare și numărătoare. Resursele hardware investite în FPGA sunt
extrem de diverse, în funcție de producători și de arhitectura aleasă iar pe de altă parte, resursele software, de care depind în mare măsură și performan ele hardware-ului, sunt extrem de specifice, într-o continuă dezvoltare și evoluție.
1.3.1 Resurse hardware
Resurse hardware conțin trei mari categorii :
-a) blocuri funcționale integrate;
-b) condiționarea semnalelor de intrare/ieșire;
-c) dispozitive speciale.
Blocuri funcționale integrate
Memorii. Aceste memorii interne permit creșterea vitezei de operare și utilizarea mai eficientă a pinilor drartnei e și ieșirș ei pe lângă acesta structura sistemului este mult simplificată. Capacitățile de memorie utilizate sunt destul de mari și se pot întâlni diferite configurații.
PLL/DLL. Aceste circuite PLL(Phase-Locked Loop) și DLL()Delay-Locked Loop) se pot utiliza pentru compensarea întârzierii de propagare a semnalului de sincronizare. Alte aplicații interesante sunt sintetizarea de frecvențe prin multiplicare sau divizare și condiționarea semnalului de sincronizare care se referă la factorul de umplere și defazaj. Circuitele DLL au un preș mai scăzut consumând puțină energie și sunt imune la zgomote, în timp ce PLL-urile sunt mai versatile și permit operații mai complexe cum ar fi implementarea filtrelor pe un domeniu de frecvențe mai larg.
Circuite aritmetice. Unele circuite FPGA dispun de un număr mare de blocuri aritmetice simple. De exemplu din familia Virtex-5 LX Xilinx include multiplicatoare, prin care se pot realiza operații de până la 25 × 18 biți.
Transceivere. Acestea sunt dispozitive de emisie-recepție de diferite standarde iar ca și protocoale de comunicație definite de utilizator pot fi ușor implementate prin blocuri de codare sau decodare și serializare sau deserializare a datelor.
Procesoare integrate. Cele mai complexe arhitecturi FPGA ajung să includă și procesoare însoțite de perifericele aferente, în vederea materializării conceptului System-on-Chip (așa numi- tele SoC solutions) prin care tot sistemul de calcul este implementat pe un singur cip de Siliciu. Un exeplu de acest fel ar putea fi circuitul Virtex-4 FX (Xilinx) care include procesoare RISC (reduced instruction set computer) de tipul IBM PowerPC 405 de 32 de biți, capabile să funcționeze la 450 MHz, cu cotrolere de acces la memorii RAM, o unitate aritmetică hardware pentru multiplicare sau divizare, trei timere diferite, interfață directă pentru rețea Ethernet, registre de configurare, o unitate de procesare auxiliară pentru interfațarea resurselor logice FPGA în vederea conectării la acceleratoare hardware și a introducerii de instrucțiuni definite de utilizator.
Condiționarea semnalelor de intrare/ieșire
Resurse specifice trebuiesc alocate pinilor de intrare și iețire pentru ca FPGA-urile să poată fi conectate cu ușurință cu alte dispozitive și la tensiuni diferite fără a fi nevoie de interfețe suplimentare. Pinii de intrare și ieșire sunt de obicei grupați în funcție de diferitele standarde:
-conectare între cipuri;
– conectare de tip ,,backplane” în care mai muțli pini se conectează în paralel sau interfețe pentru memorii. În figura 2.5 este prezentată un exemplu, corespunzător familiei Virtex.
Figura 10. Conectare ,,backplane” la FPGA din familia Virtex
Dispozitive speciale
Dispozitive programabile o singură dată OTP (One-time-programmable). Acestea sunt dispozitivele nevolatile care utilizează celule SRAM (Static Random Access Memory). Celulele SRAM sunt cel mai des utilizate pentru că oferă o mare flexibilitate în vederea reconfigurării cu toate acestea dispozitivele OTP nevolatile sunt aplicate în anumite situații în care se evidențiază avantajele lor:
– nu au nevoie de resurse externe pentru configurarea la alimentare și din acest motiv pornesc foarte repede;
– consum foarte redus de putere, rezistențe și capacități de contact foarte mici;
– imunitate foarte bună la zgomote.
Dispozitive de putere mică. La aceste dispozitive scăderea puterii consumate de către circuite este un imperativ puternic, atât pentru a îmbunătăți performanțele funcționale ale produselor prin creșterea eficienței utilizării energiei cât și prin scăderea temperaturilor de funcționare. Circuitele FPGA sunt de obicei mai puțin eficiente la acest capitol din cauza resurselor alocate programării iar din acest punct de vedere soluțiile bazate pe OTP sunt cele mai avantajoase. Ele reușesc să treacă din modul de așteptare în care se consumă foarte puțină energie în modul de lucru foarte rapid de ordinul nanosecundelor și oferă și rezistențe mici de comutare.
Dispozitive tolerante la radiație:aceste dispozitive se folosesc în aplicațiile aerospațiale în care FPGA au fost incluse, Stația Spațială Internațională, Telescopul Spațial Hubble, Mars Pathfinder și altele, ridică probleme speciale de lucru în mediul radioactiv. Au fost dezvoltate familii de FPGA de tip antifuse, pentru a putea raspunde acestor solicitări cu rezistență sporită la radiației. Ca exeplu sar putea preciza RTSX/RTAX sau Aeroflex Eclipse și există și versiuni protejate împotriva perturbațiilor radio ca și familiile Atmel AT40KEL040 sau Xilinx QPRO-R Virtex-II.
Circuite securizate. Aplicațiile în care FPGA sunt conectate în rețele ridică problema securizării IP-urilor. Pe de o parte în aplicațiile mai simple pot fi utilizați biți de securizare care previne citirea de către utilizator a configurațiilor dar în cazul aplicațiilor foarte complexe se adaugă un FPGA nonvolatil care să gestioneze accesul la componentele interne.
1.3.2 Resurse software
Complexele structuri hardware ale FPGA-urilor nu ar putea fi utilizate fără un întreg arsenal de instrumente software specifice, iar acest domeniu este în plină dezvoltare dar există deja o ofertă bogată de resurse software.
Resurse software împart în trei mari categorii:
a) Nuclee IP
b) Procesoare Soft
c) Instrumente software
Nuclee IP. Pentru a putea simplifica proiectarea sistemelor FPGA complexe s-au realizat biblioteci de funcții predefinite complexe, în majoritatea cazurilor parametrizabile, precum și circuite care au fost deja testate și optimizate. Aceste elemente sunt de regulă protejate ca nuclee de proprietate intelectuală, fiind vândute fie direct de producătorul circuitului fie de firme terțe specializate cum ar fi Modelware sau QuickFlex. Astfel de biblioteci acoperă largi domenii de aplicații: comunicațiile, multimedia, procesoare de semnal, transporturi și multe altele.
Procesoarele soft au fost aplicate în acest domeniu de Xilinx (PicoBlaze și MicroBlaze) și de Altera (Nios șiNios II). PicoBlaze este un microcontroler de 8 biți de capacitate mică dar implementat cu un număr redus de blocuri logice. MicroBlaze corespunde unei arhitecturi RISC de 32 biți cu un set standard de periferice și procesorul Nios are o funcționare mai complexă, cuprinzând chiar și posibilitatea adăugării de instrucțiuni noi de către client.
Instrumente software. Interprinderile de FPGA au dezvoltat în timp multe instrumente soft originale adresate tuturor activităților cerute de aplicarea FPGA-urilor. În general aceste produse includ nuclee IP periferice, instrumente pentru configurarea procesoarelor soft, instrumente pentru dezvoltarea de software care constă în editoare, compilatoare, asambloare, editoare de legături și depanatoare, depanatoare și testare hardware și software și instrumente software și hardware pentru plăcile de dezvoltare.
1.4 Aplicații FPGA
Aplicațiile FPGA includ unele domenii esențiale pentru electronica moderna:
a) DSP (digital signal processing) care uprinde o categorie vasta de aplicații de procesare digitala a semnalelor, dintre care cele mai cunoscute sunt:
– procesarea semnalelor audio si radio;
– recunoasterea vorbirii,a vocilor si a sunetelor;
– radar si sonar;
– procesarea ariilor de senzori;
– analiza spectrala;
– analiza statistica a semnalelor;
– telecomunicații;
-procesarea semnalelor biomedicale;
– seismice.
b)Aplicații în aviatică, aparatura militară, criptografie și radioastronomie;
c) Realizarea rapidă a prototipurilor ASIC;
d) Imagistică
FPGA se utilizeaza cu bune rezultate și în cazul aplicațiilor de calcul de înalta performanță, cum ar fi în cazul calculului convoluțional și procesărilor paralele, având performanțe superioare microprocesoarelor convenționale.
De obicei circuitele FPGA sunt recomandabile aplicațiilor de tip „vertical”, care nu sunt obiectul producției de masa.dar în cazul produselor de masa este preferabila apelarea la ASIC, deoarece FPGA utile doar în faza de realizare și testare a prototipurilor.
FPGA pot înlocui cu succes orice aplicație de tip microprocesor care nu necesită prelucrari în virgula mobila. Avantajele lor strategice ale circuitelor FPGA sunt calculul hardware paralel, reconfigurarea și capacitatea de a îngloba cu usurința produse hardware si software eterogene. Datorită usurinței circuitelor FPGA de adaptare la orice tip de periferice i se conferă statutul de principala platforma de dezvoltare a aplicațiilor SoC (system on chip).
CAPITOLUL 2
PROIECTAREA CU CIRCUITE LOGICE PROGRAMABILE
2.1. Limbaje de programare a circuitelor
logice programabile
La ora actuală, pentru programarea circuitelor logice se folosesc in mod curent, limbaje de descriere a hardware-ului (Hardware Description Language – HDL), dintre care cele mai răspandite sunt VHDL si Verilog. VHDL (VHSIC HDL – VHSIC însemnând Cerz High Speed Integrated Circuits) a devenit standard IEE în anul 1986 și se înrudește, din punct de vedere al sintaxei , cu limbajul de programare Ada, din care este inspirat de altfel și limbajul Pascal. Verilog a fost standardizat IEE în 1995, fiind asemanănător la nivel general cu limbajul C, ceea ce poate fi considerat drept un argument privind ușurința învățării sale. Similaritatea este însă la nivel formal, portarea directă din C fiind rareori posibilă.
Cum o cerință importantă la ora actuală în industria hardware este scurtarea timpului între elaborarea unui algoritm și implementarea sa, devine evidentă necesitatea utilizării unui limbaj care să fie cât mai apropiat de un limbaj de programare frecvent întrebuințat, un candidat perfect fiind limbajul C. În acest fel devine posibilă realizarea sistemelor hardware de către persoane care nu au urmat lungi cursuri speciale de limbaje de descriere a hardware-ului. Un alt avantaj este facilitarea transformării unui algoritm scris în C într-o implementare hardware.
Un limbaj care răspunde acestor cerințe este Handel-C, furnizat de compania Celoxica. Acest limbaj este bazat pe limbajul Handel elaborat de Ian Page, profesor la Imperial College din Londra și cofondator al Celoxica. La rândul său limbajul Handel este similar cu un subset al lui occam [Hoa-88], un limbaj folosit pentru descrierea sistemelor de aplicații concurente. Utilizând limbajul Handel-C este așadar posibilă programarea FPGAurilor într-un mod firesc, natural, cu rezultate satisfăcătoare din punctul de vedere al eficienței implementării.
Aplicațiile care pot beneficia de aportul sistemelor hardware reconfigurabile sunt numeroase, de la cele de tipul recunoașterea formelor, comunicația video, criptarea/decriptarea, până la sisteme de testare a rețelelor de calculatoare ș.a.m.d. În general vorbind, pentru orice domeniu în care sunt necesare operaii în timp real, iar prelucrările software nu sunt suficient de rapide, o soluție practică extrem de eficientă este folosirea unor sisteme pe bază de FPGA-uri, programate cu un limbaj de nivel înalt, cum ar fi Handel-C.
2.1.1. Limbajul descriptor de echipamente VHDL
Pe la mijlocul deceniului ’80, Departamentul Apărării al SUA și IEE au sponsorizat realizarea unui limbaj de mare capacitate de descriere a echipamentelor, numit VHDL. Limbajul a avut inițial și pastrează urmatoarele caracteristici:
Proiectele pot fi descompuse ierarhic.
Fiecare element al unui proiect prezintă atât o interfață bine definită (pentru conectarea cu alte elemente), cât și o definire foarte exactă a modului de funcționare (pentru a putea fi simulat).
Funcționarea unui element poate fi descrisă fie printr-un algoritm, fie untilizându-se structura unui echipament existent. De exemplu un anumit element poate fi definit inițial printr-un algoritm, pentru a se putea efectua verificările elementelor de proiect de nivel superior, care îl includ; ulterior, definirea prin algoritm poate fi înlocuită cu o structură de echipament.
Simultaneitatea, temporizarea și sincronizarea pot fi modelate. În VHDL se poate lucra cu structuri de circuite secvențiale atât sincrone cât si asincrone.
Comportarea logică și temporală a unui priect se poate simula.
Deci VHDL a debutat ca limbaj de documentare și modelare care permite descrierea precisă și simularea comportării sistemelor digitale.
Limbajul și mediul de simulare VHDL constituie intrinsec inovații importante, însă utilizarea și popularitatea VHDL au făcut un salt important o dată cu realizarea instrumentelor de sinteză VHDL, de largă aplicabilitate. Aceste programe pot crea structuri de circuite logice pornind direct de la descrierile VHDL ale modului de funcționare. Cu VHDL, se poate proiecta, simula și sintetiza orice circuit, de la un simplu circuit combinațional până la un sistem complet cu microprocesor, realizat pe un singur cip.
– import std_logic from the IEEE library
library IEEE;
use IEEE.std_logic_1164.all;
– this is the entity
entity ANDGATE is
port (
I1 : in std_logic;
I2 : in std_logic;
O : out std_logic);
end entity ANDGATE;
– this is the architecture
architecture RTL of ANDGATE is
begin
O <= I1 and I2;
end architecture RTL;
Figura 11. O poartă ȘI in limbaj VHDL
2.1.2. Limbajul descriptor de echipamente Verilog
Verilog este un limbaj de descriere a hardware-ului (Hardware Description Language – HDL), destinat descrierii comportamentului și/sau arhitecturii unui sistem numeric, cu alte cuvinte al unei funcții logice combinatorii sau secvențiale. Un sistem numeric poate fi descris, la niveluri diferite, in funcție de aspectele care interesează. Astfel, un HDL poate descrie, la nivel de comutator, amplasarea traseelor de legatură (firele), a rezistoarelor si tranzistoarelor pe un circuit integrat. Limbajul HD poate descrie sistemul numeric având in vedere porțile logice și bistabilele componente, adică la nivel de porți. La un nivel mai ridicat, sistemul numeric poate fi descris în termenii transferurilor vectorilor de informație între registre. Acesta reprezintă Nivelul Transferurilor între Registre (Register Transfer Level – RTL)/Nivelul Fluxului de Date. Limbajul Verilog suporta toate aceste niveluri.
module toplevel(clock,reset);
input clock;
input reset;
reg flop1;
reg flop2;
always @ (posedge reset or posedge clock)
if (reset)
begin
flop1 <= 0;
flop2 <= 1;
end
else
begin
flop1 <= flop2;
flop2 <= flop1;
end
endmodule
Figura 12. Exemplu de circuit latch in verilog.
2.2. Fluxul de proiectare
Pentru proiectarea sistemelor digitale utilizând circuite programabile, cum sunt circuitele FPGA și CPLD, se utilizează pachete de programe de proiectare asistată de calculator (CAD – Coputer Aided Design). Aceste pachete de programe asistă proiectantul în toate etapele procesului de proiectare. Astfel, majoritatea pachetelor CAD pentru circuitele programabile asigură următoarele funcții principale:
• Specificarea (descrierea) sistemului digital;
• Sinteza descrierii, deci transformarea acesteia într-o listă de conexiuni conținând porți elementare
și interconexiunile dintre ele;
• Simularea funcționării sistemului pe baza listei de conexiuni obținute, înainte de implementarea
într-un anumit circuit;
• Implementarea sistemului într-un circuit prin adaptarea listei de conexiuni pentru a se utiliza
în mod eficient resursele disponibile ale circuitului;
• Configurarea (programarea) circuitului pentru ca acesta să realizeze funcția dorită.
Figura 13 ilustrează etapele din cadrul procesului de proiectare a sistemelor digitale utilizând circuite programabile.
Figura 13. Fluxul de proiectare a sistemelor digitale utilizând circuite programabile.
2.3 Principalele etape de proiectare
2.3.1. Descrierea sistemului
Există mai multe metode pentru descrierea sistemelor digitale. În figura 13 sunt indicate principalele metode: prin scheme logice, prin limbaje de descriere hardware (HDL – Hardware Description Language) și prin diagrame de stare.
În mod tradițional, sistemele digitale sunt descrise prin scheme logice. Pentru aceasta se utilizează un editor schematic, care permite specificarea componentelor care trebuie utilizate și a modului în care acestea trebuie interconectate. Această metodă este cea care va fi utilizată în primul rând în lucrările următoare și este ilustrată în Figura 13. Circuitul din această figură detectează secvența binară 1010 aplicată la intrarea X. La detectarea acestei secvențe, ieșirea Z va fi setată la 1 logic.
Există următoarele etape principale la utilizarea schemelor logice pentru proiectarea unui sistem digital:
1. În cadrul unui editor schematic se selectează componentele necesare dintr-o bibliotecă de componente. Asemenea componente pot fi, de exemplu, porți elementare, multiplexoare, decodificatoare, numărătoare, circuite aritmetice etc. În funcție de circuitul care va utilizat, proiectantul trebuie să selecteze o anumită bibliotecă de componente, deoarece există biblioteci care sunt specifice diferiților producători de circuite programabile și diferitelor familii de circuite. Circuitele dintr-o anumită familie diferă prin capacitatea lor, viteza și capsula utilizată. În această etapă, nu este însă necesară specificarea exactă a circuitului care va utilizat
dintr-o anumită familie.
2. Componentele selectate și plasate în cadrul schemei sunt interconectate prin fire de legătură. Proiectantul realizează interconectarea componentelor pentru a obține configurația necesară pentru o anumită aplicație.
3. Se adaugă și se etichetează porturile de I/E. Aceste porturi definesc intrările și ieșirile sistemului, permițând aplicarea semnalelor la pinii de intrare ai sistemului digital și preluarea semnalelor de ieșire generate de sistem la pinii de ieșire. Semnalele de intrare sunt aplicate la intrările sistemului digital prin intermediul unor buffere de intrare, iar semnalele de ieșire sunt preluate de la sistemul digital prin intermediul unor buffere de ieșire. Aceste buffere izolează sistemul digital față de exterior. În unele cazuri, bufferele de I/E sunt adăugate în mod automat de sistemul CAD.
Figura 14. Etapele descrierii unui sistem digital utilizând scheme: (1) Selectarea și amplasarea componentelor; (2) Conectarea componentelor; (3) Adăugarea porturilor de I/E.
2.3.2. Sinteza sistemului
După descrierea sistemului digital, etapa următoare din cadrul procesului de proiectare este cea de sinteză a sistemului. Sinteza constă în translatarea schemei logice, a descrierii HDL sau a diagramei de stare într-o listă de conexiuni. Această translatare se realizează cu ajutorul unui program de sinteză din cadrul sistemului CAD. Lista de conexiuni (“netlist”) este o descriere compactă a sistemului digital sub formă textuală, în care sunt specificate componentele sistemului, interconexiunile dintre acestea și pinii de intrare/ieșire. Această listă este prelucrată de celelalte componente ale sistemului CAD pentru realizarea etapelor următoare din cadrul procesului de proiectare. Există diferite formate pentru listele de conexiuni, cel mai utilizat fiind formatul EDIF (Electronic Digital Interchange Format), acesta reprezentând un standard industrial. Pe lângă acest format standard, se pot utiliza diferite formate care sunt specifice anumitor producători de circuite. Un exemplu este formatul XNF (Xilinx Netlist Format), care este formatul propriu al firmei Xilinx, cel mai important producător de circuite programabile de tip FPGA și CPLD. O altă posibilitate este utilizarea unui limbaj de descriere hardware ca format pentru lista de conexiuni. De exemplu, sistemul CAD poate utiliza o reprezentare structurală a sistemului proiectat într-un limbaj de descriere hardware specificat de proiectant.
Relația dintre schema logică a unui circuit simplu și un format posibil al unei liste de conexiuni este ilustrată în Figura 6.10. În prima parte a listei de conexiuni sunt declarate componentele din cadrul schemei, iar în a doua parte sunt specificate conexiunile dintre componente. Denumirile componentelor sunt G1..G7, iar denumirile conexiunilor sunt N1..N10. Aceste denumiri sunt fie cele specificate de proiectant, fie cele asignate în mod automat de sistemul CAD.
În circuitul ilustrat în Figura 6.10 există două inversoare (G1 și G2), două porți ȘI cu două intrări (G3 și G4), o poartă ȘI cu patru intrări (G7) și două bistabile JK (G5 și G6). Inversoarele au un pin de intrare IN, un pin de ieșire OUT, un pin de alimentare Vcc și un pin de masă GND. Similar, porțile ȘI cu două intrări au doi pini de intrare IN1 și IN2, un pin de ieșire OUT, un pin de alimentare și un pin de masă. Bistabilele au doi pini pentru intrările de date J și K, un pin pentru intrarea de ceas C și un pin pentru ieșirea Q, pe lângă pinii de alimentare și masă. Pentru simplitate, pinii și semnalele de alimentare și masă au fost omiși în această figură. O conexiune este indicată prin listarea tuturor pinilor care sunt conectați împreună. Semnalele de intrare X și CLK sunt conectate la pinii de intrare cu aceleași nume ai circuitului, iar semnalul de ieșire Z este conectat la pinul de ieșire al circuitului.
Figura 15. Relația dintre schema logică și lista de conexiuni pentru circuitul din Figura 14.
Proiectantul poate specifica diferite criterii de optimizare de care să se țină cont în procesul de sinteză. Exemple de asemenea opțiuni sunt: minimizarea numărul de porți elementare necesare, obținerea vitezei maxime de funcționare a circuitului, minimizarea puterii consumate. Proiectantul poate experimenta cu diferite criterii de optimizare pentru a obține soluția cea mai convenabilă pentru aplicația respectivă.
2.3.3. Simularea funcțională
În această etapă se utilizează un program simulator pentru verificarea funcționării sistemului proiectat, înainte de implementarea acestuia într-un circuit programabil. Această verificare se referă doar la aspectele funcționale ale sistemului, fără a se lua în considerare întârzierile semnalelor, care vor fi cunoscute numai după implementare. Pentru verificarea funcțională proiectantul furnizează simulatorului mai multe combinații ale valorilor semnalelor de intrare, o asemenea combinație fiind numită vector de test. De asemenea, proiectantul poate specifica valorile semnalelor de ieșire care trebuie generate de sistem pentru fiecare vector de test.
Simulatorul aplică pe rând câte un vector de test la intrările sistemului, determină semnalele de ieșire care sunt generate de sistem și le compară cu valorile acestor semnale care au fost specificate de proiectant. În cazul în care apar diferențe, simulatorul afișează mesaje care indică diferențele apărute.
Proiectantul va efectua modificările necesare ale descrierii sistemului pentru a corecta erorile apărute, va efectua sinteza descrierii modificate și va executa din nou simularea funcțională. Aceste etape vor fi repetate până când sistemul va funcționa conform cerințelor. Figura 16 ilustrează modul în care pot fi vizualizate pe ecranul calculatorului semnalele de intrare și de ieșire ale circuitului detector de secvență utilizat ca exemplu în secțiunile precedente la simularea funcțională a circuitului.
Figura 16. Semnalele de intrare și de ieșire ale circuitului din Figura 14 vizualizate la simularea funcțională a circuitului.
2.3.4. Maparea tehnologică
Etapele următoare din cadrul procesului de sinteză realizează implementarea sistemului proiectat într-un circuit programabil (FPGA sau CPLD). Prima etapă din cadrul implementării este cea de mapare tehnologică. Această etapă constă dintr-o serie de operații care realizează prelucrarea listei de conexiuni și adaptarea acesteia la particularitățile și resursele disponibile ale circuitului utilizat pentru implementare. Operațiile executate în această etapă diferă în funcție de sistemul de proiectare. Cele mai obișnuite operații sunt: adaptarea la elementele fizice ale circuitului, optimizarea și verificarea regulilor de proiectare (de exemplu, testarea depășirii numărului pinilor de I/E disponibili în cadrul circuitului). În timpul acesteia etape, proiectantul selectează tipul circuitului programabil care va fi utilizat, capsula circuitului integrat, viteza și alte opțiuni specifice circuitului respectiv.
În urma execuției operațiilor din etapa de mapare tehnologică se generează un raport detaliat al rezultatelor tuturor programelor executate. Pe lângă mesaje de eroare și de avertizare, se crează de obicei o listă cu resursele utilizate din cadrul circuitului.
Figura 17 ilustrează etapa de mapare tehnologică pentru circuitul utilizat ca exemplu. După cum se observă, schema circuitului a fost modificată pentru a utiliza bistabile D în locul bistabilelor JK, iar porțile ȘI au fost înlocuite cu porți ȘI-NU. Se menționează că aceste transformări sunt efectuate asupra listei de conexiuni care s-a obținut în urma etapei de sinteză, schema din Figura 17 fiind
doar ilustrativă.
Figura 17. Ilustrarea etapei de mapare tehnologică pentru circuitul din Figura 14.
2.3.5 Plasarea și rutarea
Aceste operații sunt executate în cazul utilizării unui circuit FPGA pentru implementare. Pentru proiectarea cu circuite CPLD, operația echivalentă este numită adaptare (“fitting”). Plasarea este procesul de selectare a unor module sau blocuri logice ale circuitului programabil care vor fi utilizate pentru implementarea diferitelor funcții ale sistemului digital. Rutarea constă în interconectarea acestor blocuri logice utilizând resursele de rutare disponibile ale circuitului.
Majoritatea sistemelor CAD realizează operațiile de plasare și rutare în mod automat, astfel încât utilizatorul nu trebuie să cunoască detaliile arhitecturii circuitului utilizat pentru implementare. Anumite sisteme permit utilizatorilor experți plasarea și rutarea manuală a unor porțiuni critice ale sistemului digital pentru a obține performanțe superioare.
Figura 18 ilustrează plasarea și rutarea circuitului rezultat în urma mapării tehnologice a circuitului utilizat ca exemplu. După selectarea blocurilor logice care vor fi utilizate pentru implementarea circuitului, acestea se configurează pentru implementarea unor porțiuni ale schemei. Pentru interconectarea semnalelor generate de diferitele blocuri logice se utilizează resursele de rutare disponibile.
Aceste resurse sunt indicate în figură prin linii orizontale și verticale. Intrările și ieșirile utilizate ale blocurilor logice se conectează la liniile de rutare prin puncte de conexiune programabile (indicate în figură prin cercuri), iar liniile de rutare sunt interconectate cu ajutorul unor comutatoare programabile.
Operațiile de plasare și rutare pot necesita un timp ridicat pentru execuție în cazul sistemelor digitale complexe, deoarece sunt necesare operații complexe pentru determinarea și configurarea blocurilor logice necesare din cadrul circuitului programabil, interconectarea corectă a acestora și verificarea faptului că sunt asigurate cerințele de performanță specificate în timpul proiectării.
Figura 18. Ilustrarea etapelor de plasare și rutare pentru circuitul din Figura 17.
2.3.6 Analiza de timp
Pachetele de programe CAD pentru proiectarea sistemelor digitale conțin de obicei un program numit analizor de timp, care poate furniza informații despre întârzierile semnalelor. Aceste informații se referă atât la întârzierile introduse de blocurile logice, cât și la întârzierile datorate interconexiunilor. Analizorul poate afișa aceste informații în diferite moduri, de exemplu, prin ordonarea conexiunilor în ordinea descrescătoare a întârzierilor semnalelor. Proiectantul poate utiliza informațiile despre întârzierile semnalelor pentru a realiza o nouă simulare a sistemului, în care să se țină cont de aceste întârzieri. Această operație prin care se furnizează simulatorului informații detaliate despre întârzierile semnalelor se numește adnotare inversă (“back-annotation”).
2.3.7. Configurarea sau programarea circuitui
Operația de configurare se referă la circuitele programabile bazate pe memorii volatile SRAM (Static Random Access Memory) și constă din încărcarea informațiilor de configurare în memoria circuitului. Operația de programare se referă la circuitele programabile bazate pe memorii nevolatile (cum sunt circuitele care conțin antifuzibile). Această operație se execută similar cu cea de configurare,
dar informațiile de configurare sunt păstrate și după întreruperea tensiunii de alimentare.
La sfârșitul operațiilor de plasare și rutare, se generează un fișier care conține toate informațiile necesare pentru configurarea circuitului. Aceste informații se referă atât la configurarea blocurilor logice ale circuitului, cât și la specificarea interconexiunilor dintre blocurile logice. Fișierul în care se înscriu aceste informații conține, în principiu, un șir de biți (“bitstream”), fiecare bit indicând starea închisă sau deschisă a unui comutator. Circuitele programabile conțin un număr mare de asemenea comutatoare, un comutator fiind realizat sub forma unui tranzistor sau a unei celule de memorie. Un bit de 1 din șirul de biți va determina închiderea unui comutator și, deci, stabilirea unei conexiuni. Biții din acest fișier de configurare sunt aranjați într-un anumit format pentru a realiza o corespondență între un bit și comutatorul corespunzător.
Conținutul fișierului de configurare se transferă la circuitul programabil, aflat de obicei pe o placă de circuit imprimat împreună cu alte circuite. Comutatoarele circuitului se închid sau rămân deschise în funcție de valorile biților din șirul de configurare. După terminarea configurării, circuitul va funcționa conform descrierii sistemului digital care a fost implementat.
Din cauza memoriei volatile, circuitul trebuie configurat din nou după fiecare întrerupere a tensiunii de alimentare. Informațiile de configurare pot fi păstrate într-o memorie nevolatilă PROM (Programmable Read Only Memory), existând posibilitatea configurării automate a circuitului din această memorie nevolatilă la aplicarea tensiunii de alimentare.
Configurarea sau programarea se pot realiza utilizând interfața paralelă a calculatorului. Pentru aceasta, este necesar ca placa cu circuitul programabil să conțină un conector pentru interfața paralelă, pentru transfer utilizându-se un cablu paralel. Figura 19 ilustrează un cablu paralel obișnuit, care conține conectori cu 25 de contacte DB25.
Figura 19. Cablu paralel care poate fi utilizat pentru configurarea circuitelor programabile.
2.3.8. Depanarea sistemului
În această ultimă etapă a procesului de proiectare se verifică funcționarea sistemului digital proiectat în condiții reale. O funcționare necorespunzătoare se poate datora nerespectării specificațiilor de proiectare, a specificațiilor circuitului utilizat pentru implementare, a unor aspecte legate de întârzierea semnalelor etc. Depanarea poate fi simplificată dacă circuitul se configurează astfel încât să conțină unele module speciale care permit citirea valorii unor semnale în timpul funcționării și transferul acestor informații la calculator, utilizând un cablu JTAG și un program special pentru vizualizarea semnalelor dorite.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Proiectarea cu Circuite Logice Programabile (ID: 163091)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
