Sunteți pe pagina 1din 121

I.

Generalităţi şi criterii de performanţă ale circuitelor


digitale

În proiectele tradiţionale erau folosite componente analogice care au un preţ


relativ redus, însă, dezavantajele principale ale sistemelor analogice constau în
sensibilitate la variaţiile de temperatură, îmbătrânirea mai rapidă a componentelor şi
dificultatea de a îmbunătăţi sistemul cu noi caracteristici.
Sistemele digitale elimină abaterile cauzate de variaţiile de temperatură, iar
îmbunătăţirea caracteristicilor sistemului la un moment dat se poate realiza foarte
uşor prin modificarea softului procesorului programabil conţinut de sistem.
În continuare se va face o prezentare a circuitelor digitale complexe existente pe
piaţă, prezentare a care va facilita introducerea în discuţie a circuitelor logice
programabile. Tototdată vor fi prezentae şi câteva criterii de performanţă utile în
selectarea circuitului digital adecvat aplicaţiei dezvoltate.

A. Comparaţie între diferitele tipuri de circuite digitale

În cazul proiectelor care necesită procesarea în timp real a semnalelor, există în


ultima perioadă de timp o multitudine de noi produse şi tehnologii care sunt din ce în
ce mai „inteligente”, rapide, miniaturizate şi cu posibilităţi de interconectare sporite.
Această varietate de produse îngreunează alegerea pe care trebuie să o facă
proiectanţii vizavi de arhitectura optimă pentru procesarea în timp real a semnalelor.
În continuare se va încerca stabilirea unui set de criterii care să uşureze alegerea
unei arhitecturi optime.
Principalele circuite digitale complexe sunt:
- Pprocesoare digitale de semnal (DSP-uri = Digital Signal Processor)
- Microcontrolerele (MCU)
- Microprocesoare de uz general / microprocesoare cu set redus de instrucţiuni
(GPP/RISC = General Purpose Processor / Reduced Instruction Set
Computer)
- Arii de porţi logice programabile (FPGA = Field Programmable Gate Arry)
- Circuite integrate dedicate (ASIC = Applicattion-Specific Integrated Circuit)
În continuare se va face o comparaţie între cele cinci arhitecturi de circuite
digitale ţinându-se cont de câteva criterii:
• timp de lansare pe piaţă - primă importanţă
• performanţa - primă importanţă
• preţ - primă importanţă
• facilităţi de dezvoltare - primă importanţă
• consum de putere - importanţă medie
• flexibilitate ulterioară - importanţă redusă
După cum se poate observa fiecărui criteriu i s-a acordat un anumit grad de
importanţă. În continuare va fi discutat fiecare criteriu în parte.
Timp de lansare pe piaţă. Acest criteriu se referă la perioada de timp necesară ca un
produs să devină disponibil pe piaţă. Acest criteriu este de maximă importanţă
datorită perioadei de viaţă scurte a produselor din acest sector, perioadă care poate
varia de la câteva lunii la câţiva ani. Se spune că acest criteriu conduce şi dă ritmul
de dezvoltare în industria de profil.

3
Capitolul 1

Acest timp este alcătuit din două componente:


1. Faza de proiectare, care depinde de efortul economic depus;
2. Faza de fabricaţie, care depinde în cea mai mare măsură de tehnologia
de fabricaţie aleasă.
În industria electronică a bunurilor de larg consum există o tendinţă clară de
reducere a timpului până la care se ajunge la producţia în masă dar şi a timpului de
menţinere pe piaţă a unui produs (figura 1).
Reducerea timpului de lansare pe piaţă duce la mărirea profitului aşa cum se
prezintă în figura 2. Prima companie care lansează pe piaţă un produs nou ocupă cu
aproximativ 40% mai mult decât următoarea companie.

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

Performanţa. Acest criteriu determină capacitatea unui produs de a îndeplini o


anumită sarcină. Există mai multe moduri de a măsura performanţa unui produs, în
general aceasta este exprimată în: MIPS (milioane de instrucţiuni per secundă),
MMACS (milioane de multiplicări şi acumulări per secundă) sau mai simplu în MHz
(milioane de perioade de tact per secundă).
Importanţa criteriului performanţă poate să scadă când sunt impuse constrângeri
legate de preţul produsului şi de consumul de putere.
Preţul. Importanţa acestui criteriu de selecţie este strâns legată de segmentul de
piaţă căruia îi este adresat produsul. Dacă produsul este orientat către zona
consumatorilor casnici, preţul poate fi foarte important, dacă produsul este însă
orientat spre zona de afaceri şi militară preţul poate să scadă ca şi importanţă.
Facilităţi de dezvoltare/proiectare. Acest criteriu însumează alte criterii cum ar fi:
suportul acordat pentru produsul respectiv, costurile de dezvoltare şi uneltele de
dezvoltare. Cu cât este mai consistent suportul primit de proiectant de la producător
cu atât se va realiza o dezvoltare mai rapidă a produsului. Este de dorit ca
producătorul să ofere software de dezvoltare şi testare, plăci de evaluare, algoritmi.
Consumul de putere. Acest criteriu este important în special în cazul produselor care
necesită portabilitate, consumul mai redus de putere traducându-se printr-o viaţă mai
lungă a bateriei. De asemenea un consum de putere scăzut mai poate însemna şi o
disipare mai redusă de căldură.
Flexibilitate. Acest criteriu se referă la posibilitatea de a schimba caracteristicile unui
produs pentru a îndeplini cerinţe noi. Implementările software au cel mai scurt timp
de lansare pe piaţă, datorită marii flexibilităţi şi interfeţei prietenoase a limbajelor de
programare şi a compilatoarelor. Acesta este motivul principal pentru care ele sunt
mai prezente pe piaţă decât implementările hardware.
Utilizarea, însă a unei tehnici de codesign HW/SW (hardware-software
)asociată cu circuitele FPGA poate creşte flexibilitatea şi de asemenea poate
micşora timpul de lansare pe piaţă până la o săptămână. În ultima perioadă de timp

4
Introducere în circuite digitale

criteriul de flexibilitate tinde să crească ca şi importanţă datorită strânsei lui corelări


cu timpul de lansare pe piaţă a unui produs.
În figura 3 este prezentată o comparaţiei între principalele arhitecturi care
permit implementarea algoritmilor de control, în funcţie de două dintre criteriile de
performanţă enunţate anterior.

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

În continuare se vor explica calificativele asociate fiecărui circuit digital


menţionat în tabelul T 1.
Circuitele ASIC
Circuitele ASIC analogice au cel mai lung timp de lansare pe piaţă, deoarece
trebuie proiectate şi simulate la nivel de tranzistor şi apoi testate. Faza de proiectare
necesită de obicei între 6 şi 24 luni, respectiv între 1 şi 6 luni pentru ASIC digitale.

5
Capitolul 1

Astfel că în privinţa criteriului implementare pe piaţă circuitele ASIC au primit


calificativul nesatisfăcător datorită perioadei lungi de proiectare, testare şi validare a
soluţiilor.
Datorită faptului că, circuitele ASIC sunt prin definiţie circuite dedicate unei
aplicaţii, resursele lor sunt folosite la maxim şi prin urmare preţul şi consumul de
putere sunt reduse.
Din punctul de vedere al uşurinţei în dezvoltare circuitele ASIC au primit
calificativul satisfăcător. Deşi circuitele ASIC sunt percepute în general ca nefiind
scumpe, dacă se ia în considerare întreaga perioadă de dezvoltare cheltuielile totale
cresc. Acest lucru se întâmplă datorită proiectării logice laborioase care trebuie
făcută de către proiectant, cuplată cu costurile crescute de integrare a proiectului pe
siliciu.
Criteriul flexibilitate nu poate să intre în discuţie când este vorba de un circuit
ASIC, odată implementat pe siliciu, caracteristicile acestuia pot fi modificate numai
prin reproiectare şi reimplementare.

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

acestora poate fi mai dificilă în comparaţie cu reprogramarea software, alternativă


oferită de circuite cum ar fi DSP-urile şi microcontrolerele.

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

Procesoare RISC / GPP


Aceste procesoare sunt programabile prin soft prin urmare conferă o flexibilitate
maximă şi un timp de implementare pe piaţă scurt. Din punctul de vedere al
aplicaţiilor în timp real acest tip de procesoare au primit calificativul bine. Ele fiind
procesoare de uz general acoperă segmentul de piaţă al PC-urilor şi sunt mai puţin
folosite în aplicaţii „embedded” şi timp real. Preţul şi consumul de putere asociat
acestor procesoare sunt în general considerate satisfăcătoare.

B. Comparaţie performanţe circuite FPGA – DSP

În continuare, se va restrânge selecţia, astfel că dintre „competitorii” prezentaţi


anterior, se vor lua în discuţie circuitele DSP şi FPGA. Performanţele implementării
pe un procesor a unui algoritm pot fi analizate nu numai prin prisma frecvenţei de
lucru a acestuia ci mai ales prin prisma numărului de operaţii de multiplicare-
acumulare raportate la un interval de timp stabilit.
Procesoarele digitale de semnal convenţionale utilizează o arhitectură care
prin natura ei este serială. Blocurile de multiplicare – acumulare (MAC) sunt de obicei
resurse partajate. Controlerele PID folosesc intensiv blocurile MAC deoarece fiecare
intrare de date trebuie multiplicată cu coeficienţii de amplificare şi apoi rezultatele
însumate. Cu cât algoritmul este mai complex, creşte şi numărul de blocuri MAC
necesare pentru calculul rezultatului. Folosirea unui procesor cu frecvenţă de lucru
ridicată creează dificultăţi suplimentare astfel că la funcţionarea în timp real, pentru
semnale de frecvenţă foarte ridicată este optimă utilizarea tehnicii de procesare în
paralel utilizând mai multe blocuri MAC. Arhitectura modernă a circuitelor FPGA
permite procesarea paralelă care foloseşte mai multe blocuri MAC.

7
Capitolul 1

Performanţa circuitelor FPGA poate atinge 500 miliarde de MAC pe secundă


într-un Virtex II XC2V8000 care este cu mult mai mult decât ceea ce poate fi realizat
cu un procesor DSP convenţional. O comparaţie între performanţele celui mai rapid
DSP şi a câtorva circuite FPGA este prezentată în tabelul T 2.
Procesorul de semnal cu care s-a făcut comparaţia este TMS320C64x. Acesta
are patru blocuri MAC de 16x16 biţi care pot lucra în paralel la o frecvenţă maximă
de 720 MHz. Fiecare bloc MAC poate fi folosit ca două blocuri separate de 8x8 astfel
încât rezultă:
Tabelul T2. Comparaţie între performanţele DSP şi FPGA
Funcţia Cel mai rapid
Virtex-II Virtex-II Pro Spartan-3
implementată procesor DSP
8 x 8 MAC 5,7 miliarde 0,5 Tera MAC/s 1 Tera MAC/s 0,27 Tera MAC/s
MAC/s

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)

8 x 720 MHz = 5,76 miliarde MAC/s

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:

168 x 180 MHz = 30 miliarde MAC/s,

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

II. Domenii de utilizare ale circuitelor FPGA

- Industria aerospaţială şi de apărare – Începând din 1989 firma Xilinx


furnizează soluţii pentru această ramură industrială. Circuitele FPGA sunt
soluţii viabile pentru sisteme radar, sisteme criptografice, sisteme de
procesare a imaginii sau sisteme de control de la distanţă.

- Industria constructoare de maşini – În sisteme de asistare vizuală şi de


recunoaştere a traseului şi de asistenţă la parcare şi la mers cu spatele, în
sisteme de afişare a informaţiei pe afişaje LCD, sisteme multimedia (unităţi
video încorporate în tetiere), în reţelistica industrială pentru magistrale CAN
(Controller Area Network) şi MOST (Media Oriented System Transport).

Figura 4. Soluţii pentru industria constructoare de maşini

- Industria audio, video şi brodcast – Soluţii de procesare şi interfaţare audio-


video, compresie, corecţie a erorilor, modulare a semnalului şi de difuzare
(brodcast) a acestuia. Soluţii de transmitere audio-video prin mediul etherneth,
IPTV, vezi figura 1.

9
Capitolul 1

Figura 5. Soluţii audio-video şi brodcast

- Industria produselor de consum – Soluţii pentru modemuri de cablu, XDSL, ISDN.


Soluţii pentru controlere ethernet, USB, bluetooth, Firewire, SATA, IDE etc. Soluţii
pentru casa inteligentă, interconectarea aşa numitelor „insule de tehnologie”,
prezente într-o casă modernă.

Figura 6. Soluţii pentru bunuri de larg consum

- Domeniul procesarea şi stocarea datelor – Soluţii pentru NAS (Network


Attached Storage), şi SAN (Storage Area Network). Soluţii pentru securitatea
datelor: module pentru autentificare cu algoritmi MD5 şi SHA-1 şi SHA-2,
module pentru cifrare cu algoritmi DES, 3DES şi AES.

- Domeniul industrial, stinţific şi medical – Soluţii pentru reţelistica industrială:


etherCAT, EthernetPOWERLINK, SERCOS III. Soluţii pentru supraveghere

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.

Figura 7. Sistem de supraveghere

Figura 8. Controlul motoarelor

- Domeniul comunicaţiilor de date pe suport Cu sau optic – Soluţii pentru


procesarea pachetelor de date: managementul traficului, agregarea ethernet.
Soluţii pentru implementarea memoriilor de tip CAM (Content Addresable
Memory) necesare în dispozitivele layer 2.

11
Capitolul 1

Figura 9. Tester de reţea

- Domeniul comunicaţiilor fără fir (wireless) – Soluţii de procesare digitală a


semnalelor RF: transformata Fourier, modulare adaptivă. Soluţii pentru
standardele WCDMA/HSPA, WiMax, TD-SCDMA.

Mai multe detalii pe http://www.xilinx.com, secţiunea Market Solutions.

III. Fabricanţi de circuite FPGA

Xilinx – cel mai important;


Altera – al doilea ca importanţă;
Lattice Semiconductor – fabrică circuite FPGA non-volatile bazate pe memorii
flash;
Actel – fabrică circuite FPGA bazate pe fuzibile (programabile o singură dată) şi
circuite FPGA bazate pe celule de memorie flash;
Quick Logic - fabrică circuite FPGA bazate pe fuzibile;
Cypress Semiconductor
Atmel - furnizează soluţie de circuite FPGA care încorporeză microcontrolere din
familia AVR;
Achronix Semiconductor – dezvoltă circuite FPGA foarte rapide care lucrează la
viteze apropiate de 2 GHz.

12
Capitolul 2

2 INTRODUCERE ÎN DOMENIUL CIRCUITELOR LOGICE


PROGRAMABILE

2.1 Generalităţi

Termenul de circuit logic programabil sau PLD (Programmable Logic Devices)


este un termen general care se referă la orice tip de circuit integrat care poate fi
configurat de către utilizator pentru implementarea unui proiect. Dispozitivele logice
programabile au un rol important în proiectarea digitală, ele punând la dispoziţia
proiectantului o structură foarte flexibilă deschisă unui larg domeniu de aplicaţii. Unul
dintre cele mai folosite circuite logice programabile a fost memoria de tip ROM
programabilă o singură dată (PROM). În figura 2.2. a este prezentată diagrama bloc
a unei arhitecturi de tip PROM. Plecând de la această arhitectură s-au dezvoltat ariile
logice programabile de tip PLA (Programmable Logic Array) dedicate implementării
funcţiilor logice. Combinarea structurii PLA-urilor cu tehnologia PROM a avut ca
rezultat dezvoltarea dispozitivelor logice programabile de tip FPLA (Field
Programmable Logic Array), care au apărut pe piaţă la mijlocul anilor ’70. FPLA-urile
au un număr fix de intrări, de ieşiri şi un număr fix de termeni de tipul produs.
Avantajul oferit de circuitele din această familie este că atât aria logică de porţi ŞI cât
şi cea de porţi SAU sunt programabile (vezi figura 2.2.b). Totuşi acest tip de circuite
logice programabile au avut un succes limitat deoarece aveau viteză scăzută de
lucru şi erau dificil de programat. Modul de programare consta în alcătuirea unei
“hărţii” de conexiuni care nu prezenta nici o asemănare cu modurile de reprezentare
schematic sau prin ecuaţii de tip Boolean folosite în proiectarea cu circuite logice.
Logica programată a devenit mai populară la mijlocul anilor 1970 odată cu
apariţia ariilor logice programabile de tip PAL-uri (Programmable Array Logic). Acest
tip de arhitectură combină o arie programabilă de porţi ŞI cu o arie de porţi SAU fixă
(spre deosebire de circuitele PLA la care atât aria de porţi ŞI cât şi cea de porţi SAU
sunt programabile). Acest tip de arie a fost îmbunătăţit în mod continuu de diverşi
producători.

2.2 Dispozitive logice programabile simple

Deşi în ultimi ani arhitecturile dispozitivelor logice programabile (PLD =


Programmable Logic Devices) au fost îmbunătăţite, circuitele simple de tip PAL sau
PLA aflate în capsule cu 24 pini (ex. 16V8/20V8, 22V10) au devenit un standard
industrial. În general circuitele PLD cu densitate redusă de porţi logice (PLA şi PAL),
sunt prezente pe piaţă în capsule de 20 sau 44 de pini şi au o densitate cuprinsă
Capitolul 2

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

Figura 2.2.a Arhitectură PROM

14
Introducere în domeniul circuitelor logice programabile

Figura 2.2.b Arhitectură FPLA

2.3 Dispozitive logice programabile de capacitate mare

Pentru a depăşii limitările datorate arhitecturi simple a circuitelor SPLD s-a


dezvoltat o nouă ramură de circuite logice programabile de mare capacitate, numite
CPLD-uri (Complex Programmable Logic Devices) si FPGA (Field Programmable
Gate Arrays) care au o arhitectură mai complexă şi mai flexibilă permiţând astfel o
alocare mai eficientă a macrocelulelor. În această lucrare prin folosirea termenului
PLD se va face referire atât la circuitele SPLD cât şi la circuitele CPLD şi FPGA.
Începând cu anul 1985 firma Xilinx Corporation a dezvoltat un nou tip de arhitectură
cu denumirea generică LCA (Logic Cell Array), care va servi ca şi prototip pentru
următoarele generaţii de arhitecturi FPGA. Noul tip de arhitectură constă dintr-o arie
de celule logice independente înconjurată de celule de intrare/ieşire, aria cuprinde de
asemenea şi resurse de interconectare a celulelor.
În primele tipuri de circuite LCA fiecare celulă logică era alcătuită dintr-o logică
combinaţională şi un bistabil. Fiecare celulă de intrare/ieşire poate fi programată ca şi
intrare combinaţională sau secvenţială, ca şi ieşire sau ca şi port bidirecţional. În
cazul circuitelor CPLD şi FPGA elementele logice mai sunt numite şi macrocelule,
blocuri configurabile sau CLB-uri (Configurable Logic Blocks). Aşa cum s-a mai

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.

Figura 2.2 Evoluţia circuitelor SPLD şi CPLD

Caracteristica principală a circuitelor PLD, definită de producători este timpul


de întârziere la propagarea unui semnal (Tpd ) de la o intrare a unui circuit aflat pe
pastila de siliciu, la ieşirea acestuia. Valoarea lui Tpd în cazul unui circuit CPLD cu 44
pini şi 32 de macrocelule la o frecvenţă de 180 MHz este de 5 ns, în timp ce pentru
un CPLD cu 100 de pini şi 128 de macrocelule timpul de întârziere la propagare este
de 7,5 ns. În figura 2.2 este prezentată o diagramă care compară performanţele
circuitelor SPLD şi CPLD în funcţie de valoarea lui Tpd [1] .
Până de curând segmentul de piaţă ocupat de circuitele CPLD era unul
distinct faţă de cel ocupat de circuitele FPGA. Preţul ridicat al circuitelor CPLD,
posibilitatea de a prevedea specificaţiile de timp, precum şi performanţe mai bune de
cât a circuitelor FPGA, le recomandă în cazul proiectelor de dimensiuni reduse, dar
cu frecvenţă de lucru ridicată. În comparaţie, circuitele FPGA beneficiind de un preţ
mai scăzut şi de o densitate mai mare de macrocelule erau optime pentru proiecte de
dimensiuni medii şi frecvenţă de lucru nu foarte ridicată. Totuşi, în ultima perioadă,
datorită căderi preţurilor la circuitele CPLD, a creşterii capacităţii acestor, precum şi
datorită apariţiei unei noi caracteristici cum este posibilitatea de programare în sistem
(ISP), a făcut ca cererea CPLD-urilor pe piaţă să fie în continuă creştere. Iată de ce
domeniile de aplicaţii ale circuitelor CPLD şi FPGA se întrepătrund.
Caracteristica ISP (In-System Programmability) este prezentă la multe familii
de circuite CPLD şi oferă posibilitatea ca circuitele CPLD să fie reprogramate chiar şi
după montare pe placa de lucru (vezi figura 2.3.a,b). Standardul de programare în

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.

Figura 2.3 Programarea în sistem a circuitelor CPLD

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

domeniul a 0,5-0,25µm. În figura 2.5 este prezentată o diagramă care ilustrează


evoluţia circuitelor PLD de mare capacitate în ceea ce priveşte tehnologia de
realizare şi densitatea de porţi logice/chip.
Din eforturile de a îmbunătăţii şi a extinde arhitectura circuitelor FPGA a
rezultat o nouă clasă de circuite numite sistem de matrici de porţi logice programabile
SPGA (System – Programmable Gate Array). Aceste circuite noi combină arhitectura
de bază a circuitelor FPGA cu ce a circuitelor ASIC (Application Specific Integrated
Circuit), rezultând astfel o capacitate mult sporită.

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.

2.4 Tipuri de capsule şi modalităţi de alegere

Datorită creşteri densităţii şi performanţelor circuitelor PLD, este o adevărată


provocare pentru producători să furnizeze capsule cu caracteristici optime din punct
de vedere termic, electric şi mecanic. În plus capsulele destinate circuitelor PLD
trebuie să aibă dimensiuni minime şi să se preteze la procesul de montare automată
pe plăci.
Ultimele inovaţii în industria circuitelor PLD au avut ca rezultat dezvoltarea
capsulelor de tip PQFP (Plastic Quad Flat Packs = capsulă de plastic plată), TQFP
(Thin Plastic Quad Flat Pack = capsulă de plastic plată subţire) şi a capsulelor de tip
BGA (Ball Grid Array). Aceste tipuri de capsule de diferite grosimi folosesc diverse
metode de răcire.
În funcţie de tipurile de capsule disponibile există două modalităţi de montare
a circuitelor PLD: montare prin găuri şi montare pe suprafaţă. Capsulele cele mai
folosite pentru primul tip de montare sunt: capsulele de tip DIP (Dual In-line
Packages = capsule cu două rânduri de pini) şi capsulele de tip PGA (Pin Grid Array
= matrice de pini), vezi figura 2.6. Capsulele folosite în cazul montării pe suprafaţă
sunt de tipul LCC (Leadless Chip Carriers = capsulă fără pini, contacte direct pe
capsulă ) şi de tipul QFP (Quad Flat Packs = capsulă plată de formă pătratică), vezi

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.

DIP PGA QFP BGA


Figura 2.6 Tipuri de capsule
Tehnologia de montare pe suprafaţă (SMT) permite montarea dispozitivelor
electronice pe ambele părţi ale circuitului imprimat, această tehnologie a devenit
foarte populară în cadrul aplicaţiilor ce vizează sectorul comercial şi industrial. Pe
lângă faptul că oferă o densitate sporită de dispozitive electronice pe placa,
tehnologia SMT este mult mai potrivită în procesul de automatizare. Circuitele SMD
(Surface Mounted Devices) îi ajută pe proiectanţi să micşoreze dimensiunile plăcii de
circuit imprimat şi să minimizeze valorile capacităţilor şi inductivităţilor parazite. Un
dezavantaj al utilizării circuitelor QFP este acela că pini corespunzători acestui tip de
capsulă sunt foarte fragili, ei fiind foarte uşor de deteriorat pe durata procesului de
testare/montare.

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

Alegerea circuitului PLD având capsula corespunzătoare depinde de aplicaţie


şi de mediul de proiectare folosit. Capsula aleasă trebuie să aibă rezistenţă termică
scăzută şi de asemenea capacităţi şi inductivităţi parazite minime. Caracteristicile
termice ale capsulelor sunt foarte importante având o influenţă majoră asupra
performanţelor şi fiabilităţii dispozitivelor.
Cu cât creşte mai mult densitatea de porţi logice şi cu cât creşte puterea
disipată, cu atât trebuie ca rezistenţa termică (θJA) să fie mai scăzută. Pentru a
diminua rata defectelor mecanice provocate de manipulare (montare/testare)
majoritatea circuitelor PLD sunt prevăzute cu opţiunea de scanare periferică pentru
testare prin intermediul busului JTAG (standard IEEE 1149.1) şi de asemenea există
şi posibilitatea de reprogramare în sistem.
În figura 2.7 sunt prezentate câteva tipuri de capsule disponibile pentru
circuitele PLD, tipul de capsulă pentru un anumit circuit depinde atât de numărul de
porţi logice cât şi de numărul de pini.

2.5 Modalităţi de proiectare cu circuite PLD

Metoda de bază în proiectarea cu circuite logice programabile cuprinde trei


faze:
- descrierea proiectului;
- implementarea proiectului;
- verificarea proiectului.
În general programele soft folosite pentru descrierea şi simularea proiectelor
sunt de uz general şi nu sunt dependente de tehnologie spre deosebire de
programele folosite pentru sinteză. Iniţial descrierea proiectelor se făcea prin
intermediul simbolurilor schematice, dar această modalitate se pretează numai în
cazul proiectelor cu un număr relativ redus de porţi logice. Pentru proiectele mai
complexe descrierile la nivel de poartă logică pot devenii foarte complicate, astfel că
s-au dezvoltat limbajele de descriere hardware (HDL = Hardware Description
Language). Prin intermediul limbajelor HDL se face o descriere comportamentală a
proiectului, din această situaţie derivă următoarele avantaje:
- Alegerea tehnologiei (circuitul FPGA sau CPLD) în care se va face
implementarea proiectului poate fi amânată către o fază de proiectare mai târzie,
moment în care cerinţele sunt mai bine conturate.
- Este facilitată trecerea de la o tehnologie la alta (ex. din FPGA în porţi logice),
costurile fiind minime.
- Părţi dintr-un proiect realizat pot fi reintegrate foarte rapid în proiecte viitoare,
indiferent de tehnologie.
Limbajele HDL se încadrează în două categorii:
- Limbaje HDL folosite pentru descrierea circuitelor programabile logice simple,
dezvoltate în anii 1970. Dintre acestea reamintim: asamblorul PAL (PALASM),
limbajul de descriere avansată a expresiilor booleene (ABEL) şi compilatorul
universal pentru dispozitive logice programabile (CUPL).

21
Capitolul 2

- Limbaje HDL folosite pentru descrierea circuitelor programabile logice complexe


având un nivel mai mare de abstractizare, dezvoltate la sfârşitul anilor 1980. Cele
mai cunoscute sunt VHDL-ul (Very High Speed Integrated Circuits (VHSIC) HDL)
şi Verilog HDL-ul.
Sinteza logică este procesul de conversie optimizată a unui proiect de la nivel
de descriere structurală / comportamental abstractă la nivel de poartă logică. Cu
toate că, teoretic descrierea VHDL este transparentă (independentă) din punct de
vedere al tehnologiei, rolul programelor de sinteză este foarte important în
metodologia de proiectare. Astfel că pentru diferite arhitecturi FPGA se impun stiluri
diferite de codare VHDL a unui proiect.
Majoritatea proiectelor dezvoltate pentru tehnologia FPGA sunt compatibile cu
tehnicile de proiectare ierarhice (top-down). Astfel că se va face o descriere a
blocurilor de bază la nivelul cel mai superior (top level), după care se intră în fiecare
bloc şi se face descrierea funcţională a acestuia sau se începe o altă descriere
ierarhică. Acest tip de proiectare ierarhică are câteva avantaje, cum ar fi: posibilitatea
de depistare rapidă a erorilor, partiţionarea proiectelor complexe, stocarea anumitor
funcţii mai frecvent folosite în biblioteci.

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

Figura 2.8 Metodologia de proiectare

Cele mai importante firme producătoare de soft de proiectare Cadence Design


System, Mentor Graphics şi Viewlogic oferă programe de proiectare automată
universale independente de metoda de proiectare, programe care conţin biblioteci
pentru o gamă largă de circuite PLD. Există de asemenea programe de proiectare
mai puţin performante decât cele produse de către firmele enumerate mai sus, dar

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

2.6 Criteriile de alegere a circuitelor PLD

Î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

- timpul necesar pentru ca produsul să ajungă pe piaţă;


- numărul de regiştri (bistabile) disponibili;
- numărul de porturi de intrare/ieşire;
- accesul la bibliotecile cu macrocelule ale producătorului;
- costul şi calitatea programelor de proiectare disponibile;
- consumul de putere;
- tipurile de capsule disponibile;
- alte caracteristici suplimentare disponibile.

25
Capitolul 3

3 INTRODUCERE ÎN LIMBAJUL DE DESCRIERE


HARDWARE – VHDL

3.1 Generalităţi

Acest limbaj a fost dezvoltat la mijlocul anilor ’80 de către departamentul de


apărare al Statelor Unite în colaborare cu IEEE (Institute of Electrical and
Electronical Enginner).
Abrevierea VHDL derivă din VHSIC Hardware Description Language (limbajul
de descriere hard VHSIC), abrevierea VHSIC însemnând la rândul ei Very High
Speed Integrated Circuit.
În continuare sunt enumerate câteva din caracteristicile limbajului:
- proiectele pot fi descompuse ierarhic;
- fiecare element al proiectului are o interfaţă bine definită (pentru a se asigura
conectivitatea cu celelalte elemente ale proiectului) şi specificaţii
comportamentale precise (pentru a putea fi simulat);
- specificaţiile comportamentale pot fi exprimate sub formă de algoritm sau ca şi
structură hard, aceasta pentru ca funcţionarea elementului să fie bine definită;
- prin intermediul limbajului VHDL pot fi modelate noţiunile de concurenţă, timing şi
sincronizare a semnalelor, se permite astfel modelarea circuitelor atât sincrone
cât şi asincrone;
- proiectul modelat în VHDL poate fi simulat funcţional (dacă funcţionează corect
d.p.d.v. logic) cât şi din punctul de vedere al comportării în timp (întârzierile).
Popularitatea şi mai ales utilitatea limbajului VHDL a crescut mai ales din
momentul din care s-au dezvoltat şi un set de unelte pentru sinteză (synthesis tools).
Acest set de programe poate crea structuri de circuite logice direct din descrierile
VHDL comportamentale. Folosind limbajul VHDL pot fi proiectate, simulate şi
sintetizate atât circuitele combinaţionale simple cât şi sisteme complexe cu
microprocesor.
Limbajul VHDL a fost standardizat pentru prima dată de IEEE în 1987 (VHDL-
87) şi a fost extins în 1993 (VHDL-93).

3.2 Design Flow

Î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

3.1 Fazele urmate pentru descrierea şi sintetizarea circuitelor în 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.

3.3 Structura unui cod VHDL


VHDL a fost proiectat ca şi program structurat, împrumutându-se unele idei de
la limbajele de programare soft Pascal şi Ada. O idee de bază este acea de a definii
o interfaţă a modulului hard în timp ce detaliile interne sunt ascunse. Astfel o entitate
(entity) VHDL este o simplă declarare a intrărilor şi ieşirilor modulului în timp ce
arhitectura (architecture) VHDL este o descriere structurală sau comportamentală
detailată a funcţionării modulului. Figura 3.2(a) ilustrează acest concept. Acest
concept formează bazele proiectării ierarhice a sistemelor, şi anume arhitectura
entităţii de la nivelul cel mai superior poate conţine (instantiate) alte entităţi ale căror
arhitecturi sunt “invizibile” de la nivelele superioare. După cum se poate observa în
figura 3.2(b) o arhitectură de la nivel superior poate folosii entităţi de la nivelul inferior
de mai multe ori, iar mai multe arhitecturi de la nivel superior pot folosii aceeaşi
entitate de la nivel inferior fiecare la rândul ei.

28
Introducere în limbajul de descriere hardware – VHDL

Figura 3.3.a) Conceptul entitate-arhitectură; b)Conceptul de ierarhie

În fişierul text al unui fişier VHDL declararea entităţii şi definirea arhitecturii se


face separat, vezi figura 3.3. În tabelul T3.1 este prezenta un program VHDL simplu
care descrie funcţionarea porţii ŞI (AND) cu o intrare inhibată cunoscută şi sub
denumirea de poartă BUT-NOT.

Tabelul T3.1 Program VHDL pentru poarta BUT-NOT

Figura 3.3 Structura unui fişier


VHDL

În proiecte mai complexe este posibil ca entităţile şi arhitecturile să fie definite


în fişiere separate pe care compilatorul le va “potrivii” în funcţie de numele declarate.
VHDL-ul ignoră spaţiile şi liniile despărţitoare, acestea putând fi folosite pentru a face

29
Capitolul 3

codul mai uşor de citit, pentru a comenta o linie de program se foloseşte


simbolizarea prin două linii succesive (--), după care se introduce linia de comentariu.
În VHDL sunt definite şiruri de caractere speciale care sunt denumite şi cuvinte cheie
(keywords) sau cuvinte dedicate. În exemplu din tabelul T3.1 aceste cuvinte cheie
sunt: entity, port, is, in ,out, end, architecture, begin, when, else şi and. Codul VHDL
mai conţine şi aşa numiţii identificatori (Identifires): Inhibit, X,Y, BIT, Z, şi Inhibit_arch,
aceste litere sau şiruri de litere, trebuie să înceapă şi să se sfârşească cu o literă, dar
pot să conţină şi numere sau linii de picior(?) şi sunt definite de programator.
Cuvintele cheie şi identificatorii pot fi scrişi cu atât cu majuscule cât şi cu litere mici,
nu sunt “case sensitive”. Sintaxa pentru declararea entităţii este prezentată în tabelul
T3.3.
Tabelul T3.2 Sintaxa VHDL pentru declararea entităţii

entity entity-name is
port (signal-names : mode signal-type;
signal-names : mode signal-type;

signal-names : mode signal-type);
end entity-name;

Pe lângă cuvintele cheie în codul VHDL mai apar următoarele elemente:


- entity-name = un nume selectat de utilizator pentru a denumi entitatea;
- signal-names = o listă de unul sau mai mulţi identificatori selectaţi de utilizator,
separaţi prin virgulă care denumesc semnalele externe;
- mode = unul din următoarele patru cuvinte rezervate, specificând direcţia
semnalului:
o in – pentru semnal de intrare în entitate;
o out – pentru semnal de ieşire din entitate, cu menţiunea că, valoarea
semnalului nu poate fi “citită” înăuntrul entităţii, ci numai de alte entităţi
care-l folosesc;
o buffer – defineşte un semnal de ieşire din entitate, iar valoare lui poate
fi citită şi în interiorul arhitecturii din entitate;
o inout – defineşte un semnal de intrare/ieşire din entitate, acest se
foloseşte frecvent pentru a descrie pini three-state.
A se observa că după ultimul semnal definit nu se mai pune punct şi virgulă.
În tabelul T3.3 este prezentată sintaxa pentru declararea arhitecturii. Numele
entităţii (entity-name) trebuie să fie acelaşi cu cel folosit la definirea entităţii. Numele
arhitecturii (architecture-name) este un identificator definit de utilizator, dacă se
doreşte poate fi la fel cu cel al entităţii sau diferit. Semnalele externe ale arhitecturii
sunt cele moştenite de la entitate, de asemenea se pot definii şi semnale interne
(signal declaration), dar care vor acţiona doar local în arhitectură. Declaraţiile

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;

Tabelul T3.3 Sintaxa VHDL pentru declararea arhitecturii

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

3.4 Tipuri şi constante


Toate semnalele, variabilele şi constantele dintr-un program VHDL trebuie să
aibă asociat un tip (type). În cadrul tipului se specifică un set de valori pe care le
poate lua obiectul (semnal, variabilă …) şi de asemenea există şi un set de operatori
(+, AND etc)asociaţi tipului respectiv. Limbajul VHDL are doar câteva tipuri
predefinite, vezi tabelul T3.3.
Tabellu T3.4 Tipuri predefinite în VHDL

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.

Tabelul T3.5 Operatori predefiniţi specifici tipurilor integer şi boolean


Operatori (operanzi întregi) Operatori (operanzi logici)
+ adunare and ŞI
- scădere or SAU
* înmulţire nand ŞI-NU
/ împărţire nor SAU-NU
mod împărţire modulo xor SAU-EXCLUSIV
rem împărţire modulo cu rest xnor SAU-EXCLUSIV-NOT
abs valoare absolută not complementare
** ridicare la putere

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

Value-list (lista de valori) reprezintă înşiruirea (enumerarea) tuturor elementelor


posibile pentru respectivul tip, separate prin virgulă. Valorile enumerate pot fi atât
caractere cât şi identificatori definiţi de utilizator. Un tip foarte important este
std_logic, vezi tabelul T3.7, care este un tip standard definit de utilizator (standard
user defined logic type) şi este parte a package-ului standard IEEE 1164 pe care îl
vom trata ulterior. Acest tip include pe lângă valorile logice 0 şi 1 alte şapte valori
care îşi găsesc utilitate în simularea unui semnal logic dintr-un circuit real.
După cum se poate observa în tabelul T3.6 limbajul VHDL permite definirea
de subtip (subtype) corespunzător unui tip. Valorile unui subtip trebuie să într-un
domeniu continu faţă de valorile tipului de bază. Pentru tipul enumerare, “continu “ se
referă la poziţia valorilor din lista valorilor corespunzătoare tipului de bază. A se

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

observa că ordinea elementelor dintr-un şir trebuie specificată în ordină crescătoare


sau descrescătoare (to sau downto).

Tabelul T3.7 Valori definite în cadrul tipului std_logic

În orice limbaj constantele contribuie la lizibilitatea, mentenabilitatea, şi


portabilitatea unui program. Sintaxa VHDL pentru declararea constantelor este
prezentată în tabelul T3.6, pentru o mai bună înţelegere în continuare se prezintă şi
câteva exemple.
constant BUS_SIZE: integer :=32; -- reprezintă lăţime componentei
constant MSB: integer := BUS_SIZE-1; -- numărul de biţi ai lui MSB
constant Z: character := ‘Z’; -- sinonim valorii de înaltă impedanţă
Se observă că valoarea unei constante poate fi chiar şi o expresie.
O altă categorie foarte importantă de tip definit de utilizator este tipul matrice
(array type). Acest tip defineşte o matrice ca fiind un set de elemente de acelaşi în
care fiecare element este selectat printr-un index de matrice (array index) În tabelul
T3.8 sunt prezentate câteva versiuni de sintaxă folosite în declararea unei arii.

Tabelul 3.8 Sintaxa VHDL pentru declararea unei arii

Î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

Tabelul T3.9 Exemple de declaraţii de arii

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:

B := (‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’);

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:

W := (0=>’1’, 8=>’1’, 16=>’1’, 24=>’1’, others=>’0’);

Expresiile anterioare pot fi rescrise folosind şirurile de caractere, după cum urmează:

B := “11111111”;
W:= “11111110111111101111111011111110”;

Este posibil de asemenea să se facă referire la un subset de valori (slice)


dintr-o matrice, specificând începutul şi sfârşitul indicilor elementelor din subset,
exemple cu referire la tipurile din tabelul T3.9: M(6 to 9), B(3 downto 0), W(15 downto 8)
etc.

34
Introducere în limbajul de descriere hardware – VHDL

Folosind operatorul concatenare & (concatenation operator) se pot alătura


elementele unei matrici în ordinea în care sunt scrise, de la stânga la dreapta., de
exemplu prin concatenarea ‘0’ & ’1’ & ‘1Z’ se obţine “011Z”.
Cel mai important tip de matrice des întâlnit în programele VHDL este cel
aparţinând standardului logic definit de utilizator IEEE 1164 (std_logic_vector),
definiţia acestui standard este:

type STD_LOGIC_VECTOR is array (natural range < > ) of STD_LOGIC

3.5 Funcţii şi proceduri

La fel ca şi în alte limbaje de nivel înalt şi în VHDL o funcţie acceptă un


anumit număr de argumente şi returnează un rezultat. Atât argumentele cât şi
rezultatul returnat de o funcţie sunt de un tip predeterminat. Sintaxa VHDL prin care
se defineşte o funcţie este prezentată în tabelul T3.10. După ce se dă un nume
funcţiei (function -name) se poate definii o listă de parametri formali care vor fi folosiţi
în structura funcţiei (signal-names : signal-types;…), toţi aceşti parametrii trebuie să fi
de acelaşi tip. Din tabelul T3.10 se poate observa că în cadrul unei funcţii se pot
definii local tipuri, constante, variabile şi de asemenea funcţii şi proceduri imbricate
(nested). Între cuvintele cheie begin şi end este cuprinsă o serie de instrucţiuni
secvenţiale care sunt executate ori de câte ori este apelată funcţia . În tabelul T3.11
este prezentat un exemplu de descriere a unei funcţii în limbaj VHDL. În cadrul
funcţiei cuvântul cheie return indică momentul din care funcţia returnează o valoare
care trebuie să fie de tipul celei definite la declararea funcţiei.

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.

Tabelul T3.12 Definirea operatorului and


pentru valori de tip STD_LOGIC în cadrul package-ului IEEE 1164

Argumentele funcţiei (intrările) trebuie să fie de tipul std_ulogic sau de subtipul


std_logic. În cod mai este definit subtipul UX01, pentru valoarea returnată de funcţie.
Tipul stdlogic_table o matrice bidimensională 9 X 9 care are ca şi index o pereche de
valori de tipul std_ulogic. În tabelul T3.12 (and_table,) valorile sunt astfel aranjate
încât atunci când ambii indecşi (linie(L), coloană (R)), sunt ‘0’ sau ‘L’ (L= un zero
logic mai slab), valoarea returnată este ‘0’, iar când ambele valori ale indecşilor sunt
‘1’ sau ‘H’ (H= un unu logic mai slab), valoarea returnată va fi ‘1’, în alte cazuri apar
numai valorile ‘U’ sau ‘X’. Se poate observa că denumirea funcţiei este pusă între
ghilimele, ceea ce denotă că operatorul and este “supraîncărcat” (overload operator).
Partea “executabilă” a funcţiei este o simplă declaraţie care returnează elementele
indexate ale funcţiei în funcţie de valoarea celor două intrări L şi R.

36
Introducere în limbajul de descriere hardware – VHDL

Datorită faptului că VHDL-ul este un limbaj puternic tipizat, adesea apare


necesitatea convertiri unui semnal sau variabile dintr-un anumit tip în altul. Package-
ul IEEE 1164 conţine câteva astfel de funcţii de conversie, de exemplu din BIT în
STD_LOGIC sau invers. O conversie foarte utilizată şi care nu este definită, din
cauză că proiecte diferite pot avea nevoie de o interpretare diferită a numerelor (ex.
numere cu semn sau fără semn), este conversia din STD_LOGIC_VECTOR în
integer. În tabelele 3.13 şi 3.14 sunt prezentate exemple pentru conversia mai sus
amintită.
Funcţia CONV_INTEGER din tabelul T3.13 foloseşte un algoritm simplu de
iterare. Semnificaţiile instrucţiunilor FOR, CASE şi WHEN vor fi descrise mai pe larg
într-o secţiune care urmează (momentan ne bazăm pe cunoştinţele d-voastră
prealabile de programare), instrucţiunea null înseamnă “nu face nimic”. Domeniul pe
care se manifestă instrucţiunea de ciclare FOR, se specifică în cod prin sintaxa
“X’range”, în care semnul apostrof dat după numele unui semnal specifică folosirea
unui atribut (“attribute”). În cazul nostru atributul este range care este implicit, se
aplică numai ariilor şi are semnificaţia “parcurge indexul ariei de la stânga la
dreapta”.
Conversia în sens invers din integer în STD_LOGIC_VECTO este funcţia
CONV_STD_LOGIC_VECTOR şi este prezentată în tabelul T3.13.

Tabelul T3.13 Funcţie VHDL pentru conversia din STD_LOGIC_VECTOR în integer

Î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

Tabelul T3.14 Funcţie VHDL pentru conversia din integer în STD_LOGIC_VECTOR

3.6 Biblioteci şi package-uri

O bibliotecă (library) VHDL este locul unde compilatorul depune toate


informaţiile despre un anumit proiect şi anume toate fişierele intermediare folosite în
analiza, simularea şi sinteza proiectului. Pentru un proiect VHDL dat compilatorul
creează şi foloseşte în mod automat o bibliotecă numită work.
Un proiect complex conţine de obicei mai multe fişiere, fiecare incluzând diferite
unităţi de proiect, cum ar fi entităţi şi arhitecturi. În momentul în care un compilator
analizează fiecare fişier din proiect, el plasează rezultatele în biblioteca work şi de
asemenea din această bibliotecă ia informaţii despre alte entităţi dacă este cazul.
Astfel un proiect mai complex va putea fi împărţit în mai multe fişiere, iar
compilatorul le va analiza pe fiecare în parte. Deoarece nu toate informaţiile
necesare unui proiect se află în bibliotecă work (care este de obicei un subdirector în
cadrul proiectului) trebuie să ne referim la o bibliotecă standard care conţine
elemente (funcţii, tipuri, etc) predefinite. În VHDL această referire se face folosind
directiva library la începutul codului VHDL, ex. library ieee;. Prin specificarea
numelui bibliotecii se obţine acces la toate entităţile şi arhitecturile aflate în biblioteca
respectivă, dar nu dă acces la tipurile definite acesta fiind rolul package-urilor şi al
directivei use.
Un package este un fişier care conţine obiecte definite care pot fi folosite în
alte programe. Tipurile de obiecte care se află într-un package sunt: semnale, definiri
de tipuri, constante, funcţii, proceduri şi declarări de componente. Un proiect poate
folosii un package dacă în codul VHDL se include directiva use, de exemplu pentru a
apela toate componentele definite în package-ul standard IEEE 1164 scriem
următoarea secvenţă de cod: use ieee.std_logic_1163.all;, unde ieee este numele
unei librării care a fost dat împreună cu directiva library. Sintaxa std_logic_1164 este
numele unui fişier care conţine componentele definite, iar sufixul all îi spune
compilatorului să le folosească pe toate. În locul respectivului sufix se poate scrie
numai numele unei anumite componente care să fie luată în considerare de
compilator, ex. use ieee.std_logic_1163.std_ulogic.

38
Introducere în limbajul de descriere hardware – VHDL

Definirea package-urilor nu se limitează doar la cele standard aflate în


biblioteci, utilizatorul poate el însuşi să-şi definească package-uri conform sintaxei
din tabelul T3.15.

Tabelul T3.15 Sintaxa VHDL pentru declararea unui package

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.

3.7 Elemente de descriere structurală

Începând cu acest paragraf vom studia partea “executabilă” a unei arhitecturi,


practic inima unui cod scris în limbaj VHDL. Reamintim dintr-un paragraf anterior că
o arhitectură este formată dintr-o serie de instrucţiuni concurente (concurrent
statement), fiecare astfel de instrucţiune fiind executată simultan cu celelalte
instrucţiuni din arhitectură. Această executare concurenţială a anumitor instrucţiuni
distinge limbajul VHDL faţă de alte limbaje de programare în care instrucţiunile se
execută secvenţială (câte una la un moment dat).
Instrucţiunile concurente sunt necesare pentru a putea simula comportamentul
circuitelor modelate, în care componentele interacţionează unele cu altele în mod
continuu şi nu numai la anumite momente ordonate în timp. Într-o arhitectură VHDL
dacă ultima instrucţiune modifică starea unui semnal care este folosit de prima
instrucţiune din arhitectură atunci simulatorul se va întoarce la prima instrucţiune şi o
va reactualiza cu noua valoare, cu alte cuvinte simulatorul va continua să propage
schimbările şi să reactualizeze valorile semnalelor până când circuitul simulat se
stabilizează.

39
Capitolul 3

Sintaxa VHDL conţine câteva instrucţiuni concurenţiale şi de asemenea un


mecanism de grupare a instrucţiunilor secvenţiale astfel încât ele să funcţioneze ca şi
o sigură instrucţiune concurenţială.
Cea mai elementară instrucţiune concurenţială este instrucţiunea component,
a cărei sintaxă este prezentată în tabelul T3.16.

Tabelul T3.16 Sintaxa VHDL pentru instrucţiunea component

Numele componentei (component_name) este numele unei entităţi definite anterior


care trebuie utilizată sau instanţiată (multiplicată). Fiecare instrucţiune component
care invocă numele entităţi creează o “clonă” (instanţă) respectivei entităţi care se
va distinge printr-un nume unic dat de o etichetă (label).
Cuvântul cheie port map introduce o listă care asociază porturile
componentelor rezultate din instanţierea unei entităţi cu arhitectura corespunzătoare
entităţii instanţiate. Această listă se poate scrie în două moduri: poziţional şi
asociativ. În modul poziţional de atribuire semnalele din listă sunt asociate cu
porturile entităţii în aceeaşi ordine în care apar în entitate. În modul de atribuire
asociativ fiecare port al entităţii se asociază unui semnal folosind operatorul “=>”, iar
asocierea poate fi făcută în orice ordine.
Înainte de a fi instanţiată într-o arhitectură, o componentă trebuie să fie
declarată în cadrul arhitecturii, sintaxa de declarare este prezentată în tabelul 3.17.
După cum se poate observa în tabel declararea unei componente este
asemănătoare cu declararea porturilor entităţii ce urmează a fi instanţiate.
Componentele folosite în arhitectură pot să fie de două tipuri: a) componente
descrise anterior care sunt specifice proiectului sau, b) componente care sunt
apelate din bibliotecile standard.
Pentru a pune cap la cap toate cele discutate până aici, în tabelul T3.18 este
prezentată descrierea VHDL completă a unui detector de numere prime, iar în figura
3.4 este prezentată descrierea simbolică cu porţi logice a detectorului de numere
prime.

Tabelul T3.17 Sintaxa pentru declararea unei componente

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

Figura 3.4 Diagrama logică a detectorului de numere prime

41
Capitolul 3

Acest mod de descriere a unui circuit poartă numele de descriere structurală


(structural description), deoarece defineşte exact elementele şi interconexiunile
dintre ele. O descriere structurală pură este echivalentă cu o descriere schematică
sau cu un netlist (listă de conexiuni între elementele unui circuit).
Există proiecte în care este necesar să se creeze copii multiple a unui element
în cadrul unei arhitecturi. După cum se va studia mai târziu un sumator pe n biţi se
poate crea din n sumatoare pe un bit. Limbajul VHDL include o instrucţiune
(generate) care permite crearea unei structuri repetitive folosind un fel de buclă, fără
a fi necesar să instanţiem separat fiecare element.
Sintaxa instrucţiuni generate este prezentată în tabelul T3.19.

Identificatorul (indetifier) este


Tabelul T3.19 Sintaxa VHDL implicit declarat ca şi variabilă
pentru bucla for-generate compatibilă cu domeniul (range), iar
instrucţiunile concurente (concurent
statement) se execută odată pentru
fiecare valoare din domeniu a
identificatorului.

Identificatorul trebuie folosit în zona de declarare a instrucţiunilor concurenţiale. În


tabelul T3.20 este prezentat un exemplu de utilizare a instrucţiunii generate, în cazul
creării unei porţi inversoare pe 8-biţi. Valoarea constantei trebuie cunoscută în
momentul în care programul VHDL este compilat.

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

Tabelul T3.21 Sintaxa VHDL pentru declararea constantei generic

În unele aplicaţii este util să se proiecteze şi să se compileze o entitate


împreună cu arhitectura corespunzătoare care să conţină unii parametrii (cum ar fi
lăţimea busului) care nu sunt specificaţi, această facilitate este introdusă de
constanta generic a cărei sintaxă este prezentată în tabelul T3.21. Rolul constantei
generic (vezi constanta width, tabelul T3.22) va fi definit în continuare în cadrul
arhitecturii, dar o valoare îi va fi atribuită numai când entitatea va fi instanţiată în
cadrul altei arhitecturi (vezi tabelul T3.23). În cadrul definirii componentelor,
constantelor generic li se atribuie valori folosind instrucţiunea generic map,
asemănătoare cu instrucţiunea port map. În tabelul T3.22 se dă un exemplu de
definire a unui bus inversor de lăţime variabilă care combină instrucţiunile generic şi
generate. Un exemplu de folosire a instrucţiunii generic este dat în tabelul T3.23
unde se definesc multiple copii ale unui inversor.

Tabelul T3.22 Descriere în limbaj VHDL a unui bus de lăţime variabilă

43
Capitolul 3

Tabelul T3.23 Entitate şi arhitectură VHDL care definesc un bus inversor

3.8 Elemente specifice proiectării concurenţiale

Dacă instrucţiunile de declarare a componentelor ar fi singurele instrucţiuni


concurenţiale ale limbajului VHDL, acesta nu ar fi decât un limbaj puternic tipizat care
ar face o descriere ierarhică sub formă de netlist a circuitelor. Limbajul VHDL
dispune însă de modalităţi mai complexe de descriere a circuitelor este vorba de
descrierea concurenţială a cărei introducere am făcut-o în paragraful anterior
(urmează să fie dezvoltată în continuare) şi de descrierea secvenţială.
În tabelul T3.24 se prezintă două elemente de limbaj VHDL care apar în
descrierile de tip concurenţial. Primul din cele două elemente este instrucţiunea de
atribuire concurenţială de semnal (signal-name<=expression). Tipul expresiei
(expression) trebuie să fie compatibil cu cel al semnalului (signal-name).
Pentru a exemplifica atribuirea concurenţială de semnal arhitectura
detectorului de numere prime prezentat într-un paragraf anterior este rescrisă în stil
concurenţial (vezi tabelul T3.25).
Spre deosebire de descrierea anterioară (descriere structurală) porţile şi
conexiunile dintre ele nu mai apar explicit, ci se folosesc operatori VHDL definiţi
implicit în biblioteca IEEE (and, or, not). Se observă că operatorul not are prioritatea
cea mai mare, astfel că nu este necesar să se utilizeze paranteze pentru expresii de
genul “not N(2)”.

44
Introducere în limbajul de descriere hardware – VHDL

Tabelul T3.24 Sintaxa VHDL pentru atribuire concurenţială de semnal

Tabelul T3.25 Descriere concurenţială a arhitecturii detectorului de numere prime

Conform tabelului 3.24 mai există o opţiune de atribuire concurenţială de


semnalelor şi anume atribuirea condiţională folosind cuvintele cheie when şi else. În
acest caz o expresie booleană (boolean-expression)combină termeni booleeni
individuali folosind operatori impliciţi (and, or, not)Termenii booleeni sunt de obicei
variabile sau rezultate ale unor comparaţii făcute cu ajutorul operatorilor relaţionali (=,
/= (inegaliate), >, >=, <, <= (mai mic sau egal)).
În tabelul T3.26 este dat un exemplu al utilizării atribuiri condiţionale de
semnal secvenţial. Comparaţia unui bit de tip std_logic cum ar fi N(3) se face în
funcţie de caracterele literale ‘1’ sau ‘0’, iar rezultatul returnat este de tip boolean.
Rezultatul acestor comparaţii se combină într-o expresie booleană plasată între
cuvintele cheie when, else. Clauza else este obligatorie deoarece setul de condiţii
dintr-o expresie trebuie să acopere toate combinaţiile posibile.
Un alt tip de atribuire concurenţială este atribuirea concurenţială de semnal
selectivă, a cărei sintaxă este prezentată în tabelul T3.26. În acest tip de instrucţiune,
se evaluează expresia dată (expression), iar când una dintre valori se potriveşte cu
una dintre opţiuni (choices) atunci identificatorului signal-name i se va atribui
valoarea corespunzătoare signal-value. Opţiunea choices corespunzătoare fiecărei
clauze when poate să fie o singură valoare sau o listă de valori separate între ele
prin bara verticală ( | ). Cuvântul cheie others poate fi folosit împreună cu ultima
clauză when pentru a acoperii toate valorile pe care le poate lua expresia de
evaluare.
În tabelul T3.27 este prezentată o altă arhitectură a detectorului de numere
prime în care se foloseşte atribuirea concurenţială selectivă de semnal. Toate

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.

Tabelul T3.26 Sintaxa VHDL


pentru atribuire concurenţială selectivă de semnal

Tabelul T3.27 Arhitectura VHDL corespunzătoare detectorului de numere prime


folosind atribuire concurenţială selectivă de semnal

3.9 Elemente specifice proiectării comportamentale (secvenţiale)

În paragraful anterior am putut vedea câteva descrieri comportamentale


concurenţiale, dar pentru ca aceste descrieri comportamentale să fie mai complete
este necesar să definim noi elemente de limbaj. Un element de descriere
comportamentală cheie este procesul. Un proces (process) este o colecţie de
instrucţiuni secvenţiale care se execută în paralel cu alte instrucţiuni concurenţiale
sau alte procese. În cadrul unui proces utilizatorul poate definii interacţiuni complexe
ale semnalelor şi evenimentelor într-o manieră care în timpul simulării se execută
instantaneu (zero simulated time) şi care se sintetizează sub forma unui circuit
combinaţional sau secvenţial. Instrucţiunea process poate fi folosită la fel ca o
instrucţiune concurenţială şi are sintaxa prezentată în tabelul T3.28.
Într-un proces sunt vizibile numai tipurile, semnalele constantele funcţiile şi
procedurile care fac parte din aceeaşi arhitectură cu procesul, însă toate elementele
enumerate mai sus cu excepţia semnalelor pot fi definite şi local în proces. În cadrul

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;”.

Tabelul T3.28 Sintaxa VHDL pentru definirea unui proces

Semnalele care se află în paranteze alături de cuvântul cheie process,


determină dacă procesul rulează sau dacă va fi suspendat, această listă de semnale
poartă numele de listă de senzitivităţi (sensitivity list).
Presupunem că un proces este suspendat iniţial, dacă unul dintre semnalele
aflate în lista de senzitivităţi îşi schimbă valoarea, procesul se va declanşa reluându-
se executarea instrucţiunilor de la prima până la ultima. Dacă oricare dintre
semnalele din lista de senzitivităţi îşi schimbă valoarea ca rezultat al rulării anterioare
a procesului, atunci procesul se reia din nou, astfel că acesta va rula până în
momentul în care nici unul dintre semnale nu-şi mai schimbă valoarea. Toate
evenimentele din cadrul unui proces au loc, în cadrul unei simulări într-un “timp de
simulare” egal cu zero.
Un proces descris corect în VHDL se va suspenda după una sau mai multe
rulări, trebuie să se evite modelarea proceselor care nu se suspendă niciodată. Lista
de senzitivităţi este opţională, procesele care nu au listă de senzitivităţi încep să
ruleze în cadrul simulării la momentul zero, aceste procese vom vedea ulterior sunt
utile pentru modelarea test bench-urilor.
Limbajul VHDL are câteva tipuri de instrucţiuni secvenţiale. Un prim tip este
atribuirea secvenţială de semnal (sequential signal-assignment), aceasta are aceeaşi
sintaxă ca şi versiunea concurenţială , “signal-name<=expression;”. Un tip de
atribuire similară există şi pentru variabile, dar diferă operatorul de atribuire,
“variable-name := expression”.
În tabelul T3.29 se prezintă o nouă arhitectură a detectorului de numere prime
rescrisă ca şi proces. În cadrul acestei arhitecturi (prime6_arch) există doar o singură
instrucţiune concurenţială, aceasta este instrucţiunea process. În lista de senzitivităţi
a procesului apare intrarea N, iar în cadrul procesului se definesc variabile, definirea
de semnale nu este permisă.

47
Capitolul 3

O altă instrucţiune secvenţială este instrucţiunea if, tipurile de sintaxă care se


pot folosii pentru această instrucţiune sunt prezentate în tabelul T3.30. În prima
formă a acestei instrucţiuni o expresie booleană este testată (boolean epression) şi
se va executa o instrucţiune secvenţială (sequeential statement) dacă expresia
testată este adevărată. În cea de a doua formă se mai adaugă şi clauza else urmată
de o altă instrucţiune secvenţială care se execută în cazul în care expresia testată
este falsă (nu se verifică).
Pentru a crea un model if-then-else imbricat în limbajul VHDL se introduce
cuvântul cheie elsif. O instrucţiune secvenţială care conţine clauza elsif se execută
dacă expresia booleană care-i corespunde este adevărată şi toate expresiile
precedente sunt false. Instrucţiunea secvenţială corespunzătoare clauzei finale else
se execută dacă toate expresiile booleene precedente au fost false.

Tabelul T3.29 Arhitectura VHDL a detectorului de numere prime descrisă ca şi proces

Tabelul T3.30 Sintaxa VHDL corespunzătoare instrucţiunii if

48
Introducere în limbajul de descriere hardware – VHDL

O altă versiune de arhitectură a detectorului de numere prime este prezentată


în tabelul T3.31, de această dată descrierea VHDL este făcută folosindu-se
instrucţiunea if. În acest caz se foloseşte o variabilă NI de tipul întreg folosită pentru
a păstra valoarea întreagă rezultată în urma convertiri intrării N.
Expresiile booleene din tabelul T3.31 nu se suprapun, aceasta înseamnă că
numai una dintre ele este adevărată la un moment dat. În acest caz folosirea
instrucţiunii if imbricate s-a făcut doar în scop didactic, era suficient să se folosească
forma mai simplă a instrucţiuni.
În cazul în care trebuie aleasă o singură alternativă din multitudinea de
alternative oferite de valorile pe care le poate lua un semnal sau o expresie, se va
apela la instrucţiunea case, care este mai explicită şi poate să se sintetizeze într-un
circuit mai optim. Sintaxa instrucţiunii case este prezentată în tabelul T3.33. Această
instrucţiune evaluează o expresie dată, alege valoarea care se potriveşte din una din
alternative (choices) şi execută instrucţiunea secvenţială corespunzătoare.
Alternativele (choices) sunt reprezentate de o singură valoare sau de un set de valori
separate prin bare verticale, aceste alternative trebuie să se excludă una pe cealaltă
şi trebuie să includă toate valorile posibile ale expresiei evaluate, altfel se foloseşte
clauza others.

Tabelul T3.31 Arhitectura VHDL a detectorului de numere prime folosind instrucţiunea if

Tabelul T3.32 Sintaxa VHDL Tabelul T3.33 Arhitectura VHDL a detectorului


corespunzătoare instrucţiunii case de numere prime folosind instrucţiunea case

49
Capitolul 3

În tabelul T3.33 este prezentată o nouă arhitectură pentru detectorul de


numere prime, de această dată modelarea în limbaj VHDL s-a realizat utilizând
instrucţiunea case.
O altă clasă importantă de instrucţiuni secvenţiale sunt instrucţiunile loop,
forma cea mai simplă a sintaxei este prezentată în tabelul T3.33. O altă formă mai
cunoscută a acestui tip de instrucţiuni este for loop cu sintaxa prezentată în tabelul
T3.35. Variabila identifier se declară implicit şi este de acelaşi tip cu domeniul
(range), pe care îl parcurge de la stânga la dreapta câte o valoare per iteraţie.

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

Alte două instrucţiuni secvenţiale care se pot executa în cadrul unei


instrucţiuni loop sunt exit şi next. Instrucţiunea exit are rolul de a transfera

50
Introducere în limbajul de descriere hardware – VHDL

executarea programului primei instrucţiuni aflate după cuvântul cheie end


corespunzător încheierii buclei. Cea de a doua instrucţiune, next are rolul de a
abandona executarea instrucţiunilor din buclă care urmează după ea şi de a trece la
o nouă iteraţie (parcurgere a buclei).
Un exemplu de arhitectură în care se foloseşte instrucţiunea for loop este
prezentat în tabelul T3.36. Aceasta este o descriere pur comportamentală a
arhitecturii detectorului de numere prime. Pentru a explica “puterea “ unei instrucţiuni
loop s-a mărit valoarea lui N la 16.
Descrierea din tabelul T3.36 este pur didactică deoarece operatorul mod care
presupune împărţire nu este sintetizabil.

Tabelul T3.37 Sintaxa instrucţiunii Ultima instrucţiune de ciclare studiată este


while loop instrucţiunea while loop, a cărei sintaxă este
prezentată în tabelul T3.37. În acest tip de
instrucţiune expresia booleană (boolean-
expression) este testată înaintea de fiecare
iteraţie, iar bucla se execută numai dacă
valoarea expresiei este adevărată.

3.10 Definirea întârzierilor

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

Tabelul T3.38 Test-bench-ul corespunzător porţii logice de interdicţie

3.11 Sinteza circuitelor modelate cu limbajul VHDL

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. CIRCUITE LOGICE PROGRAMABILE COMPLEXE


(Complex Programmable Logic Devices - CPLD)

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.

În continuare se va prezenta arhitectura circuitelor CPLD din seria 9500


produse de firma XILINX.

*
semicustom = semipersonalizat, circuitele semicustom sunt concepute parţial în funcţie de necesităţile
utilizatorului
Circuite logice programabile complexe

Figura 4.1 Circuitul PLD 16V8

55
Capitolul 4

Figura 4.2 Arhitectura de bază a circuitelor CPLD

4.4 Familia de circuite XILINX CPLD 9500

Seria de circuite XC9500 este o familie de circuite CPLD cu arhitectură


similară dar cu număr diferit de porturi de intrare / ieşire şi număr diferit de circuite
PLD interne care în acest caz poartă numele de blocuri de funcţii FB (Function
Blocks). Fiecare bloc de funcţii are 36 de intrări, 18 ieşiri şi 18 macrocelule, astfel că
acesta ar putea fi numit 36V18. În tabelul T4.1 sunt prezentate circuitele din familia
XC9500. Se poate observa că numele fiecărui circuit este în concordanţă cu numărul
de macrocelule pe care îl conţine.
O altă caracteristică care reiese din tabel este faptul ca un anumit CPLD poate
fi prezent în mai multe tipuri de capsule (ex. vezi circuitul XC95108). Aceasta are ca
scop principal economisirea de porturi de intrare ieşire. Într-o capsulă de tip PLCC cu
84 de pini numai 69 de pini I/O din cei 108 vor fi folosiţi ca şi intrări restul sunt
utilizabili doar intern.
În tabelul T4.1 se poate observa că există mai multe tipuri de circuite din
familia XC9500 care folosesc acelaşi tip de capsulă. Aceasta poate fi de folos atunci
când un proiect orientat de exemplu spre un circuit XC9572, capsulă 84 PLCC
devine prea „stufos” pentru acest circuit acesta poate fi mutat într-un circuit XC95108
cu aceeaşi capsulă, astfel layout-ul plăcii pe care va fi montat circuitul programabil nu
va fi afectat.
În figura 4.3 se prezintă sub formă de diagramă bloc arhitectura circuitelor din
familia XC9500. Fiecare pin I/O poate fi folosit atât ca şi intrare, ieşire cât şi ca pin
bidirecţional, după cum este programat dispozitivul.

56
Circuite logice programabile complexe

Tabelul T4.1

Figura 4.3 Arhitectura familiei de circuite CPLD 9500

În cadrul familie de CPLD-uri XC9500 numărul de blocuri funcţionale poate


varia de la 2 (2X18=36 macrocelule) la 16 (16X18=288 macrocelule). Fiecare FB
(bloc de funcţii) primeşte 36 de semnale de la matricea de conexiuni. În matricea de
conexiuni intră câte 18 semnale de la fiecare FB şi semnalele care vin din exterior de
la pini I/O. Mai există de asemenea câte 18 semnale de ieşire pentru fiecare FB care
funcţionează în afara matricei de conexiuni şi care se conectează direct la blocurile
I/O.

4.4.1 Arhitectura blocurilor de funcţii

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

Figura 4.4 Arhitectura unui bloc funcţional

58
Circuite logice programabile complexe

Figura 4.5 Arhitectura unei macrocelule şi a alocatorului de produse

4.4.2 Arhitectura blocurilor de intrare / ieşire

Î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

Figura 4.6 Bloc de intrare ieşire

4.4.3 Matricea de conexiuni programabilă

În mod teoretic o matrice de conexiuni ar trebui să permită fiecărei intrări sau


ieşiri a unui PLD intern să fie conectate la o intrare sau ieşire externă a CPLD-ului.
Gândind în aceşti termeni ne întoarcem din nou la problema lui 128V64. În figura 4.7
este prezentată matricea de conexiuni aparţinând circuitului XC95108. Există 108
intrări interne aparţinând macrocelulelor şi 108 ieşiri interne, în total 216 semnale
care intră în matricea de conexiuni. Deoarece circuitul XC95108 are şase blocuri
funcţionale cu câte 36 de intrări fiecare, matricea de conexiuni va avea 216 ieşiri.
Matricea de conexiuni specifică unui CPLD este un compromis între
performanţele cipului (viteză, arie, cost) şi performanţele softului fitter.

60
Circuite logice programabile complexe

Figura 4.7 Matricea de interconexiuni programabilă

4.3. Familia de circuite CoolRunner


Faţă de circuitele CPLD din seria XC9500/XL/XV circuitele din seria CoolRunner –II
şi XPLA3 vin cu un plus de viteză, flexibilitate şi consum redus de putere. Aceste
caracteristici le recomandă în aplicaţiile de comunicaţii de date la viteză mare, în sisteme de
calcul şi în dispozitive portabile ce necesită consum redus de putere.

Figura 4.8. Circuitele CPLD produse de firma Xilinx

61
Capitolul 4

4.3.1. Familia de circuite CoolRunner-II

În tabelul T4.2 sunt prezentaţi membrii familiei în funcţie de numărul de macrocelule şi


de frecvenţa de lucru.
În tabelul T4.3 sunt prezentate variantele de capsule ale circuitelor din familie, specificaţi
fiind şi numărul de pini. Toate versiunile sunt SMD, iar mai mult de jumătate sunt ball-grid.
Tehnologia CMOS utilizată în cazul familiei permite lucrul la frecvenţe mari cu un minimum
de disipare de căldură aceasta face posibilă utilizarea capsulelor de dimensiuni reduse, ceea ce
duce la economisire de spaţiu. Din tabel se poate observa că, cu puţine excepţii există cel
puţin trei membrii ai familiei care beneficiază de acelaşi tip de încapsulare, aceasta oferind
flexibilitate în alegerea circuitului adecvat.

Tabelul T4.2

Tabelul T4.3

4.3.2. Descrierea arhitecturii

Arhitectura este specifică circuitelor CPLD şi combină macrocelulele în blocuri de funcţii


(Function Block - FB) interconectate prin intermediul unei matrici globale, aşa numita
matrice avansată de interconexiuni (AIM – Advanced Interconnect Matrix). Blocurile de

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.

Figura 4.9 Arhitectura circuitelor CPLD din familia CoolRunner-II

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.

Figura 4.10. Blocul de funcţii (FB)

63
Capitolul 4

Termenii produs sunt implemntaţi de către blocul PLA (Programmable Logic


Array). Circuitele CPLD clasice au puţine trasee/macrocelulă care să poată
implementa semnale de frecvenţă ridicată, astfel că se folosesc de termenii produs ai
macrocelulelor vecine, risc de apariţie a nesincronizărilor. Prin arhitectura sa
circuitele din familia CoolRunner înlătura apariţia acestor nesincronizări.

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.

Figura 4.11 Arhitectura unei macrocelule CoolRunner-II

Fiecare bistabil din macrocelulă este configurabil să funcţioneze atât pe un


singur front de clock câ şi pe ambele, permiţând astfel dublarea ratei de transfer a
datelor. În figura 4.11 este prezentată arhitectura unei macrocelule.

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.

Figura 4.12 Arhitectura unui bloc de intrare/ieşire CoolRunner-II

Managementul semnalului de clock

Există posibilitatea ca semnalul de clock global să fie divizat de către un circuit


dedicat inclus în CPLD, valorile de divizare prestabilite sunt: 2, 4, 6, 8, 10, 12, 14 şi
16.
Fiecare macrocelulă permite dublarea frecvenţei clockului de la intrare,
facilitatea dual edge.
Combinând cele două circuite care îndeplinesc funcţiile menţionate mai sus,
se poate realiza economisirea de putere, funcţia cool clock. Puterea consumată
poate fi redusă prin divizarea semnalului de clock aplicat din exterior şi apoi prin
dublarea frecvenţei acestuia în interiorul circuitului.

4.3.4 Alte caracteristici ale circuitelor CoolRunner

Secvenţa de programare se realizează ca şi la orice dispozitiv produs de firma


Xilinx, prin intermediul programului iMPACT şi a cablului de încarcare JTAG.
Circuitele din această familie permit programarea în sistem şi de asemenea
reprogramarea OTF (On-The-Fly). Programarea OTF permite încărcarea unui
bitstreem în circuit în timp ce acesta este în funcţiune executând secvenţe de lucru
programate anterior.

65
Capitolul 4

Proiectele pot fi protejate atât la scriere accidentală cât şi împotriva piratării.


Biţii de securitate nu pot fi resetaţi decât prin ştregrea circuitului ceea ce duce implicit
la pierderea proiectului.

4.5 Producători de circuite SPLD/CPLD şi medii de proiectare


Firma Vantis este o firmă subsidiară a firmei AMD care produce şi
comercializează arii logice programabile (PAL-uri) şi aşa numitele arii de macrocelule
realizate în tehnologie CMOS (MACH = Macro Array CMOS High), ambele
reprogramabile electric. Pentru proiecte relativ simple, maşini de stări simple,
codificatoare, decodificatoare, multiplexoare, firma Vantis pune la dispoziţia
proiectantului circuitele PALCE (Programmable Array Logic CMOS Electrically
Erasable), câteva componente ale acestei familii sunt circuitele PALCE16V8,
PALCE20V8, PALCE24V10 şi PALCE29MA16.
Familia de circuite MACH cuprinde o gamă largă de circuite logice
programabile de diferite capacităţi, de la 32 până la 512 macrocelule
(MACH1,2,3,4,5). În principiu o astfel de macrocelulă are o structură asemănătoare
cu un circuit PAL optimizat, legătura între macrocelule făcându-se prin intermediul
unei matrici de interconexiuni. Circuitele din familia MATCH sunt destinate aplicaţiilor
mai complexe. Tehnologia EECMOS de realizarea a circuitelor MACH variază în
domeniul 0,5 – 0,35µm. Firma Vantis oferă de asemenea şi medii de proiectare
complete. Un astfel de program de proiectare este MACHXL destinat PC-urilor şi
care suportă circuitele din familia MACH. Acest mediu oferă posibilitatea de a descrie
proiecte prin intermediul tabelelor de adevăr, ecuaţii şi limbaj HDL. De asemenea
sunt încorporate şi programe de simulare funcţională şi în domeniul timp.
O altă firmă producătoare de circuite PLD este firma Altera, circuitele produse
de această firmă au la bază tehnologia CMOS UVEPROM. Denumirea generică a
circuitelor fabricate de altera este MAX xxxx EPLD (MAX = Multiple Array Matrix),
unde prin xxxx sunt reprezentaţi membrii familiei: 5000, 7000, 9000. Numărul de
macrocelule poate varia de la 32 până la 560, se poate lua în considerare că fiecare
macrocelulă poate implementa aproximativ 20 de porţi logice. Tehnologia CMOS de
realizarea a circuitelor MAX xxxx EPLD variază în domeniul 0,8 – 0,65µm. O altă
familie de circuite logice programabile produse de Altera, care îmbină caracteristicile
circuitelor FPGA (număr mare de regiştri) cu cele ale circuitelor EPLD (viteză mare şi
întârzieri previzibile) este familia FLEX (Flexible Logic Element Matrix) cu membrii
FLEX 6000, FLEX 8000 şi FLEX 10k. Circuitele corespunzătoare acestor familii pot
implementa un număr de porţii logice cuprins între 2500 şi 100.000. Tehnologia de
realizare CMOS a acestor circuite variază între limitele 0,5 – 0,35µm. Mediul de
proiectare oferit de firma Altera se numeşte MAX + PLUS II care suportă atât
familiile FLEX PLD, MAX EPLD cât şi circuitele PLD clasice. De asemenea acest
mediu oferă şi un program de proiectare independent de arhitectura circuitelor
programabile, acest program se numeşte AHDL (Altera Hardware Description
Language). Alte firme care produc circuite PLD sunt:
Cypress Semiconductor cu familiile de circuite EPLD CY7C34x, FLASH 370i;
Lattice Semiconductor, care produce circuite de tip CPLD aici sunt incluse include
familiile ispLSIxxxx şi GAL (ex. GAL 16V8, GAL 20V10 etc.);

66
Circuite logice programabile complexe

Phillips Semiconductors oferă seria de circuite CPLD CoolRunner bazată pe


tehnica de proiectare cu consum de putere statică redus FZP (Fast Zero Power).
Circuitele PZ5128C şi PZ5128N sunt membrii ai acestei familii.

67
Capitolul 5

5 ARHITECTURA CIRCUITELOR FPGA. FAMILIA XC4000


(Field Programmable Gate Array)

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.

Figura 5.1 Arhitectura generală a circuitelor FPGA


Capitolul 5

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

Tabelul T5.1 Familia de circuite FPGA XC4000

În tabelul T5.1 sunt prezentaţi membri familiei XC4000. Pe primele două


coloane este dat numărul de blocuri logice configurabile (CLB-uri), pe cea de a doua
coloană numărul maxim de porturi de intrare/ieşire. Deoarece se folosesc mai multe
tipuri de capsule (cu număr diferit de pini), nu toate porturile se vor regăsii la pinii
externi, în cazul capsulelor cu număr mai mic de pini. La fel ca şi în cazul circuitelor
CPLD, proiectantul are posibilitatea de a migra de la un circuit FPGA de capacitate
mai mică la un altul de capacitate mai mare, păstrând tipul de capsulă. În cea de a
cincia coloană a tabelului se dă numărul maximi de bistabile pentru fiecare membru
al familie. După cum se va studia mai departe se va putea observa că avem câte
două bistabile pentru fiecare CLB şi fiecare IOB (Input/Output Block = bloc de
intrare/ieşire). Fiecare CLB poate implementa memorii SRAM de maxim 32 de biţi.
Astfel că se poate vorbii de capacitatea maximă a unei memorii ce poate fi
implementată într-un circuit FPGA, vezi coloana a şasea din tabelul T5.1. În ultimele
două coloane ale tabelului este exprimată capacitatea fiecărui circuit în număr de

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.

5.2 Descrierea seriei XC4000

Seria XC4000 este implementată intr-o structură regulară, flexibilă cu o


arhitectură programabilă, realizată prin blocuri/celule logice configurabile
(Configurable Logic Blocks, CLBs), blocuri/celule de intrare/ieşire (Input/Output
Blocks, IOBs) şi resurse de conexiuni programabile (vezi figura 5.2).
Circuitele sunt configurate cu ajutorul memoriei interne (inaccesibilă
utilizatorului). Configuraţia este realizată fie în mod activ de către FPGA prin citirea
unei memorii EPROM (serie / paralel), sau configuraţia este înscrisă de un
microprocesor, microcontroler sau alt FPGA prin mai multe metode, care vor fi
descrise în cele ce urmează.

5.2.1 Descrierea funcţională

Seria XC4000 realizează prin tehnologia submicron avansată, o arhitectură


performantă cu o viteză de lucru ridicată. Seriile XC4000E şi XC4000X permit
frecvenţe de funcţionare externă de 80MHz, iar structura internă poate funcţiona
chiar şi la frecvenţe de 150MHz.
Seria XC4000 oferă realizarea unor structuri de dual – port RAM, inhibarea
frecvenţei de tact, transmisia carry rapidă la operaţii aritmetice. Circuitele sunt
flexibile în aplicaţii, mai ales unde este nevoie de utilizarea unor circuite de memorii
rapide.

5.2.2 Descrierea blocurilor componente

Structura internă programabilă de utilizator include două elemente majore


configurabile (vezi figura 5.2) :
- Blocurile logice configurabile (CLBs);
- Blocurile de intrare / ieşire (IOBs).
Astfel vom avea:

70
Capitolul 5

- Blocurile CLB furnizează elementele funcţionale şi realizează structura logică


proiectată;
- Blocurile IOB furnizează interfaţa între semnalele interne şi exteriorul circuitului
(legătură realizată fizic prin intermediul pinilor).

Figura 5.2 Arhitectura internă XC4000

Structura cuprinde încă alte trei elemente programabile:


- Fiecărui CLB îi este asociat un 3-state buffer (TBUF) a cărui ieşire este conectată
la liniile lungi asociate;
- Decodificatoare rapide implementate pentru viteze ridicate;
- Un oscilator intern cu frecvenţa de 8MHz;
- Interconexiunile programabile furnizează resursele de conectare între elementele
CLB, IOB.
Funcţia logică realizată de fiecare bloc configurabil este implementată prin
intermediul memoriei statice de configurare. Valorile stocate în aceste memorii
determină starea blocurilor şi a interconexiunilor în interiorul FPGA.

5.3 Blocurile logice configurabile (CLB)

CLB-urile implementează majoritatea funcţiilor logice proiectate. Elementele


principale ale unui bloc configurabil sunt arătate în figura 5.3.
F şi G generatoare de funcţii cu 2x4 intrări conferind astfel o versatilitate
nelimitată CLB-ului. H generator de funcţii suplimentar ce posedă 3 intrări dintre care
două provin de la generatoarele de funcţii F şi G, iar a treia provine din exterior de la
unul din CLB-ulurile vecine. Astfel blocul configurabil poate implementa funcţii logice
cu 9 variabile de intrare, cum ar fi generatoarele de paritate, comparatoarele de
identitate sau un set de două funcţii cu câte patru intrări.
Blocul configurabil CLB conţine două elemente de stocare numite registre
(bistabili D), care se pot utiliza pentru stocarea rezultatelor date de generatoarele de
funcţii. De asemenea elementele de registru sau generatoarele de funcţii se pot

71
Arhitectura circuitelor FPGA. Familia XC4000

utiliza şi independent. Intrările DIN, H1 sunt intrări directe de stocare. Ieşirile


generatoarelor de funcţii se pot utiliza ca ieşiri independente de ieşirile elementelor
de stocare. Această flexibilitate măreşte resursele logice şi simplifică implementarea
proiectelor. Astfel prin intermediul a 13 intrări şi 4 ieşiri este asigurat accesul la
fiecare bloc configurabil. Intrările şi ieşirile respective legate la resursele
programabile de interconectare vor realiza funcţiile logice.

Figura 5.3 Structura internă a blocului logic configurabil (CLB)

5.3.1 Generatoarele de funcţii

Generatoarele de funcţii sunt implementate ca tabele de memorii (memory


look up table). Astfel, timpul de propagare este independent de funcţia
implementată. Al treilea generator de funcţii cu ieşirea H’, poate implementa orice
funcţie logică Booleană cu 3 variabile. Două dintre aceste intrări împreună cu H1,
ieşirile F’ şi G’ formează o altă funcţie logică. Alternativ, una sau ambele intrări (H2,
H0) pot fi semnale externe blocului. Intrarea H1 provine din exterior. Semnalele de
ieşire ale generatoarelor de funcţii pot forma ieşirile CLB. Ieşirile F’ sau H’ sunt
conectate la ieşirea X, iar G’ sau H’ sunt conectate la ieşirea Y. Un bloc configurabil
se poate utiliza pentru implementarea oricărei funcţii logice luând în considerare
următoarele posibilităţi:

72
Capitolul 5

- Orice funcţie cu până la patru variabile independente, plus orice funcţie


secundară cu până la patru variabile independente, plus orice funcţie logică cu
maximum trei variabile independente1;
- Orice funcţie logică cu 5 variabile independente;
- Orice funcţie logică cu 4 variabile împreună cu unele funcţii de 6 şase variabile;
- Unele funcţii logice cu până la 9 variabile.
Prin implementarea funcţiilor logice, cu un număr mare de variabile într-un
singur bloc, se reduce numărul de blocuri necesare pentru realizarea proiectului. De
asemenea se reduc şi timpii de propagare, astfel că va creşte capacitatea de
implementare şi viteza de lucru.

5.3.2 Bistabilii interni

Pe lângă faptul că sunt ieşiri pentru reţeaua de interconexiuni, ieşirile


combinaţionale pot fi şi sursă de intrare pentru bistabili interni ai CLB pentru
realizarea circuitelor secvenţiale. Bistabilii sunt de tip D şi au tactul de înscriere pe
front pozitiv prin semnalul comun de tact K. Inhibarea tactului se realizează prin
semnalul EC. Prin semnalul de inhibare ambele intrări de tact se pot inhiba sau nu în
mod permanent.

5.3.3 Intrarea de tact

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.

5.3.4 Inhibarea de ceas

Semnalul de inhibare EC este activ pe nivel logic High. Semnalul comandă


inhibarea la ambele elemente de stocare, dar lăsat neconectat va avea valoare
logică implicită. Semnalul nu este inversabil la intrarea în bistabil.

5.3.5 Set / Reset

Setarea şi resetarea bistabililor se face în mod asincron prin intermediul


semnalelor SR/H0. Această opţiune determină starea bistabililor în momentul când
ele devin active după configurare . De asemenea determină efectul semnalului de
Set / Reset global pe perioada normală a operaţiei şi totodată determină efectul
semnalului SR al 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.

5.3.6 Set / Reset global

Un semnal global Set / Reset asigură ştergerea bistabililor în momentul


cuplării la tensiune, pe durata reconfigurării, sau când linia de reset global este
activată. Această linie de reset global GSR nu interferează cu resursele de
interconectare, ea este implementată într-o reţea separată. Fiecare bistabil este
configurat în aşa fel ca atât setarea locală SR sau globală GSR să seteze bistabilul.
Semnalul GSR se poate conecta la orice pin programabil. Pentru a utiliza această
legătură globală se va specifica în schema electrică un buffer de intrare şi un pin de
legătură în modul arătat în figura 5.4, sau în program HDL se va specifica GSR.

Figura 5.4 Schema de conectare a semnalului global Set / Reset

Opţional se poate insera un invertor după buffer-ul de intrare pentru a inversa


sensul semnalului global GSR.

5.3.7 Intrări şi ieşiri de date

Sursa semnalului de intrare în bistabil este programabilă. Acest semnal de


intrare se poate selecta dintre funcţiile F’, G’ şi H’, sau de la semnalul de intrare
directă Direct_In (DIN) a blocului programabil. Două căi de trecere rapidă sunt
multiplexate împreună cu ieşirile bistabililor. Aceste căi de trecere uneori sunt
utilizate de programul de interconectare automată pentru alimentarea unor semnale
interioare.

5.3.8 Semnale de control

Multiplexoarele interne ale CLB facilitează implementarea funcţiilor alese


(figura 5.3). Multiplexoarele sunt controlate de semnalele (C1 – C4), sau de
semnalele interne rezultante (H1, DIN/H2, SR/H0 şi EC). Oricare dintre aceste

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

5.3.9 Generatoarele de funcţii utilizate ca RAM

Generatoarele de funcţii F’ şi G’ se pot utiliza ca celule de memorie


RAM/ROM. Modurile de configurare posibile sunt:
Înscriere pe nivel logic;
Înscriere pe front pozitiv / negativ;
Port dual cu înscriere pe front pozitiv / negativ.
Modurile de configurare acceptate pentru portul simplu şi dual sunt prezentate
în tabelul T5.2.

Tabel T5.2 Moduri de configurare a memoriei

16x1 16x2 32x2 Înscriere Înscriere


pe pe
front nivel logic
Sigle-port Da Da Da Da Da
Dual-port Da Da

5.3.10 Opţiuni de configurare ale memoriilor RAM

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

5.3.11 Logica de propagare carry

Fiecare generator de funcţii din CLB conţine circuite aritmetice dedicate


generări rapide a bitului de transport (superior / inferior sau carry / borrow). Acest
semnal de ieşire este conectat la blocul logic adiacent. Circuitul logic dedicat
realizării bitului de transport măreşte performanţele circuitelor de adunare / scădere
şi numărătoare. Acest fapt orientează circuitele FPGA pentru aplicaţii în care
prelucrarea semnalelor necesită viteză mare de calcul.
Această realizare a bitului de transport este cel mai însemnat avantaj al seriei
XC4000 ce permite realizarea unor circuite numărătoare cu o frecvenţă de lucru de
până la 70Hz. Propagarea bitului de transport este realizată conform figurii 3.5.

5.4 Blocurile de intrare / ieşire (IOBs)

Blocurile configurabile de intrare / ieşire realizează interfaţa între mediul


exterior şi structura internă a circuitului FPGA. Fiecare IOB controlează un pin al
circuitului integrat. Blocurile de intrare ieşire se pot configura ca şi port de intrare,
port de ieşire sau port bidirecţional. În figura 5.6 este prezentată diagrama
simplificată a blocului IOB.

5.4.1 Semnalele de intrare din blocul IOB spre interiorul FPGA

Căile I1 şi I2 furnizează semnalele de intrare în IOB. Acestea sunt conectate la


un bisatbil al cărui tact de înscriere poate fi pe front sau pe nivel logic.

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.

5.4.2 Intrări pe registru

Semnalel I1 şi I2 se pot conecta la bistabilul de intrare al blocului IOB.


Semnalul de inhibare a bistabililor din IOB poate fi configurat astfel încât să fie
comun sau separat pentru cele două registre. Acest semnal nu se poate inversa în
interiorul IOB.

Figura 5.6 Diagrama simplificată a blocului de intrare / ieşire la seria XC4000X


Suprafeţele haşurate indicând diferenţele faţă de seria XC4000E

5.4.3 Semnale de ieşire din IOB

În mod opţional semnalele de ieşire se pot inversa în interiorul blocului de


intrare / ieşire. Aceste semnale se pot conecta direct la ieşirea pinului sau la
bistabilul de ieşire din IOB. Seria XC4000X permite un curent maxim de ieşire egal
12mA / ieşire.
O ieşire se poate configura ca ieşire open – drain (open – collector) prin
plasarea unui buffer 3-state (OBUFT) în schema circuitului (vezi figura 5.7).

77
Arhitectura circuitelor FPGA. Familia XC4000

Figura 5.7. Ieşirea Open – Drain

5.4.4 Controlul vitezei de creştere a semnalului


(Slew Rate Control)

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.

5.4.5 Linia globală de comandă a ieşirilor 3 – state

O linie globală separată permite forţarea în starea de impedanţă ridicată a


tuturor ieşirilor FPGA – ului, cu excepţia cazului testărilor perimetrice (boundary
scan). Această linie globală (GTS) nu consumă resursele de conectare, ci este o linie
dedicată, linie ce poate fi comandată de la orice port IOB al circuitului. Linia poate de
asemenea fi comandată şi de la un nod intern, similar semnalului GSR.

5.5 Buffer – ele de impedanţă ridicată

Fiecărui CLB îi este asociată o pereche de buffere (vezi figura 5.8) de


impedanţă ridicată. Aceste buffere se pot utiliza pentru a conecta blocul CLB la linia
orizontală lungă, pentru a realiza funcţia wired or/and. Dar la fel se pot implementa
reţele multiplexate sau bus bidirecţional salvând astfel resursele logice ale CLB.
Rezistoarele programabile ataşate acestor linii orizontale ajută la implementarea
funcţiilor wired or/and.
Un alt buffer cu acces similar este aşezat în dreapta fiecărui bloc de intrare /
ieşire. Liniile lungi orizontale au o rezistenţă implementată la fiecare capăt pentru a
prevenii stările logice flotante.

5.5.1 Modurile de utilizare ale buffer-elor 3 – state

Aceste buffere se pot configura în trei moduri:


- Buffer 3 – state standard;
- Funcţie cablată wired – and cu intrare pe pinul I;
- Funcţie cablată wired or – and.

78
Capitolul 5

Parte comună atât seriei XC4000E cât şi seriei


Corespunde numai seriei XC4000
Matrice de cuplare programabilă

Figura 5.8 Interconexiuni programabile

5.6 Realizarea decodificatoarelor rapide de capacitate ridicată

Circuitele dedicate ajută la realizarea funcţiilor de decodificare. În cazul în


care numărul biţilor de adresă sau de date este mare, atunci pentru realizarea
decodificatoarelor generatoarele de funcţii realizează această funcţie de decodificare
prin nivele ierarhice multiple, ceea ce măreşte timpul de propagare.
Ieşirile decodificatoarelor implementate în CLB pot fi intrări pentru alte blocuri
configurabile, astfel că se realizează o structură asemănătoare circuitelor PAL. De
asemenea ieşirile decodificatoarelor se pot conecta direct la ieşirile circuitului (pin
IOB).

79
Arhitectura circuitelor FPGA. Familia XC4000

5.7 Oscilator intern on – chip

Seria XC4000 posedă un oscilator intern implementat pe chip. Acest oscilator


este utilizat ca semnal de tact în momentul proxim cuplării la tensiune, pentru
lansarea procesului de configurare şi ştergerea memoriei de configurare. La fel este
sursă de semnal a pinului CCLK în mod de configurare master. Frecvenţa nominală
a oscilatorului este de 8MHz, dar frecvenţa variază în funcţie de tensiunea de
alimentare şi temperatură. Frecvenţa de ieşire poate varia între 4 şi 10 MHz.
Ieşirile oscilatorului sunt disponibile utilizatorului după configurarea circuitului.
Aceste ieşiri sunt frecvenţe ce se obţin de la ieşirea divizorului de frecvenţă. Aceste
ieşiri sunt frecvenţele ce se obţin de la ieşirile divizorului de frecvenţă şi sunt biţii 4, 9,
14, 19. Astfel dacă frecvenţa nominală a oscilatorului este 8MHz, atunci frecvenţele
divizate sunt: 500kHz, 16kHz, 490Hz, şi 15Hz. Aceste semnale se pot utiliza în
schema electrică prin plasarea simbolului OSC4 (vezi figura 5.9).

Figura 5.9 Simbolul oscilatorului intern al FPGA –ului XC4000

5.8 Interconexiunile programabile

Toate conexiunile interne sunt compuse din segmente de metal cu puncte de


cuplare programabile şi matrice de cuplare pentru realizarea legăturilor interne.
Există următoarele tipuri de conexiuni:
- Realizarea legăturilor între blocurile CLB este asociată rândurilor şi coloanelor
matricei CLB;
- Realizarea legăturilor între blocurile IOB formează un cordon în jurul matricii CLB
(VersaRing), acest cordon conectează pinii I/O cu blocurile logice interne;
- Conexiunile globale sunt compuse din reţele dedicate, proiectate pentru
distribuirea rapidă a semnalelor de comandă şi control utilizate în proiect.
Se disting 5 tipuri de linii de interconectare: linii de lungime simplă, linii de
lungime dublă, linii de lungime quad-dublă, linii de lungime octală, linii lungi.

80
Capitolul 5

5.8.1 Realizarea legăturilor între blocurile CLB

În figura 5.10 sunt prezentate resursele de conectare ale unui bloc CLB. Liniile
de culoare închisă există numai la circuitele XC4000EX.

Figura 5.10 Realizarea legăturilor între blocurile CLB

Întrările şi ieşirile în blocurile configurabile sunt distribuite în toate cele patru


direcţii, pentru ca realizarea conexiunilor să fie cât mai flexibilă. Poziţia intrărilor şi
ieşirilor CLB este interschimbabilă pentru evitarea congestiunilor, în timpul plasări şi
realizări conexiunilor.

5.8.2 Matricea de cuplare programabilă

Liniile de simplă şi dublă lungime verticale şi orizontale se intersectează în


aşa numita matrice de cuplare programabilă (pragrammable switcing matrix –
PSM). Romburile de la intersecţia a două linii reprezintă tranzistoarele de trecere
utilizate pentru realizarea conexiunilor între linii (vezi figura 5.11.a). În figura 5.11.b
sunt prezentate câteva posibilităţi de interconectare oferite de PSM.

81
Arhitectura circuitelor FPGA. Familia XC4000

Figura 5.11.a Matricea programabilă de cuplare Figura 5.11.b Posibilităţi de


interconectare a două linii

5.8.3 Linii de simplă lungime

Liniile de simplă lungime permit interconectarea rapidă a blocurilor adiacente.


Fiecărui bloc îi sunt asociate 8 linii verticale şi 8 linii orizontale de simplă lungime.
Aceste linii sunt conectate în matrice programabile situate la intersecţiile fiecărei linii
şi coloane. Conectarea liniilor de simplă lungime la matricele programabile este
arătată în figura 5.12, iar realizarea conexiunilor este arătată în figura 5.8.
Liniile de simplă lungime introduc întârzieri în propagarea semnalelor ori de
câte ori intră într-o matrice programabilă. Din această cauză nu sunt utilizabile pentru
realizarea legăturilor la “distanţă”. Ele sunt utilizate în mod normal pentru a ghida
semnalele într-o arie restrânsă.

5.8.4 Liniile de dublă lungime

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.

5.8.5 Linii lungi

Liniile lungi asemănător liniilor de dublă lungime formează o grilă de metal ce


acoperă toată aria circuitului. Aceste linii cu un fun-out ridicat şi timpi de propagare
minimi pot conduce la semnale critice.
La cele două linii orizontale fiecare CLB se poate conecta prin intermediul unui
buffer 3-state. Astfel că aceste linii pot implementa bus-uri uni- sau bi-direcţionale
sau funcţii cablate.

82
Capitolul 5

Figura 5.12 Liniile de simplă şi dublă lungime şi matricile programabile

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

5.8.6 Resurse de conectare a intrărilor / ieşirilor

Seria XC4000 posedă resurse suplimentare pentru conectarea blocurilor IOB.


Un cordon de legături realizat în jurul blocurilor CLB, numit VersaRing facilitează
conectarea pinilor şi realizarea conexiunilor interne fără a consuma resursele de
conectare pentru implementarea proiectului. Cordonul VersaRing conţine opt linii de
dublă lungime şi patru linii lungi (vezi figura 5.13).

5.9 Configurarea circuitelor FPGA

Procesul de configurare este metoda prin care un proiect digital este


implementat (tradus în fişier hartă de biţi) şi transmis printr-o anumită metodă
circuitului FPGA. Metoda se aseamănă cu programarea perifericelor unui
microprocesor. Pentru configurarea unui CLB şi a conexiunilor asociate se utilizează
câteva sute de biţi. Fiecare bit de configurare defineşte starea unei celule de
memorie statice care controlează un bit din tabela de stări, intrare multiplexor sau
punct de tranziţie programabil. Sistemul de dezvoltare traduce proiectul într-o listă de
conexiuni de format Xilinx sau EDIF.

5.9.1 Pinii dedicaţi pentru selectarea modului de configurare

Î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

Tabel T5.3 Moduri de configurare

Moduri de M2 M1 M0 CCLK Data


configurare
Master Serial 0 0 0 ieşire Bit-serial
Slave Serial 1 1 1 intrare Bit-serial
Master Paralel, 1 0 0 ieşire Byte – Paralel, prin
prin incrementare incrementare de la 00000H

Master Paralel, 1 1 0 ieşire Byte – Paralel, prin


prin decrementare decrementare de la 3FFFH
Periferial Sincron 0 1 1 intrare Byte - Parale
Periferial Asincron 1 0 1 ieşire Byte - Parale
Expres 0 1 0 intrare Byte - Parale
Rezervat 0 0 1 - -

5.9.2 Secvenţa de configurare

În secvenţa de configurare apar patru perioade distincte:


- Ştergerea memoriei de configurare;
- Iniţializarea circuitului;
- Configurarea circuitului;
- Modul de funcţionare dorit.

5.10 Producători de circuite FPGA şi medii de proiectare

Firma ACTEL este un producător cunoscut de circuite FPGA, câteva familii


de circuite produse de această firmă sunt: ACT 1 (aprox. 2000 de porţi logice), ACT
2 (2500 – 8000 porţi logice), ACT 3 (capacitate de până la 10.000 de porţi logice).
Alte circuite FPGA realizate de firma Actel sunt familiile Actel 1200XL şi 3200DX
Integrator care sunt destinate aplicaţiilor cu preţ de cost relativ redus şi performanţe
medii. Tehnologia CMOS de realizare este de 0,6 µm. De asemenea firma Actel
pune la dispoziţia proiectantului şi un set de programe de proiectare reunite sub
numele Actel Designer Series. Acest mediu de proiectare oferă soluţii complete, de
la descrierea proiectului şi până la programarea şi testarea circuitului logic.
O altă familie de circuite FPGA este familia AT6000 produsă de firma
ATMEL. Această familie de circuite se bazează pe celule de tip SRAM. Densitatea

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

6 ARHITECTURA CIRCUITELOR FPGA


FAMILIILE SPARTAN şi SPARTAN XL

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.

6.1 Caracteristicile familie Spartan şi Spartan-XL

În continuare vor fi prezentate caracteristicile circuitelor din familiile Spartan şi


Spartan XL. Una din diferenţele dintre cele două familii este tensiunea de lucru 5V pentru
familia Spartan şi 3,3 V pentru familia Spartan XL. În continuare vor fi enumerate câteva
dintre caracteristicile comune celor două familii:
- Arhitectura bazată pe cea a familie de circuite FPGA XC4000;
- Conţin memorie RAM internă;
- Densitate de până la 40.000 de porţi logice;
- Frecvenţa de lucru de până la 80 MHz;
- Număr nelimitat de reprogramări;
- Cost redus;
- Compatibilitate cu standardul PCI;
- Logică dedicată de transport la viteze mari;
- Magistrală tristate internă;
- 8 semnale globale de clock.

Caracteristici suplimentare, specifice familiei Spartan XL:

- Alimentare la 3,3 V, cu compatibilitate 5V la porturile I/O;


- Performanţe mai bune;
- Logică de transport mai rapidă;
- Multiplexoare sau generatoare de funcţii cu 2 intrări pe semnalele de ieşire;
- Mod de configurare Express;
- Compatibilitate cu standardele PCI 5V şi 3,3V.
Capitolul 6

În tabelul T1. Sunt prezentaţi membrii familiilor Spartan şi Spartan XL.

Tabel T1. Membrii familiilor de circuite FPGA Spartan şi Spartan XL

6.2 Descrierea familiei Spartan

Arhitectura se bazează pe o structură regulată de CLB-uri interconectate prin


intermediul resurselor de interconectare (canale de rutare) şi înconjurare de IOB-uri
programabile, vezi figura 1.

Figura 1. Arhitectura circuitelor FPGA din familia Spartan, SpartanXL

Configurarea se realizează prin încărcarea datelor de configurare în celulele interne de


memorie statică, astfel că nu există un număr limitat de reprogramări. Arhitectura se bazează
pe cea a popularei familii de circuite FPGA XC4000XL.

79
Arhitectura circuitelor FPGA. Familia Spartan/XL

6.3 Blocurile logice configurabile (CLB)


În CLB-uri sunt implementate majoritatea funcţiilor unui proiect. Elementele care
alcătuiesc un CLB sunt prezentate în figura 2. Există trei tabele de adevăr (LUT - Look up
Tabel) care sunt utilizate ca şi generatoare de funcţii, de asemenea mai există două bistabile şi
două grupuri de multiplexoare pentru semnalele de control.

Figura 2. Diagrama simplificată a uni CLB specific familiilor Spartan şi Spartan XL

6.3.1 Generatoarele de funcţii

LUT-urile F şi G sunt în principal folosite pentru implementarea generatoarelor de


funcţii cu 4 intrări. Datorită utilizării acestor tabele de adevăr la implementarea funcţiilor,
acestea devin independente de întârzieri. Al treilea LUT, H poate implementa funcţii logice cu
trei intrări. Toate cele trei LUT-uri împreună pot implementa funcţii logice cu până la 9
variabile independente. Alte combinaţii posibile fiind cele prezentate la familia XC4000.

6.3.2 Circuitele bistabile

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

6.4 Blocurile de intrare / ieşire (IOBs)


Blocurile de intrare/ieşire (IOB) furnizează interfaţa între pinii capsulei şi logica
internă. Fiecare IOB controlează câte un pin şi poate fi configurat pentru semnale de intrare,
ieşire sau bidirecţionale. În figura 3 este prezentată arhitectura unui IOB.

Figura 3. Diagrama simplificată a uni IOB specific familiilor Spartan şi Spartan XL

Semnale de intrare în IOB

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

Figura 4. Bistabilul şi logica aferentă aparţinând unui IOB

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.

Semnale de ieşire din IOB

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.

6.5 Descrierea traseelor de rutare


Traseele interne de rutare sunt constituite din segmente de metal întrerupte de puncte
de comutare programabile sau de matrici programabile. În figura 5 este prezentată o diagramă
a traseelor de rutare dintre CLB-uri.

82
Capitolul 6

Figura 5. Traseele de rutare interne specifice familiilor Spartan şi Spartan XL

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.

6.5.1 Trasee de rutare între CLB-uri


Există trei tipuri de trasee: de lungime simplă, dublă şi linii lungi. În figura 6. sunt
prezentate semnalele care intră şi ies dintr-un CLB. Se poate observa că semnalele sunt
distribuite simetric pe toate cele patru laturi, evitându-se astfel congestii la rutare.

Figura 6. Semnalele de interconectare ale unui CLB

Liniile orizontale şi verticale de lungime simplă şi dublă se intersectează în aşa


numitele matrici de interconectare (PSM – Programmable Switch Matrix). Fiecare PSM este
alcătuită din tranzistoare de trecere utilizate pentru interconectarea liniilor între ele, vezi
figura 7.

83
Arhitectura circuitelor FPGA. Familia Spartan/XL

Figura 7. Matricea de interconectare programabilă

Liniile de lungime simplă


Exisă 8 astfel de linii verticale şi opt orizontale asociate cu fiecare CLB şi îi oferă
acestuia conectivitate cu CLB-urile vecine. Aceste linii trec prin fiecare matrice de
interconectare. Datorită întârzierilor care apar la trecerea prin PSM sunt utilizate pentru
conectarea CLB-urilor dintr-o arie restrânsă.

Liniile de lungime dublă


Sunt de două ori mai lungi decât cele simple şi trec tot prin a doua matrice de
interconexiuni. Există patru astfel de linii verticale şi orizontale asociate fiecărui CLB.

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.

6.5.2 Trasee de rutare globale

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.

6.6 Caracteristici avansate ale circuitelor din familiile Spartan şi


Spartan XL

6.6.1 Memoria RAM distribuită

Generatoarele de funcţii F şi G din fiecare CLB pot fi folosite pentru implementarea


memoriilor RAM. Operaţiile de scriere şi citire vor fi semnificativ mai rapide decât în cazul
accesării memoriilor RAM externe.
Există două moduri de configurare a memorie: cu un singur port (single port) şi cu
două porturi (dual-port). În cazul ambelor moduri, operaţia de scriere este sincrona, iar cea de
citire este asincrona. În cazul modului cu un singur port există variantele de configurare 16x1,
16x2 sau 32x1, primul număr reprezentând numărul maxim de locaţii ce pot fi implementate
într-un singur CLB, iar ce al doilea număr reprezentând numărul de biţi stocaţi într-o locaţie.

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.

6.6.2 Logica de transport rapid

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.

6.6.3 Buffere tristate asociate liniilor lungi


Fiecărui CLB îi este asociată câte o pereche de buffere tri-state conectate la liniile
lungi orizontale aflate în vecinătatea CLB-ului. Acest lucru va permite implementarea
magistralelor multiplexate sau a celor bidirecţionale.

6.6.4 Oscilator on-chip


Are aceleaşi caracteristici ca şi cel din seria XC4000.

6.6.5 Funcţia Boundary Scan

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

Figura 8. Logica de testare periferică (boundary scan)

Figura 9. Simbol schematic utilizat pentru testarea periferică

6.6.6 Funcţia power down

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

6.6.7 Configurare şi testare

Configurarea reprezintă procesul de încărcare a datelor de programare specifice


proiectului, în unul sau mai multe circuite FPGA cu scopul de a definii modul de funcţionare
şi de interconectare a blocurilor interne. Circuitele din familia Spartan folosesc câteva sute de
biţi pentru configurarea unui CLB şi a interconexiunilor asociate acestuia. Fiecare bit
defineşte starea unei celule de memorie RAM statică, care poate controla o locaţie a tabelei de
adevăr, o intrare a unui circuit de multiplexare sau grila unui tranzistor de trecere utilizat
pentru interconectare. Mediul de dezvoltare Xilinx translatează un proiect într-un fişier de tip
listă de conexiuni (netlist), partiţionează, plasează şi interconectează în mod automat
circuitele logice specifice proiectului şi generează în cele din urmă un fişier de configurare în
format de tip PROM.
În funcţie de starea pinilor de configurare circuitele din familiile Spartan şi Spartan
XL pot fi configurate în modurile Slave Serial şi Master Serial, în plus circuitele din familia
Spartan XL pot fi configurate şi în modul Express.
În modul de configurare Master Serial oscilatorul intern este folosit pentru generarea
semnalului de clock de configurare (CCLK), existând astfel posibilitatea de a furniza semnal
de clock şi pentru alte dispozitive conectate care lucrează ca şi Slave Serial. Dacă pinii de
configurare nu sunt conectaţi, modul implicit de configurare va fi Slave Serial, mod în care
semnalul de clock este primit de la un dispozitiv extern.
Modul de configurare Express specific familiei Spartan XL este similar cu modul de
configurare Slave Serial, singura deosebire constând în faptul că pe un ciclu de clock
transmisia se face byte cu byte şi nu bit cu bit.
Pentru detectarea erorilor în timpul transmisiei fişierului de configurare se face o
verificare de tip CRC (Cyclic Redundancy Check). Astfel sistemul care transmite efectuează
un calcul asupra şirului de biţi transmişi, rezultatul fiind adăugat şi el la secvenţa de date.
Sistemul care recepţionează datele va efectua aceleaşi calcule şi va compara rezultatul cu
valoarea primită.
Circuitele din familia Spartan XL pot fi configurate prin intermediul piniilor utilizaţi
la testarea periferică.
După configurarea unui circuit există posibilitatea ca utilizatorul să citească conţinutul
memoriei de configurare fără a perturba funcţionarea dispozitivului.

87
Capitolul 7

7 ARHITECTURA CIRCUITELOR FPGA


FAMILIILE SPARTAN-II şi SPARTAN-IIE

7.1 Caracteristicile famililor Spartan-II şi Spartan-IIE

În continuare vor fi prezentate caracteristicile circuitelor din familiile SpartanII şi


SpartanIIE. Una din diferenţele dintre cele două familii este tensiunea de lucru 2,5 V pentru
familia SpartanIIE şi 1,8 V pentru familia Spartan XL. În tabelul T1 vor fi enumerate câteva
dintre caracteristicile comune celor două familii:

Caracteristici Spartan-II Spartan-IIE


Densitate de porţi logice de până la: 200.000 600.000
Număr nelimitat de reprogramări. X X
Cost redus X X
Proces de fabricaţie de: 0,18 microni 0,15 microni
16 biţi/LUT de memorie RAM distribuită: X X
Bloc e memorie RAM configurabilă de 4 K. X X
Interfaţă rapidă cu memoria RAM externă. X X
Compatibil cu standardul PCI X X
Logică de transport dedicată X X
Funcţii suplimentare pentru multiplicare. X X
4 blocuri DLL pentru controlul semnalului de clock. X X
4 reţele primare de distriburie a semnalului de clock. X X
Compatibil cu standardul de testare periferică IEEE 1149.1. X X
Standarde de interfaşare I/O 16 19
Bibliotecile sunt integrate în ISE Xilinx X X
Suportă conectare la 3V direct şi la 5V prin intermediul unei - X
rezistenţe.

În tabelele T2.a şi T2.b sunt prezentaţi membrii familiilor SpartanII şi SpartanIIE. În


continuare se va face referire în special la familia Spartan IIE, îtrucât caracteristicile acesteia
le includ şi pe cele ale familiei Spartan II.
Capitolul 7

Tabel T2.a. Membrii familiilor de circuite FPGA Spartan-II

Tabel T2.b. Membrii familiilor de circuite FPGA Spartan-IIE

7.2 Descrierea familiei Spartan

Arhitectura se bazează pe o structură regulată de CLB-uri interconectate prin


intermediul resurselor de interconectare (canale de rutare) şi înconjurare de IOB-uri
programabile. Există de asememena patru blocuri DLL (Delay Locked Loops) plasate în
fiecare colţ al circuitului FPGA. Între CLB-uri şi IOB-uri pe laturi opuse se află două coloane
de blocuri de memorie RAM, seria XC2S400E are patru coloane, iar seria XC2S600E are şase
coloane. În figura 1 este prezentată arhitectura specifică circuitelor SparnaII/IIE.

Figura 1. Arhitectura circuitelor FPGA din familia Spartan-II/IIE

89
Arhitectura circuitelor FPGA. Familia Spartan-II/IIE

Configurarea se realizează prin încărcarea datelor de configurare în celulele interne de


memorie statică, astfel că nu există un număr limitat de reprogramări. Fişierul de configurare
poate fi citit dintr-o memorie PROM externă (mod master serial) sau poate fi scris în FPGA
într-unul din modurile master, slave serial sau boudary scan. Frecvenţele de lucru ale acestei
familii de circuite depăşesc 200 MHz.
În figura 2 este prezentat modul de marcare al dispozitivului şi semnificaţia fiecărui
câmp. Astfel, tipul dispozitivului este Spartan 2 din familia Spartan IIE, capacitatea fiind de
50000 porţi logice. Performanţele legate de viteza de lucru: -6 reprezintă performanţe
standard, -7 reprezintă performanţe superioare. Tipul capsulei poate fi: PQ (Plastic QFP),
PTQ (Plastic Thin QFP) etc, acesta este urmat de numărul de pini la care are cces utilizatorul
(208 în acest caz) şi de domeniul de temperaturi ăn care lucrează dispozitivul: C pentru
domeniul comercial (0-85oC), I pentru domeniul industrial (-40 – 100oC).

Figura 2. Semnificaţia câpurilor din numele unui circuit FPGA

Arhitectura circuitelor din familia Spartan II are în alcătuire următoarele blocuri:


- Blocuri de intrare / ieşire, IOB;
- Blocuri logice configurabile, CLB;
- Blocuri dedicate de memorie RAM, cu capacitate de 4096 biţi fiecare (512 octeţi);
- Blocuri de control a semnalului de clock, DLL;
- Structură versatilă de ineterconectare multinivel.

7.3 Blocurile de intrare / ieşire (IOBs)


Blocurile de intrare/ieşire (IOB) furnizează interfaţa între pinii capsulei şi logica
internă. Fiecare IOB controlează câte un pin şi poate fi configurat pentru semnale de intrare,
ieşire sau bidirecţionale. În figura 3 este prezentată arhitectura unui IOB. După cum am
menţionat într-un paragraf anterior familia de circuite SpartanII suportă un număr mare de
nivlele de tensiune la pinii circuitului. În tabelul T3 sunt prezentate câteva dintre interfeţele
standard suportate.
Din figura 3 se poate observa că fiecare IOB are în alcătuire 3 bistabile care pot
funcţiona atât pe front cât şi nivel logic. Toţi cei trei regiştri au semnale de clock (CLK) şi de
set/reset (SR) comune şi semnal de activare independent (CE). Polaritatea semnalului de la
intrarea/ieşirea unui IOB poate fi controlată prin software. Opţional la fiecare pad I/O pot fi
conectate rezistenţe pull up sau pull down. Înainte de configurare toţi pinii FPGA-ului care nu
sunt prinşi în proiect vor fi în starea de înaltă impedanţă. Toţi pinii circuitlui FPGA sunt
protejaţi împotriva descărcărilor electrostatice accidentale.

90
Capitolul 7

Figura 3. Diagrama simplificată a uni IOB specific familiilor Spartan-II/IIE

Tabelul T3. Nivele de tensiune suportate de familia Spartan IIE

91
Arhitectura circuitelor FPGA. Familia Spartan-II/IIE

Semnale de intrare în IOB


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. Fiecare buffer de intrare poate fi
configurat să lucreze cu nivelele de semnal menţionate în paragrafele anterioare. Unele dintre
standarde presupun utilizarea unei tensiuni de referinţă furnizată de utilizator. Necesitatea de a
urniza această tensiune de referinţă Vref impune constrângeri în ceea ce priveşte standardele
ce pot fi utilizate la pini vecini.

Semnale de ieşire din IOB


Calea de ieşire din IOB include buffere 3-state. Semnalul de ieşire poate fi rutat direct
la pin sau poate fi trecut printr-un circuit bistabil. La fel şi controlul 3-state, poate fi rutat
direct sau prin intermediul unui bistabil. Fiecare buffer de ieşire poate furniza un curent de 24
mA. În cazul majorităţii standardelor starea 1 logi de la ieţire depinde de tensiunea aplicată
circuitului de la sursa externă, VCCO, astfel că valoarea acesteia poate genera constrângeri
vizavi de nivelele standard de tensiune ce se regăsesc pe ieşiri.

Organizarea pinilor I/O în bancuri


Unele dintre standardele de intrare/ieşire necesită tensiuni VCCO şi VREF bine stabilite.
Aceste tensiuni sunt furnizate din exterior şi se conectează la grupul de pini care necesită
nivelel logice respective, un astfel de grup poartă denumirea de banc. Astfel că se poate vorbi
de o organizare a în bancuri a pinilor unui circuit SpartanII/IIE. Din această cauză apar şi
restrctţii vizavii de nivelele de tensiune configurate într-un banc sau altul. Conform figurii 4
pinii unui circuit FPGA din seria Spartan II/IIE pot fi organizaţi în 8 bancuri. În documentele
detailate de pe site-ul producătorului poate fi aflat în ce banc se află localizat fiecare pin al
circuitului FPGA. În cadrul unui banc nivelele de tensiune aplicate la pini pot fi mixate doar
în cazul în care toţi pinii beneficiază de aaceeaşi tensiune VCCO. În tabelul T4 sunt prezentate
standardele compatibile, care pot fi selectate la pini din acelaţi banc.

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.

7.4 Blocurile logice configurabile


Blocul constructiv de bază a unui circuit FPGA este reprezentat de aşa numita celula
logică, LC (Logic Cell). O astfel de celulă include un generator de funcţii cu 4 intrări, logică
de transport şi elemente de stocare. Ieşirea fiecărui generator de funcţii trece direct la ieşirea
din CLB sau trece la intrarea unui bistabil de tip D. Fiecare CLB dintr-un circuit Spartan
II/IIE conţine patru astfel de LC-uri, organizate în două blocuri identice, aşa numite slice-uri.
În figura 5 este prezentat un astfel de slice.

Tabelele de adevăr (LUT)


Generatoarele de funcţii sunt implementate ca şi tabele de adevăr şi pot fi configurate,
la fel ca şi la alte familii de circuite FPGA, ca şi memorii RAM cu un singur pot sau cu port
dublu. De aemenea pot ficonfigurate ca şi registre de deplasare pe 16 biţi.

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

Figura 6. Multiplexoarele F5 şi F6 din cadrul


unui CLB

94
Capitolul 7

Blocurile de memorie RAM


Circuitele din familia SpartanII/IIe încorporează câteva blocuri mari de memorie
RAM, care vin în complectarea memorie RAM distribuite implementată cu ajutorul LUT-
urilor. Aceste blocuri sunt organizate în coloane. Majoritatea dispozitiveleor dispund de cel
puţin două astfel de coloane. În tabelul T5. Sunt prezentaţi membri familiei Spartan IIE cu
numărul de blocuri de memorie RAM şi capacitatea maximă de memorie pusă la dispoziţie de
aceste blocuri.

Tabelul T5. Cantitatea de memorie RAM organizată în blocuri,


corespunzătoare membrilor familiei SPARTAN IIE

7.5 Logica programabilă de interconectare


Viteza de lucru a oricărui proiect este limitată de întârzierea care apre pe traseul cel
mai lung. Astfel că, arhitectura circuitelor Spartan IIE a fost astfel concepută încât să
minimizeze întârzierile.

Resursele de rutarea locală


În figura 7 sunt prezentate resursele de rutare locală, care pot fi de următoarele tipuri:
- interconexiuni între LUT-uri, bistabile şi matricea de interconectare generală GRM
(General Routing Matrix);
- trasee interne de interconectare a LUT-urilor din acelaşi CLB;
- trasee directe care permit interconectarea CLB-urilor vecine aflate pe acelaşi rând, se
elimină astfel întârzierile induse de GRM-uri.

Figura 7. Resurse de interconectare locală

95
Arhitectura circuitelor FPGA. Familia Spartan-II/IIE

Resursele de rutare generală


Acestea sunt localizate la intersecţia liniilor şi a coloanelor traseelor verticale şi
orizontale. Aceste resurse constau în:
- În vecinătatea fiecărui CLB există o GRM care permite conectarea CLB-urilor la
resursele de rutare generală;
- Există 24 de linii de lungime simplă care rutează semnalele dintr-un GRM la GRM-ul
vecin în toate cele patru direcţii;
- Există 96 de linii de lungime hexa care rutează semnalele tot la al şaselea GRM;
- 12 linii lungi, bidirecţionale care parcurg întreaga lungime şi lăţime a circuitului.

Resurse de rutare I/O


Aceste resurse permit interconectarea CLB-urilor cu IOB-urile şi la fel ca şi la alte
familii de circuite FPGA alcătuiesc aşa numitul inel VersaRing.

Resurse de rutare dedicate


Există două categorii de astfel de resurse:
- resurse de rutare orizontale cu bufere 3-state. Fiecare CLB beneficiază de 4 astfel de
linii.
- Resurse de propagare a transportului, câte două linii pentru fiecare CLB.

Resurse de rutare globale


Acest tip de resurse asigură transportul semnalelor de clock şi a altor semnale globale
şi dispun de un fanout ridicat pe toată suprafaţa circuitului. Acestea pot fi categorisite astfel:
- resurse globale primare, cuprind patru linii globale de clock, acestea pot fi accesate
prin intermediul buffere-lor globale şi pot comanda toate CLB-urile, IOB-urile şi
blocurile de memorie RAM.
- Resurse globale secundare, cuprind 24 de linii, 12 la extrema superioară a circuitului
şi 12 la cea inferioară, acestea sunt mai flexibile şi nu este necesar să fie conectate
numai la pini de clock.

Distribuirea semnalului de clock

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.

Figura 8. Diagrama blocului DLL

96
Capitolul 7

Figura 9. Funcţii ale blocului DLL

7.5.1 Funcţia Boundary Scan

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

Figura 10. Logica de testare periferică (boundary scan)

7.5.2 Configurare şi testare

Configurarea reprezintă procesul de încărcare a datelor de programare specifice


proiectului, în unul sau mai multe circuite FPGA cu scopul de a definii modul de funcţionare
şi de interconectare a blocurilor interne. Circuitele din familia Spartan folosesc câteva sute de
biţi pentru configurarea unui CLB şi a interconexiunilor asociate acestuia. Fiecare bit
defineşte starea unei celule de memorie RAM statică, care poate controla o locaţie a tabelei de
adevăr, o intrare a unui circuit de multiplexare sau grila unui tranzistor de trecere utilizat
pentru interconectare. Mediul de dezvoltare Xilinx translatează un proiect într-un fişier de tip
listă de conexiuni (netlist), partiţionează, plasează şi interconectează în mod automat
circuitele logice specifice proiectului şi generează în cele din urmă un fişier de configurare în
format de tip PROM.

98
Capitolul 7

99
Capitolul 8

8 Familia de circuite FPGA Spartan-3. Introducere în familia de


circuite Virtex

8.1. Familiile de circuite FPGA Spartan-3


Familia de circuite FPGA Spartan-3 a fost proiectată în mod expres pentru a veni în
întâmpinarea cerinţelor de capacitate sporită şi cost redus, specifice pieţei bunurilor de larg consum.
Această familie de circuite are opt membrii cu capacităţii între 50.000 şi cinci milioane de porţii
logice, vezi tabelul T1. Circuitele din această familie sunt realizate în tehnologie 90nm şi pot fi
implementate proiecte cu frecvenţă de lucru de până la 185 MHz .
Arhitectura familiei de circuite Spartan-3 se bazează pe arhitectura predecesorului Spartan-
IIE, beneficiind în plus de resurse logice suplimentare, capacitate sporită a memoriei RAM interne,
număr sporit de pini I/O, resurse de management a semnalului de tact îmbunătăţite. Noile caracteristici
fiind împrumutate de la clasa superioară de circuite FPGA produse de XILINX, familia Virtex-II.
Îmbunătăţirile aduse familiei de circuite Spartan-3 combinate cu procesele tehnologice de producţie
avansate, conferă o funcţionalitate sporită şi un raport preţ performanţă foarte bun, fixând astfel noi
standarde în domeniul circuitelor logice programabile.
Familia de circuite Spartan-3 este o alternativă superioară circuitelor ASIC programate prin
mască. Circuitele FPGA permit reducerea costurilor iniţiale de producţie, a ciclului de dezvoltare
implementare a aplicaţiei şi înlătură inflexibilitatea specifică circuitelor ASIC. De asemenea,
reprogramabilitatea circuitelor FPGA permite updatarea aplicaţiilor fără a fi necesare modificări
hardware, lucru imposibil în cazul circuitelor ASIC.

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

8.1.1 Caracteristici ale familiei de circuite FPGA Spartan-3

Această familie de circuite FPGA se caracterizează prin cost redus, performanţă


ridicată, densitate mare, aplicaţii orientate spre piaţa de larg consum. Densitatea atingând 5
milioane de porţi logice în cazul celui mai mare membru al familie. Această densitate adeseori
este exprimată şi în număr de celule logice, o astfel de celulă fiind alcătuită dintr-un tabel de
Capitolul 8

adevăr cu 4 intrări (Look-Up-Table sau LUT) şi un circuit bistabil. Astfel că circuitul cu


densitatea cea mai mare dintre membrii acestei familii va avea o densitate de 74.880 celule
logice.
Numărul de pini de intrare/ieşire oferit de circuitele din această familie poate ajunge
până la 784, pentru cel mai mare dintre membrii familie. Aceste porturi de intrare/ieşire
permit o rată de transfer de până la 622Mb/s. De asemenea aceste porturi beneficiază de
impedanţă ce poate fi controlată digital. Semnalul poate varia între 1,14 – 3,45 V şi există
suport pentru standardele DDR, DDR2 şi SDRAM, beneficiind de o viteză de până la 333
Mbps.
Resursele logice oferite de aceste circuite sunt de asemenea remarcabile, astfel că pot
fi implementate în mod optim, registre de deplasare, multiplexoare rapide şi de dimensiuni
mari. Există un număr considerabil de multiplicatoare dedicate, între 4 şi 104. Logică dedicată
pentru transport în cazul sumatoarelor rapide şi de asemenea logică JTAG.
Memoria RAM internă a acestei familii de circuite este împărţită în memorie RAM
organizată în blocuri (până la 1872 Kb) şi memorie RAM distribuită (până la 520 Kb).
Aceste circuite beneficiază de asemenea de circuite specializate pentru managementul
semnalului de tact, aşa numitele DCM-uri (Digital Clock Manager). Rolul acestor DCM-uri
fiind de a elimina întârzierile care pot apărea pe traseul semnalului de clock şi de asemenea de
a asigura sinteza în frecvenţă a acestuia. Există de asemenea opt linii dedicate pentru
transportul semnalului de tact aţa numite linii globale de clock.
Dezvoltarea aplicaţiilor pentru această familie de circuite FPGA se poate face folosind
mediul integrat XILINX ISE care permite executarea tuturor fazelor de proiectare: descriere,
simulare, sinteză, mapare, plasare-rutare şi generare fişier de implementare. De asemena
circuitele Spartan-3 suportă implementarea core-urilor procesor MicroBlaze, interfaţă PCI şi a
altora.
În funcţie de aplicaţiile în care sunt folosite circuite Spartan-3 oferă opţiune de
capsulă fără plumb. Există de asemenea variante ale familie de circuite Spartan-3, dedicate
diverselor ramuri ale industriei, precum cea constructoare de maşini (Spartan-3 XA) şi de
asemenea pentru aplicaţiile care necesită consum redus de putere există familia Spartan-3L.

8.2.1 Arhitectura familiei de circuite Spartan-3

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

Blocurile de multiplicare acceptă la intrare două numere pe 18 biţi şi calculează


produsul acestora. Rezultatul va fi exprimat pe 36 de biţi. Multiplicatoarele pot fi configurate
să manipuleze datele atât sincron cât şi asincron.
Blocurile DCM (Digital Clock Manager) furnizează soluţii digitale de autocalibrare,
distribuire, întârziere, multiplicare, divizare şi deplasarea fazei pentru semnalul de clock.
Organizarea acestor blocuri este prezentată în figura 1. Se poate observa că matricea
de blocuri CLB este înconjurată de un inel de blocuri IOB. În funcţie de capacitatea lor
membrii familiei Spartan-3 pot avea între 1 şi 4 .coloane de blocuri de memorie RAM.
Fiecare coloană fiind alcătuită din câteva blocuri de memorie RAM de 18kbiţi şi fiecare bloc
fiind asociat cu un multiplicator dedicat. Blocurile DCM fiind poziţionate la capătul
coloanelor alcătuite de blocurile de memorie RAM.
Familia de circuite FPGA Spartan-3 este caracterizată de o reţea bogată de trasee şi
comutatoare care interconectează toate blocurile funcţionale amintite mai sus, permiţând
transmiterea semnalelor între acestea. Fiecare bloc are asociată o aşa numită matrice de
comutaţie care permite conexiuni multiple la traseele interne circuitului FPGA

Figura 1 Arhitectura familiei de circuite Spartan-3

8.3.1 Modalităţi de configurare

Circuitele FPGA Spartan-3 sunt reprogramabile şi se configurează prin încărcarea datelor de


configurare în latch-uri CMOS de tip static, care în mod colectiv, controlează atât blocurile funcţionale
cât şi resursele de interconectare. Până la punerea sub tensiune a circuitului FPGA datele de
configurare pot să fie stocate extern într-o memorie de tip PROM aflată pe aceeaşi placă cu circuitul
FPGA sau pe o placă periferică. La punerea sub tensiune a circuitului FPGA datele de configurare vor
fi înscrise în circuitul FPGA folosind una din cele cinci modalităţi posibile: master paralel, slave
paralel, master serial, slave serial şi Boundary Scan sau JTAG. Cele mai uzuale tipuri de memorii de
tip PROM folosite împreună cu circuitele FPGA produse de XILINX sunt de tip Flash PROM şi
includ circuitele XCF00S pentru configurare serială şi XCF00P atât pentru configurare serială cât şi
paralelă.

102
Capitolul 8

Descrierea funcţională a principalelor blocuri constructive

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.

8.4.1 Blocurile de intrare/ieşire

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.

Figura 2. Arhitectura internă simplificată a blocului I/O a circuitului Spartan-3

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.

Figura 3. Bancurile de blocuri IOB

Blocurile IOB suportă o mare varietate de standarde de intrare-ieşire asimetrice sau


diferenţiale, prezentate în tabelul T2. Pinii adiacenţi sunt folosiţi pentru fiecare pereche
diferenţială.
Tabelul T2. Standarde de intrare-ieşire asimetrice sau diferenţiale suportate de blocurile I/O
Standarde de intrare-ieşire asimetrice:
• LVTTL (3,3 V);
• LVCMOS (3,3V, 2,5V, 1,8V, şi 1,5V, 1,2V);
• PCI (33 MHz) la 3V;
• CardBus (33 MHz) la 3,3V;
• GTL;
• HSTL (1,5V, 1,8V);
• SSTL (1,8V, 2,5V);
Standarde de intrare-ieşire diferenţiale:
• LVDS (Low Voltage Differential Signaling);
• LDT (Lighting Data Transport);
• LVPECL (Loe Voltage Positive Emitter Coupled Logic);
• RSDS (Reduced Swing Diferential Signaling);
• HSTL ( Diferntial High Speed Tranceiver Logic);
• SSTL (Diferential Stub Series Terminated Logic).

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

8.5.1 Blocurile logice configurabile

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.

Figura 4. Organizarea slice-urilor într-un CLB

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

8.6.1 Blocuri de memorie RAM

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.

8.7.1 Blocul de management a semnalului de clock

Î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

8.8.1 Reţele globale de clock

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.

8.9.1 Interconexiuni programabile

Liniile care asigură interconectarea blocurilor constructive aflate în interiorul circuitelor


FPGA poartă numele de interconexiuni programabile. Aceste linii asigură modalităţi de
interconectare foarte flexibile, iar în funcţie de cât de aproape unul de altul sunt CLB-urile pe
care le interconectează se pot distinge patru tipuri: linii lungi, linii hexa, linii duble şi linii
directe.

8.2. Introducere în familia de circuite Virtex

8.2.1 Circuitele din familia Virtex-4

Familia Virtex-4 reprezintă penultima generaţie de circuite FPGA a firmei Xilinx


realizată în tehnologie de 90 nm. Arhitectura circuitului are la bază un nou bloc inovativ,
numit ASML (Advanced Silicon Modular Block), unic în industria circuitelor logice
programabile. Familia conţine trei platforme: LX, SX, FX organizate pe criterii de
performanţă: număr de celule logice, număr de unităţi MAC şi frecvenţă de lucru
Posibilitatea combinării caracteristicilor şi numărul mare de blocuri de tip proprietate
intelectuală hardware (hard-IP blocks) completează soluţiile de sistem. Dispozitivele conţin
de asemenea:
- procesoare PowerPC
- controlerul Ethernet MAC (Media Access Control) cu trei moduri de operare
(10/100/1000 Mb/s)
- tranceivere seriale cu viteza cuprinsă între 622 Mb/s şi 11,1 Gb/s
- slice-uri dedicate procesării digitale a semnalelor
- circuite de managementul semnalului de ceas de frecvenţă mare (Xesium Clock
Tehnology)
Dintre îmbunătăţirile şi modificările notabile faţă de dispozitivele din familiile Virtex
anterioare, se remarcă următoarele:
- o creştere de până la 40% a vitezei de lucru a celulelor logice;
- includerea de blocuri dedicate funcţiilor DSP (XtremeDSP Slice) funcţionând la
500 MHz. Acestea conţin:
- multiplicatoare pe 18x18 biţi, dedicate,
- nivele de pipeline opţionale pentru îmbunătăţirea performanţelor,
- blocuri multiplicatoare-acumulatoare sau multiplicatoare-sumatoare,

107
Arhitectura circuitelor FPGA. Familiile Spartan 3 şi Virtex

- acumulator opţional pe 48 de biţi pentru operaţiile de multiplicare acumulare


(MACC),
- blocuri de memorie integrate funcţionând la 500 MHz;
- blocuri de memorie integrată de până la 10 Mb;
- arhitectura dual-port.

8.3.1 Circuitele din familia Virtex 5

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.

8.3. Analiza comparativă performanţe/preţ circuite FPGA

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

Virtex4FX140 90 192 500 142.128 9,5M** -


Virtex4LX200 90 96 500 200.000 13,5M** 300-340
VirtexIIPro100 130 444 300 125.136 9M** 109-1600
VirtexII 150 168 245 93.058 8M -
Spartan3S5000 90 104 185 74.880 5M 9,5-100

*
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$.

8.4. Modulul de control cu circuit FPGA XC3S200 din familia


Spartan3

Modulul hardware cu circuit FPGA, utilizat în partea de laborator, este produs de


firma Digilent Inc, poarta numele de Spartan-3 şi are ca şi componentă centrală circuitul
FPGA XC3S200 din familia Spartan3.

8.4.1 Părţile componente ale plăcii Spartan-3

Principalele componente prezente pe această placă sunt prezentate în figura 6 şi vor fi


enumerate în continuare:

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

Figura 6 Placa Spartan-3

7. Circuit adaptare nivele RS232;


8. Punct J1, de testare semnale seriale RS-232;
9. Port PS-2, permite conectare mouse sau tastatură;
10. Afişaj 7-segmente cu 4 caractere;
11. Comutatoare pentru introducere date, 8 bucăţi;
12. LED-uri pentru vizualizare stare ieşiri, 8 bucăţi;
13. Butoane pentru introducere date, 4 bucăţi;
14. Sursă semnal de tact de 50MHz de tip oscilator cu quartz, se află pe versoul plăcii din
figura 6;
15. Soclu pentru sursă suplimentară de semnal de tact;
16. Jumperi J8, permit selectarea modului de configurare a circuitului FPGA;
17. Buton care permite reconfigurarea forţată a circuitului FPGA, care implicit, constă în
încărcarea fişierului de configurare din memoria PROM şi are loc la punerea sub
tensiune a plăcii;
18. LED care indică o configurare reuşită a circuitului FPGA;
19. Conector de extensie B1, 40 de pini, permite conectarea altor plăci periferice sau a
altor circuite externe;
20. Conector de extensie A2, 40 de pini, permite conectarea altor plăci periferice sau a
altor circuite externe;
21. Conector de extensie A1, 40 de pini, permite conectarea altor plăci periferice sau a
altor circuite externe;
22. Port JTAG de dowloadare/depanare compatibil cu cablu JTAG3;
23. Cablu JTAG3 pentru conectare la portul paralel al PC-ului, inclus în kitul plăcii, nu
este prezent în figura 6;
24. Port JTAG de dowloadare/depanare compatibil cu cablu Xilinx paralel IV sau
MultiPRO Desktop;
25. Conector pentru sursă de alimentare +5V;
26. LED indicator prezenţă tensiune de alimentare;
27. Regulator de tensiune de 3,3V;
28. Regulator de tensiune de 2,5V, se află pe versoul plăcii;
29. Regulator de tensiune de 1,2 V, se află pe versoul plăcii.

110
Capitolul 8

8.5.1 Modul de afişare 7-segmente cu 4 caractere

Placa Spartan-3 este dotată cu un afişaj 7-segmente cu 4 caractere pentru vizualizarea


mărimilor de ieşire, vezi figura 7. Afişarea se face prin multiplexare comandând succesiv
semnalele comune anozilor şi trimiţând în mod repetat secvenţa corespunzătoare catozilor
fiecărui digit, astfel se obţine afişarea pe patru caractere. Tiparul care se aplică catozilor
pentru afişarea 7 segmente este cel cunoscut. Pentru ca fiecare din cele patru caractere să fie
iluminat în mod continuu şi intensitatea iluminării să fie corespunzătoare, secvenţa de date
trebuie reîmprospătată la fiecare 1 până la 16 ms după tiparul din figura 8.

Figura 7. Configuraţia afişajului 7-segmente cu 4 caractere de pe placa Spartan-3.

Figura 8. Modul de afişare 7-segmente mod de comandă

În tabelul T3. Sunt prezentaţi pinii specifici afişajului 7-segmente.

Tabelul T3. Pini circuitului FPGA asociaţi afişajului 7-segmente cu 4 caractere.

111
Arhitectura circuitelor FPGA. Familiile Spartan 3 şi Virtex

8.6.1 Comutatoare, butoane şi LED-uri

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.

Placa Spartan-3 conţine 8 LED-uri pentru vizualizarea stărilor de la 8 pini distincţi ai


circuitului FPGA. În sistemul de control aceşti pini pot fi folosiţi pentru vizualizarea stărilor,
de exemplu poate fi semnalizat sensul de rotaţie al motorului, etc. Pinii circuitului FPGA
aferenţi celor 8 comutatoare sunt prezentaţi în tabelul T6.

Tabelul T6. Pinii circuitului FPGA asociaţi celor 8 LED-uri de pe placa Spartan-3.

8.7.1 Moduri de configurare ale circuitului FPGA şi ale memorie PROM


de tip Flash

În modul implicit, folosit în majoritatea aplicaţiilor, circuitul FPGA de pe placa


Spartan-3 îşi încarcă fişierul de configurare (bootează) din memoria PROM de tip Flash.
Secvenţa de bootare are loc oridecâteori placa Spartan-3 este pusă sub tensiune sau este
apăsat butonul de programare, vezi reper 17 figura 6.
Circuitul FPGA de pe placă suportă mai multe moduri de configurare.: master serial ,
slave serial, master paralel, slave paralel şi modul JTAG. Modul implicit este master serial.
Detalii cu privire la celelalte moduri şi la poziţia jumperilor J8 şi JN1 de selectare a modurilor
de configurare se pot lua din data sheet-urilor producătorului.
Lângă butonul de programare se află şi un LED (reper 18, figura 6.) care se va aprinde
în momentul în care secvenţa de configurare s-a încheiat cu succes.
Memoria PROM de tip Flash XCF02S se configurează serial. În general această
memorie este folosită pentru stocarea fişierului de configurare a circuitului FPGA, dar poate fi
folosită şi pentru stocarea altor date. Această memorie se mai foloseşte şi pentru stocare
codului unei aplicaţii implementate pe coreul de microprocesor MicroBlaze implementat în
circuitul FPGA.

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.

8.8.1 Porturi JTAG de programare/depanare

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

8.9.1 Conectori de extensie

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.

Tabelul T7. Configuraţia pinilor de la conectorul de extensie B1 al plăcii Spartan-3

Principala funcţie pe care o au aceste porturi este de a permite adăugarea şi a altor


dispozitive, prezente pe plăci de extensie, pentru o listă completă a plăcilor de extensie se
poate vizita site-ul producătorului Digilent Inc.

114

S-ar putea să vă placă și