Documente Academic
Documente Profesional
Documente Cultură
3
Capitolul 1
B u c ă ţi P C S C e ll u l a r P C V C R T V c o lo r T V c a b l u
DVB T V a lb - Vârful pietii Profit redus pentru
n eg ru Profit pentru NR.1 plutonul doi pe piata
DVD
pe piata
1 m il io n
Sfârtitul
Start pe piata ferestrei de piata
5 10 15 20
A ni
Figura 1 Dinamica schimbărilor în industria Figura 2 Importanţa scurtării timpului de lansare pe piaţă a
electronică unui produs
4
Introducere în circuite digitale
Figura 3 Comparaţie între tipuri de circuite digitale în funcţie de două dintre criteriile de performanţă
După cum se poate vedea din figură circuitele reconfigurabile (FPGA) oferă un
compromis între performanţele unui circuit specific şi flexibilitatea unui circuit
programabil prin soft. Ca şi circuitele ASIC, acestea se remarcă prin abilitatea de a
implementa direct circuite specializate în hardware. În plus, la fel ca şi circuitele DSP
pot fi uşor modificate în funcţie de modificarea condiţiilor de operare şi a setului de
date.
În tabelul T.1 este prezentată o comparaţie, ţinându-se cont de toate criteriile
enumerate mai sus, între cele cinci arhitecturi de circuite digitale care pot fi folosite în
parte de control a unei acţionări electrice.
Tabel T.1 Comparaţie între diferite tipuri de arhitecturi folosite pentru aplicaţiile în timp real
Uşurinţă
Implementa
Performanţ în Consum de Flexibilitate
- Preţ Concluzii
a dezvoltar putere ulterioară
re pe piaţă
e
Nesatisfăcăt
Satisfăcăt Nesatisfăcăt Satisfăcăto
ASIC or Foarte Bun Foarte Bun
or
Bun
or r
Foarte Bun Foarte
DSP Bun Bun
Bun
Foarte Bun Foarte Bun Foarte Bun
Bun Foarte
FPGA Foarte Bun Bunr
Bun
Satisfăcător Bun Bun
Foarte Bun
MCU Satisfăcător Foarte Bun Bun Satisfăcător Foarte Bun Bun
RISC/
Bun Bun Satisfăcător Bun Satisfăcător Foarte Bun Bun
GPP
5
Capitolul 1
Circuitele DSP
Din punctul de vedere al timpului de implementare pe piaţă circuitele DSP au
primit calificativul foarte bine. Aceste circuite alături de procesoarele RISC şi de
microcontrolere sunt procesoare programabile prin soft, ceea ce scurtează perioada
de integrare pe piaţă a unui produs final. Ca şi performanţe circuitele DSP au primit
calificativul foarte bine fiind în competiţie strânsă cu circuitele FPGA şi ASIC.
În ceea ce priveşte preţul, circuitele DSP sunt devansate doar de circuitele ASIC
şi de microcontrolere, însă sunt foarte aproape de cele din urmă. Din punctul de
vedere la consumului de putere circuitele DSP au un consum redus, mai ales cele
proiectate special să îndeplinească acest criteriu.
Circuitele DSP au devenit foarte populare astfel că s-au dezvoltat medii software
care uşurează şi scurtează timpul de proiectare. După cum s-a amintit şi într-un
paragraf anterior circuitele DSP oferă flexibilitate maximă datorită posibilităţii de a fi
reprogramate prin soft.
Circuitele FPGA
Circuitele digitale sunt mai simplu de proiectat şi testat deoarece pot fi proiectate
la nivel de poartă logică sau nivel funcţional. Faza de proiectare durează între 0,5
până la 2 luni pentru FPGA
Circuitele FPGA se situează printre circuitele cu cea mai scurtă perioadă de
dezvoltare şi integrare pe piaţă. Totuşi sunt devansate de circuitele DSP,
microprocesoarele RISC şi a microcontrolere datorită flexibilităţii mai bune a
acestora. În ceea ce priveşte performanţele circuitele FPGA au primit calificativ
maxim, implementarea unui proiect făcându-se hardware performanţele se apropie
de cele ale circuitelor ASIC.
Dezavantajul major al circuitelor FPGA este preţul, ele fiind cele mai scumpe în
comparaţie cu toate circuitele de control luate în discuţie. Un alt neajuns major al
circuitelor FPGA este şi consumul crescut de putere, datorat atât tehnologiei în care
sunt executate cât şi resurselor hardware nefolosite în întregime. În ceea ce priveşte
uşurinţa în dezvoltare circuitele FPGA au primit calificativul maxim, în condiţiile în
care se presupune că mediul de dezvoltare nu este foarte scump, iar proiectantul
este specializat în hardware nu software.
Circuitele FPGA sunt prin definiţie circuite reconfigurabile, aceasta conferind o
flexibilitate crescută a acestora. Totuşi unii susţin că reprogramarea hardware a
6
Introducere în circuite digitale
Microcontrolere
Aceste circuite sunt programabile prin soft, prin urmare la fel ca şi DSP-urile au
un timp scurt de implementare pe piaţă. Performanţele microcontrolerelor în ceea ce
priveşte aplicaţiile în timp real sunt modeste ele având resurse de calcul matematic
modeste, de asemenea şi frecvenţele de lucru sunt mai reduse.
După circuitele ASIC, microcontrolerele sunt cele mai ieftine circuite folosite în
aplicaţiile în timp real şi de control. Consumul de putere al microcontrolerelor este
considerat ca fiind satisfăcător.
Din punctul de vedere al uşurinţei de dezvoltare microcontrolerele au primit
calificativul bine. Timpul de dezvoltare poate fi redus dacă se folosesc limbajele de
nivel înalt şi bibliotecile cu module standard. Există numeroşi furnizori de
microcontrolere şi prin urmare o reţea de suport bine pusă la punct, deşi în special
experienţa celor care oferă suport este mai degrabă în domeniul aplicaţiilor integrate
(embedded) decât în cel al aplicaţiilor în timp real.
Microcontrolerele sunt circuite ce pot fi programate prin soft, astfel că flexibilitatea
acestora este implicită.
7
Capitolul 1
Filtru FIR - 256 11.16 MSPS 180 MSPS 300 MSPS 140 MSPS
date/coeficienţi - 720 MHz 180 MHz 300 MHz 140 MHz
16-biţi
FFT Complex 8,5 µs 0,914 µs* 0,853 µs** 0,914 µs***
- 1024 puncte, 720 MHz 140 MHz 150 MHz 140 MHz
date 16-biţi
* Folosind 96 de multiplicatoare dedicate şi 24 blocuri RAM din Vitex-II (XC2V3000)
** Folosind 96 de multiplicatoare dedicate şi 24 blocuri RAM din Vitex-II Pro
(XC2VP30)
*** Folosind 96 de multiplicatoare dedicate şi 24 blocuri RAM din Spartan-3
(XC3S4000)
Circuitul FPGA XC2V8000 are 46.592 celule logice elementare (slice-uri), care
permit efectuarea a aproximativ 461 miliarde MAC/s şi de asemenea 168
multiplicatoare dedicate care lucrează la frecvenţa de ~ 180 Hz (pentru 8x8) astfel
încât:
deci un total general de 461 + 30 = 491 miliarde MAC/s, spre deosebire de cele
numai 5,7 miliarde MAC/s ale procesorului DSP, TMS320C64x . [83]
8
Introducere în circuite digitale
9
Capitolul 1
10
Introducere în circuite digitale
video, module care includ atât captura, compresia imagini cât şi transportul
prin intermediul modululeler fast şi gigaethernet. Soluţii pentru controlul
motoarelor.
11
Capitolul 1
12
Capitolul 2
2.1 Generalităţi
între 100 şi 999 porţi logice. Aceste circuite sunt cunoscute pe piaţă ca şi dispozitive
logice programabile simple sau SPLD-uri (Simple PLD). Structura de tip arie logică
SI-SAU recomandă folosirea circuitele SPLD pentru implementarea ecuaţiilor logice
sub forma sumelor de produse. Unele dintre îmbunătăţirile recente ale circuitelor
SPLD sunt: porturi de intrare/ieşire programabile, porturi de intrare/ieşire
bidirecţionale, registre de configurare mai flexibile şi o schemă de clock mai flexibilă.
Circuitele PLD sunt folosite pentru a înlocui circuitele de tip SSI (Small Scale
Integrated) şi MSI (Medium Scale Integrated), un singur circuit PLD poate fi
echivalentul a zeci de circuite SSI. Alte avantaje oferite de circuitele PLD sunt:
consumul redus de putere, performanţe mai bune datorită lungimi mult reduse a
interconexiunilor şi o fiabilitate mai ridicată. Circuitele PLD le regăsim atât în
tehnologie bipolară cât şi în tehnologie CMOS. Cu toate ca au o arhitectură simplă şi
o densitate mult mai mică decât CPLD-urile (Complex Programmable Logic Devices)
circuitele PLD oferă încă suficiente performanţe pentru a rezista pe piaţă, astfel
pentru o tehnologie CMOS de 0.5 µm pentru o frecvenţă de 200MHz întârzierile sunt
de numai 3.5ns. Circuitele SPLD sunt mai uşor de utilizat, de proiectat şi programat.
Produsele care beneficiază de avantajele oferite de circuitele SPLD sunt
componentele de reţea care cer performanţe ridicate per ansamblu: hub-uri de reţea
bridge-uri, routere. Alte produse vizate de SPLD-uri sunt: sunt cele din zona
telefoniei mobile, video game-urilor şi a hand-held web browserelor.
Producătorii cu o prezenţă puternică pe piaţa SPLD-urilor sunt: Vantis care
este o firmă subsidiară a recunoscutei firme AMD (Advanced Micro Devices), Philips
Semiconductors care oferă familia de PLD-uri cu consum redus de putere
CoolRunner disponibil pentru aplicaţii 3,3/5V şi firma Lattice Semiconductor care a
introdus circuitele GAL20LV8D şi GAL20LV10D de mare viteză şi pentru aplicaţii la
3,3V.
14
Introducere în domeniul circuitelor logice programabile
15
Capitolul 2
amintit şi într-un paragraf anterior termenii folosiţi pentru a descrie circuitele logice
programabile de mare capacitate sun CPLD şi FPGA. Distincţia între cei doi termeni
devine din ce în ce mai neclară cu toate că există câteva caracteristici care despart
circuitele definite de aceştia. Circuitele din familia CPLD au resurse de interconectare
fixe realizate prin intermediul unei matrici de conexiuni. Circuitele CPLD pot fi
asimilate ca şi o arie de circuite PLD simple cum ar fi circuitul 22V10. Complexitatea
circuitelor CPLD este dată de numărul sporit de pini şi de numărul relativ mare de
macrocelule.
16
Introducere în domeniul circuitelor logice programabile
sistem folosit în cazul circuitelor XILINX din seria XC9500 este IEEE1149.2. În
cadrul acestui standard reprogramarea în sistem are loc prin plasarea dispozitivelor
CPLD în lanţ pentru ca datele să poată fi transmise tuturor dispozitivelor din lanţ
conform unui algoritm. Prin programarea circuitelor cu ajutorul algoritmului de testare,
circuitul se poate reconfigura în sistem cu o securitate ridicată, protejându-l astfel
împotriva decriptării neautorizate. Acest standard face apel la busul JTAG (Joint
Tasck Action Group) şi implică următoarele linii:
TMS – Test Mode Select = selectare mod test;
TDI – Test Data Input = semnal intrare test;
TDO – Test Data Output = semnal ieşire test;
TCK – Test Clock = semnal de clock test.
Atât circuitele CPLD cât şi cele FPGA pot fi programate prin intermediul unei
memorii flash SRAM, dar numai circuitele CPLD pot fi programate ca EPROM sau
EEPRO. Aceasta presupune că circuitele CPLD sunt prevăzute cu elemente de
stocare nevolatile, care permit aplicaţiilor implementate în CPLD să ruleze imediat ce
sunt puse sub tensiune. În contrast cu circuitele CPLD, FPGA-urile care au ca celule
de bază memorii de tip SRAM au nevoie de un dispozitiv extern, cum ar fi un
EEPROM din care să-şi încarce programul de configurare.
De-a lungul evoluţiei circuitelor PLD de capacitate mare s-au distins două
arhitecturi: segmented-block-based [SBB] şi channel-arry-based [CAB], pe tot
parcursul acestei lucrări se vor folosii abrevierile SBB şi CAB pentru a le definii.
Diferenţele majore dintre cele două tehnologii sunt legate de arhitectura
macrocelulelor şi de structura reţelei de conexiuni dintre macrocelule. Fiecare dintre
cele două arhitecturi prezintă avantaje şi dezavantaje.
Un circuit PLD cu arhitectură de tipul SBB (vezi figura 2.4a) este alcătuit în
principal din câteva blocuri mari care conţin porţi logice de tipul ŞI/SAU şi o arie de
elemente logice conectate la celulele I/O (input/output = intrare/ieşire) prin
intermediul unei matrici de interconexiuni programabilă. De această arhitectură
beneficiază circuitele CPLD implementate ca şi EPROM-uri sau EEPROM-uri în
tehnologie CMOS.
17
Capitolul 2
Figura 2.4 Diagramă bloc, prezintă arhitectura segmentată (a) şi ne-segmentată (b) specifică
circuitelor CPLD
O arhitectură CAB (vezi figura 2.4.b) constă dintr-o arie de blocuri logice
programabile de dimensiuni relativ reduse înconjurată la periferie de blocuri I/O.
Blocurile logice programabile sunt conectate între ele prin structuri de interconectare
distribuite. Circuitele FPGA fabricate de firma XILINX beneficiază de arhitectura mai
sus menţionată. Avantajele majore ale arhitecturii CAB constau în faptul că: este o
arhitectură bazată pe elemente de tip registru, conţine multe blocuri I/O, blocurile
logice sunt complet decuplate de blocurile I/O şi există posibilitatea reprogramări
conexiunilor dintre acestea.
În comparaţie circuitele CPLD bazate pe tehnologia SBB sunt mai rapide şi
mai predictibile în ceea ce priveşte determinarea întârzierilor datorită structurii
continue de interconectare. Datorită caracteristicilor enumerate mai sus acest tip de
circuite este recomandat în cazul implementării aplicaţiilor de control descrise cu
FSM-uri (Finite State Machine).
Vom continua dezbaterea asupra avantajelor oferite de circuitele CPLD în
comparaţie cu circuitele FPGA, luând în discuţie gradul de flexibilitate al fiecăruia
dintre ele în cadrul aceluiaşi mediu de proiectare. Datorită faptului că structura
CPLD-urilor se bazează pe arhitectura PAL apare posibilitatea de a prevedea
întârzierile din circuit, fiind astfel mai puţin afectate de modalitatea de conectare a
macrocelulelor decât circuitele FPGA. În cazul acestora din urmă este destul de
greu să se prevadă întârzierile din circuit datorită faptului că structura de
interconectare este mai flexibilă oferind mai multe posibilităţi de conectare pentru
aceeaşi situaţie, stabilirea traseelor dintre diferite blocuri logice fiind foarte
dependentă de mediul de proiectare folosit.
Pe măsură ce s-a îmbunătăţit arhitectura şi capacitatea circuitelor CPLD şi
FPGA, aceastea au devenit o alternativă din ce în ce mai evidentă la ariile de porţi
logice. Ultimele tehnologii de fabricare a circuitelor CPLD şi FPGA se încadrează în
18
Introducere în domeniul circuitelor logice programabile
Figura 2.5 Evoluţia circuitelor PLD de mare capacitate în ceea ce priveşte tehnologia de realizare şi
densitatea de porţi logice/chip.
19
Capitolul 2
figura 2.6. Tehnologia de montare prin găuri necesită inserarea capsulei pe placă şi
lipirea acesteia prin metalizare. Capsulele ceramice folosite pentru acest tip de
tehnologie ocupă mai mult spaţiu pe placă decât capsulele folosite în tehnologia de
montare pe suprafaţă. Avantajul acestui tip de capsule constă în faptul că sunt mai
solide din punct de vedere mecanic, deci sunt recomandate în aplicaţiile militare şi
spaţiale.
Figura 2.7. Tipuri de capsule disponibile pentru circuitele PLD în funcţie de numărul de porţi logice
20
Introducere în domeniul circuitelor logice programabile
21
Capitolul 2
DESCRIERE HDL
SIMULARE
FUNCŢIONALĂ
SIMULARE
SIMULARE
CONSTRÂNGERI COMPILARE ŞI DE TIMP
SNTEZĂ
NETLIST ÎN FORMAT EDIF
BIBLIOTECI OPTIMIZARE/PLASARE ŞI
TEHNOLOGICE INTERCONECTARE
FPGA/CPLD
CIRCUIT FPGA/CPLD
22
Introducere în domeniul circuitelor logice programabile
care pot veni în întâmpinarea cereri utilizatorilor mai puţini pretenţioşi şi cu resurse
financiare mai reduse.
În figura 2.8 este prezentată metodologia de proiectare specifică mediilor EDA
(Electronic Design Automation = proiectare electronică automatizată). Pentru
proiecte care depăşesc 10.000 de porţi logice este recomandat ca descrierea de
bază a proiectului să fie în VHDL sau în Verilog, la acestea se pot adăuga şi
metodele clasice (schematic şi maşină de stări). Producătorii de circuite PLD
furnizează biblioteci care conţin descrieri sub forma de netlisturi ale circuitelor pe
care le produc. Aceste biblioteci permit firmelor producătoare de soft de proiectare
să-şi orienteze programele către o anumită familie de circuite PLD şi către un anumit
tip de arhitectură a macrocelulelor. În general producătorii de programe EDA
integrează partea de descriere, simulare, sinteză şi analiză de timp a proiectelor. În
completare producătorii de circuite PLD integrează programe de plasare a
macrocelulelor şi de interconectare a acestora, specifice fiecărui tip de arhitectură în
parte.
Majoritatea proiectanţilor care folosesc circuite FPGA au adoptat metoda de
proiectare ierarhică, împrumutată de la proiectanţii de circuite ASIC, datorită creşterii
complexităţii circuitelor PLD. Diferenţa care apare între proiectarea FPGA şi cea
ASIC este în procesul de verificare. Proiectantul de circuite ASIC foloseşte modalităţi
de simulare extinse pentru a se asigura de succesul plasării circuitului pe siliciu, în
timp ce proiectantul de circuite FPGA poate face verificarea finală în circuit cu un
impact minim asupra duratei procesului de proiectare.
Avantajele oferite de programele care folosesc sinteza logică devin evidente
pentru proiecte care complexe (ex. 10.000-100.000 porţi logice). Totuşi pentru
anumite proiecte aceste programe de sinteză logică pot să producă circuite care sunt
mai mari şi mai lente decât dacă ar fi fost descrise direct cu porţi logice. Eficienţa
acestor programe este foarte dependentă de experienţa proiectantului care le
foloseşte.
După optimizarea proiectului la nivele superior acesta va fi convertit din
descrierea de tip Boolean într-un netlist (listă de conexiuni) bazat pe module FPGA.
Logica booleană va fi astfel structurată încât să respecte constrângerile de timp.
Elementele secvenţiale vor fi implementate în bistabili. Odată verificată
corectitudinea proiectului acesta va fi transferat programului de implementare fizică.
Aceste programe de plasare şi interconectare a macrocelulelor folosesc informaţiile
rezultate în urma sintezei vizavi de constrângerile de timp pentru a calcula traseele
cu întârzierile cele mai mari şi ale optimiza. Odată plasate şi interconectate (placed &
routed) componentele se extrag informaţii cu privire la întârzierile post-plasare sau
post-layout. Aceste informaţii împreună cu fişierul netlist rezultat în urma
implementării se folosesc pentru simulare de timp completă. În urma acestei simulări
se obţin informaţii cu privire la frecvenţa de lucru maximă a proiectului.
23
Capitolul 2
În alegerea unui circuit PLD pentru o aplicaţie dată se ţine cont de densitatea
şi performanţele acestuia. Cu cât este mai redusă capacitatea unui circuit PLD, cu
atât performanţele acestuia vor fi mai ridicate. Totuşi folosirea circuitelor de
capacitate redusă nu este o soluţie în cazul proiectelor mai complexe existând
posibilitatea ca acesta să nu poată fi implementat într-un singur circuit. În cazul
circuitelor PLD 22V10 frecvenţa maximă de lucru este de 175 MHz, iar în cazul
circuitelor CPLD aceasta poate fi de aproximativ 150 MHz. în multe cazuri această
informaţie furnizată de producătorii de circuite PLD este valabilă numai pentru cele
mai simple părţi ale proiectului per ansamblu frecvenţa de lucru fiind mai mică. După
cum se poate observa este dificil de făcut o estimare a performanţelor proiectului pe
baza specificaţiilor date de producători.
Performanţele circuitelor CPLD sunt şi mai greu de prevăzut în comparaţie cu
circuitele PLD simple. Unele circuite CPLD având specificaţii de timp în funcţie de
numărul de produse ale funcţiilor implementate şi în funcţie de fanout. În cele din
urmă programul de compilare va fi cel care va decide viteza maximă de lucru a
proiectului. După cum am amintit şi într-un paragraf anterior în cazul circuitelor FPAG
este şi mai greu de estimat întârzierea maximă de propagare şi frecvenţa maximă de
lucru, aceasta datorită resurselor de interconectare foarte flexibile de care dispun
acest tip de circuite. În general frecvenţa de lucru a unui proiect implementat într-un
circuit FPGA este mai mică decât dacă implementarea se face într-un circuit CPLD.
Atuul principal al circuitelor FPGA rămâne capacitatea de implementare.
Selectarea unui circuit PLD pentru un proiect dat se face în funcţie de
densitatea circuitului, ţinându-se cont de numărul de porţi folosite raportat la numărul
total de porţi disponibile. Modalitatea de specificare a numărului de porţi logice
pentru circuitele FPGA şi CPLD este diferit de la un producător la altul, prin urmare
capacitatea circuitelor PLD poate fi comparată numai în cazul în care provin de la
acelaşi producător.
Un alt factor important în alegerea unui circuit PLD este consumul de putere,
circuitele logice programabile bazate pe tehnologie EEPROM consumă mai mult
decât circuitele bazate pe tehnologie SRAM.
Cele mai frecvente aplicaţii orientate către circuite de tip PLD sunt cele care
conţin automate de stării. Pentru acest tip de aplicaţii circuitele CPLD sunt preferate
circuitelor FPGA datorită faptului că în arhitectura lor sunt prezenţi bistabili de tip T,
acesta având ca rezultat reducerea logici de implementare şi o mai bună compactare
a proiectului. Implementarea optimă a automatelor de stare în circuitele FPGA
depinde de tehnica de codificare a stărilor pentru a reduce logica combinaţională
dintre stări. Tehnica one-hot care foloseşte câte un registru per stare este
recomandată în cazul circuitelor FPGA. În general arhitectura FPGA este mult mai
recomandată în cazul aplicaţiilor care descriu operaţii aritmetice care implică registre
logice.
În concluzie cele mai importante criterii luate în considerare la alegerea unui
circuit PLD sunt:
- costul circuitului FPGA sau CPLD;
24
Introducere în domeniul circuitelor logice programabile
25
Capitolul 3
3.1 Generalităţi
Înainte de a studia limbajul în sine este util să studiem puţin mediul în care
este integrat. Într-un proiect care are la bază descrierea VHDL a circuitului există
câţiva paşi care trebuie urmaţi, aceştia sunt denumiţi adesea design flow. Aceşti paşi
sunt evidenţiaţi în figura 3.1.
Introducere în limbajul de descriere hardware – VHDL
Etapa iniţială (de descriere) începe prin stabilirea blocurilor funcţionale la nivel
de diagrame bloc. Proiectele complexe sunt de obicei ierarhizate, VHDL-ul este un
mediu care permite definirea modulelor şi a interfeţelor corespunzătoare, urmând ca
detaliile funcţionale să fie adăugate ulterior.
Pasul următor constă în scrierea codului VHDL pentru fiecare modul . Orice
editor text poate fi folosit pentru descrierea modulelor deoarece VHDL este un limbaj
bazat pe text. Totuşi mediile de proiectare includ editoare de text specializate pentru
VHDL, editoare care uşurează mult sarcina proiectanţilor prin facilităţile pe care le
oferă: evidenţiere automată a cuvintelor cheie, tipare cu structurile de program cel
mai frecvent folosite, verificare automată a sintaxei codului VHDL şi accesarea
rapidă a compilatorului.
Odată scris codul trebuie compilat, această operaţie este efectuată de un
compilator VHDL care va analiza codul atât din punctul de vedere al erorilor de
sintaxă ci şi din punctul de vedere al compatibilităţii modulului cu alte module la care
se referă. De asemenea prin compilare sunt create informaţii interne care sunt
necesare simulatorului pentru analiza ulterioară a proiectului.
În simularea proiectului descris în cod VHDL se apelează la un simulator de
obicei integrat în mediul de proiectare. Un astfel de simulator permite utilizatorului să
aplice semnale de intrare circuitului proiectat şi să observe comportarea circuitului
analizând semnalele de ieşire. În proiecte de anvergură mică semnalele de intrare se
pot aplica manual iar cele de ieşire pot fi studiate fiecare în parte. Dar pentru proiecte
mai mari aceasta poate devenii o sarcină foarte anevoioasă astfel că VHDL-ul oferă
posibilitatea de a crea aşa numitele test-bench-uri care permit generarea automată a
semnalelor de intrare şi compararea semnalelor de ieşire cu semnalele de ieşire
aşteptate.
Etapa de simulare este cuprinsă într-o etapă mai largă de verificare. Astfel
există două moduri de a verifica un proiect, primul este verificarea funcţională, când
circuitul este studiat din punct de vedere al funcţionării logice, întârzierile şi
parametrii fiind consideraţi nuli. Cel de al doilea mod de verificare, este cel în care se
studiază comportarea circuitului ţinându-se cont de întârzierile estimate, cum ar fi
întârzieri de setup şi hold time în cazul bistabilelor sau întârzierilor prin porţi în cazul
circuitelor combinaţionale. Este o practică bună ca cele două tipuri de verificări să fie
făcute cu atenţie în această etapă pentru a evita aşa numita fază finală (vezi figura
27
Capitolul 3
3.1), totuşi mai pot apărea surprize deoarece întârzierile dintr-un circuit sunt foarte
dependente de rezultatele sintezei şi al asamblării (fitting stage) proiectului pentru un
anumit tip de circuit programabil.
După verificare suntem pregătiţi să trecem la etapa finală. Primul pas în
această fază este sinteza (synthesis) codului VHDL, care constă în convertirea
codului într-un set de primitive sau componente care pot fi asamblate în tehnologia
către care este orientat proiectul (FPGA sau CPLD). Pentru PLD-uri sau CPLD-uri
sculele de sinteză trebuie să genereze două nivele de ecuaţii SOP (Sum-of-Product
= suma produselor). În cazul circuitelor ASIC este generată o listă de porţi şi un
netlist care specifică modul în care aceste porţi sun interconectate. Proiectantul
poate să “ajute” sculele de sinteză prin specificarea unor constrângeri specifice
tehnologiei, cum ar fi număr de nivele logice sau puterea bufferelor logice.
În etapa de asamblare (fitting) este folosit un program (fitter) pentru plasarea
(mapping stage) primitivelor sau a componentelor sintetizate în spaţiul oferit de
circuitul programabil. În cazul CPLD-urilor aceasta constă în atribuirea ecuaţiilor
elementelor AND-OR disponibile. Pentru un ASIC acest proces constă în întocmirea
unei “hărţi” de porţi logice şi găsirea unei modalităţi de plasare a acesteia în cipul
fizic, iar procesul este numit place-and-route. În această etapă se mai pot exercita
câteva constrângeri asupra proiectului cum ar fi plasarea anumitor module în chip
sau atribuirea de pini intrărilor şi ieşirilor externe.
Faza finală este cea de verificarea întârzierilor (timing verification). Abia în
această fază apar întârzierile reale din circuit, întârzieri datorate lungimi traseelor,
încărcărilor electrice şi a altor factori.
La fel ca în decursul oricărui proces de proiectare este posibil să avansezi doi
paşi înainte si apoi să revi un pas înapoi sau chiar mai rău. După cum se poate
observa şi în figura 3.1 fiecare etapă oferă posibilitatea de a revenii asupra soluţiilor.
Problema cea mai nedorită este acea de a fi obligat să revii din faza finală , de
exemplu când un proiect sintetizat ocupă mai mult spaţiu decât cel oferit de circuitul
FPGA sau CPLD folosit. În aceste cazuri trebuie revenit asupra proiectului şi trebuie
regândit, aceasta demonstrează că oricât de performante ar fi uneltele folosite pentru
sinteză şi implementare acestea nu pot substitui gândirea proiectantului.
28
Introducere în limbajul de descriere hardware – VHDL
29
Capitolul 3
entity entity-name is
port (signal-names : mode signal-type;
signal-names : mode signal-type;
…
signal-names : mode signal-type);
end entity-name;
30
Introducere în limbajul de descriere hardware – VHDL
enumerate în tabelul T3.3 pot apărea în orice ordine. Sintaxa pentru definirea unui
semnal este următoarea:
signal signal-name: signal-type;
În cadrul unei arhitecturii se pot definii unul sau mai multe semnale interne, iar
acestea în cadrul unei diagrame logice au ca şi corespondent traseele. Semnalele
pot fi atât scrise cât şi citite în cadrul arhitecturii.
În limbajul VHDL variabilele (variables) sunt identice semnalelor doar că ele
nu au corespondent fizic într-un circuit. În tabelul T3.3 ele nu apar deoarece ele se
definesc la nivel mult mai jos în cadrul funcţiilor, procedurilor şi al proceselor, după
cum vom vedea mai târziu. Declararea variabilelor se face identic cu cea a
semnalelor:
variable variable-name: variable-type;
Tipurile bit şi bit-vector sunt destul de puţin folosite, în schimb versiunile definite de
utilizator ale tipului respectiv sunt mult mai folositoare după cum vom vedea mai
departe. Tipul integer (întreg) cuprinde domeniul numerelor întregi incluzând
domeniul (–3.147483.647 , + 3.147483.647) adică (–2 31 , +231-1). Tipul boolean are
31
Capitolul 3
două valori true şi false. Tipul character (caracter) include toate caracterele din setul
de caractere ISO* (International Organization of Standardization) exprimate pe 8 biţi,
primele 128 fiind caractere ASCII. În tabelul T3.5 sunt prezentaţi operatorii specifici
tipurilor integer şi boolean.
Cele mai folosite tipuri în programele VHDL sunt aşa numitele tipuri definite de
utilizator (user defined types), unul dintre acestea este tipul enumerare (enumerated
type) definit printr-o înşiruire de valori. Declararea tipului enumerare se face conform
tabelului T3.6.
Tabelul T3.6 Sintaxa VHDL pentru declararea tipului şi a constantelor
*
"ISO" este un cuvânt derivat din cuvântul grecesc „isos”, care înseamnă „egal” şi este rădăcina prefixului „iso-„
care este folosit în termeni ca: izometric (se spune despre entităţi care au dimensiuni egale), izonomie (egalitate a
legilor sau a oamenilor în faţa legii), etc.
32
Introducere în limbajul de descriere hardware – VHDL
În primele două exemple start şi end sunt definiţi de tipul integer şi stabilesc
numărul total de elemente al ariei. În ultimele trei exemple toate valorile unui tip
existent sau numai un subset de valori vor fi cuprinse de arie. Exemple de matrici
sunt date în tabelul T3.9.
33
Capitolul 3
Unul dintre exemplele mai interesante este cel în care o constantă WORD_LEN
este folosită în cadrul declaraţiei de arie, exemplificând astfel că valoarea domeniului
poate fi dată de o expresie. Cel de al treilea exemplu şi mai interesant ne artă că un
element al ariei poate fi la rândul lui o arie, aceasta rezultând într-o matrice
bidimensională. Se consideră implicit că elementele unei matrici sunt ordonate de la
stânga la dreapta la fel ca şi domeniul index, astfel cel mai din stânga element al
ariilor mountly_count, word,reg_file este 1, 31, 1. Dacă se doreşte accesarea unui
singur element din matrice se va folosii numele matrice iar în paranteze indexul
elementului, exemplu mountly_count(11) aceasta pentru a accesa cel de al 11-lea
element al ariei mountly_count.
O matrice literală se defineşte (array literals) prin înşiruirea între paranteze a valorilor
elementelor. Elementele variabilei B de tipul byte pot primii toate valoarea 1 logic
scriind o expresie de forma:
Limbajul VHDL permite de asemenea notaţii mai scurte, de exemplu pentru a atribui
valoarea 0 logic tuturor biţilor variabilei W de tip word, mai puţin biţilor cei mai puţini
semnificativi corespunzători fiecărui byte se va scrie expresia:
Expresiile anterioare pot fi rescrise folosind şirurile de caractere, după cum urmează:
B := “11111111”;
W:= “11111110111111101111111011111110”;
34
Introducere în limbajul de descriere hardware – VHDL
Tabelul T3.10 Sintaxa VHDL pentru Tabelul T3.11 Program VHDL pentru descrierea funcţiei de
definirea unei funcţii interdicţie (inhibit)
35
Capitolul 3
Standardul logic IEEE defineşte multe funcţii care lucrează cu tipurile standard
std_logic şi std_logic_vector, aceste funcţii definesc operaţiile logice şi aritmetice de
bază (and, or, +, - …). Facilitatea overload operators (supraîncărcarea operatorilor)
oferită de VHDL îi permite utilizatorului să apeleze o funcţie care este invocată ori de
câte ori se foloseşte unul din operatorii cunoscuţi (and, or, +, etc). În VHDL pot să
existe câteva definiţii diferite pentru fiecare operator (overload), dar compilatorul va
alege în mod automat definiţia care se potriveşte tipului de operanzi cu care este
asociat operatorul.
Un exemplu elocvent de definire a operatorului and din cadrul pachetului
(package) standard IEEE definit pentru operanzi de tip std_logic este prezentat în
tabelul T3.13.
36
Introducere în limbajul de descriere hardware – VHDL
În acest caz pe lângă valoarea întreagă care trebuie convertită (ARG) mai trebuie
specificat şi pe câţi biţi să fie exprimat rezultatul (SIZE). Variabila (result) declarată
local în funcţie are o valoare a indexului dependentă de valoarea intrării (SIZE), din
acest motiv valoarea atribuită acestei intrări a funcţiei trebuie să fie o constantă sau o
mărime care este recunoscută de compilator. Pentru efectuarea conversiei în funcţie
s-a folosit algoritmul de împărţiri succesive.
În limbajul VHDL mai este definită noţiunea de procedură (procedure) care
este similară cu funcţia doar că nu returnează o valoare. La fel cum o funcţie poate fi
apelată în locul unei expresii şi o procedură poate fi apelată în locul unei declaraţii.
Dacă argumentele unei proceduri sunt declarate de tipul out sau inout, va exista
totuşi o valoare returnată.
37
Capitolul 3
38
Introducere în limbajul de descriere hardware – VHDL
Toate obiectele declarate între cuvântul cheie package şi primul cuvânt cheie end
sunt “vizibile “ în toate fişierele din proiect care folosesc package-ul respectiv, iar
obiectele care urmează cuvântului cheie package body sunt vizibile doar local. În
prima parte a sintaxei funcţiile sunt doar declarate (function declarations) nu şi
definite ceea ce înseamnă că este vizibil doar numele funcţiei, argumentele şi
tipurile, definiţia funcţiei fiind dată în corpul package-ului (package body) şi nu este
vizibilă pentru utilizatorul funcţiei.
39
Capitolul 3
40
Introducere în limbajul de descriere hardware – VHDL
Circuitul din figura 3.4 va pune o valoare 1 logic la ieşirea F ori de câte ori la
intrare se va afla forma binară a unuia dintre numerele prime: 1,3,5,7,11,13, altfel
ieşirea F va avea valoare 0 logic.
Prin declararea entităţii se declară intrările şi ieşirile circuitului. În cadrul
arhitecurii sunt declarate toate semnalele care vor fi folosite de asemenea şi numele
componentelor (INV, AND2, AND3, AND4) care sunt predefinite şi vor fi apelate din
biblioteca IEEE. Deoarece descrierea circuitului este concurenţială în orice ordine am
introduce componentele se va sintetiza acelaşi circuit, iar funcţionarea va fi aceeaşi.
Tabelul 3.18 Exemplu de descriere structurală în limbaj VHDL a unui detector de numere prime
41
Capitolul 3
Tabelul T3.20 Entitatea şi arhitectura VHDL corespunzătoare unei porţi inversoare pe 8-biţi
42
Introducere în limbajul de descriere hardware – VHDL
43
Capitolul 3
44
Introducere în limbajul de descriere hardware – VHDL
45
Capitolul 3
opţiunile pentru care F ia valoarea ‘1’ ar fi putut fi scrise folosind o singură clauză
when, dar pentru o înţelegere mai bună s-au folosit mai multe clauze.
46
Introducere în limbajul de descriere hardware – VHDL
unui proces, variabilele au rolul de a păstra stări, ele nu sunt vizibile în afara
procesului, iar corespondentul fizic într-un circuit real poate să fie (dar nu
întotdeauna) un semnal aceasta depinzând de felul în care sunt descrise. Sintaxa
VHDL pentru definirea unei variabile este asemănătoare cu cea pentru definirea unui
semnal, “variable variable-names: variable-types;”.
47
Capitolul 3
48
Introducere în limbajul de descriere hardware – VHDL
49
Capitolul 3
Tabelul T3.34 Sintaxa de bază Tabelul T3.35 Sintaxa instrucţiunii for loop
a instrucţiunii loop
Tabelul T3.36 Arhitectura VHDL a detectorului de numere prime folosind instrucţiunea for loop
50
Introducere în limbajul de descriere hardware – VHDL
Nici unul dintre exemplele VHDL prezentate până în acest punct nu tratează
întârzierile care apar în circuitele reale, dar limbajul permite modelarea acestor
întârzieri.
Unul dintre cuvintele cheie care permit introducerea întârzierilor este after care
poate fi asociat cu orice tip de atribuire de semnal (secvenţială, concurenţială,
condiţională şi selectată). Arhitectura porţi logice interdicţie (BUT-NOT), poate fi
rescrisă după cum urmează:
Z <= ‘1’ after 4ns when X = ‘1’ and Y =’0’ else ‘0’ after 3 ns;
Această poartă este astfel modelată încât semnalul de ieşire faţă de cel de intrare va
avea o întârziere de 4ns la tranziţia din 0 în 1 şi 3ns la tranziţia din 1 în 0.
O altă instrucţiune care invocă dimensiunea timp este instrucţiunea
secvenţială wait. Aceasta poate fi folosită pentru a suspenda executarea unui proces
pentru o anumită perioadă de timp. În tabelul T3.38 este prezentat un program aşa
numit test-bench, care foloseşte instrucţiunea wait pentru a genera formele de undă
simulate necesare la testarea funcţionării porţii logice interdicţie.
Cele două instrucţiuni care invocă dimensiunea timp prezentate anterior nu
sunt sintetizabile ele sunt utile însă la modelarea test-bench-urilor.
51
Capitolul 3
După cum s-a afirmat şi la începutul acestei secţiuni limbajul VHDL a fost mai
întâi dezvoltat ca limbaj de descriere şi simulare a circuitelor şi abia mai târziu acest
limbaj a fost adaptat pentru sinteză. Astfel că limbajul are multe caracteristici şi
construcţii care nu pot fi sintetizate. Subsetul de instrucţiuni şi programe prezentate
în această secţiune sunt sintetizabile majoritatea.
Trebuie de reţinut că modul în care este descris un circuit în VHDL, se
răsfrânge asupra “calităţi” circuitului sintetizat, în continuare sunt prezentate câteva
recomandări:
- Structurile de control seriale de tipul if-elsif-elsif-else pot fi sintetizate sub forma
unui lanţ serial de porţi logice, ceea ce favorizează întârzierile, astfel că în acest
caz este mai bine să se folosească instrucţiunile de selecţie case sau with dacă
condiţiile se exclud reciproc.
- În cazul în care se folosesc instrucţiuni condiţionale în cadrul unui proces, dacă
pentru o anumită combinaţie a intrărilor se omite specificarea valori pe care
trebuie să o ia aibă ieşirea, compilatorul va crea un latch la ieşire care să poată
păstra vechea valoare a semnalului de ieşire care altfel ar trebui să se schimbe.
În general generarea unui astfel de latch nu este dorită.
- Instrucţiunile de ciclare creează în general copii multiple ale logicii combinaţionale
descrise în cadrul instrucţiunii. Dacă se doreşte folosirea unei singure astfel copii
a logici combinaţionale într-o secvenţă de paşi atunci trebuie să se proiecteze un
circuit secvenţial.
52
Introducere în limbajul de descriere hardware – VHDL
Este posibil ca sinteza unor construcţii şi structuri ale limbajului să nu fie posibilă cu anumite
programe de sinteză, pentru aceasta trebuie consultată documentaţia respectivelor programe
pentru a vedea ce este şi ce nu este sintetizabil.
53
Capitolul 4
4.3 Introducere
Circuitele logice programabile asigură crearea proiectelor digitale
semicustom*, dar cu circuite standardizate. Gama largă a circuitelor programabile
asigură libertatea de proiectare a unor funcţii de bază a căror realizare este de altfel
mult prea costisitoare. Circuitele PLD asigură reducerea costului şi timpului de
proiectare. Siguranţa în funcţionare măreşte calitatea produselor fără scăderea
complexităţii proiectelor.
Problemele de proiectare sunt mult simplificate prin gama largă a programelor
oferite de producători de circuite PLD. Simularea proiectelor permite detectarea
erorilor de proiectare, astfel încât se reduc cheltuielile de proiectare şi testare încă
din faza de proiectării. Toate aceste motive au contribuit la creşterea utilizării
circuitelor logice programabile.
Încă de la apariţia lor pe piaţă circuitele logice, cum ar fi 16V8 şi 22V10 au
conferit o mare flexibilitate în proiectarea digitală. Pe măsură ce tehnologia circuitelor
logice a avansat, s-a manifestat interesul firesc în dezvoltarea de circuite
programabile de capacitate din ce în ce mai mare.
Datorită efectelor capacitive, a creşterii valorilor curenţilor de pierdere cât şi a
altor efecte, pentru a se mării capacitatea PLD-urilor (Programmable Logic Devices)
nu s-a putut pur şi simplu „amplifica” vechea arhitectura (vezi figura 4.1).
Astfel un circuit 128V64 ar avea 64 pini de intrare, 64 I/O pini, deci 128
variabile implementate ca şi sumă de produse folosind cele 64 macrocelule (
macrocelula conţine o poartă SAU la a cărei intrări se pot conecta n porţi AND, o
poartă SAU-EXCLUSIV, un bistabil şi un buffer tristate) faţă de circuitul 16V8 din
care derivă, care are 8 semnale de intrare, 8 semnale de intrare / ieşire şi 8
macrocelule. Nici din punctul de vedere al utilizării eficiente a pastilei de siliciu pe
care este implementat circuitul situaţia nu este mai bună, astfel că un 128V64 ar
ocupa o arie de 64 de oi mai mare ca şi 16V8 şi ar furniza un număr de intrări/ieşiri
de numai 8 ori mai mare. Astfel că folosirea a 8 circuite 16V8 ar fi mai eficientă decât
crearea unui 128V64.
Ca şi o consecinţă a celor expuse mai sus a apărut ideea creări circuitelor
logice programabile complexe (CPLD = Complex Programmable Logic Devices),
care nu sunt altceva decât un grup de circuite PLD însoţite de o structură de
interconexiuni programabile, vezi figura 4.2.
*
semicustom = semipersonalizat, circuitele semicustom sunt concepute parţial în funcţie de necesităţile
utilizatorului
Circuite logice programabile complexe
55
Capitolul 4
56
Circuite logice programabile complexe
Tabelul T4.1
Structura de bază a unui bloc de funcţii este prezentată în figura 4.4. Aria
programabilă de porţi logice ŞI permite numai 90 de termeni produs / FB, câte 5
57
Capitolul 4
pentru fiecare macrocelulă (vezi figura 4.5). Acest neajuns este înlăturat printr-o
metodă de alocare a termenilor produs (Product Term Allocation = PTA).
Bistabilul FF1 poate fi programat atât ca bistabil de tip D cât şi ca bistabil de
tip T cu intrare de enable. Intrarea de clock a bistabilului este selectată de
multiplexorul M4 din una din cele patru surse posibile, unul din cele trei semnale
globale de clock sau de la ieşirea unui modul termen produs. Intrările asincrone de
set şi reset ale bistabilului pot fi conectate la semnale de set / reset globale prin
intermediul multiplexoarelor M2 şi M5.
Prin intermediul multiplexorului M3 se selectează tipul semnalului de la ieşirea
macrocelulei , sincron sau asincron. Acest semnal este trimis la matricea de
conexiuni unde poate fi folosit de o altă macrocelulă., de asemenea este trimis şi la
unul din blocurile de intrare ieşire ale CPLD-ului împreună cu un semnal provenind
de la simbolul S5 care poate fi folosit ca şi semnal de activare a ieşiri PTOE (Product
Term Output Enable).
58
Circuite logice programabile complexe
În figura 4.6 este prezentată structura unui bloc de intrare / ieşire (IOB). Există
şapte posibilităţii de a activa semnalul de ieşire dintr-un IOB, vezi multiplexorul M0.
Semnalul de ieşire poate fi întotdeauna activat şi dezactivat, poate fi comandat de
PTOE sau poate fi comandat de unul dintre cele patru semnale globale provenind de
la multiplexoarele M1-M4. Blocul de intrare / ieşire al CPLD-ului XC9500 furnizează
pe lângă comanda logică a semnalului de ieşire şi o comandă analogică, după cum
urmează:
Controlul slew-rate – este comandată panta de creştere şi de descreştere a
semnalului.
Rezistenţă pull-up – această rezistenţă înlătură posibilitatea ca anumite ieşiri să
rămână în stare logică necunoscută atunci când nu sunt comandate.
Masă programabilă de către utilizator – această caracteristică poate transforma orice
pin I/O într-un pin de masă.
O caracteristică în plus a familiei de circuite logice programabile XC9500 este
acea că este compatibilă cu alte circuite externe atât pe nivelul de 5V cât şi pe nivelul
de 3,3V.
59
Capitolul 4
60
Circuite logice programabile complexe
61
Capitolul 4
Tabelul T4.2
Tabelul T4.3
62
Circuite logice programabile complexe
funcţii FB, utilizează o configuraţie de tip PLA, ceea ce permite ca toţii termenii produs să
fie accesibili şi să poată fii rutaţi între oricare dintre macrocelulele FB-ului.
În figura 4.9 este prezentată arhitectura circuitelor din familia CoolRunner-II. Fiecare
FB conţine 16 macrocelule. Blocul BSC se referă la controlul Boundary Scan şi are în
alcătuire controlerul JTAG. Blocul ISP conţine circuitele In-System Programming, ce
permit programarea în sistem.
Blocul de funcţii FB
Acesta conţine 16 macrocelule fiecare având acces la cele 40 de semnale de intrare,
vezi figura 4.10. Logica internă permite implemntarea produselor cu până la 56 de
termeni. Toate blocurile FB din structura unui circuit CoolRunner sunt identice, între
membrii familiei diferă doar numărul acestora.
63
Capitolul 4
Macrocelulele
Permit implementarea sumelor de produse (SOP) cu până la 40 de variabile şi
56 de termeni, rezultatul fiind trecut printr-o poartă SAU Exclusiv, împreună cu altă
expresie de tipul produs. Poate fi de asemenea selectată şi polaritatea expresiei
logice, iar rezultatul final poate fi combinaţional sau secvenţial, elemntul de stocare
de la ieşire putând fi setat ca bistabil de tip D sau T sau ca şi latch transparent. In
mod independent fiecare macrocelulă peermite selectarea diferitelor semnale
globale, cum ar fi cele de tact de reset , de activare a ieşirilor.
64
Circuite logice programabile complexe
Blocurile de intrare/ieşire
Aceste blocuri permit alegerea standardului de tensiune dorit. Fiecare bloc
când funcţionează ca şi intrare permite setarea unui circuit trigger Schmitt, aceasta
ducând la reducerea zgomotului de la intrarea respectivă şi la adăugarea unui
hystereyis de aproximativ 500 mV. Dacă sunt setate ca şi ieşiri ceste blocuri permit
trecerea directă a semnaluli de semenea permit şi stările înaltă impedanţă sau cu
colectorul în gol. De asemenea poate fi aleasă şi viteza de variaţie a semnalului slew
rate. Sunt suportate standarde de tensiuni între 1,5 şi 3,3, V. În figura 4.12 este
prezentată arhitectura unui bloc de intrare / ieşire.
65
Capitolul 4
66
Circuite logice programabile complexe
67
Capitolul 5
5.1 Generalităţi
Un circuit FPGA (Field Programmable Gate Array) este alcătuit dintr-un număr
mare de celule logice de bază numite blocuri logice configurabile (vezi figura 5.1),
care sunt mai mici decât un circuit PLD obişnuit. Aceste celule logice sunt distribuite
pe toată suprafaţa cipului. Fiecare celulă este înconjurată de interconexiuni
programabile ansamblul acestor interconexiuni poartă numele de matrice de
conexiuni programabile. Întreg ansamblul de celule şi interconexiuni se află într-un
inel format de blocurile de intrare / ieşire. Un bloc logic configurabil poate implementa
mai puţine funcţii logice decât un circuit PLD, dar numărul acestor blocurilor logice
configurabile dintr-un circuit FPGA este mai mare decât numărul de circuite PLD
dintr-un circuit PLD raportat la aceeaşi dimensiune a pastilei de siliciu.
Ariile logice FPGA au fost introduse în 1985 de firma XILINX. Poziţia de lider
a fost păstrată prin continua îmbunătăţire a circuitelor, şi prin oferta soluţiilor de
proiectare completă. Una dintre cele mai cunoscute familii este XC4000E, despre
care vom discuta în continuare. Cel mai mic membru al familiei XC4000E este
circuitul XC4003E alcătuit dintr-o arie 10X10 blocuri logice configurabile (CLB =
Configurable Logic Blocks). Componenta cu capacitatea cea mai mare din familia
XC4000E este circuitul XC4000EX care conţine 1.024 CLB-uri (arie 32X32). Prin
extinderea caracteristicilor familie XC4000EX a rezultat familia XC4000XL, cel mai
mare membru al acestei familii este circuitul XC4085XL care conţine 3.136 CLB-uri
(vezi tabelul T5.1).
69
Arhitectura circuitelor FPGA. Familia XC4000
porţi logice. Se poate observa că numărul de porţi logice este variabil, el depinzând
de logica implementată, combinaţională sau secvenţială. Se poate considera că
fiecare celulă de memorie RAM este implementată cu un bistabil de tip D. Pentru
implementarea bistabiluli de tip D sunt necesare 4 porţi logice, rezultă că 32 celule
SRAM X 4 = 128 de porţi logice/CLB.
Abundenţa de porţi logice, registre, interfeţe I/O cu o viteză de răspuns mare,
sunt doar câteva caracteristici ale circuitelor logice reprogramabile FPGA. Seria
circuitelor cu aria de configurare de tip SRAM include şi următoarele familii de
produse: XC2000, XC3000, XC4000, XC5200 şi XC6200.
70
Capitolul 5
71
Arhitectura circuitelor FPGA. Familia XC4000
72
Capitolul 5
Fiecare bistabil poate fi înscris atât pe frontul pozitiv cât şi pe cel negativ al
tactului. Deşi semnalul K este comun el se poate inversa separat la fiecare dintre
intrările bistabililor. Orice invertor plasat la intrarea de tact este “absorbit” în mod
automat de CLB.
1
În cazul generării a 3 funcţii separate, una dintre funcţii trebuie să furnizeze intrarea bistabilului intern al CLB.
Doar două funcţii combinaţionale sunt realizabile.
73
Arhitectura circuitelor FPGA. Familia XC4000
Starea Set / Reset se specifică prin utilizarea atributului INIT, sau prin
amplasarea în schema electrică a simbolurilor corespunzătoare din biblioteca de
circuite secvenţiale. SR nu este inversabil în interiorul CLB şi este activ pe 1 logic.
74
Capitolul 5
semnale sunt sursa semnalelor de control intern. Când funcţia logică este activă
atunci aceste semnale sunt:
- EC – Clock Enable;
- SR/H0 – Set/Reset asincron sau intrarea H0 a generatorului de funcţie H;
- DIN/H2 – Intrare directă H2 a generatorului de funcţii H;
- H1 – Intrarea directă H1 a generatorului de funcţii H.
Dacă blocul este configurat ca şi memorie RAM/ROM cele patru intrări au
semnificaţia:
- EC – Clock Enable;
- WE – Write Enable;
- D0 – Intrare dată pentru generatorul de funcţie F şi /sau G;
- D1 – Intrare dată pentru generatorul de funcţie G (mod RAM/ROM 16x1 şi 16x2)
sau bitul de adresă 24 (mod 32x1).
Circuitele RAM realizate cu seria XC4000 pot lucra în două moduri de lucru:
- Modul de lucru sincron (Edge – Triggered) - Informaţia este înscrisă pe frontul
pozitiv / negativ al tactului, WE funcţionează ca semnal de inhibare tact de
înscriere.
- Modul de lucru asincron (Level – Sensitive) - Semnalul extern WE funcţionează
ca semnal de înscriere (strobe).
75
Arhitectura circuitelor FPGA. Familia XC4000
î
Figura 5.5. Căile de propagarea a bitului de transport
76
Capitolul 5
Blocurile IOB se pot configura astfel încât nivelel tensiunilor de intrare / ieşire să fie
compatibile cu nivelel de tensiune TTL sau CMOS. Opţiunea se selecteză la
lansarea programului de generare a fişierului de configurare.
77
Arhitectura circuitelor FPGA. Familia XC4000
Slew rate-ul fiecărui buffer, este redus pentru a minimiza consumul de putere
şi pentru a minimiza semnalele tranziente la tensiunea de alimentare. Sarcina
capacitivă la cuplări simultane în aceeaşi direcţie este de 200pF între tensiunea de
alimentare şi masa de alimentare.
78
Capitolul 5
79
Arhitectura circuitelor FPGA. Familia XC4000
80
Capitolul 5
În figura 5.10 sunt prezentate resursele de conectare ale unui bloc CLB. Liniile
de culoare închisă există numai la circuitele XC4000EX.
81
Arhitectura circuitelor FPGA. Familia XC4000
Liniile de dublă lungime realizează o grilă din segmente de metal. Fiecare linie
are lungime dublă în comparaţie cu liniile simple. Liniile duble sunt grupate în perechi
şi intră în fiecare a doua matrice (vezi figura 5.12).
Fiecărui CLB i se asociază patru linii verticale şi patru linii orizontale, pentru
realizarea conexiunilor. Realizarea conexiunilor este arătată în figura 5.8.
82
Capitolul 5
Figura 5.13 Diagrama de conexiuni a seriei XC4000 cu cordonul VersaRing (în stânga)
Decodificatoarele (WED) şi blocurile I/O
Suprafeţele haşurate corespund numai seriei XC4000X
83
Arhitectura circuitelor FPGA. Familia XC4000
În momentul cuplări la tensiune starea logică a celor trei pini dedicaţi (M2, M1,
M0) determină metoda de configurare. După configurarea circuitului aceşti pini se pot
folosi ca intrări (M2, M0) şi ieşiri (M1) ale FPGA. Considerând cei trei pini de
configurare sunt permise opt moduri de configurare. Aceste moduri sunt arătate în
tabelul T5.2.
Astfel conectând toţi pinii de ieşire la 1 logic circuitul FPGA va funcţiona în
mod slave serial, care este modul de lucru cel mai popular , în care datele de
configuraţie vor fi transmise în mod serial de la un alt FPGA, sau un microprocesor
sau microcontroler. Deşii pinii de mod conţin rezistenţă integrată de 100 kΩ, se
recomandă conectarea unor rezistenţe cu valoarea 4,7 kΩ.
După cum se poate observa şi din tabelul T5.3 circuitele din seria XC4000 pot
fi configurate în şase moduri dacă nu se consideră cele trei moduri de Master un
singur mod de configurare. Modurile de configurare se pot clasifica în :
- Moduri master (trei moduri de configurare);
- Moduri paralel (două moduri de configurare);
- Moduri slave (utilizate mai ales în daisy – chain).
Ultimul mod de configurare modul expres se poate considera un mod de
configurare serial, care permite configurarea rapidă a circuitelor XC4000EX.
84
Capitolul 5
85
Arhitectura circuitelor FPGA. Familia XC4000
circuitelor din această familie este cuprinsă între 2000 - 20.000 de porţi logice, plus
1024 – 6400 registre şi sunt realizate în tehnologie CMOS de 0,8 µm. Firma Atmel
oferă şi un mediu de proiectare complet (Atmel Integrated Development System)
disponibil atât pentru PC-uri cât şi pentru staţii de lucru Sun.
Un alt producător cunoscut de circuite FPGA este firma LUCENT
Technologies (fostă AT&T Microelectronics). Circuitele FPGA produse de această
firmă sunt cunoscute sub numele de ORCA (Optimized Reconfigurable Cell Arrays =
matrici de celule logice reconfigurabile optimizate). Circuitele din familiile ORCA:
OR1C,OR2C, OR2T, OR2CA, OR2TA, OR3CA, OR3TA, au ca şi celule de bază mici
memorii de tip SRAM şi sunt realizate în tehnologie CMOS de la 0,6 până la 0,35µm.
Capacitatea circuitelor este cuprinsă între 3.500 şi 11.400 de porţi logice. Prin
intermediul mediului de proiectare numit ORCA Foundry firma Lucent oferă un
pachet de programe de implementare a proiectelor care în prealabil au fost
sintetizate cu aşa numitul pachet de programe SCUBA (Syntesis Compiler for User
Programmable Arrays) oferit de o firmă terţă.
Alte firme producătoare de circuite FPGA sunt: Gatefield (familiile GFxxxF
ProASIC), Motorola (familiile MPA10xx) şi QuickLogic (familiile pASICx).
86
Capitolul 6
Seria de circuite FPGA Spartan are în componenţă mai multe familii, care vor fi
enumerate în continuare în ordinea apariţiei şi a complexităţii tehnologice a acestora:
- Spartan/XL;
- Spartan-II, Spartan-IIE;
- Spartan-3, Spartan-3E;
- Spartan-3A, Spartan-3AN, Spartan-3A DSP.
79
Arhitectura circuitelor FPGA. Familia Spartan/XL
Fiecare CLB conţine două bistabile care pot fi folosite pentru stocarea (registre)
datelor de la ieşirile generatoarelor de funcţii (LUT). În figura 2 se poate observa multitudinea
de combinaţii pe care le poate avea semnalul de la intrarea unui bistabil. Descrierea
semnalelor este similară cu cea făcută pentru seria XC4000.
Familia de circuite Spartan XL permite de asemenea configurarea acestor bistabile ca
şi latch-uri.
80
Capitolul 6
Semnalul de intrare de la pin poate să treacă direct la canalele de rutare din interiorul
circuitului FPGA sau poate trece mai întâi printr-un bistabil. Bistabilul de pe calea de intrare a
semnalului poate fi configurat atât ca bistabil care lucrează pe frontul semnalului de clock, cât
şi ca latch care lucrează pe nivel logic. În figura 4 este prezentată o diagramă simplificată a
acestui registru, diagramă care conţine logica combinaţională adiţională. Din figură se observă
multiplele posibilităţi de conectare ale acestui registru.
Bufferele de intrare pot fi configurate atât pentru semnal TTL de 1,2 V cât şi pentru
semnal CMOS. Configurarea nivelelor logice se poate face separat pentru intrarea şi ieşirea
dintr-un IOB. Ca şi nivele logice pe intrare/ieşire familia Spartan suportă TTL 5 V şi CMOS 5
V. Familia Spartan XL suportă în plus pe intrare şi CMOS 3,3V, iar la ieşire familia Spartan
XL suportă nivelele prezentate în tabelul 2.
Tabelul T2. Nivele logice pe ieşire suportate de circuitele din familia Spartan XL
81
Arhitectura circuitelor FPGA. Familia Spartan/XL
IOB-ul familiei Spartan XL are un latch în plus pe intrare, acesta primeşte acelaşi
semnal de tact ca şi bistabilul de ieşire. Acest latch permite capturarea rapidă a datelor de
intrare.
Semnalul de ieşire la pinul circuitului FPGA poate fi trecut opţional printr-o poartă
inversoare sau printr-un bistabil.
Circuitele din familia Spartan XL mai conţin în plus în blocul IOB un multiplexor care
de asemenea poate fi configurat ca şi generator de funcţii, putând astfel implementa diverse
funcţii cu două variabile independente. În cazul proiectării cu simboluri schematice, acest
multiplexor poate fi invocat prin apelarea simbolurilor OAND2 sau OMUX2.
IOB-ul permite configurarea în starea de înaltă impedanţă, astfel fiind permisă şi
trecerea semnalelor bidirecţionale. Circuitele din seria Spartan XL au implementat în plus un
registru care controlează starea de înaltă impedanţă.
Pentru minimizarea consumului de putere se poate face un control al slew-rate-ului pe
fiecare pin. De asemenea tot pentru minimizarea consumului, pinii neconectaţi pot fi legaţi la
masă sau Vcc astfel scade şi sensibilitatea la perturbaţii. Rezistenţele de pull-up şi pull-down
nu sunt altceva decât tranzistoare cu canal p şi n.
La fel ca şi bistabilii din CLB-uri şi cei din IOB-uri beneficiază de semnal global de
set/reset (GSR). Bistabilii de intrare şi de ieşire ai IOB-ului beneficiază de semnale de clock
separate, dar de semnal de activare (EC) comun care poate fi activat individual.
82
Capitolul 6
Rutarea între CLB-uri se face automat de către software-ul de sinteză ţinându-se cont
de contsrîngerile de loc şi de timp impuse de către proiectant. Există trei categorii de trasee de
routare:
- trasee de rutare între CLB-uri, linii orizontale şi verticale, la intersecţia dintre acestea
aflându-se matricea de interconexiuni;
- traseele de rutare ale IOB-urilor la CLB-uri, alcătuiesc un inel numit VersaRing;
- traseele de rutare globale, alcătuite din reţele de linii dedicate proiectate să ditstribuie
semnale de tact şi de reset cu întârzieri minime.
83
Arhitectura circuitelor FPGA. Familia Spartan/XL
Liniile lungi
Aceste linii parcurg întreaga matrice de CLB-uri, atât pe orizontală cât şi pe verticală.
Sunt utilizate în cazul interconectării CLB-urilor dintr-o arie mai largă, dispunând de un fan-
out ridicat. Fiecare astfel de linie are la mijloc un comutator care permite împărţirea acesteia
în două segmente separate.
Patru linii verticale asociate fiecărei coloane de CLB-uri sunt comandate exclusiv de
buffere globale. Acestea pot fi accesate de buffere globale primare (BUFGP) sau de buffere
globale secundare (BUFGS). Aceste linii oferă o întârziere minimă. Este recomandată
utilizarea buffere-lor globale în cazul oricăror semnale care beneficiază de constrângeri de
timp mai severe.
84
Capitolul 6
În cazul modului cu două porturi de ieşire singura opţiune este 16x1. Pentru această situaţie
vor exista două decodificatoare de adrese câte unul pentru fiecare port.
Alegerea configuraţiei de lucru dorite se face ţinând cont de constrângerile de timp,
arie, de aplicaţie şi de complexitatea procesului de proiectare.
La fel ca şi la familia XC4000 fiecare CLB conţine linii dedicate pentru semnalelor de
carry specifice sumatoarelor, acumulatoarelor sau numărătoarelor. Liniile şi logica dedicată
vor creşte performanţele la implementarea circuitelor menţionate anterior.
Această funcţie este descrisă de standardul IEEE 1149.1 şi are rolul de a testa
funcţionalitatea dispozitivelor electronice. Pentru a se putea realiza această testare, există
structuri logice suplimentare încapsulate în dispozitivele electronice.
Familiile de circuite Spartan şi Spartan-XL permit implementarea instrucţiunilor
BYPASS, PRELOAD/SAMPLE ŞI EXTEST specifice standardului IEEE 1149.1 de scanare
periferică. Acest standard se implementează cu o interfaţă de numai 4-pini, 3 pentru intrare
date şi unul pentru ieşire. Prin intermediul acestora pot fi încărcate serial comenzi şi date. În
figura 8 este prezentată o diagramă a logicii de testare periferică specifică circuitelor Spartan
şi Spartan XL. Setul de instrucţiuni este codificat pe trei biţi şi cuprinde instrucţiuni de
configurare a dispozitivului şi de citire a datelor de configurare.
Dacă testarea periferică este utilizată numai în faza de configurare nu este necesară
utilizarea nici unui simbol schematic. Dacă însă se doreşte ca această funcţie să rămână activă
şi după configurare se va folosii simbolul din figura 9.
Începând cu seria Spartan XL funcţia de testare periferică permite citirea unui cod de
identificare specific fiecărui dispozitiv, aşa numitul IDCODE. Acest cod se referă la
producător, la dimensiunea circuitului, la familia din care face parte şi la versiunea chipului.
85
Arhitectura circuitelor FPGA. Familia Spartan/XL
Această funcţie se referă la un mod de lucru cu consum redus de putere şi este specific
doar circuitelor din familia Spartan XL. Pentru a intra în acest mod de lucru circuitele din
familia menţionată beneficiază de un pin dedicat PWRDWN activ pe zero logic. În acest mod
de lucru consumul de curent este de aproximativ 100 microamperi.
86
Capitolul 6
87
Capitolul 7
89
Arhitectura circuitelor FPGA. Familia Spartan-II/IIE
90
Capitolul 7
91
Arhitectura circuitelor FPGA. Familia Spartan-II/IIE
Figura 4. Organizarea în bancuri a pinilor circuitelor FPGA din seria Spartan II/IIE
92
Capitolul 7
Tabelul T.4. Standarde compatibile care pot fi selectate la pini care fac parte
din acelaşi banc
Pini I/O ai circuitelor FPGA din familia SpartanII/IIE suportă aşa numita „inserare la
cald”. Astfel că un circuit FPGA nealimentat poate fi conectat direct la un sistem aflat sub
tensiune, fără a fi fectate sistemul cât şi circuitul FPGA.
Elementele de stocare
Acestea sunt reprezentate de bistabile ce pot fi configurate atât pe front crescător cât şi
descrescător. Intrarea în aceste bistabile poate provenii atât de la generatoarele de funcţii sau
direct de la intrările slice-ului.
Pe lângă semnalele de tact şi de activare tact, fiecare slice are semnale sincrone de set
şi reset. Toate semnalele de control pot fi âmpărţite de bistabilele dintr-un slice.
Logica adiţională
Prin intermediul multiplexorului F5 sunt combinate ieşirile generatoarelor de funcţii
dintr-un slice, vezi figura 6. În mod similar, multiplexorul F6, combină ieşirile tuturor celor
patru generatoare de funcţii.
Pentru implementarea funcţiilor aritmetice rapide, fiecare slice din CLB beneficiază de
logică de transport separată.
Fiecare CLB din circuitele Spartan II/IIE are asociate două drivere 3-state, fiecare
beneficiind de un pin de control independent.
93
Arhitectura circuitelor FPGA. Familia Spartan-II/IIE
Figura 5. Bloc reprezentând unul din cele două slice-uri care alcătuiesc un CLB
94
Capitolul 7
95
Arhitectura circuitelor FPGA. Familia Spartan-II/IIE
Asociate liniilor globale de clock se află blocurile DLL, fiecare putând comanda două
reţele de clock. Aceste blocuri monitorizează clockul la intrare şi ajustează în mod automat
defazajele apărute. De asemenea adaugă şi întârzierea necesară astfel ca semnalul de clock să
ajungă la bistabile după ce semnalul de intrare s-a stabilizat. În figura 9 sunt prezentate funcţii
ale blocului DLL.
96
Capitolul 7
Această funcţie este descrisă de standardul IEEE 1149.1 şi are rolul de a testa
funcţionalitatea dispozitivelor electronice. Pentru a se putea realiza această testare, există
structuri logice suplimentare încapsulate în dispozitivele electronice, vezi figura 10.
97
Arhitectura circuitelor FPGA. Familia Spartan-II/IIE
98
Capitolul 7
99
Capitolul 8
Tabelul T.1 Câteva dintre caracteristicile membrilor familei de circuite FPGA Spartan-3
Memorie Memorie
Multipli- Nr de
Nr total Nr. CLB- RAM RAM în
Dispozitiv catoare DCM-uri porturi
de porţi uri distribuită blocuri
dedicate I/O
(biţi) (biţi)
XC3S50 50K 192 12K 72K 4 2 124
XC3S200 200K 480 30K 216K 12 4 173
XC3S400 400K 896 56K 288K 16 4 264
XC3S1000 1M 1920 120K 432K 24 4 391
XC3S1500 1,5M 3328 208K 576K 32 4 487
XC3S2000 2M 5120 320K 720K 40 4 565
XC3S4000 4M 6912 432K 1728K 96 4 712
XC3S5000 5M 8320 520K 1872K 104 4 784
Circuitele FPGA din familia Spartan-3 sunt alcătuite din cinci elemente programabile
fundamentale: blocurile logice configurabile (CLB), blocurile de intrare ieşire (IOB), blocurile de
memorie RAM, blocurile de multiplicatoare şi blocurile DCM.
Blocurile logice configurabile pot fi programate să îndeplinească o largă varietate de
funcţii logice şi de asemenea pot stoca şi date. Elementele constructive care stau la baza
acestora sunt memoriile RAM bazate pe tabele de adevăr (LUT).
Blocurile de intrare/ieşire (IOB) controlează fluxul de date dintre pinii de
intrare/ieşire (I/O) ai circuitului FPGA şi logica internă a acestuia. Fiecare IOB suportă flux
de date bidirecţional şi poate funcţiona în mod tristate. Aceste blocuri suportă nu mai puţin de
26 de standarde diferite de semnale, incluzând 8 tipuri de semnale difernţiale Dintre cele mai
uzuale tipuri de semnale suportate se pot aminti: LVCMOS, LVTTL, PCI cu întreaga gamă de
tensiuni aferente. Aceste blocuri IOB mai includ şi registre pentru transferul de date de tip
DDR (Double Data-Rate), iar pentru simplificarea designului plăcii pe care sunt montate au
posibilitatea de a controla digital impedanţa (DCI – Digitally Controlled Impedance)
furnizând în mod automat aşa numiţii terminatori on-chip.
Blocurile de memorie RAM furnizează un spaţiu de stocare de 18 kbiţi, sub forma unor
blocuri de memorie de tip dual-port.
101
Arhitectura circuitelor FPGA. Familiile Spartan 3 şi Virtex
102
Capitolul 8
Pentru a înţelege fişierele raport rezultate în urma implementărilor făcute în circuitul Spartan-
3 este necesar să va face o descriere succintă a arhitecturii principalelor blocuri.
După cum am menţionat într-un paragraf anterior acestea sunt interfaţa bidirecţională
programabilă dintre pinii circuitului FPGA şi logica lui internă. În figura 2 este prezentată o
diagramă simplificată a acestor blocuri. Există trei căi principale pe care un semnal le poate
parcurge printr-un IOB: o cale de intrare, una de ieşire şi una tristate. Pe fiecare din aceste căi
există o pereche de elemente de stocare de tip registru.
Toate semnalele care intră sau ies din IOB pot fi trecute printr-un circuit inversor şi
negate. Toate elementele de stocare prezente în blocul IOB pot fi configurate ca bistabile de
tip D active pe front sau pe nivel logic. Elementele de stocare de pe căile de ieşire şi tristate
pot fi folosite, împreună cu multiplexoare speciale, pentru a transmite datele în format DDR.
103
Arhitectura circuitelor FPGA. Familiile Spartan 3 şi Virtex
Alte constrângeri care se mai pot aplica pinilor I/O se referă la frecvenţa de comutare a
semnalului prezent la port. Astfel pentru opţiunea FAST, portul va suporta comutaţii ale
semnalului la frecvenţe ridicate, iar pentru opţiune a SLOW, frecvenţa va fi redusă însă
semnalul va fi mai „curat”. În acelaşi context se poate vorbi şi despre puterea semnalului
furnizat la pin, putere care poate varia între 2-24 mA.
Blocurile IOB sunt împărţite în 8 bancuri care rezultă din împărţirea fiecărei laturi în două
bancuri, cum se prezintă în figura 3. Fiecare banc are mai mulţi pini de alimentare VCCO conectaţi la
aceeaşi tensiune, a cărei valoare depinde de standardul de ieşire folosit. În bancuri diferite pot fi
folosite mai multe standarde de intrare-ieşire diferite în acelaşi timp.
În cadrul familiei de circuite Spartan-3 toţi membrii sunt compatibili pentru acelaşi tip
de capsulă. Această compatibilitate permite, dacă condiţiile o impun, înlocuitrea unui membru
de capacitate mai mică cu un altul de capacitate superioara fără a fi necesare modificări
hardware pe placa de circuite integrate.
104
Capitolul 8
Blocurile logice configurabile sau CLB (Configurable Logic Blocks), cum le vom numi în
continuare reprezintă resursa principală a circuitului FPGA pentru implementarea logicii
combinaţionale şi secvenţiale. După cum se poate observa şi în figura 4 aceste blocuri sunt la rândul
lor alcătuite din alte patru blocuri, aşa numite slice-uri. Slice-urile care sunt grupate în perechi, fiecare
pereche formând o coloană şi beneficiind de o linie de carry independentă.
Toate cele patru slice-uri ce alcătuiesc un CLB au următoarele elemente comune: două
generatoare de funcţii logice, două elemente de stocare, multiplexoare, logică de transport (carry) şi
porţi logice. În figura 5. este prezentată structura unui astfel de slice. Ambele perechi de slice-uri
folosesc aceste resurse pentru a implementa funcţii logice, aritmetice şi de a stoca date ca şi memorii
de tip ROM. În plus, perechea din stânga mai îndeplineşte două funcţii suplimentare: stochează date
folosind memoria RAM distribuită şi implementează registre de deplasare pe 16 biţi.
Aceste funcţii suplimentare sunt implementate tot cu ajutorul generatoarelor de funcţii sau aşa
numitele tablele de adevăr (Look-up Table). Pentru informaţii detailate despre modul de implementare
vezi site-ul producătorului.
Elementele de stocare de tip bistabil D pot fi configurate să lucreze atât pe front cât şi
pe nivel logic. Una din funcţiile lor este de a sincroniza datele cu semnalul de clock.
Fiecare slice are câte două multiplexoare, rolul acestora este de combina LUT-urile între ele
pentru a permite implementarea funcţiilor mai complexe.
Logica de propagare carry împreună cu restul de porţi logice permit implementarea eficientă şi
la performanţe crescute a operaţiilor matematice.
105
Arhitectura circuitelor FPGA. Familiile Spartan 3 şi Virtex
Figura 5. Structura unui bloc de tip slice specifică circuiteleor FPGA din familia Spartan-3
Toţi membrii familiei de circuite Spartan-3 includ în arhitectura lor aşa numitele
blocuri de memorie RAM, care sunt reconfigurabile şi sunt organizate ca şi blocuri de
memorii sincrone cu o capacitate de 18Kbiţi. Acest tip de memorie RAM organizată sub
formă de blocuri este eficientă pentru a stoca cantităţi mari de date, spre deosebire de
memoria RAM distribuită a cărei folosire este indicată în cazul bufferării unei cantităţi mici
de date. Aceste blocuri pot implementa memorii de tip single sau double port.
În arhitectura dispozitivelor din familia Spartan-3 este prezent un bloc care se ocupă
de managementul semnalului de clock, aşa numitul DCM (digital clock manager). Acest bloc
DCM la rândul lui include un bloc DLL (delay locked loop) cu ajutorul căruia se realizează
un sistem complet digital care se foloseşte de feedback pentru a menţine intacte
caracteristicile semnalului de clock în ciuda variaţiilor de temperatură şi a tensiunii de
alimentare. Majoritatea membrilor familiei de circuite Spartan3 au patru astfel de blocuri
DCM.
106
Capitolul 8
Circuitele din familia Spartan-3 au 8 intrări care facilitează accesul la cele 8 reţele
globale de clock. Aceste reţele sunt proiectate pentru a facilita transportul semnalelor cu
frecvenţă ridicată, astfel că, capacitatea electrică pe aceste linii are valori reduse, iar
fenomenul de defazaj al clockului este înlăturat. Prin intermediul unei astfel de linii globale
semnalul de clock va fi transportat în condiţii optime la diferite elemente ale circuitului
FPGA, cum ar fi CLB , IOB, registre, blocuri de memorie RAM.
107
Arhitectura circuitelor FPGA. Familiile Spartan 3 şi Virtex
Circuitele din familia Virtex 5 sunt ultimele circuite FPGA produse de firma Xilinx,
iar conform afirmaţiilor producătorului sunt cele mai puternice pe piaţa circuitelor logice
programabile. Sunt realizate în tehnologie 65 nm, iar multiplicatoarele şi blocurile de memorii
pot lucra la frecvenţe de 550 MHz, devenind astfel o alternativă viabilă la circuitele ASIC.
La fel ca şi generaţia precedentă de circuite FPGA şi această familie va cuprinde mai
multe subfamilii de circuite, organizate pe criterii de performanţă: număr de celule logice,
număr de unităţi MAC şi frecvenţă de lucru.
În continuare vor fi enumerate câteva din caracteristicile noi sau îmbunătăţite, faţă de
familia anterioară de circuite Virtex:
- viteză de lucru mai mare cu 50%;
- tehnologie de interconectare superioară;
- capacitate sporită, până la 330.000 celule logice;
- tabele de adevăr de tip LUT cu 6 intrări;
- memorie RAM distribuită pe 64 de biţi;
- blocuri mai complexe de management a semnalului de tact (aşa numite CMT –
clock management tile), în număr maxim de 6, alcătuite din două blocuri DCM şi
un bloc PLL.
- 32 de linii globale de clock;
- linii locale şi regionale de clock în plus faţă de cele globale;
- până la 10,3 Mbiţi de memorie integrată organizată în blocuri cu frecvenţa de lucru
de 550MHz;
- multiplicatoare dedicate cu intrări 25x18 cu frecvenţa de lucru de 550MHz;
- până la 1200 de porturi I/O;
- interfeţe de reţea cu viteză de lucru de până la 1,25 Gb/s;
- suport pentru lucru cu memorie FLASH externă;
- tehnologia de realizare de 65 nm, iar tensiunea de lucru a core-ului de 1V.
Pentru o imagine de ansamblu mai bună asupra circuitelor FPGA produse de firma
Xilinx în tabelul T4.2, este prezentată o analiză comparativă ale caracteristicilor principalelor
familii.
Tabelul T4.2 Comparaţie performaţe/preţ cicuite FPGA
Capacitatea*
Tehnologia Nr blocuri Frecvenţa ***
Familia Celule Porţi logice Preţ ($)
(nm) MAc (MHz)
logice (milioane)
Virtex5LX330 65 192 550 330.000 22,1M** -
**
Virtex4SX55 90 512 500 55.296 3,6M 1000-1200
108
Capitolul 8
*
Capacitatea era exprimată iniţial în număr de porţi logice, ulterior s-a trecut la exprimarea în
sclice-uri, şi în cele din urmă în număr de celule logice. Echivalenţele dintre cele trei
modalităţi de exprimare a capacităţii sunt prezentate mai jos:
1 celulă logică = 1 bloc LUT cu 4 intrări + 1 bistabil de tip D
1 slice = 2 X celulă logică.
**
Valori aproximative, calculate, utile pentru comparaţie.
***
Preţurile sunt orientative şi variază în funcţie de capacitatea circuitului din familia
respectivă (ex. spartan3S50 = 9,5$, iar spartan3s1500 = 85$), de numărul de pini şi tipul de
capsulă şi de asemenea de numărul de bucăţi achiziţionate.
Determinarea numărului de porţi logice în funcţie de exprimările anterioare nu este
clar definită şi depinde, conform specificaţiilor date de producător, de tipul de aplicaţiei
implementat.
În cazul circuitelor Virtex II şi Spartan 3 capacitatea este exprimată în număr de porţi
logice. Plecând de la aceste valori se încearcă o aproximare a capacităţii exprimate în porţi
logice pentru toate circuitele din tabel.
Pentru logica de interconectare (glue logic) sau pentru implementarea proiectelor mai
simple se pot folosi şi circuite CPLD (familia XC9500) ale căror capacităţi pot varia între 800
– 6400 porţi logice şi ale căror preţuri sunt între 1,65 – 14, 79$.
1. Circuit FPGA XC3S200 din familia Spartan-3, capsulă de tip BGA cu 256 de pini;
2. Memoria PROM XCF02S produsă de firma Xilinx, de tip Flash de capacitate 2 Mbiţi;
3. Jumper JP1, permite configurarea FPGA-ului cu date provenind din memoria PROM
sau dintr-o altă sursă;
4. Memorie SRAM de tip asincron ISSI IS61LV25616AL, 2 module 256KX16, nu apr
în figura 4.2 sunt plasate pe versoul plăcii;
5. Port VGA pe 3-biţi, 8 culori;
6. Port serial RS-232, 9 pini, conector mamă DB9;
109
Arhitectura circuitelor FPGA. Familiile Spartan 3 şi Virtex
110
Capitolul 8
111
Arhitectura circuitelor FPGA. Familiile Spartan 3 şi Virtex
Pe placa Spartan-3 există opt comutatoare care pot fi folosite pentru a genera 0 sau 1
logic la pinii circuitului FPGA. Acestea sunt notate cu SW 7 la SW0 de la stânga la dreapta.
Placa Spartan-3 conţine 4 butoane normal deschise, pentru introducerea datelor. Acestea sunt
notate BTN3 la BTN0 de la stânga la dreapata. Pinii circuitului FPGA aferenţi celor 8
comutatoare sunt prezentaţi în tabelul T4, iar cei asociaţi butoanelor în tabelul T5.
Tabelul T4. Pinii circuitului FPGA asociaţi celor 8 comutatoare de pe placa Spartan-3.
Tabelul T5. Pinii circuitului FPGA asociaţi celor 4 butoane norma deschise de pe placa Spartan-3.
Tabelul T6. Pinii circuitului FPGA asociaţi celor 8 LED-uri de pe placa Spartan-3.
112
Capitolul 8
În funcţie de poziţia jumperului JP1 memoria PROM oferă trei opţiuni de configurare a
circuitului FPGA, astfel:
- modul implicit în care FPGA-ul poate boota numai di memoria PROM;
- modul de citire Flash, FPGA-ul bootează din memoria Flash, dar pe lângă
fişierul de configurare din Flash poate încărca şi alte date;
- modul dezactivat, FPGA-ul bootează din alte surse.
Placa Spartan-3 include două porturi JTAG şi permite conectarea înlănţuită la aceste
porturi a circuitului FPGA şi a memoriei Flash PROM, cu scopul de a fi programate sau de a
fi depanate, vezi figura 9. Cele două porturi JTAG permit conectarea la portul paralel al unui
PC, prin intermediul a diferite cabluri.
Figura 9. Porturile JTAG şi modurile de conectare la acestea, a circuitului FPGA şi a modulului PROM
Soluţia mai comună şi mai folosită este cablul JTAG3, livrat în kit-ul plăcii, ce asigură
transportul datelor de la PC la placă şi totodată şi conversia acestor din transmisie paralelă în standard
JTAG. Conectorul J7 corespunzător acestui tip de cablu poate fi văzut în figura 6, reperul 22. Acest tip
de cablu este compatibil cu programul Xilinx iMPACT folosit pentru transmiterea fişierului de
configurare pe portul paralel al PC-ului. De asemenea conectorul J7 suportă şi standardul de cablu
Xilinx Parallel Cable 3 (PC3).
Conectorul J5, reper 24 figura 6 este folosit pentru conectarea cablului JTAG de tip
Parallel Cable IV (PC IV). Acest conector mai suportă de asemenea şi standardul de cablu
MultiPro Desktop. Pentru mai multe detalii despre tipurile de cablu menţionate mai sus se
poate studia referinţa.
Acest port este foarte important în aplicaţia de control ce este dezvoltată în această
lucrare deoarece prin intermediul lui pe lângă programarea circuitului FPGA se va realiza şi
controlul şi monitorizarea în timp real a parametrilor motorului.
113
Arhitectura circuitelor FPGA. Familiile Spartan 3 şi Virtex
Placa Spartan-3 are trei conectori de extensie cu 40 de pini fiecare, notaţi A1, A2 şi
B1, vezi reperele 19, 20, 21 in figura 6. O parte din cei 40 de pini ai fiecărui port sunt
rezervaţi, astfel portul A1 oferă 32 de pini I/O, iar celelalte două A2 şi B1 câte 34 de pini I/O.
De asemenea o parte dintre pinii prezenţi la cele porturi de extensie împart pinii circuitului
FPGA la care sunt conectaţi cu alte resurse prezente pe placă. Primii patru pini de la fiecare
port sunt pentru alimentare, iar ultimii patru sunt pentru configurarea circuitului FPGA. În
Tabelul T7. este prezentat modul de organizare a pinilor la unul din cei trei conectori.
114