Sunteți pe pagina 1din 212

Circuite integrate numerice.

Aplicaii n mecatronic

Capitolul 1 Noiuni introductive 1.1 Definiii i clasificri


Un circuit integrat este un circuit microelectronic (realizat pe o singur pastil chip de material semiconductor, prin tehnologii specifice) la care funciile componentelor electronice (tranzistori, diode, rezistori, capacitori) sunt ndeplinite de anumite subdomenii ale solidului semiconductor. Ca materiale semiconductoare se utilizeaz, de cele mai multe ori, siliciul mono cristalin (mono Si), arseniura de galiu (GaAs) sau, mult mai puin, germaniul (Ge). Mai exist i jonciuni metal-semiconductor (Al-Si) utilizate la realizarea de diode Schottky. Materialele conductoare utilizate sunt, funcie de circulaia de curent necesar, fie metalice (aluminiu-Al, aur-Au) sau realizate tot pe baz de siliciu, dar poli cristalizat (poly Si). Cuprul a nceput s fie utilizat doar n ultimul timp, datorit faptului c este necesar o interfa special, costisitoare, cu siliciul (altcumva el difuzeaz n siliciu, ca apa ntr-un burete!). Pentru izolri se utilizeaz bioxidul de siliciu (SiO2) sau jonciuni p-n polarizate invers ([45],[47]). Un astfel de circuit microelectronic, introdus ntr-o capsul package (din material plastic sau ceramic) i prevzut cu elemente de conexiune extern (pini, "piciorue") reprezint un circuit integrat monolitic; trebuie amintit c mai exist i aa numitele circuite integrate hibride care sunt realizate dintr-un ansamblu de circuite integrate monolitice, eventual nencapsulate, mpreun cu componente pasive i/sau active, interconectate pe un suport gen ceramic, totul fiind ncapsulat n aceiai capsul (plastic sau metal). Un circuit integrat numeric (digital) este un circuit integrat destinat unor funcii de prelucrare specifice (cum ar fi operaiile logice, aritmetice, de memorare) realizate asupra unor semnale numerice (care admit o reprezentare binar), i a crui funcionare poate fi descris cu ajutorul algebrei booleene. Circuitele integrate numerice (digitale) domin domeniul aplicaiilor circuitelor integrate att n termeni de volum al produciei i vnzrilor, ct i al diversitii constructive. Aplicaiile includ: subcomponente ale sistemelor de calcul, realizarea de diverse variante de microprocesoare, instrumentaie numeric, jocuri electronice, etc.; practic ele stau la baza tuturor sistemelor de prelucrare a informaiei i a sistemelor moderne de control al proceselor, cu alte cuvinte circuitele integrate numerice stau la baza civilizaiei tehnologice actuale. n formele menionate, circuitele integrate numerice reprezint i o component esenial a oricrui sistem mecatronic. Exist un numr relativ mic de circuite numerice de baz care sunt utilizate ca blocuri constructive. Ele sunt interconectate astfel nct s formeze circuite complexe, capabile s ndeplineasc cerinele asociate aplicaiilor menionate. Principalele justificri ale dezvoltrii acestei categorii de circuite ar fi:
1

Noiuni introductive

- reducerea dramatic a dimensiunilor i a consumului de energie pentru sistemele n care se utilizeaz - reducerea preului de cost datorit produciei de mas i al standardizrii unor familii i serii de circuite integrate numerice - creterea fiabilitii sistemelor care le utilizeaz datorit, printre altele, a reducerii numrului de interconexiuni externe Principala caracteristic a unui astfel de circuit numeric este c el este realizat s funcioneze cu mrimi de intrare i ieire binare, reprezentate, n majoritatea situaiilor, prin dou domenii de tensiune disjuncte. n practic, de aici a rezultat o mare diversitate de circuite care difer ntre ele prin: domeniile de tensiune utilizate, curenii de intrare/ieire, temperaturile de funcionare, procesele tehnologice de fabricaie utilizate, etc. Exist numeroase criterii de clasificare a acestor circuite, criterii din care se pot meniona: a. tehnologia (procesul tehnologic) utilizat la realizarea microcircuitului; astfel exist circuite integrate numerice bipolare (care utilizeaz ca element de baz tranzistorul bipolar) i circuite unipolare (utilizeaz un tranzistor unipolar de obicei MOSFET); n cadrul celor dou mari categorii au aprut diferite variante cu aplicaii practice organizate n familii (serii), eventual standardizate; se pot exemplifica n acest sens: - circuite bipolare: TTL (Transistor Transistor Logic), ECL (Emitter Coupled Logic), IIL (Integrated Injection Logic) - circuite unipolare: MOS, CMOS (Complementary MOS), CCD (Charge Coupled Device) - circuite BiCMOS, folosesc ambele tipuri de tranzistori (bipolar i MOSFET) Practic din seriile bipolare mai prezint interes doar seriile TTL (moderne, cum ar fi ALS, AS sau F i mai puin LS) i cele ECL. Trebuie menionat c dezvoltrile majore, spectaculare, au i au avut loc, de muli ani, doar n domeniul tehnologiilor unipolare i anume al tehnologiei CMOS i BiCMOS. Aici exist o diversitate foarte mare, datorat i proliferrii seriilor CMOS sau BiCMOS cu tensiune sczut de alimentare (low voltage): LVC, AVC, AHC, ALVC, CBTLV, etc. b. gradul de integrare realizat la nivelul pastilei de siliciu (numrul de tranzistoare echivalente integrate); n acest sens se menioneaz urmtoarele categorii de circuite(acronime): SSI (Small Scale Integration < 50 ); MSI (Medium Scale Integration 50-500); LSI (Large Scale Integration 500 - 30000); VLSI (Very Large Scale Integration > 30000) Clasificarea respectiv este practic desuet la ora actual, existnd circuite care au zeci de milioane de tranzistoare integrate la nivelul aceluiai circuit. Circuite n tehnologie CMOS cu aproape un miliard de tranzistoare sunt deja realizabile n condiii de laborator, folosind dimensiuni minime de 60 sau 45 nanometri!
2

Circuite integrate numerice. Aplicaii n mecatronic

1.2. Nivele de descriere utilizate n proiectarea cu circuite integrate numerice


O caracteristic important legat de utilizarea circuitelor integrate numerice este constituirea mai multor nivele de descriere (de abstractizare) ce pot fi folosite ntr-o proiectare complet. Aceast abordare a permis o oarecare ncapsulare a nivelului respectiv, fcnd posibil dezvoltarea unor mijloace software de proiectare asistat (CAD tools) specifice fiecrui nivel, mijloace fr de care progresele semnificative din domeniu nu ar fi fost posibile([27],[47],[48]). Una din variantele posibile de descriere top-down (de la nivelul cel mai ridicat de abstractizare la cel mai cobort) a acestor nivele ar fi : a. nivelul sistemic al blocurilor funcionale presupune utilizarea unei scheme bloc n care sunt descrise (prezentate) principalele subcomponente ale unui sistem numeric; descrierea blocurilor este mai degrab textual dect ntr-un limbaj formal; este nivelul superior la care lucreaz iniial orice proiectant de sistem atunci cnd face specificaia funcional a sistemului b. nivelul generic al transferului ntre registre-RTL (Register Transfer Level) const n utilizarea de instruciuni analoage celor dintr-un (meta)limbaj de programare, instruciuni care descriu deplasarea i prelucrarea informaiei ntre sau n elemente de memorare (registre generice) prin nivele de logic combinaional; RTL permite o descriere formal a funcionrii unei structuri numerice de prelucrare a informaiei; exist diverse materializri sub forma unor limbaje formale sau HDL (Hardware Description Language) care finalmente vor permite, cu anumite limitri, i sinteza circuitelor (schemelor) logice. c. nivelul schemelor logice larg utilizat n descrierea funcionrii interne a blocurilor specificate la nivelele superioare deja menionate; se utilizeaz, ntr-o descriere grafic i/sau analitic, funcii logice i/sau aritmetice bine definite prin intermediul algebrei booleene, pn la nivel de poart; pentru multe tipuri de proiectare, aparent acesta este nivelul cel mai de jos care este necesar s fie cunoscut de proiectant dar exist multe aspecte legate de nivelul inferior care sunt vitale pentru o proiectare complet (interfaa electric, caracteristici de regim dinamic). d. nivelul schemelor electrice (electronice) utilizate la descrierea funcionrii circuitului integrat din punct de vedere electric; se pot utiliza scheme electrice pentru fiecare bloc logic ct i pentru poriunile de circuit care nu pot fi asimilate unui bloc logic; este caracterizat prin prezena componentelor electronice discrete i utilizarea ecuaiilor lor simplificate de funcionare e. nivelul descrierii geometrice a microcircuitului este cel mai apropiat de realizarea fizic propriu-zis a elementelor descrise la nivelele superioare; este nivelul la care lucreaz proiectantul circuitului microelectronic; este de dorit o cunoatere sumar i a acestui nivel de ctre proiectanii de la nivelele superioare deoarece, n ultim instan, caracteristicile geometrice ale microcircuitului sunt

Noiuni introductive

cele care determin performanele schemei electronice utilizate pentru circuitul integrat numeric.

1.3. Caracteristici generale ale circuitelor integrate numerice


Operarea acestor circuite fcndu-se ntotdeauna n mod binar, n regim static, orice intrare sau ieire se va gsi ntr-una din cele dou stri posibile. Aceste stri sau condiii vor fi identificate ca stri adevrate/false, stri "1" sau "0" (citite ca 1 sau 0 logic) sau nivele ridicate/coborte (High/Low). Identificarea intrrilor sau ieirilor se face printr-o indexare corespunztoare: I pentru intrare (input), Opentru ieire (output). La fel ca la orice sistem exist caracteristici i parametri de regim static (cu formulri alternative precum curent continuu, DC) i respectiv de regim dinamic (cu formulri alternative ca tranzitoriu, transient, curent alternativ, AC). a. Regimul static Deoarece mrimile de intrare i ieire sunt, aproape ntotdeauna, de natura unor tensiuni, cele dou stri pe intrare vor fi caracterizate de dou valori de tensiune VIL i VIH unde n logic pozitiv, VIH > VIL. Dac tensiunea V a unui nod oarecare al circuitului ndeplinete condiia V >VIH atunci nodul respectiv este n starea "1", iar dac V<VIL nodul este n starea "0". Valorile limit extreme ale celor dou tensiuni sunt, de obicei, tensiunea de alimentare i potenialul de referin (masa circuitului). Dac VIL < V < VIH , starea logic este neprecizat, situaie care trebuie evitat n regimul static al oricrui sistem numeric, deoarece mai are i alte consecine. Astfel prin stare logic sau nivel logic (logic level) vom nelege de fapt o plaj (un domeniu) de tensiune pentru un nod al circuitului. La nivelele superioare de descriere fiind important doar identificarea strii, valoarea exact a tensiunii n plaja respectiv nu este relevant ([27], [45]). Dei principial proiectantul unui circuit integrat numeric are aparent o libertate total n alegerea valorilor pentru VIL i VIH, aceasta nu se ntmpl dect n cazuri cu totul particulare, din cel puin dou motive: - fiecare tehnologie de realizare are asociate anumite valori intrinseci (naturale); astfel pentru diverse tehnologii au rezultat anumite valori standard de tensiune i curent (asociate surselor de tensiune echivalente), valori la care au aderat majoritatea productorilor din ntreaga lume; este astfel posibil proiectarea unor sisteme numerice complexe care incorporeaz circuite provenind de la mai muli fabricani. - proiectanii i productorii de sisteme numerice insist, de multe ori, ca pentru toate circuitele utilizate ntr-un anumit proiect s existe dou sau mai multe surse (fabricani), eliminnd astfel dependena de un productor unic; cerina unei surse
4

Circuite integrate numerice. Aplicaii n mecatronic

alternative (second -source) constituie un imbold suplimentar pentru fabricant n aderarea la un standard deja constituit. Anumite tehnologii nu au ns astfel de specificaii standardizate pentru c sunt utilizate doar la realizarea de circuite VLSI. Totui i aceste circuite vor fi prevzute cu o interfa intrare/ieire pentru a permite conectarea cu exteriorul, circuite care trebuie s asigure compatibilitatea cu standarde larg acceptate. Blocurile de baz dintr-o familie oarecare pot fi combinate n vederea realizrii unor funcii complexe. Setul minim de funcii logice conine funciile: AND (SI), OR (SAU) i NOT (NU), setul fiind complet n sensul c orice funcie combinaional se poate realiza pe baza lui. Totui cele mai simple circuite electronice ce pot fi utilizate la implementarea funciilor logice realizeaz o inversare a semnalelor de intrare. Astfel, structuri electronice minimale realizeaz funcia NAND i nu AND, respectiv funcia NOR i nu OR, cele dou funcii fiind complete n sensul menionat anterior. Circuitele electronice care vor implementa funciile NAND sau NOR vor fi i din acest motiv cele preferate ntr-o familie logic oarecare, alctuind astfel blocurile logice ce stau la baza familiei respective. Denumirea generic utilizat pentru acestea este cea de poart fundamental (basic gate) a familiei respective. Caracteristicile standard al interfeei electrice de regim static pentru o familie de circuite sunt determinate plecnd de la caracteristicile celui mai simplu component al familiei, i anume inversorul de baz (basic inverter). n figura 1.1 este prezentat un astfel de inversor mpreun cu caracteristica static de transfer (CST) .

Figura 1.1

Caracteristica static a unui inversor numeric

O familie logic la care CST prezint o zon n care ctigul intrare/ieire este supraunitar se numete ca avnd o capacitate de refacere a nivelelor logice ("restoring logic"). Aceast caracteristic se manifest n cazul degradrii nivelelor logice dintr-o cauz oarecare, prin refacerea acestora datorit amplificrii (A >1) disponibile la nivelul circuitelor care urmeaz. Pentru definirea nivelelor logice se utilizeaz CST a unui inversor din familia respectiv (figura 1.2) pe care se pun n eviden o serie de importante valori asociate.

Noiuni introductive

VILmax - cea mai mare tensiune de intrare interpretat sigur ca "0" VIHmin - cea mai mic tensiune de intrare interpretat sigur ca "1" VOL - valoarea nominal de "0" la ieire VOH - valoarea nominal de "1" la ieire Dac A este amplificarea de tensiune, n modul, VIL i VIH delimiteaz, pe axa tensiunii de intrare, cele trei regimuri semnificative, dou cu amplificare subunitar i unul cu amplificare supraunitar: - dac Vi < VIL orice mic perturbaie prezent la intrare va avea un efect redus la ieire datorit lui A < 1

Figura 1.2

Caracteristica static de transfer (CST)

- dac VIL < Vi < VP intrarea este nc interpretat ca "0", dar datorit lui A > 1 orice mic perturbaie va fi amplificat la ieire i transferat etajului urmtor, putnd duce la funcionare eronat Astfel VIL va reprezenta cea mai mare tensiune care poate fi considerat, cu un nivel ridicat de ncredere, ca aparinnd nivelului de "0" . O analiz analoag poate fi realizat i pentru VIH. Punctul de mijloc Vo = Vi = VP reprezint tensiunea de prag (de comutare) care separ n mod absolut cele dou stri logice pe intrare; el corespunde unei stri instabile deoarece orice perturbaie va fi amplificat datorit ctigului mult supraunitar. Marginile de zgomot (ad-literam, din englez " noise margins"), vor fi cele mai mari valori ale unei tensiuni perturbatoare (zgomot) suprapuse peste semnalul logic util care pot fi tolerate pe intrarea circuitului n condiiile unei funcionri sigure. Pentru CST dat vor exista dou margini de zgomot corespunztoare celor dou nivele logice:
6

Circuite integrate numerice. Aplicaii n mecatronic

MZL = VIL - VOL i MZH = VOH - VIH Pentru orice poart logic marginile de zgomot se pot evalua analog pe baza CST. Putem considera, pentru a ne apropia de realitate, c la ieire se afl conectat (este deci comandat) mai mult de o intrare i exist circulaie de curent. Inversorul utilizat este unul ne ideal, n sensul c rezistena sa de intrare este finit (curentul de intrare nu este nul) i rezistena de ieire i ea este ne nul (sursa de tensiune echivalent nu mai este ideal). Odat cu creterea ncrcrii ieirii (a circulaiei de curent) va rezulta o degradare a nivelelor logice datorit cderilor de tensiune pe rezistena de ieire: scad valorile asociate punctului de nivel "1" i cresc valorile punctului de nivel "0". Numrul maxim de intrri care pot fi conectate la ieirea circuitului este definit ca fan-out (capacitate de comand) al circuitului respectiv. Astfel specificarea nivelelor logice pentru o familie de circuite integrate numerice se face n condiiile unui fan-out dat. Astfel vom avea i un VOLmax ca valoarea limit garantat de "0" la ieire i VOHmin - ca valoare limit garantat de "1" la ieire, n condiiile unui fan-out maxim. Exist ns i circuite la care efectul fan-out-lui asupra CST este nesemnificativ, cum ar fi familiile unipolare, la care curentul de intrare n regim static are valori neglijabile. OBSERVAIE Nu trebuie uitat c exist i factori de influen externi care afecteaz CST i valorile asociate ei, cei mai importani fiind temperatura de lucru i tensiunea de alimentare. Orice circuit integrat numeric are un domeniu pentru temperatura de lucru i unul pentru tensiunea de alimentare. Astfel pentru un circuit exist un domeniu admis al temperaturii de lucru (de exemplu 0..70o) i un domeniu admis pentru tensiunea de alimentare (de exemplu 5V+-10%). Pentru o poart standard avnd CST descris mai sus, situarea tensiunii de intrare n zona tensiunii de prag (pe zona de ctig maxim a CST) pentru intervale de timp mai mari (de exemplu datorit timpilor mari de front pentru semnalul de intrare) poate duce la amorsarea unui regim instabil i n consecin la apariia unor oscilaii de nalt frecven pe fronturile semnalului de ieire, cu efecte imprevizibile pentru circuitele comandate. De asemenea, prezena zgomotului pe fronturile semnalului de intrare, n zona tensiunii de prag, poate da natere unor comutaii false ale ieirii (aici marginile de zgomot nu sunt relevante!). Eliminarea dezavantajelor menionate presupune realizarea unor pori a cror CST s fie mult mai abrupt n zona de ctig supraunitar (rezolvndu-se problema fronturilor lente) i care s prezinte i un histerezis (problema zgomotului). Pentru aceasta, n structura poriilor standard se introduce un etaj formator (un circuit basculant asimetric) care utilizeaz reacia pozitiv, numit trigger Schmitt (dup numele inginerului german care l-a descris iniial n anul 1938). Caracteristic acestui circuit este existena a dou tensiuni de prag, una

Noiuni introductive

pentru sensul cresctor al tensiunii de intrare (VP+ sau VPHL) i una pentru sensul descresctor (VP- sau VPLH ), rezultnd un histerezis H egal cu diferena ntre cele dou tensiuni de prag.

Figura 1.3

Caracteristica static a unei pori cu intrare trigger Schmitt

Caracteristica static de transfer i simbolurile utilizate pentru o astfel de poart (un NAND cu 2 intrri) cu intrare de tip trigger Schmitt sunt date n figura 1.3. De exemplu, pentru un circuit TTL valorile tensiunilor de prag sunt VPHL=1.8V i VPLH=0.9V. n plus se mai garanteaz o bun stabilitate a celor dou valori (cca. 2.5%), pe toat gama de variaie a tensiunii de alimentare i temperaturii. Datorit etajului suplimentar timpul de propagare i consumul sunt mai mari ca la poarta standard . Principalele aplicaii ale unor astfel de pori valorific imunitatea crescut la perturbaii a acestora: receptoare de linie, circuite de cuplare la magistral (ca intrare) sau posibilitatea de a fi comandate de semnale cu fronturi lente i stabilitatea tensiunilor de prag: formatoare de impulsuri, circuite de temporizare (monostabile, ntrzieri) realizate cu elemente exterioare RC (conectate ca filtre trece-jos sau trece-sus). Regimul static este caracterizat, n afar de CST care este evident o caracteristic tensiune-tensiune, i de o caracteristic de intrare i dou caracteristici de ieire (cte una pentru fiecare stare a ieirii). Caracteristicile respective sunt de tip curent-tensiune, artnd cum evolueaz curentul de intrare funcie de tensiunea de intrare Iin = Iin(Vin) sau cum evolueaz curentul de ieire funcie de tensiunea de ieire: Iout = Iout(Vout), separat pentru cele dou stri posibile ale ieirii (0 i 1). Caracteristicile respective sunt, de regul, neliniare i prin intermediul lor se precizeaz, direct sau indirect, valori limit garantate pentru curentul de intrare IIH i IIL, respectiv pentru cel de ieire IOL i IOH. Prin intermediul caracteristicilor de ieire se poate observa, de exemplu, c ieirea in 1 ntotdeauna debiteaz curent (IOH >0), iar n 0 absoarbe curent (IOL<0). Similar, pentru circuitele
8

Circuite integrate numerice. Aplicaii n mecatronic

bipolare TTL, se poate observa c intrarea n 1 ntotdeauna absoarbe curent (IIH >0), iar n 0 debiteaz curent (IIL<0) [27],[36],[37]. b. Regimul dinamic Cel mai important parametru de regim dinamic este timpul de propagare (propagation delay) care reprezint timpul de ntrziere la propagarea informaiei logice ntr-un circuit numeric i este unul din cei mai importani parametri ai oricrei familii de circuite integrate numerice. El este definit i se testeaz eventual de fabricant pentru o form de und standard aplicat la intrare ([36],[37]). Una din ideile eseniale legate de acest parametru este c ieirea unui astfel de circuit are ntotdeauna o sarcin de natur capacitiv, implicit sau explicit. Astfel curentul de ieire al porii va trebui s ncarce i respectiv s descarce acest capacitor echivalent, pentru a putea modifica ct mai repede tensiunea la bornele sale. Acesta este motivul pentru care caracteristicile statice de ieire prezint importan i pentru regimul dinamic.

Figura 1.4

Definirea formei de und i msurarea timpului de propagare

Forma de und este una periodic (T), cu timpi de front specificai (tr timpul de cretere, tf - timpul de cdere). Perioada T sau limea impulsului n 1 tP se msoar la 50% din amplitudinea impulsului, iar timpii de front ntre 10% i 90%. De asemenea este caracterizat de un anumit factor de umplere (duty cycle) care descrie intervalul de timp, dintr-o perioad, ct forma de und se afl n 1; exprimat procentual factorul de umplere se definete ca FU% = 100 tP / T. Ideal factorul de umplere ar fi de 50%.

Noiuni introductive

Timpul de propagare este de obicei specificat ca dat de catalog pentru o ncrcare dat (maxim) a ieirii, ca fan-out i sarcin capacitiv. La ieire se pun n eviden de fapt doi timpi de comutare (switching) tPHL i tPLH, msurai la 50% din amplitudinea impulsurilor de la intrare i respectiv ieire i indexai dup tranziia ieirii. De multe ori ei au valori diferite tPHL tPLH. Atunci cnd exist, diferena menionat constituie un dezavantaj, putnd duce la modificarea formei de und (a factorului de umplere), la trecerea prin unul sau mai multe nivele de pori. Din acest motiv mrimea definit ca tpd = (tPHL + tPLH ) / 2 i numit timp de propagare propriu-zis, este doar un indicator sintetic de calitate care poate servi la compararea diverselor familii de circuite. OBSERVAIE Unul din instrumentele de lucru de baz ale proiectantului din acest domeniu este catalogul de circuite integrate numerice i foaia de catalog a unui circuit sau familii de circuite (circuit datasheet). Una din cele mai sigure i complete surse de informaie din domeniu sunt notele de aplicaii ale fabricanilor de astfel de circuite (manufacturer application notes)!

1.4 Variante de ncapsulare (packages)


Aa cu deja s-a menionat, microcircuitul este finalmente ncapsulat ntr-o capsul din material plastic sau ceramic prevzut cu mijloace pentru realizarea interconexiunilor externe - pini (pins). Ceramica este utilizat atunci cnd exist cerine mai deosebite legate de ermeticitatea capsulei sau de cantitatea de cldur care trebuie disipat.

Figura 1.5

Cele mai rspndite variante de ncapsulare

10

Circuite integrate numerice. Aplicaii n mecatronic

Variantele de ncapsulare prezentate n figura 1.5 ([43]) sunt identificate prin acronime sugestive (n englez!) i au asociate probleme tehnologice specifice de montare pe cablajul imprimat (PCB), care constituie suportul material al interconexiunilor dintre circuite (module). Capsulele DIP sau DIL Dual In (Line) Package i PGA Pin Grid Array sunt variante destinate montrii cu ajutorul unor guri (pin through) realizate n cablajul imprimat; eventual se pot utiliza i socluri (sockets) pentru o montare alternativ celei prin lipire (soldering). Urmtoarele variante de ncapsulare sunt variante SMD (Surface Mounted Devices) destinate montrii pe suprafa (fr guri pentru pini): SOIC- Small Outline Integrated Circuit, TSOP- Thin Small Outline Package, SOJ Small Outline, PLCC- Plastic Leadless Chip Carrier, QFP- Quad Flat Pack, BGA- Ball Grid Array. Numrul de conexiuni externe este variabil de la civa pini pn la mii de conexiuni; cea mai mare densitate de conexiuni externe se obine pentru variantele de tip BGA, unde de fapt este vorba nu de pini ci de nite mici sfere de aliaj de lipit (solder) plasate pe una din feele capsulei. Pot exista, pentru acelai circuit, mai multe variante de ncapsulare. n foaia de catalog a circuitului sunt descrise i variantele de ncapsulare disponibile, cu dimensiunile geometrice asociate, ntr-o form care permite i identificarea numrului de pini: DIP40, SOIC8, PLCC44, TQFP244, etc. Fabricanii mai ofer, de multe ori n mod standard, i variante nencapsulate ale circuitelor, destinate unor aplicaii speciale ([37]).

1.5 Ciclul de via al seriilor standardizate de circuite integrate numerice


La fel ca orice alt produs i o familie (serie) standardizat de circuite integrate numerice, dac s-a dovedit viabil, are un ciclu de via pe pia, bazat pe utilizarea familiei respective de ctre proiectani, i care este caracterizat de urmtoarele etape: - apariie (introducerea) pe pia - creterea cotei de pia aferente - o perioad de maturitate - o perioad de declin inerent - un final n care produsul devine demodat (obsolete) n faza n care seria respectiv devine demodat ea de fapt nu mai este fabricat sau n foarte scurt timp nu va mai fi fabricat, trebuind s fie evitat utilizarea ei ntr-un proiect nou. Acesta este cazul seriilor TTL clasice (seriile 5474 clasice) din care mai sunt disponibile actualmente doar cteva module funcionale.

11

Noiuni introductive

Figura 1.6

Ciclul de via al seriilor standardizate de circuite numerice

Din figura 1.6 (provenind din [43]) se poate observa c dintre seriile standardizate realizate n tehnologie bipolar, n 2004 doar seriile TTL moderne cum ar fi ALS, F (AS) i eventual familia ECL (ne figurat deoarece nu este produs de Texas Instruments, de la care provine informaia) sunt n faza de maturitate, restul seriilor bipolare fiind n faza de declin. Singura familie CMOS aflat n faza de declin este cea cunoscut sub numele de seria 4000 (CD4000), care este de fapt i prima serie standardizat de circuite CMOS aprut la sfritul anilor 70.

12

Circuite integrate numerice. Aplicaii n mecatronic

Capitolul 2 Circuite integrate numerice CMOS moderne 2.1 Introducere


n ultimii 30 de ani tensiunea standard de alimentare pentru circuitele numerice a fost de 5V. Valoarea respectiv a rezultat ca un compromis istoric n ce privete procesul tehnologic utilizat, caracteristicile circuitelor bipolare (TTL), puterea disipat i marginile de zgomot de curent continuu. Odat cu rspndirea exploziv a circuitelor CMOS de la nceputul anilor 80 ea a fost adoptat, la nceput, i ca tensiune standard de alimentare pentru acestea. Mai mult, pentru a ajuta tranziia de la TTL la CMOS, au aprut o serie de circuite cu nivele de intrare compatibile TTL (cu VIH min =2.0 V, VIL max =0.8V), valori artificiale pentru structurile CMOS, care sunt mult mai simetrice dect cele bipolare. Cerinele din ce n ce mai stringente pentru viteze mai mari, densiti mai mari de integrare la costuri mai sczute i puteri disipate mai mici au fcut ca productorii de circuite integrate s nceap s produc circuite cu dimensiuni minime ale tranzistoarelor CMOS din ce n ce mai mici, respectiv i cu grosimi ale stratului izolator de gril mai mici i cu tensiuni de strpungere mai mici pentru acesta. De la dimensiuni minime de 2um la nceputul anilor 80 s-a ajuns astzi la dimensiuni sub 0.1um ([26]). Att proiectanii de sisteme (utilizatorii) ct i productorii de circuite integrate au putut s beneficieze de aceste procese tehnologice superioare cu un pre: tensiunea de alimentare a trebuit s coboare. De exemplu, realizat un proces tehnologic de 0.35um un circuit CMOS nu mai poate funciona fiabil la o tensiune de alimentare de 5V i va fi alimentat la 3.3V. Un circuit CMOS realizat cu un proces tehnologic de 0.25um nu va funciona fiabil alimentat la 3.3V i va trebui s se treac la 2.5V, .a.m.d. Cel mai important beneficiu al scderii tensiunii de alimentare este scderea puterii disipate (i a cantitii de cldur corespunztoare), proporional cu ptratul tensiunii de alimentare. Astfel, un circuit alimentat la 3.3V va consuma jumtate din puterea consumat cnd el este alimentat la 5V, iar unul alimentat la 2.5V va consuma doar un sfert. Din pcate, aceast scdere este compensat de creterea inevitabil a puterii disipate la nivelul circuitului datorat creterii complexitii circuitului (o consecin a creterii gradului de integrare) i a posibilitii utilizrii lui la frecvene mai mari. Pentru un utilizator care dorete sa beneficieze de avantajele migraiei la tensiuni de alimentare mai sczute apar noi probleme, din care cele mai importante sunt ([16], [26], [43]): - utilizarea de surse multiple de alimentare, generarea lor i distribuirea tensiunilor la nivelul sistemului; de regul, tensiunile mai mici sunt

13

Circuite integrate numerice CMOS moderne

obinute pe baza tensiunilor mai mari, folosind diverse variante de stabilizatoare de tensiune (uzual de tip LDO Low Drop Out ) - interfaa electric ntre circuitele CMOS cu tensiuni de alimentare diferit - secvenierea corect a pornirii/opririi surselor de alimentare diferite, pentru a evita alimentarea pirat i fenomenul de latch-up (zvorre) tipice tehnologiei CMOS n figura 2.1 ([43]) sunt prezentate familiile de circuite CMOS ale firmei Texas Instruments, punndu-se n eviden posibilitile de migrare la tensiuni de alimentare sczute precum i timpii de propagare obtenabili, odat cu progresul tehnologiei CMOS.

Figura 2.1 Instruments

Evoluia tensiunii de alimentare pentru familiile de circuite Texas

n continuare se va face o prezentare succint a acestor familii (serii), suficient pentru utilizatorul avizat al circuitelor CMOS clasice (cum ar fi seriile 4000 au 74HC/HCT).

2.2 Seriile cu tensiune de alimentare redus (Low Voltage)


Seria 74AHC/AHCT Familia Advanced High-Speed CMOS (74AHC/AHCT) a fost destinat nlocuirii directe a familiei High-speed CMOS (74HC/HCT), n condiiile obinerii unor performane superioare de regim static i dinamic. Exist posibilitatea trecerii i la tensiunea de alimentare redus Vcc=3.3V deoarece performanele familiei AHC sunt specificate i pentru aceast tensiune ([34]).

14

Circuite integrate numerice. Aplicaii n mecatronic

Pentru seria AHC tensiunea de alimentare nominal este n plaja Vcc = 2V ..5.5V, caracteristicile fiind specificate att pentru Vcc=5V ct i pentru Vcc=3.3V. Pentru seria 74AHCT valoarea recomandat a tensiunii de alimentare este Vcc = 4.5V ..5.5V. Tensiunile de prag sunt la jumtate din tensiunea de alimentare Vp=Vcc/2 pentru 74AHC i respectiv n jur de Vp=1.4V-1.5V la 74AHCT. n plus, exist un mic histerezis al caracteristicii statice de transfer, de cca. 100mV la AHC i cca. 300mV la AHCT, ducnd la o imunitate crescut la perturbaii, precum i posibilitatea utilizrii unor semnale de intrare cu fronturi lente. Un circuit din seria AHC alimentat la Vcc=3.3V poate fi comandat cu tensiuni de intrare pan la 5V, deoarece dioda ctre Vcc din circuitul de intrare a fost nlturat ([42]). Puterea disipat de regim static este de circa trei ori mai mic dect la seriile 74HC(T). Curenii de ieire sunt IOH / IOL = 8 mA la Vcc=5V i IOH / IOL 4 mA la Vcc= 3.3V. Timpii de propagare tpd sunt n jur de 5nsec (la Vcc=5V), de cca. 3 ori mai mici dect la familia HC, la aceiai tensiune de alimentare. Diversitatea modulelor funcionale este asemntoare celei din seria 74HC(T). Evident, exist i compatibilitate pin la pin cu seriile generice 74. Seria 74LV Iniial familia 74LV (Low Voltage) a fost destinat pentru aplicaii cu tensiunea de alimentare nominal Vcc=3.3V. Ulterior familia a fost caracterizat i pentru operarea la tensiunea nominal Vcc=5V. Are un consum de regim static mai mic dect seriile 74AHC(T). Nivelele de intrare sunt CMOS (funcie de tensiunea de alimentare). Caracteristicile generale ale familiei sunt: Vcc =1.0V-3.6V (maxim 5.5V) ; IOH / IOL = 8 mA (Vcc=3.3V) tpd = 9nsec (Vcc=3.3V) Seria 74LVC Familia 74LVC este una optimizat pentru funcionarea la tensiunea de alimentare nominal de 3V(3.3V). Este realizat pe baza unui proces tehnologic mai performant dect seria LV (0.8um fata de 2um la 74LV). Nivelele de intrare sunt CMOS. Caracteristicile generale ale familiei sunt: Vcc =1.2V-3.6V ; IOH / IOL = 24 mA (Vcc=3.3V) tpd=5nsec (Vcc=3.3V) Seria 74ALVC Familia 74ALVC (Advanced Low-Voltage CMOS) este cea mai performant serie standardizat, cu tensiunea de alimentare nominal de Vcc=3.3V. Seria ALVC cuprinde i o gam nou de module funcionale destinate interfeei cu circuite de memorie SDRAM. Circuitele destinate cuplrii la
15

Circuite integrate numerice CMOS moderne

magistral (bus driver, bus receiver, bus transceiver) au o serie de caracteristici noi cum ar fi rezistenele serie pe ieire (x10 Ohmi) destinate amortizrii oscilaiilor pe linia de transmisie. Rezistenele respective au i rolul de uura adaptarea la impedana caracteristic a liniei de transmisie ([]). Pentru intrare exist o caracteristic special dat de un circuit numit Bus hold. Circuitul suplimentar de tip Bus hold de pe intrare fixeaz nivelul logic al intrrii flotante(n gol) la ultima valoare logic valid. Astfel, nu mai sunt necesare rezistoare pentru fixarea potenialului intrrii flotante. Nivelele de intrare sunt CMOS. Caracteristicile generale ale familiei sunt: Vcc =1.2V-3.6V ; IOH / IOL = 24 mA (Vcc=3.3V) tpd = 2nsec (Vcc=3.3V) Seria 74AVC Familia AVC (Advanced Very-low-voltage CMOS) a fost prima care a permis obinerea unor timpi de propagare mai mici de 2nsec la o tensiune de alimentare Vcc=2.5V ([40]). Se ntlnesc i aici caracteristici cum ar fi: circuite de tip Bus Hold pe intrare, rezistene serie de amortizare pe ieire. n plus, obinerea timpilor foarte redui de propagare la tensiuni mici de alimentare a fost posibil datorit prezentei unui nou circuit (pe ieire) numit DOC (Dynamic Output Control)- control dinamic al ieirii. Caracteristicile generale ale familiei sunt: Vcc =1.2V-3.3V; IOH / IOL = 8 mA (Vcc=2.5V) tpd=1.7 ns (Vcc= 3.3 V); tpd=1.9 ns (Vcc= 2.5 V); tpd=3.2 ns (Vcc= 1.8 V) Seria 74AUC Familia Advanced Ultra low voltage CMOS(AUC) este optimizat pentru funcionarea la tensiunea de alimentare de Vcc=1.8V. Nivelele de intrare sunt CMOS, iar valoarea maxim a tensiunii de intrare este de 3.6V, astfel c intrrile pot fi comandate de circuite alimentate la Vcc=3.3V. Seria 74 AUC utilizeaz i un circuit special pe ieire, numit circuit de tip Ioff, care blocheaz (off) ieirea atunci cnd modulul nu este alimentat, astfel nct s nu existe o circulaie semnificativ de curent prin ieirea circuitului nealimentat (Ioff=Iout<10uA). Caracteristica respectiv este valorificat in aplicaii de tip liveinsertion. Primele module disponibile au fost in formatul numit Little Logic, avnd una, dou sau maxim trei pori per modul. Caracteristicile generale ale familiei sunt: Vcc = 0.8V-2.7V ; IOH / IOL = 8 mA (Vcc=1.8V) tpd=1.5nsec

2.3 Familiile de circuite BiCMOS


Tehnologia propriu-zis va fi descris n paragraful 2.5, n acest paragraf fiind prezentate doar familiile (seriile) relevante.
16

Circuite integrate numerice. Aplicaii n mecatronic

Seria 74ABT Familia ABT (Advanced BiCMOS Technology) este a doua generaie de circuite BiCMOS realizat pe baza unui proces tehnologic avansat (0.8um) fiind destinat cuplrii la magistral. Nivelele de intrare sunt compatibile TTL. Pentru toate familiile BiCMOS este definit un curent de scurtcircuit al ieirii IOS de valoare mare sau foarte mare (x100mA); la 74ABT el este de peste 100mA. Sunt prevzute i rezistene serie cu ieirea pentru amortizarea oscilaiilor pe linie. Exist module cu variante speciale de ncapsulare (Widebus, Widebus+) care permit reducerea zgomotului generat de variaia rapid a curenilor de alimentare, prin utilizarea mai multor pini pentru mas i alimentare. Unele din modulele pentru cuplarea la magistral au pe intrare circuite de tip Bus Hold. Circuitele din aceasta familie pot fi utilizate in aplicaii de tip liveinsertion, existnd module prevzute cu circuite de tip Ioff (cu un curent Ioff maxim de 0.1mA). Caracteristicile generale ale familiei sunt: Vcc =4.5V-5.5V; IOH / IOL = -32mA / 64 mA (Vcc=3.3V) tpd=3nsec OBSERVAIE Exist i o serie numit 74ABTE/ETL Advanced BiCMOS Technology/Enhanced Transceiver Logic, cu caracteristici garantate mai bune: margini de zgomot mai mari, IOH = 80mA, circuite specializate pe intrare (Bus hold) i ieire (Ioff, rezistene serie). Seria a fost destinat implementrii unui tip anume de magistral (VME). Seria74FCT Familia Fast CMOS Technology a fost introdus pe pia de firma Harris Semiconductor, fiind actualmente produs tot de Texas Instruments. Este o familie BiCMOS cu nivele de intrare compatibile TTL i performane asemntoare seriei 74ABT. n plus fa de seria 74ABT, exist i module funcionale de tip circuit bistabil multiplu (x16). Seria 74BCT Denumirea familiei provine de la BiCMOS Technology. Sunt destinate implementrii unei tehnici numit comutare pe und incident, pentru impedane de linie joase, de pn la 25 Ohmi. Au un curent de scurtcircuit foarte mare (pn la 200mA). n serie exista module specializate pentru interfaa cu circuitele de memorie. (SDRAM,etc.). Puterea disipat este foarte mic atunci cnd modulele nu sunt active. Caracteristicile generale ale familiei sunt: Vcc =4.5V-5.5V; IOH / IOL = 12mA / -12 mA (Vcc=5V) tpd=4nsec 74LVT Familia Low-Voltage BiCMOS Technology este realizat pe baza unui proces tehnologic de 0.72um. Este destinat aplicaiilor folosind tensiunea de
17

Circuite integrate numerice CMOS moderne

alimentare nominal de 3.3V. Nivelele de intrare sunt compatibile TTL. Tensiunea maxim de intrare este de 7V, astfel ca modulele din aceast serie pot fi utilizate i ca translatoare de nivel de la 5V la 3.3V. Modulele existente sunt pin la pin compatibile cu cele din seria ABT, oferind o cale simpl de migrare de la 5V la 3.3V. Exist module avnd circuite de tip Bus Hold pe intrare i respectiv rezistene de amortizare pe ieire. Au caracteristici care le fac adecvate pentru aplicaii de tip live-insertion. Pentru etajul de ieire exist un circuit de tip Ioff i n plus se mai ofer un circuit numit Power-Up 3 State (PU3S). Prezena acestui circuit face ca pe durata conectrii (power up) sau a deconectrii (power down) sursei de alimentare ieirile s fie forate n starea High-Z. Caracteristicile generale ale familiei sunt: Vcc =2.7V-3.6V; IOH / IOL = 64 mA /-32mA (Vcc=3.3V) tpd = 4nsec (Vcc=3.3V) Seria 74ALVT Familia Advanced Low-Voltage BiCMOS Technology este realizat cu un proces tehnologic de 0.6um. Modulele existente sunt pin la pin compatibile cu cele din seriile ABT i LVT. Familia ALVT ofer o cale comod de migrare la tensiuni reduse de alimentare deoarece una din caracteristicile interesante ale familiei ALVT este c pot funciona cu tensiuni de alimentare de 3.3.V sau 2.5V, cu tensiuni de intrare maxime de pan la 7V. Astfel modulele din aceasta familie pot fi utilizate i ca translatoare de nivel pentru interfa intre familii alimentate la 5V i familii cu intrri care tolereaz doar nivele de 3.V sau 2.5V. Alte caracteristici curente: circuite Bus Hold, rezistene de amortizare, pot fi utilizate n aplicaii live-insertion (exist circuite Ioff i PU3S). n plus, exist o caracteristic numit Auto 3-State trecerea automat a ieirii n starea High-Z atunci cnd ieirea este conectat la 5V (tensiunea de alimentare fiind 3.3V sau 2.5V). Caracteristicile generale ale familiei sunt: Vcc =2.3V-3.6V; IOH / IOL = 64 mA /-32mA (Vcc=3.3V); IOH / IOL = 24 mA /-12mA (Vcc=2.5V) tpd=2.5nsec(Vcc=3.3V); tpd=3.5nsec (Vcc=2.5V) Seria 74ALB Familia Advanced Low-voltage BiCMOS este i ea realizat cu un proces tehnologic de 0.6um. Este optimizat pentru tensiunea de alimentare de 3.3V. Sunt disponibile doar un numr limitat de module destinate conectrii la magistral. Exist numai module cu variante speciale de ncapsulare (Widebus, Widebus+) care permit reducerea zgomotului generat de variaia rapid a curenilor de alimentare, prin utilizarea mai multor pini pentru mas i alimentare. Caracteristicile generale ale familiei sunt:
18

Circuite integrate numerice. Aplicaii n mecatronic

Vcc =3V-3.6V; IOH / IOL = 25 mA /-25mA(Vcc=3.3V) tpd=2 nsec (este mai rapid dect ALVT)

2.4 Circuite BiCMOS


Progresele tehnologice au fcut posibil combinarea tehnologiei unipolare CMOS i a tehnologiei bipolare, la nivelul aceluiai circuit monolitic, la un pre de cost rezonabil. Procesul tehnologic numit BiCMOS (Bipolar CMOS) ofer o serie ntreag de noi oportuniti deoarece el combin densitatea superioar de integrare specific circuitelor CMOS cu curenii mari de ieire care pot fi obinui la circuitele bipolare. Dezavantajele sunt complexitatea mrit a porilor i preul de cost mai mare ([17], [26], [43]).

2.4.1 Inversorul BiCMOS


Principala referin bibliografic folosit masiv la elaborarea acestui paragraf este [27], capitolul respectiv din carte fiind unul din cele mai bune materiale didactice despre acest subiect. a. Funcionare Exist mai multe variante de inversoare BiCMOS, dar din acestea a fost aleas o variant simplificat, care s permit ilustrarea doar a principalelor proprieti i caracteristici.

Figura 2.3

Schema simplificat a inversorului BiCMOS

19

Circuite integrate numerice CMOS moderne

Schema inversorului este prezentat n figura 2.3, n figura 2.4 fiind prezentate i seciunile de circuit relevante pentru cele dou stri ale ieirii. Inversorul este alimentat la tensiunea VDD, Vin identificnd borna de intrare i Vout borna de ieire. Se utilizeaz simboluri diferite pentru rezistoare: cele corespunztoare unei ci dren-surs de transistor MOSFET i cele propriu-zise. Cnd tensiunea de intrare Vin este n 1 (=VDD) tranzistorul NMOS M1 este n conducie, aducnd i tranzistorul bipolar T1 n conducie, n timp ce tranzistorul PMOS M2 i tranzistorul bipolar T2 sunt blocai. Rezultatul este o ieire n 0. Cnd intrarea este n 0 (V in=0), M 2 i T 2 vor fi n conducie, n timp ce M1 i T1 vor fi blocai, rezultnd un nivel 1 la ieire. n regim static T1 i T2 nu sunt niciodat n conducie simultan, neexistnd o cale de curent de la VDD la mas, i nici consum.

IOL
IOH

Figura 2.4

Ieirea inversorului BiCMOS n cele dou stri posibile

Comparativ cu familiile TTL i CMOS, avem un circuit care are caracteristicile de intrare i alimentare ale unui circuit CMOS, i caracteristicile de ieire ale unui circuit TTL cu ieire totem-pole. Etajul de intrare i etajul intermediar de la circuitul TTL au fost nlocuite cu un circuit CMOS. Rezistenele R1 i R2 sunt necesare pentru a evacua ct mai repede sarcina de baz a tranzistoarelor bipolare, atunci cnd vrem s le blocm. De exemplu, cnd intrarea comut din 1 n 0, M1 se blocheaz primul. Pentru a-l bloca i pe T1 trebuie evacuat sarcina din baz, lucru care se ntmpl prin rezistena R1. Prezena rezistenelor R1 i R2 are efecte pozitive nu numai asupra timpilor de comutaie dar i asupra consumului (puterii disipate). n regim dinamic, exist un moment de timp n care T1 i T2 conduc simultan, existnd i o cale de curent de la VDD ctre mas (la fel ca la circuitele TTL). Vrful de curent conteaz att pentru puterea disipat ct i ca surs potenial de zgomot. Astfel, blocarea celor doi tranzistori bipolari trebuie s se fac cat mai repede posibil. Din modul de funcionare rezult i anumite informaii asupra aspectului caracteristicii statice de transfer. n primul rnd, ecartul (diferena) dintre cele dou nivele logice la ieire este mai mic dect la circuitele CMOS (mai mic dect tensiunea de alimentare VDD).
20

Circuite integrate numerice. Aplicaii n mecatronic

Cu intrarea n 0(Vin=0), tranzistorul PMOS M2 este n conducie, acionnd ca o rezisten care leag baza lui T2 la VDD. T2 este n conexiune repetor pe emitor, astfel c tensiunea de ieire Vout se poate ridica pn la maxim Vout =VOH = VDD VBEon. = VDD VD = VDD 0.7V (VD este o cdere de tensiune pe o jonciune pn polarizat direct). Cnd intrarea este 1 (Vin= VDD), tranzistorul NMOS M1 este n conducie. T1 este n conducie atta timp cat Vout > VBEon. Cnd Vin coboar sub VBEon, T1 se blocheaz. Astfel avem Vout = VOL = VBEon = VD =0.7V . Diferena ntre cele dou nivele logice pe ieire va fi VDD - 2VBEon, lucru care micoreaz marginea de zgomot de curent continuu, dar poate duce i la un consum mrit.

Figura 2.5

Conexiunea intrare-ieire BiCMOS

n figura 2.5 este prezentat o ieire de inversor BiCMOS (cu intrarea proprie n 0 i ieirea n 1) conectat la o intrare de inversor BiCMOS similar. Tensiunea de ieire VOH = VDD VBEon nu reuete s blocheze sigur (complet) tranzistorul PMOS M2 deoarece VBEon are o valoare apropiat de tensiunea de prag a tranzistorului PMOS. Ca urmare, va exista un curent rezidual de alimentare Irezidual n regim static i deci un consum mrit de regim static. Eliminarea acestui dezavantaj se poate face doar pe seama mririi complexitii circuitului. Utilizarea rezistoarelor nu este foarte practic pentru o realizare monolitic, astfel ca rezistenele R1 i R2 sunt pn la urm implementate cu elemente active (tranzistoare MOS) care sunt aduse n conducie doar cnd este nevoie. n figura 2.6 sunt prezentate trei variante de implementare a inversorului generic de pan acum. Variantele (a) i (b) sunt asemntoare, avnd acelai dezavantaj al ecartului micorat ntre nivelele logice la ieire. Acest dezavantaj este eliminat la varianta (c), care folosete din pcate un rezistor, ducnd la creterea preului de cost.

21

Circuite integrate numerice CMOS moderne

Figura 2.6

Variante practice de inversoare BiCMOS

Pentru inversorul din figura 2.6 (b), n figura 2.7 se prezint i o caracteristic static de transfer (CST) obinut prin simulare SPICE (caracteristica real este, n linii mari, similar). Tensiunea de alimentare este VDD=5V. Forma complicat este datorat interaciunii complexe ntre dispozitivele active diverse. Pe aceiai caracteristic a fost reprezentat i tensiunea n baz a tranzistoarelor T1 (VbazaT1) i respectiv T2 (VbazaT2). n regiunea de tranziie dintre 2V i 3.5V, n realitate, nici unul din cei doi tranzistori bipolari nu este n conducie. Tranzistorul PMOS M1 intr n conducie doar dup ce M3 se blocheaz i cnd VbazaT2 a cobort suficient sub Vout. Aceasta face ca T1 s intre n conducie i s creeze o cdere suplimentar a tensiunii de ieire, n jurul lui Vin=3.5V. Din figura 2.7 rezult urmtoarele nivele logice, tensiune de prag i margini de zgomot: VOH = 4.64 V; VOL = 0.05 V VIL = 1.89 V; VIH = 3.6 V VP = 2.34 V MZL = 1.84 V; MZH = 1.04 V Modul n care parametrii de mai sus au fost extrai este oarecum relativ, datorit formei complexe a caracteristicii (existenei mai multor puncte de frngere), dar valorile sunt apropiate de cele din foaia de catalog a unui astfel de circuit.

22

Circuite integrate numerice. Aplicaii n mecatronic

Figura 2.7

CST pentru inversorul BiCMOS (simulare SPICE)

b. Timpul de propagare n linii mari, timpul de propagare pentru inversorul BiCMOS are dou componente: una legat de aducerea n conducie sau blocare a tranzistoarelor bipolare i una legat de ncrcarea/descrcarea sarcinilor capacitive. Una din proprietile interesante ale structurii inversorului BiCMOS este c tranzistorii T1 i T2 nu se satureaz, ei fiind fie blocai, fie conducnd n regim activ normal (r.a.n). Pentru un 1 la ieire, T2 rmne n r.a.n atunci cnd Vout=VOH. Tranzistorul PMOS M2 acioneaz ca o rezisten prin care potenialul colectorului este ntotdeauna mai mare dect al bazei, T2 fiind i n conexiune colector comun. Pentru un 0 la ieire, cnd Vout=VOL , M1 acioneaz ca o rezisten ntre colectorul i baza lui T1, evitndu-se saturarea acestuia. Astfel sarcina de baz este meninut la o valoare minim (nu exist sarcin n exces), aducerea n conducie sau blocare fcndu-se foarte rapid. Pentru cea de a doua component care este cea dominant, se va presupune c efectul capacitii de sarcin CL este cel mai important. Pentru o tranziie a ieirii din 0 n 1 (figura 2.8 a, tpLH) tranzistorul T1 este blocat rapid, sarcina de baz fiind evacuat prin R1. CL se ncarc cu un curent care este dat de cascadarea lui M2 i T2. Curentul de surs al lui M2 este curent de baz pentru T2, fiind multiplicat cu F pentru T2 n r.a.n. Astfel curentul de ncrcare are valori consistente: (F + 1) (V DD - V BEon - V out ) / R DS M2

23

Circuite integrate numerice CMOS moderne

Pentru o tranziie a ieirii din 1 n 0 (figura 2.8 b, tpHL) tranzistorul T2 este blocat rapid, sarcina de baz fiind evacuat prin R2. Combinaia M1-T1 acioneaz tot ca un multiplicator de curent, curentul de descrcare fiind: (F + 1) (V out - V BEon ) / R DS M1 presupunnd ca R DS M1 << R1.

Figura 2.8

Comutarea ieirii inversorului BiCMOS

Multiplicarea de curent pus n eviden face ca ieirea inversorului BiCMOS s aib o capacitate mult mai mare de a absorbi/debita curent dect inversorul CMOS. c. Puterea disipat Din punct de vedere al puterii disipate comportarea unui inversor BiCMOS este foarte asemntoare cu cea a unui inversor CMOS. Puterea de regim static este foarte mic, iar cea dinamic este dat, n principal, de ncrcarea/descrcarea sarcinii capacitive. La sarcini capacitive mici puterea dinamic proprie porii este mai mare dect la CMOS datorit complexitii sporite. Porile BiCMOS au o comportare mai avantajoas din punct de vedere al puterii disipate, pentru sarcini capacitive mari i foarte mari.

2.4.2 Pori BICMOS


Realizarea de pori BiCMOS pe baza structurilor de inversoare prezentate este elementar. n figura 2.9 este prezentat implementarea simplificat a unei pori NAND cu 2 intrri. Funcia logic propriu-zis este implementat ntotdeauna n tehnologie CMOS.
24

Circuite integrate numerice. Aplicaii n mecatronic

Figura 2.9

Poart NAND BiCMOS

Exemple de familii (serii) logice realizate n tehnologie BiCMOS au fost prezentate n paragraful anterior: 74ABT, 74ABTE, 74BCT, 74FCT, 74LVT, 74ALVT, 74ALB, etc. Unele din aceste serii sunt destinate i utilizrii la tensiune de alimentare sczut (cu Vcc<5V). Ca o observaie general se poate meniona faptul ca diversitatea funcional a modulelor disponibile n aceste serii BiCMOS este mic, comparativ cu alte serii CMOS, ele cuprinznd majoritar circuite destinate cuplrii la magistral (de tip bus driver, bus transceiver, etc.), acolo unde se valorific ntr-adevr trsturile pozitive ale familiei: putere disipat similar circuitelor CMOS dar cu cureni de ieire mari pentru comanda ct mai rapid a unor sarcini capacitive importante ([17],[43],[47]).

2.5 Reelele de diode de protecie


Este bine ca utilizatorul s cunoasc faptul c orice circuit integrat numeric(nu numai cele realizate n tehnologie CMOS) are i o reea de diode (figura 2.2), de naturi diferite, conectate la intrare, ieire i ctre bornele de alimentare. Rolul acestor diode va fi prezentat n continuare, ntr-un context general ([11], [16], [26], [36], [37]). D1: Dioda este prezent la majoritatea circuitelor CMOS pentru a asigura protecie la descrcri electrostatice (ESD protection). Limiteaz superior tensiunile pozitive aplicate pe intrare. Aceast diod nu exist la circuitele ABT, LVT, LVC sau AHC/AHCT. D2: Este o diod parazit rezultat din construcia intern a circuitului. Are un rol n protecia la descrcri electrostatice. La majoritatea circuitelor integrate numerice mai exist nc o diod suplimentar (clamp diode), n paralel,
25

Circuite integrate numerice CMOS moderne

realizat intenionat, pentru limitarea supracreterilor negative ale semnalelor de intrare care pot aprea datorit reflexiilor pe linie.
Vcc (VDD)

Intrare

Ieire

Circuit intern

GND (Mas)

Figura 2.3

Reeaua de diode asociat oricrui circuit integrat numeric

D3: La circuitele CMOS are un rol n protecia la descrcri electrostatice. Cele mai multe circuite bipolare au o diod parazit n acest punct ca rezultat al construciei interne. O excepie sunt circuitele cu ieire de tip colector/dren n gol (open collector/drain) sau tri-state, la care, prin modificri ale circuitului, aceast diod este desfiinat astfel nct s nu existe o cale de curent ctre ieire n starea High-Z sau cnd tranzistorul inversor este blocat. D4: Aceasta diod este prezent la toate circuitele numerice. n cele mai multe dintre cazuri este dioda colector-substrat sau dren-substrat a tranzistorului inferior (inversor) din etajul de ieire. La circuitele bipolare (TTL Schottky) mai este prezent, n paralel, o dioda Schottky suplimentar, cu rol n limitarea supracreterilor negative pe ieire. La circuitele CMOS mai pot exista i alte diode n acest punct pentru protecia la descrcri electrostatice.

26

Circuite integrate numerice. Aplicaii n mecatronic

Capitolul 3 Circuite de memorie moderne


Tehnologiile actuale de realizare a circuitelor de memorie semiconductoare se pot clasifica n dou mari categorii, prezentate n figura 3.1 reprodus dup [13].

Figura 3.1

Tehnologiile specifice de realizare a circuitelor de memorie

Prima categorie este cea a memoriilor nevolatile (non-volatile memory). n mod tradiional ele sunt folosite mai ales ca memorii ROM deoarece ciclurile de scriere (programare) sunt mai complicate i dureaz mai mult. In aceast categorie intr tehnologii ROM consacrate cum ar fi EPROM, EEPROM i Flash EPROM. A doua categorie o reprezint memoriile volatile (volatile memory), n aceasta categorie intrnd, tot n mod tradiional, memoriile RAM. La acestea ciclurile de scriere au aceiai complexitate i durat ca cele de citire. Combinarea acestor caracteristici pozitive cu ne volatilitatea a fost mereu o provocare tehnologic. Obinerea unor memorii RAM nevolatile se poate face prin alimentare de la o baterie cu Li (inclus n capsula circuitului) n cazul BBSRAM sau prin combinarea tehnologiilor RAM i EEPROM n cazul NVRAM (NOVRAM). n acest caz coninutul RAM-ului este copiat n memoria EEPROM fiind memorat pe durata absentei tensiunii de alimentare i este restaurat din EEPROM n RAM, la revenirea tensiunii de alimentare. Ambele tehnologii sunt destul de complicate, scumpe i limitate n capacitatea de memorare.

27

Circuite de memorie moderne

Pentru a sublinia importana categoriei de circuite de memorie care va face obiectul acestei prezentri, n graficul din figura 3.2 (reprodus dup [13]) sunt descrise cotele de pia (exprimate n miliarde de dolari-B$), i evoluia acestora, pentru trei mari categorii de circuite de memorie: SRAM (RAM static), DRAM (RAM dinamic) i FLASH.

Figura 3.2

Cotele de pia ale principalelor categorii de circuite de memorie

3.1 Circuite de memorie FLASH


La fel ca la un circuit clasic UV-EPROM (UV-UltraViolet, tergere cu ultraviolete) o celul de memorare EEPROM are la baz un tranzistor cu dou grile, unde o gril zis flotant (floating gate) exist ntre grila propriu-zis, de control (control gate) i substratul P (P-substrate). O gril flotant este perfect izolat de un izolator un strat de bioxid de siliciu SiO2-sticl (silicon dioxide) astfel c electronii injectai n gril rmn acolo i cnd circuitul nu mai este alimentat. Pe scurt, acesta este mecanismul de memorare i pentru o memorie FLASH EEPROM. Tot la fel ca la UV-EPROM, un circuit FLASH EEPROM este programat prin injecia de electroni fierbini n grila flotant i este ters prin emisia de cmp din aceiai gril. ntr-un circuit FLASH EEPROM tergerea se face pentru ntreg circuitul simultan, pe cnd la un EEPROM propriu-zis tergerea se face octet cu octet. Dac se elimin facilitatea de tergere octet cu octet, o celul de memorare poate fi realizat folosind un singur tranzistor. i la un circuit UV-EPROM celula de memorare are un singur tranzistor i tergerea se face simultan pentru ntreg circuitul, prin expunere la radiaii ultraviolete. n acest sens,
28

Circuite integrate numerice. Aplicaii n mecatronic

din punct de vedere al funcionalitii, un FLASH EEPROM este asemntor unui circuit UV-EPROM, cu excepia modalitii de tergere. Pentru toate circuitele FLASH exist o aa zis structur logic, circuitul fiind mprit in mai multe blocuri de date (cu dimensiuni tipice de 16Kocteibytes sau mai mari), iar blocurile sunt mprite ntr-un numr fix de pagini de date. O pagin are la rndul ei un anumit numr de octei-bytes, de obicei de ordinul sutelor sau mai mare. tergerea se face de fapt nu la nivelul ntregului circuit, ci la nivelul unuia sau mai multor blocuri de date. Pentru nelegerea acestei structuri logice i utilizarea ei corect (i nu numai!) este obligatorie consultarea foilor de catalog ale circuitului respectiv.

3.1.1 Circuitele NOR Flash


Structurile tradiionale de memorii realizeaz accesul aleator prin conectarea in paralel a celulelor de memorare la liniile de bit (BL). Astfel biii corespunztori cuvintelor diferite sunt conectai i accesai n paralel. Aceasta caracteristic se ntlnete i la structura Flash NOR, prima aprut in ordine cronologic. n figura 3.3 (reprodus dup [15]) se observ c liniile de bit (BL0, BL1,..), care formeaz fiecare cuvnt, sunt realizate prin conectarea comun, n dren (D), a tranzistoarelor cu gril flotant. La nivelul fiecrei linii de bit este realizat de fapt un SAU cablat (OR-wired). Un bit n 0 va trage toat linia de bit BL n 0, indiferent de starea celorlali bii. Sursa (S) a tuturor tranzistoarelor este conectat n acelai punct (Source), linia respectiv servind de fapt la activarea ntregii matrici de memorie. Liniile de cuvnt (WL0, WL1, WL2, ..) realizeaz selecia unuia din cuvinte, fiind conectate la grilele de control. n momentul activrii unui cuvnt, prin linia corespunztoare WL, un tranzistor n conducie (programat) din linia de bit BL va trage potenialul acesteia n 0. n figur nu este prezentat sarcina activ (pull-up) existent pentru fiecare linie de bit. Aceast modalitate de conectare are avantaje majore din punct de vedere al timpului de acces aleator (linia de bit se prezint ca o poart NOR, tranzistoarele fiind conectate n paralel). Din pcate ea prezint i un dezavantaj din punct de vedere al realizrii tehnologice, i anume presupune o suprafa mare ocupat de celulele de memorie la nivelul microcircuitului, datorit configuraiei particulare de interconexiuni care trebuie realizate. Cu alte cuvinte, este neeconomic din punct de vedere al preului de cost per bit.

29

Circuite de memorie moderne

Figura 3.3

Structura circuitului NOR FLASH

Figura 3.4

Tranzistorul utilizat ntr-un circuit NOR FLASH

30

Circuite integrate numerice. Aplicaii n mecatronic

n figura 3.4 (reprodus dup [15]) este prezentat structura de baz a unui tranzistor cu grila flotant folosit ntr-un circuit NOR Flash. Grila de control (control gate) i cea flotant (floating gate) sunt realizate din siliciu policristalin (poly Si) conductor. Programarea se face prin injecia de electroni fierbini (CHE- Channel Hot Electron injection), iar tergerea prin efectul de tunel Fowler-Nordheim (Fowler-Nordheim FN-tunneling). La fel ca la UV-EPROM programarea unui bit nseamn modificarea tensiunii de prag a tranzistorului, iar un bit programat este n 0, pe cnd unul neprogramat este n 1. O meniune important care trebuie fcut relativ la circuitele FLASH NOR este c la acestea, la livrare, se garanteaz c toate locaiile de memorie sunt bune i au acelai numr garantat de cicluri de tergere-programare. Mai mult, n faza de fabricaie se realizeaz un numr destul de mare de locaii de rezerv (un alt aspect neeconomic), care vor fi utilizate pentru repararea eventualelor locaii cu defecte i producerea astfel a unui circuit perfect. Timpii de acces la citire pentru majoritatea circuitelor NOR Flash sunt de cca 70nsec. Densitatea maxim la care au ajuns (2004) aceste circuite este de cca 512Mbii n condiiile folosirii unei tehnologii cu dimensiunea minim de cca 70 de nanometri.

3.1.2 Circuitele NAND Flash


O nou tehnologie FLASH (promovat iniial de Toshiba i Samsung) a cunoscut o dezvoltare dramatic n ultimii ani. Tehnologia respectiv numit NAND Flash are la baz conceptul de acces secvenial i nu aleator la informaie. Nu trebuie uitat c unul din scopurile iniiale ale acestei tehnologii a fost nlocuirea dispozitivele de memorare externe de tip hard-disk, avnd piese n micare, cu dispozitive statice de memorare (solid state mass storage), mai fiabile i cu timpi de acces la informaie mai buni. Hard-disk-ul este n esen un dispozitiv care acceseaz informaia secvenial, dei acest aspect este mascat prin intermediul aa zisului timp de acces aleator, rezultat n urma cutrii-regsirii (seek time) acestei informaii ntr-o structur de date secvenial ([22]). Exist i alte noi tehnologii FLASH, mai mult sau mai puin nrudite, cum ar fi DINOR FLASH (DIvided bit line NOR- cu linie de bit divizat) promovat de Mitsubishi, AND FLASH promovat de Hitachi sau T-Poly a firmei SanDisk ([15]). Memoria NAND Flash este o configuraie relativ nou, care reduce suprafaa ocupat de celula de memorie astfel nct s creasc densitatea de integrare (i implicit capacitatea), n condiiile scderii preului de cost per bit. O astfel de structur o fost realizat prima dat de Toshiba n 1987 prin conectarea n serie a cte opt celule de memorie (tranzistori). Dimensiunea unei celule de memorie NAND este aproape jumtate din cea a unei celule NOR. Ea este mai mic deoarece prin fiecare tranzistor va circula un curent mai mic, nefiind nevoie
31

Circuite de memorie moderne

s comande o linie de bit lung, cu capacitate proprie mare. Un alt ctig major vine i de la faptul c noua topologie de interconectare a celulelor de memorare este mult mai economic din punct de vedere al suprafeei ocupate pe microcircuit. Aproape singurul dezavantaj este c aceast structur poate fi accesat doar secvenial i este optimizat n acest sens. n figura 3.5 (reprodus dup [32]) este prezentat o astfel de structur tipic care folosete 16 tranzistoare- celule de memorare (exist i variante cu 32 de tranzistoare). n figur nu sunt prezentate i sarcinile active conectate la liniile de bit notate bit Line.

Figura 3.5

Structura circuitului NAND FLASH

Prin intermediul tranzistoarelor normale (NMOS) comandate n gril cu semnalele de tip Select (BSL-Bit Select Line, GSL-Ground Select Line) se implementeaz un mecanism de selecie a liniei de bit Bit Line i conectare la mas a irului de celule de memorare nseriate. Un tranzistor care este programat(are sarcin negativ acumulat pe grila flotant) va avea tensiunea de prag VT > 0, pe cnd unul neprogramat are tensiunea de prag VT <0. Pentru o operaie de citire a celulei identificat de semnalul de selecie cuvnt WLn ambii tranzistori de selecie sunt adui n conducie. Dac tensiunea de alimentare este, de exemplu, VDD, aceasta este folosit pentru comanda lor n gril. Grila de control a celulei din mijloc WLn este i ea selectat (tot cu VDD) n
32

Circuite integrate numerice. Aplicaii n mecatronic

timp ce celelalte grile de control sunt conectate la o tensiune mai mare dect VDD, fornd toate celulele de memorie (tranzistoarele) s conduc, indiferent dac au sau nu sarcin acumulat pe grila flotant. Dac celula n cauz (cea citit) nu a fost programat (nu exist sarcin n grila flotant) canalul va intra n conducie i va conecta linia de bit BL la mas, citindu-se un 0. Dac celula nu e programat, canalul nu intr n conducie, linia de bit meninndu-se la valoarea la care a fost prencrcat (VDD), citindu-se astfel un 1. Este evident c citirea irului de celule presupune o secven ordonat n timp a semnalelor GSL, BSL i WL0..WL15. Datorit conectrii n serie a celulelor de memorare (a tranzistoarelor) timpul de acces la primul octet de date dintr-un acces secvenial este considerabil mai mare dect acelai acces aleator la un octet pentru un circuit NOR. Chiar i aa, el este totui incomparabil mai mic dect timpul minim de cutare (seek time) la un hard disk.

Figura 3.6

Tranzistoarele utilizate ntr-un circuit NAND FLASH

n figura 3.6 (reprodus dup [15]) este prezentat structura de baz a dou din tranzistoarele adiacente cu gril flotant conectate n serie, folosite intr-un circuit NAND Flash. Regiunea surs-dren pentru cele dou tranzistoare adiacente este comun, de unde i o economie de spaiu. Grilele de control (control gate) i cele flotante (floating gate) sunt realizate din siliciu policristalin (poly Si) conductor. Att programarea ct i tergerea se realizeaz uniform, printr-un efect de tunel Fowler-Nordheim (FN-tunneling), ntre grila flotant i substrat. Timpul de acces pentru o citire aleatoare este de cca 25usec (comparat cu 70nsec la un NOR Flash) pe cnd timpul de acces pentru o citire secvenial este de cca 50nsec.
33

Circuite de memorie moderne

Avantaje evidente pentru un utilizator ale unui circuit NAND Flash sunt timpii de tergere i (re)programare scuri. De exemplu, timpul de tergere pentru un bloc de 16 koctei sau mai mare la un circuit NAND este de 2msec, comparativ cu 700msec pentru acelai bloc la un circuit NOR. Curentul de programare necesar pentru injecia de sarcin n grila flotant este mai mic deoarece se utilizeaz efectul de tunel Fowler-Nordheim (FNtunneling) att pentru tergere ct i programare. Astfel puterea necesar pentru programare rmne mic, chiar dac se programeaz simultan un numr mare de celule de memorare. Este astfel posibil s se programeze simultan un numr mare de celule i astfel timpul de programare per octet (byte) devine foarte scurt. La un circuit NAND Flash programarea se face la nivel de pagin. Comparativ, un circuit NOR Flash poate fi programat doar octet cu octet (sau cuvnt cu cuvnt) i, deoarece utilizeaz injecia de electroni fierbini (CHE) pentru programare, consum mai mult i timpul de programare este mai lung, numai dac comparaia se face la nivel de pagin. Tipic, acesta este mai lung cu un ordin de mrime (x10) dect la un NAND Flash: 4msec pentru 512 octei fa de 200usec tot pentru 512octei. n orice situaie, consumul de putere pentru orice circuit FLASH este incomparabil mai mic dect cel al unui hard-disk. Att pentru circuitele NOR ct i pentru cele NAND numrul de cicluri de tergere-programare (endurance) este limitat, existnd i noiunea de uzur (wear). Pentru a nlocui un circuit UV-EPROM, un numr de 1000 de cicluri era considerat suficient. S-a estimat ns c pentru a putea nlocui un harddisk, numrul de cicluri trebuie s fie de cel puin 106. La un circuit NOR Flash mecanismele de tergere (FN) i programare (CHE) sunt diferite, neuniforme, fluxul de electroni din gril (la tergere) sau n gril (la programare) are ci diferite i n consecin uzura asociat este mai mare. Astfel durata de via a unui circuit NOR Flash este de cca 100 000 de cicluri de tergere/programare. La un circuit NAND tergerea i programarea se face uniform, prin acelai efect de tunel FN, fluxul de electroni avnd mereu aceiai cale. Astfel durata de via e prelungit la cel puin 1000 000 de cicluri. Astfel un circuit NAND Flash va fi caracterizat inerent printr-un numr posibil mai mare de cicluri de tergere/programare. De altfel, i la unele circuite NOR Flash mai recente modalitatea de tergere a fost modificat, devenind similar cu cea de la NAND Flash. Comparativ cu un hard-disk att circuitele NOR ct i cele NAND trebuie terse nainte de scriere, lucru care nu e necesar n cazul hard-disk-ului. Astfel n cazul unui acces continuu de scriere, unde timpul de cutare (seek time) este neglijabil, un hard-disk este mai eficient. La un circuit NAND Flash, productorul NU se garanteaz c toate locaiile de memorie sunt bune i au acelai numr garantat de cicluri de tergere-programare. De asemenea se realizeaz un numr foarte mic de locaii de rezerv, care pot fi utilizate pentru repararea eventualelor locaii cu defecte,
34

Circuite integrate numerice. Aplicaii n mecatronic

rezultnd o economie n plus. La un astfel de circuit trebuie s existe un mecanism de detecie a erorilor i de gestionare al locaiilor defecte, circuitul putnd fi livrat, din considerente economice, cu locaii defecte! Mai mult este perfect posibil ca unele celule s-i epuizeze resursa de tergere-programare mai devreme dect altele, pe parcursul utilizrii circuitului. Dac o locaie de memorie este defect, sau devine defect, atunci ntreg blocul creia i aparine va fi marcat ca defect (bad block) i nu va mai fi utilizat. Un bloc pentru un circuit NAND are, n mod tipic, 16, 32 sau 64 de pagini. Pentru marea majoritate a acestor circuite o pagin are 512 octei de date, plus nc 16 octei cu coduri de control i corecie-ECC (Error Control and Correction). Codurile ECC utilizate permit, de obicei, detecia unei erori de 2 bii i corecia unei erori de 1 bit per pagin. Din punct de vedere practic, al proiectantului de sistem i utilizatorului, cea mai mare diferen ntre cele dou categorii de circuite este interfaa utilizator. Un circuit NOR Flash este foarte asemntor din punct de vedere al interfeei cu un circuit EPROM (sau SRAM), avnd linii (magistrale) de adrese i date dedicate. El poate fi mapat cu uurin, natural, n spaiul de memorie al unui sistem de calcul. Astfel, sistemul de calcul poate citi n mod natural cod memorat ntr-un NOR Flash i l poate executa. Pe de alt parte un circuit NAND Flash nu are linii de adrese dedicate. El este controlat printr-o interfa similar dispozitivelor de intrare/ieire, prin trimiterea de comenzi i adrese, printr-o magistral unic de 8 bii (tipic), ctre registrele interne de comenzi i adrese. De exemplu, echivalentul unui ciclu de citire presupune: - scrierea n registrul de comand a comenzii READ- scrierea n registrul de adrese a unei adrese formate din pn la 4 octei (bytes) - citirea propriu-zis a unei pagini de date (cu dimensiunea tipic de 528 de octei, cu 512 octei date i 16 octei coduri ECC de corecie) dintr-un registru de date. Exist i un registru de stare care este folosit pentru sincronizarea operaiilor de tergere-scriere. Circuitele mai noi au n componen i un buffer de tip SRAM n care este memorat temporar informaia care se va scrie ntr-o pagin, fiind astfel posibil suprapunerea operaiilor de citire i scriere: se poate citi o pagin n timp ce alta este scris. Funcionarea unui NAND Flash este similar altor dispozitive de intrare ieire, cum ar fi i hard-disk-ul pe care acesta dorete s-l nlocuiasc. Datorit acestei interfee indirecte un sistem de calcul nu poate executa codul memorat ntrun NAND Flash dect prin intermediul unui controler de memorie sau al unei maini secveniale dedicate. Totui, exist i un avantaj major al interfeei indirecte, i anume faptul c pin-out-ul (numrul de conexiuni externe) circuitului nu se modific funcie de capacitatea circuitului de memorie, registrul de adrese fiind interior.
35

Circuite de memorie moderne

Densitatea maxim la care au ajuns (2004) aceste circuite este de cca 8Gbii n condiiile folosirii unei tehnologii cu dimensiunea minim de 60 nanometri!([22],[46])

3.1.3 Suportul software pentru circuitele FLASH


Spre deosebire de alte circuite de memorie, pentru utilizatorul tehnologiei FLASH exist i o component software, a crei prezen este obligatorie, mai ales n cazul circuitelor NAND FLASH ([22]). Exist dou nivele diferite pentru suportul software: un nivel de baz pentru operaiile de citire-tergere-scriere i un nivel superior, pentru emularea unui hard-disk i gestionarea algoritmilor specifici tehnologiei FLASH (mrirea duratei de via, uniformizare uzur, optimizare performane, etc.). Pentru a citi informaie i eventual a executa cod dintr-o memorie NOR Flash nu este practic nevoie de nici un suport software. Pentru a executa ns cod dintr-o memorie NAND este neaprat nevoie de un driver (pe lng hardware-ul suplimentar)! Aceast categorie de drivere poart denumirea de drivere asociate tehnologiei de memorie - MTD (Memory Technology Driver/Device). Att circuitele NOR ct i cele NAND au nevoie de un driver MTD pentru operaiile de tergere i scriere. Dac un driver MTD este tot ce e nevoie pentru a terge/scrie un circuit NOR, la un circuit NAND trebuie s mai existe un suport suplimentar pentru detecia erorilor de bit i gestionarea blocurilor defecte (bad block management). Un exemplu de software de nivel superior, axat pe tehnologia NAND Flash, este cel al firmei MSystems, numit TrueFFS (True Flash File System) care realizeaz att emularea hard-disk-urilor, gestionarea blocurilor defecte ct i uniformizarea uzurii (wear leveling), uurnd n mod esenial integrarea n sistem a acestor circuite. O versiune TrueFFS exist i pentru tehnologia NOR Flash. TrueFFS este disponibil, ca surse i/sau executabile, pentru toate sistemele de operare majore cum ar fi: VxWorks, Windows CE, Linux, QNX/Neutrino, Windows XP/XPE, Windows NT/ NTE, DOS i multe altele. Cota semnificativ de pia a acestor circuite nu exprim altceva dect o gam foarte larg de aplicaii. Volumul i diversitatea aplicaiilor a crescut major odat cu dezvoltarea tehnologiei NAND Flash. Putem enumera n acest sens: terminale de telefonie mobil (cell phones), terminale GPS, camere foto i video digitale, sisteme de calcul portabile de tip PDA sau Palmtop, nregistratoare de voce (voice recorders), playere MP3, memory sticks USB (USB drives, key drives), memory cards (PC card, ATA card, Compact Flash, Multimedia card, Smart Media, Secure Digital, etc.). Este evident c i aplicaiile din domeniul mecatronicii au beneficiat din plin de existena acestor tehnologii: memoriile FLASH, n ambele variante, sunt masiv utilizate n aplicaii gen robotic, controlere CNC, automate logice programabile, etc.
36

Circuite integrate numerice. Aplicaii n mecatronic

3.2 Circuite de memorie FRAM (RAM feroelectric)


Circuitele cunoscute sub denumirea de RAM feroelectric sau FRAM au atribute care le fac ideale pentru implementarea unui circuit RAM nevolatil. Ele au fost disponibile de civa ani buni, n cantiti limitate, dar n ultimul timp, dezvoltarea exploziv a tehnologiilor specifice, nsoit de scderea preului de cost, a fcut posibil ptrunderea masiv pe piaa circuitelor de memorie. FRAM este o memorie de tip RAM, nevolatil, care folosete efectul feroelectric pentru memorarea informaiei. Acesta este un mecanism complet diferit de cele utilizate la celelalte memorii nevolatile, care folosesc un tranzistor MOS cu gril flotant. Efectul feroelectric descrie capacitatea unui material de a memora o polarizare electric i n absena cmpului electric aplicat. Arhitectural aceste circuite au o serie de caracteristici comune cu circuitele DRAM, SRAM sau EEPROM. Interfaa unui circuit FRAM este similar cu cea a unui circuit SRAM (RAM static) sincron, adresele fiind memorate ntr-un registru intern. La fel ca un circuit EEPROM numrul de cicluri de scriere este limitat, dar la o valoare mult mai mare. Dup depirea acestui numr, spre deosebire de un circuit EEPROM, FRAM-ul rmne funcional, doar c se pierde ne volatilitatea. La fel ca la un circuit DRAM operaia de citire este destructiv, datele trebuind restaurate printr-un ciclu de scriere generat intern. Ciclurile de citire, la fel ca la DRAM, folosesc prencrcarea liniilor de bit i amplificatoare de citire (sense amplifiers) care vor memora i restaura starea celulei dup citire. Spre deosebire de EEPROM, numrul de cicluri de citire este i el limitat, similar ciclurilor de scriere. Spre deosebire de DRAM starea celulelor este stabil, cu sau fr tensiune de alimentare, nefiind nevoie de cicluri de mprosptare periodic ([30]). Utilizarea principiului feroelectric face posibil utilizarea unor tensiuni sczute att pentru operaia de citire ct i cea de scriere, fcnd aceste dispozitive ideale pentru aplicaiile mobile, unde se cere un consum ct mai mic de putere. 3.2.2 Capacitorul FRAM O celul de memorie FRAM are la baz un capacitor FRAM i este realizat prin depunerea unui strat subire de material feroelectric ntre dou armturi conductoare astfel nct s se formeze un capacitor. Construcia acestuia este oarecum asemntoare cu cea de la DRAM. Spre deosebire de DRAM, n loc s memoreze informaia numai sub form de sarcin, o memorie feroelectric o memoreaz nsi n structura cristalin a materialului. Trebuie subliniat ca utilizarea prefixului fero nu are nici o legtur direct cu fierul sau magnetismul i nici cu feromagnetismul. El descrie numai o proprietate de memorare similar cu cea existent la materialele feromagnetice. Circuitele feroelectrice nu sunt susceptibile la cmpuri magnetice externe i

37

Circuite de memorie moderne

funcionarea lor este bazat n exclusivitate pe cmpuri electrice, oarecum similar circuitelor DRAM obinuite. La baza acestui principiu st o proprietate particular a unui cristal, avnd o structur special, numit de tip Perovskit, a crui structur cristalin este caracterizat de existena a dou stri stabile.

Direcie cmp electric

Figura 3.7

Cristal PZT

Un material feroelectric care are o structur Perovskit i cel care este cel mai utilizat deocamdat, este unul numit PZT. El este de fapt o soluie solid de PbZrO3 i PbTiO3, numele venindu-i de la prima liter a fiecrui metal (PbZrTi). n limba romn s-ar numi titano-zirconai de plumb. Aceasta categorie de materiale are i alte aplicaii, bazate pe un cu totul alt efect, i anume efectul piezoelectric. Un model simplificat al unui cristal feroelectric este dat n figura 3.7 (dup [13]). Un astfel de cristal are un atom mobil n centrul cristalului. Aplicarea unui cmp electric pe feele cristalului face ca atomul s se mite n direcia cmpului. Inversnd sensul cmpului atomul se va deplasa n direcia opus. Poziiile extreme ale atomului sunt stabile, fiind separate de o stare de mare energie. Astfel dispariia cmpului (i a tensiunii de alimentare) va lsa atomul ntr-o poziie stabil. 3.2.3. Funcionarea unui circuit de memorie FRAM Ca element de memorare numeric un cristal feroelectric se dovedete unul ideal: are dou stri stabile, are nevoie de foarte puin timp i foarte puin energie pentru a-i schimba strile, este foarte stabil la variaiile factorilor de influent externi (temperatur, tensiune de alimentare, cmpuri magnetice).

38

Circuite integrate numerice. Aplicaii n mecatronic

a. Operaia de citire Dei elementul de memorare este de natura unui capacitor, informaia nu este memorat numai sub forma de sarcin (ca la celula DRAM). Pentru a putea citi o celul FRAM trebuie detectat poziia atomilor din cristalele Perovskit. Din pcate aceasta nu se poate face n mod direct ([13]). Procesul de citire va fi descris n continuare. Se aplic un cmp electric capacitorului. Atomii mobili se vor deplasa n cristal, n direcia cmpului, asta dac nu sunt deja n poziiile corespunztoare. n mijlocul cristalului exist o stare de nalt energie care menine atomii n poziie, n absena cmpului. Atunci cnd atomii se deplaseaz (trec) prin aceast stare se va genera un cantitate suplimentar de sarcin (un vrf de sarcina- charge spike). Circuitul va compara aceasta cantitate de sarcin, aprut n urma aplicrii cmpului, cu o sarcin de referin. Astfel, un capacitor FRAM ai crui atomi i-au schimbat starea va genera mai multa sarcin dect unul la care atomii nu au comutat. Un capacitor FRAM necomutat va genera o sarcin similar unui capacitor DRAM, pe cnd unul comutat va genera o sarcin egal cu suma dintre sarcina stocat i sarcina feroelectric. Circuitul de memorie trebuie s determine i care capacitor a fost comutat. Aceast sarcin de comutaie va permite circuitului s discearn starea celulei de memorie. Comutarea strii are loc n mai puin de 1nsec, iar ntreg ciclul de citire n mai puin de 70nsec. Deoarece o operaie de citire nseamn i o schimbare de stare circuitul trebuie s refac n mod automat starea celulei. Astfel, fiecare acces de citire este nsoit de o operaie de prencrcare care restaureaz starea celulei. Dei operaia de citire este destructiv, timpul n care coninutul celulei este invalid este de sub 50nsec. b. Operaia de scriere O operaie de scriere este foarte asemntoare cu una de citire. Data care se dorete memorat va fi aplicat capacitorilor feroelectrici. Dac e cazul, noua dat va comuta starea cristalului. Schimbarea de stare dureaz sub 1nsec, iar tot ciclul de scriere sub 70nsec. La fel ca la citire, o operaie de scriere este urmat de una de prencrcare ([30]). 3.2.4. Arhitectura celulelor de memorare FRAM Majoritatea circuitelor prezente pe pia astzi (2004) utilizeaz o celul de memorare care folosete doi tranzistori i doi capacitori, numit pe scurt 2T2C. La aceast celul, utilizat din 1993, fiecare bit de date are propria referin, rezultnd o structur foarte fiabil, tolerant la imperfeciunile de realizare a capacitorilor din ntregul masiv de memorie (capacitorii trebuie s fie i nu sunt practic identici). Asignarea strii corespunztoare lui 0 i 1 este arbitrar. Liniile de bit (BL) sunt disponibile n forma direct (Bit Line True) i respectiv complementat (Bit
39

Circuite de memorie moderne

Line Complement), selecia celulei se face prin intermediul liniei de cuvnt (WLWord Line), iar polarizarea capacitorilor feroelectrici (nonvolatile capacitor) se face prin intermediul unei linii comune de polarizare a armaturilor (Plate Enable). n figura 3.8 este prezentat o schem simplificat a celulei 2T2C ([30]).

Figura 3.8

Celul FRAM 2T2C

Funcie de starea programat, la o operaie de citire, doar unul din cei doi capacitori va comuta, iar cellalt nu va comuta, servind ca referin. Deoarece referina face parte integranta din celula de memorare, se poate msura, foarte precis i fiabil, diferena de sarcin ntre cei doi capacitori ([13]).

Figura 3.9

Celul FRAM 1T1C


40

Circuite integrate numerice. Aplicaii n mecatronic

O alt tehnologie, mai nou, prezent pe pia din 2001, utilizeaz o celul cu un tranzistor i un capacitor, numit 1T1C, care duce la reducerea simitoare a costului per bit. O schem simplificat a celulei 1T1C este dat n figura 3.9 ([30]). Este utilizat practic o singur referin pentru toate celulele de memorare, lucru care impune cerine mai dure pentru procesul tehnologic, astfel nct diferenele de realizare ntre capacitorii din ntreg masivul de memorie s fie ct mai mici posibile ([13], [29], [30]). 3.2.5 Caracteristici si aplicaii Principalii productori de circuite FRAM sunt: Fujitsu, Hitachi, Matsushita, Ramtron, Rohm, Symetrix, Toshiba, s.a.. O meniune special trebuie fcut pentru Ramtron, ea fiind firma care a promovat primele astfel de circuite (din 1993), i a fost mult timp singura pe pia i precum i cea care a oferit iniial licenele pentru aceasta tehnologie ([30)). Dei circuitele FRAM cu cea mai mare densitate de pe pia (n 2004) au deja capacitatea de 256kbii i 1Mbit, cererea cea mai mare este, nc, pentru circuitele cu densiti mai mici. Tipurile de interfee disponibile sunt: paralel (similar oricrui circuit SRAM) i serial, sincron, n mai multe variante (SPI, I2C, Microwire, etc.). n afar de circuitele de memorie de sine stttoare, exist din ce n ce mai multe familii de microcontrolere care folosesc tehnologia FRAM pentru implementarea unei memorii locale (interne), la fel cum s-a ntmplat i cu tehnologia EEPROM. Este tradiional ca noile tehnologii din domeniul circuitelor de memorie semiconductoare s fie asociate unui segment particular de aplicaii. Din aceast asociere a rezultat i o anumit specificaie a interfeei i anumite caracteristici ale circuitului. Exist mai multe exemple n acest sens. Productorii primelor circuite DRAM (RAM dinamic) au dorit ca acestea s fie o alternativ ieftin, de mare capacitate, de nlocuire a circuitelor SRAM, astfel c, din considerente economice legate de numrul de pini i dimensiune a capsulei, au folosit multiplexarea liniilor de adrese. Primele circuite FLASH s-au dorit doar un substitut, mai uor de ters i scris, pentru circuitele UV-EPROM. Doar mai trziu au aprut aplicaii proprii i astfel s-au dezvoltat noi interfee specifice, diferite de cele ale circuitelor EPROM. Pentru a facilita ptrunderea pe pia, primele circuite FRAM (avnd i densiti relativ mici, de maxim 16Kbii) au fost destinate nlocuirii circuitelor EEPROM propriu-zise, n condiiile oferiri unor faciliti suplimentare. Acesta este motivul pentru care ele aveau interfee identice cu acestea, dei prin natura lor ele erau mai apropiate de circuitele RAM. Actualmente exist o mare varietate de interfee pentru aceste circuite, dar care se mpart n cele dou mari categorii menionate: seriale i paralele.

41

Circuite de memorie moderne

Diferena major ntre un circuit RAM i unul ROM (pe lng nevolatilitate) este dificultatea cu care se realizeaz o operaie de scriere. n mod tradiional memoriile nevolatile folosesc tranzistorul MOS cu grila flotant la care operaia de scriere este principial dificil. A scrie ntr-o astfel de memorie nseamn a mpinge electroni printr-o barier izolatoare de sticl (SiO2). Aceasta presupune putere consumat mare, la tensiuni mari i necesit un interval relativ mare de timp. Putere mare pe un interval de timp mare nseamn un circuit ineficient din punct de vedere energetic atunci cnd este vorba de scriere. O operaie de scriere pentru un circuit EEPROM dureaz milisecunde comparativ cu cele cca. 70 nanosecunde la un circuit FRAM ([29]). Un circuit realizat n tehnologie EEPROM este caracterizat i printr-un numr limitat de cicluri de scriere, datorita n esen stresului mecanic i electric indus de o astfel de operaie la nivelul tranzistorului cu gril flotant (bariera izolatoare va ceda mecanic, se va sparge, ntr-un final). Numrul de cicluri de scriere este cuprins, pentru tehnologiile EEPROM actuale, ntre 105 i 106 , fiind prea mic pentru anumite categorii de aplicaii cum ar fi colectarea de date (data logging) pe intervale mari de timp. Comparativ cu acestea circuitele FRAM pot fi scrise de mai mult de 1010 ori , numr care se afl n continu cretere, odat cu dezvoltarea tehnologiei. Deoarece nu sunt necesare tensiuni mai mari pentru scriere, un circuit de memorie FRAM nu folosete nici circuite interne de tip pomp de sarcin (charge pump) pentru generarea acestora, aa cum se ntmpl la tehnologia EEPROM, aceasta ducnd i ea la reducerea preului de cost. innd cont de cele prezentate anterior aplicaiile specifice ale acestor circuite valorifica la maxim toate caracteristicile pozitive ale tehnologiei FRAM, prin raportare la EEPROM. O categorie important de aplicaii, deja consacrate pentru aceste circuite, este cea de colectare i nregistrare de date (data collection and logging). Aceste aplicaii const n achiziia i memorarea de date, n condiiile absenei, pentru anumite perioade de timp, a tensiunii de alimentare. Datele se modific n timp i istoria evoluiei lor este relevant. Sistemele de contorizare - metering (ap, gaz, energie electric, altr forme de taxare, etc.) se ncadreaz n aceast categorie de aplicaii, ele fiind i un exemplu de sistem mecatronic. Alte aplicaii relevante sunt cele din domeniul comunicaiilor mobile, unde se dorete nlocuirea total a circuitelor EEPROM folosite pn acum, n domeniul general al tehnicii de calcul, al sistemelor mecatronice sau al automatizrilor industriale la modul general. n concluzie, aplicaiile vor valorifica caracteristicile cheie ale acestor circuite: - cicluri de scriere rapide - numr foarte mare de cicluri posibile (durat de via mare) - consum energetic redus

42

Circuite integrate numerice. Aplicaii n mecatronic

3.3 Circuite DRAM moderne


Principial circuitele de memorie RAM sunt mprite n dou mari categorii, clasificate dup modul de realizare al celulei de memorare: circuite DRAM (Dynamic RAM) care utilizeaz un capacitor MOS pentru memorare i circuite SRAM (Static RAM) care utilizeaz un circuit basculant bistabil pentru memorare. n categoria circuitelor DRAM intr (sau au intrat): FPM DRAM, EDO DRAM, SDRAM, RDRAM, etc. Actualmente exist noi familii de circuite de mare vitez, implementnd principii noi: DDR i DDR2 SDRAM, Direct RDRAM, SynchLink DRAM, etc. Toate aceste circuite de memorie au fost dezvoltate n strns legtur cu anumite caracteristici arhitecturale ale magistralelor specifice calculatoarelor de tip PC (system bus, memory bus) i sunt valorificate numai n msura n care procesoarele i chipset-ul specific suport noile facilitai.
DRAM
DRAM convenional

FPM EDO

DRAM sincron

SDRAM

DDR i DDR2

RDRAM

DirectRDRAM

SynchLinkDRAM RAM Memorie

grafica

Convenionala

Memorie biport

De tip sincron

SGRAM

DDR SGRAM

SRAM
SRAM SRAM SSRAM DDR SSRAM

Figura 3.10

Familii de circuite RAM

43

Circuite de memorie moderne

La modul cel mai general utilizatorul acestor circuite este de fapt un controler de memorie care face parte integrant din chipset-ul plcii de baz (sau al plcii video n cazul memoriilor grafice). n figura 3.10 este prezentat structurarea categoriilor de circuite RAM. Prezentarea care urmeaz este una destul de sumar, fr pretenii de exhaustivitate, dar care presupune cunoaterea tehnologiei circuitelor DRAM convenionale. 3.3.1 Circuite FPM DRAM (Fast Page Mode DRAM) Un circuit de memorie FPM (mod pagin rapid) este un circuit DRAM care poate s execute cicluri de acces n mod pagin. n acest mod timpul de acces pentru al doilea cuvnt de date i urmtoarele este mai mic dect cel pentru primul cuvnt de date accesat, avnd loc pe durata unui singur ciclu de /RAS ([14]).

Figura 3.11

Cicluri de acces citire(READ) FPM DRAM

n figura 3.11 ([14]) tPC este timpul necesar pentru a scrie sau citi (ciclul exemplificat) o locaie de memorie ntr-o pagin, plus alte intervale de timp necesare pentru pregtirea urmtoarei operaii de citire sau scriere. Un ciclu FPM ncepe prin activarea lui /CAS (=L) i se termin cnd timpul minim de prencrcare pentru /CAS (tCP) a trecut. Poriunea tCAS trebuie s fie suficient pentru accesarea datelor. Deoarece tranziia n H a lui /CAS finalizeaz accesul FPM, tCAS trebuie s fie mai mare sau egal cu timpul necesar pentru accesarea datelor (tCAC).

44

Circuite integrate numerice. Aplicaii n mecatronic

Vrful de utilizare pentru aceste circuite a fost la nivelul anului 1995-96. n prezent aceste circuite se afla la sfritul ciclului de via (demodate, obsolete). 3.3.2 Circuite EDO DRAM (Extended Data Out DRAM) EDO DRAM nu este altceva dect o variant mai rapid a circuitelor FPM. La aceste circuite ieirile de date rmn active i dup inactivarea semnalului /CAS. Pentru controlul mai flexibil al acestor ieiri, la unele din aceste circuite mai poate exista un semnal dedicat de tip /OE. Principial exist astfel posibilitatea suprapunerii ciclurilor de acces, un nou ciclu ncepnd nainte de a se fi terminat precedentul, de unde i un ctig de vitez comparativ cu circuitele FPM. Aceste circuite au fost prima oara valorificate odat cu apariia procesoarelor din clasa Pentium ([14],[21]).

Figura 3.12

Cicluri de citire(READ) EDO DRAM

La un circuit EDO (figura 3.12, dup [14]) inactivarea lui /CAS nu finalizeaz accesul. Bufferele de ieire pentru date au fost modificate astfel nct ele s rmn active (s nu treac n starea High-Z) odat cu inactivarea lui /CAS. Aceasta permite stabilirea urmtoarei adrese n timp ce data curent este accesat. Ca rezultat, tCAS poate fi acum mai scurt dect tCAC reducnd durata total a ciclului de acces (tCAS + tCP). Circuitele de memorie EDO DRAM i FPM DRAM practic sunt compatibile ca mecanism de accesare, astfel c, dac au i acelai pin-out, un circuit FPM poate fi nlocuit cu unul EDO. Vrful de utilizare pentru aceste circuite a fost n anii 1997-1998. Aceste circuite se afl i ele la sfritul ciclului de viat (obsolete). Au existat i circuite numite BEDO (Burst EDO) care permiteau un mod de lucru numit n salv (burst), care au fost rapid nlocuite de circuitele SDRAM.

45

Circuite de memorie moderne

3.3.3 Circuite SDRAM (Synchronous DRAM) Am amintit anterior de legtura indisolubil care exist ntre circuitele DRAM i arhitectura de sistem a calculatoarelor de tip PC. Magistralele de sistem utilizate sunt magistrale sincrone, toate transferurile de date fiind sincronizate cu un semnal de ceas unic. n acest context pare puin cam nenatural utilizarea circuitelor DRAM convenionale, asincrone prin nsi natura lor. Una din diferenele majore ntre un circuit DRAM convenional i unul DRAM sincron (SDRAM) este c la un SDRAM toate operaiile i transferurile de date sunt sincronizate cu un semnal de ceas (cu frontul cresctor al acestuia). Astfel interfaa de control este mai simpl din punct de vedere al utilizatorului i elimin necesitatea generrii semnalelor pseudo sincrone /RAS i /CAS ca pentru circuitele DRAM convenionale. Circuitele sunt mai simplu de fabricat i mai performante, n condiiile utilizrii aceleiai tehnologii de fabricaie. Un circuit SDRAM (figura 3.13) este controlat prin intermediul unor comenzi care sunt introduse sub forma unui cuvnt de comand de 4 bii. O comand este o combinaie a nivelelor logice a semnalelor de control. Un circuit DRAM convenional este i el controlat prin intermediul nivelelor logice ale semnalelor de control, dar nu exist conceptul de comand. Exemple de comenzi tipice sunt: activare (ACT), citire (READ), scriere (WRITE), prencrcare (PRE), etc. Exist i un aa numit registru de mod (de lucru) care este utilizat pentru a configura anumii parametrii de lucru ale circuitului SDRAM. Parametrii care pot fi i sunt configurai: lungimea salvei, tipul de salv i latena (ntrzierea) pentru CAS. n mod obinuit, registrul de mod este configurat o singur dat dup conectarea tensiunii de alimentare (dup power up). ntrzierea sau latena /CAS (/CAS Latency - CL) reprezint numrul de perioade ale semnalului de ceas din momentul drii unei comenzi i pn cnd datele sunt transferate. Ea este ntr-o strns legtur cu frecvena maxim a ceasului care poate fi utilizat. Cu ct valoarea lui CL este mai mic cu att i frecvena ceasului care poate fi folosit este mic, cu ct este mai mare i frecvena folosit poate fi mai mare. Exist un mod de lucru nou numit n salv (burst). Incorporat circuitului exist un numrtor pentru salv care poate fi folosit pentru incrementarea automat adresei de coloan i astfel realizarea unui acces foarte rapid. Lungimea salvei i tipul de salv (secvenial - din acelai banc sau ntreesutdin bancuri diferite) pot fi selectate prin intermediul registrului de mod. Lungimea salvei (Burst Length - BL) reprezint numrul de cuvinte care pot fi transferate n mod continuu ntr-un ciclu de citire sau scriere (similar modului pagin). Arhitectura matricei de memorie este caracterizat prin mprirea n dou sau mai multe bancuri de memorie. Aceasta caracteristic permite ca un banc s poat fi prencrcat (precharge) n timp ce cellalt este accesat. Se elimin astfel total latena (ntrzierea) datorat operaiei de prencrcare i este posibil mrirea
46

Circuite integrate numerice. Aplicaii n mecatronic

vitezei de lucru. Dac circuitul are dou bancuri de memorie, selecia bancului se face prin intermediul celui mai semnificativ bit de adres ([21]).
Control sincron CLK CKE /RAS /CAS /CS /WE Adrese DQM Bancuri de memorie DQ Buffere I/O

Cuvnt comanda Registru mod

Figura 3.13

Arhitectura unui circuit de memorie SDRAM

Nu n ultimul rnd, exist o schema de pipeline cu trei etaje care va permite ca un nou acces sa fie iniiat nainte de finalizarea precedentului. Cnd pipeline-ul este plin, datele vor putea fi accesate la fiecare ciclu de ceas (regula numit 1N) sau la fiecare dou cicluri de ceas (regula 2N). 3.3.3.1 Descrierea conexiunilor externe tipice (pinilor) pentru un circuit SDRAM n tabelul 3.1 vor fi prezentate conexiunile externe pentru un circuit SDRAM tipic ([10],[21]). Notaiile utilizate sunt cele consacrate n foile de catalog. Tabelul 3.1 Pin CLK CKE Conexiuni externe SDRAM Direcie Funcie Intrare Semnalul de ceas; toate semnalele de control sunt raportate i sincronizate prin referire la acesta Intrare Semnal care determin validitatea urmtorului ciclu de ceas; dac CKE=1 atunci urmtorul ciclu de ceas este valid, n caz
47

Circuite de memorie moderne

contrar este invalid Activ n 0; activarea lui ncepe un ciclu de comand RAS#, CAS# Intrri Aceiai simbolizare ca la un DRAM WE# convenional, dar au funcii diferite A0..A11 Intrri Intrrile corespunztoare magistralei de adrese; n plus A10 definete modul Prencrcare, iar A11 este folosit pentru selecia intern a bancurilor DQM Intrri DQM controleaz bufferele de ieire; dac UDQM organizarea este pe 16 bii pot exista semnale LDQM similare de control pentru cei doi octei componeni UDQM-superior (DQ8-DQ15) i LDQM-inferior(DQ0- DQ7) DQ0..DQn Intrri/Ieiri Intrri ieiri comune de date; exist variante organizate pe cuvnt de 4bii (..DQ3), de 8 bii (..DQ7) sau de 16 bii (..DQ15) VCC, VSS Intrri Borne de alimentare OBSERVAIE Sufixul # denot un semnal activ n 0, similar prefixului / . CS# Intrare Majoritatea circuitelor SDRAM au tensiunea de alimentare standard Vcc=3.3V, nivelele de intrare sunt compatibile TTL, iar nivelele de ieire sunt CMOS (VOH=Vcc=3.3V). 3.3.3.2 Exemple de utilizare a circuitelor SDRAM Exemplele ([10], [21], [49]) se refer la un circuit SDRAM ale crui conexiuni au fost descrise anterior, circuit cu capacitatea de 16M cuvinte. Se face i comparaia cu un circuit DRAM convenional. Cu Ti vor fi notate perioadele semnalului de ceas CK (Clock). Mai nti, n figura 3.14, este prezentat un ciclu de citire (READ) cu CL=2 i BL=1. n punctul <1> se d o comand de activare (ACT) i adresa de linie (Row) stabil este memorat, declarndu-se astfel nceputul unei operaii. La un DRAM convenional acesta este momentul activrii lui RAS#. n punctul <2> se d o comand de citire (RED) i adresa de coloan stabil este memorat, declarndu-se astfel o operaie de citire, datele urmnd s fie transferate cteva perioade de ceas mai trziu. La un DRAM convenional acesta este momentul n care i CAS# devine activ, cu WE# inactiv (n H).

48

Circuite integrate numerice. Aplicaii n mecatronic

Figura 3.14

Ciclu de citire (READ) cu CL=2 i BL=1.

Intervalul de timp (exprimat n perioade ale ceasului) din momentul memorrii adresei de coloan pan cnd datele valide sunt disponibile pentru citire este latena CAS# care n cazul acesta este CL=2. Numrul de cuvinte care poate fi transferat la ieire n mod continuu este lungimea salvei, care n cazul acesta este BL=1. La un DRAM convenional latena CAS# ar corespunde timpului de acces dup CAS#, iar lungimea salvei numrului de cicluri executate n mod pagin. n punctul <3> se d o comand de prencrcare (PRE) la un interval de tip egal cu tRAS din momentul comenzii de activare. La un DRAM convenional acesta ar corespunde momentului inactivrii lui RAS# i CAS#. Un ciclu de scriere este oarecum similar, comanda de citire (RED) fiind nlocuit cu o comanda de scriere (WRITE). n continuare se va exemplifica (figura 3.15) pentru acelai circuit de memorie, un ciclu de citire (READ), n mod salv, cu lungimea salvei BL=4. Dac frecvena ceasului este, de exemplu, de 66MHz (cu perioada de 15nsec) primul cuvnt de date este disponibil dup 60nsec, iar urmtoarele 3 dup 15nsec. La un circuit DRAM, n mod pagin, dup un interval de timp mai mare dect tRAC (timp de acces dup RAS#, n exemplu tot de 60nsec) primul cuvnt poate fi accesat. Practic un circuit DRAM convenional are acelai timp de acces pentru primul cuvnt de date ca unul SDRAM, ctigul venind la urmtoarele cuvinte, i fiind mai mare cu ct lungimea salvei BL este mai mare.
49

Circuite de memorie moderne

Figura 3.15

Ciclu de citire (READ), n mod salv, cu BL=4

Valorile care pot fi programate pentru BL sunt 1, 2, 4, 8 sau pagin ntreag (full page). Valoarea full page nu este implementat de toate circuitele SDRAM i nu este utilizat de majoritatea chipset-urilor. Nu trebuie uitat c un astfel de mod salv nu poate fi valorificat dect dac se acceseaz date de la adrese consecutive (adresa de coloan este generat cu ajutorul unui numrtor de salv intern). Timpul de acces pentru un cuvnt aleator, tRAC, nu difer semnificativ la SDRAM fata de circuitele DRAM convenionale. 3.3.3.3 Descrierea comenzilor pentru un circuit SDRAM tipic n tabelul 3.2 vor fi descrise doar comenzile principale pentru un circuit SDRAM tipic ([10], [21], [49]). Comenzi principale deoarece ele sunt implementate de majoritatea productorilor de astfel de circuite de memorie. Trebuie menionat c mai exist i alte comenzi dar nu este obligatoriu ca ele s fie implementate de toi productorii.

50

Circuite integrate numerice. Aplicaii n mecatronic

Tabelul 3.2 Comenzi SDRAM (1) Programarea registrului de mod (Mode register set) Comanda se execut pentru a defini modul de operare i utilizare propriuzis Comanda este executat cu o combinaie de nivele logice pe liniile de adrese. Trebuie obligatoriu executat dup conectarea tensiunii de alimentare. Programarea rmne valid pn la o nou comand de programare, atta timp ct circuitul este alimentat. (2) Activare (Active) Comanda selecteaz bancul curent conform liniei de adresa A11 i memoreaz adresa de linie (row) pentru bancul selectat.

(3) Prencrcare (Precharge) Comanda ncepe operaia de prencrcare a bancului selectat. Daca A10 este n 1 toate bancurile vor fi prencrcate. Daca A10 este n 0 va fi prencrcat bancul selectat prin intermediul lui A11.

51

Circuite de memorie moderne

(4) Citire (Read) Comanda ncepe o operaie de citire i memoreaz adresa de coloan

(5) Scriere (Write) Comanda ncepe o operaie de scriere i memoreaz adresa de coloan

(5) mprosptare intern (CBR refresh) Comanda execut o operaie de mprosptare (de tip CBR - CAS Before RAS) similar cu cea disponibil la circuitele DRAM convenionale. Adresele pentru mprosptare sunt generate automat intern cu ajutorul unui numrtor dedicat. Un interval de timp egal cu tRC dup aceast comand nu este acceptat nici o alta comand.

52

Circuite integrate numerice. Aplicaii n mecatronic

(7)Auto mprosptare (Self refresh entry) Comanda determin intrarea n modul de auto mprosptare. Acest mod continu atta timp ct CKE# rmne n 0. Trecerea n 1 a lui CKE# finalizeaz acest mod de lucru. n timpul acestui mod de operare intervalul de mprosptare i mprosptarea n sine sunt controlate intern, automat, fr nici o intervenie din exterior. O perioad de timp egal cu tRC dup aceast comand nu este acceptat o alt comand. (8) Oprire salv (Burst stop) Oprete operarea n modul salv, pe durata unui transfer n acest mod. Dei este specificat n standarde, exist circuite de memorie care nu o implementeaz.

(9) Nici o operaie (NOP) Nu realizeaz nici o operaie. Nici o operaie nu este declanat sau oprit de aceast comand.

53

Circuite de memorie moderne

3.3.3.4 Iniializarea unui circuit SDRAM Spre deosebire de alte circuite de memorie, orice circuit SDRAM, pentru a putea fi utilizat i a funciona corect, trebuie s parcurg o secven de iniializare imediat dup conectarea tensiunii de alimentare. Utilizatorul este responsabil cu implementarea acestei secvene. Pentru iniializare trebuie executat o prencrcare pentru toate bancurile (all banks precharge) dup un interval de 100usec sau mai mult de la stabilizarea tensiunii de alimentare. Dup finalizarea prencrcrii trebuie executate dou sau mai multe operaii de mprosptare (de tip CBR refresh). Din acest moment poate fi programat registrul de mod (de lucru) cu ajutorul comenzii corespunztoare i numai dup aceast programare circuitul poate fi utilizat ([10]). 3.3.4 Circuite DDR SDRAM (Double Data Rate SDRAM)

Circuitele DDR SDRAM (DRAM sincron cu rata dubl) realizeaz o vitez de transfer a datelor mai mare dect circuitele SDRAM (pe care le putem numi acum SDR SDRAM - Single Data Rate), n condiiile n care specificaiile funcionale au fost meninute ct mai mult posibil aceleai pentru ambele categorii de circuite. Cele dou categorii de circuite nu sunt 100% compatibile. Dublarea ratei de transfer a datelor este realizat, din punct de vedere al utilizatorului, prin utilizarea ambelor fronturi (cresctor i descresctor) ale semnalului de ceas, spre deosebire de circuitele SDR la care se utilizeaz doar frontul cresctor ([50]). 3.3.4.1 Arhitectura circuitelor DDR SDRAM

La baza tehnologiei DDR SDRAM st o arhitectur de memorie care se bazeaz pe manipularea n perechi a biilor de date (2-bit prefetch) realiznd astfel o rat de transfer a informaiei dubl faa de frecvena semnalului de ceas. n aceasta arhitectur, descris n figura 3.16, 2n bii de date (n fiind lungimea cuvntului de date) sunt transferai din matricea de memorie (memory cell array), n perechi de tip par (even) i impar (odd), sunt memorai (latch circuit) i sunt oferii pe ieirile DQx prin bufferul de ieire (I/O buffer) sub forma de n bii, la fiecare semiperioad a semnalului de ceas CK (pe frontul ridictor i pe cel cztor al acestuia). /CK este complementul lui CK. Dimensiunea (deschiderea) magistralei interne de date a circuitului fiind dubl fat de cea a magistralei externe un circuit DDR SDRAM realizeaz o rat de transfer pe magistrala extern dubl fa de rata de transfer pe magistrala intern. Deoarece datele sunt accesate n perechi de 2 bii un circuit DDR SDRAM poate folosi lungimi de salv (BL) numai de 2, 4 sau 8 bii.

54

Circuite integrate numerice. Aplicaii n mecatronic

Figura 3.16

Arhitectura unui circuit de memorie DDR DRAM

3.3.4.2 Intrrile de ceas CK , /CK i ieirea de validare a datelor DQS Datorit diverilor factori de influen externi, semnalul de ceas care ajunge la circuitul de memorie poate avea un factor de umplere diferit de 50%, chiar dac el a fost generat astfel nct riguros s aib un astfel de factor de umplere. n cazul unui circuit SDR (SDRAM) la care datele sunt transferate (citire sau scriere) sincronizate cu frontul cresctor al semnalului de ceas, alterarea factorului de umplere, n limite rezonabile, nu este critic. Pentru un circuit DDR ns, transferul datelor se face att pe frontul cresctor ct i pe cel descresctor, astfel ca meninerea ct mai riguroas a simetriei formei de und (a factorului de umplere de 50%) este esenial. Acesta este motivul pentru care circuitele DDR au adoptat o schem de ceas diferenial care permite un control precis al temporizrii transferurilor de date (figura 3.17, dup [50]). Spre deosebire de circuitele SDR SDRAM unde exist o singur intrare de ceas CK, la circuitele DDR exist i se utilizeaz i o doua intrare de ceas notat /CK, care are aceiai perioad, dar este complementul (negatul) intrrii CK. Intersecia celor dou forme de und va defini mai precis intervalele de timp n care ceasul utilizat este n 0 i respectiv n 1. Este astfel posibil i creterea frecvenei de ceas precum i eliminarea unora din influenele negative datorate zgomotului electric de comutaie.
55

Circuite de memorie moderne

Figura 3.17

Schema diferenial de ceas a unui circuit DDR

Circuitele DDR sunt controlate tot prin intermediul unor comenzi care sunt preluate pe frontul cresctor al semnalului de ceas CK (la fel ca la SDR). Rata dubl se refer doar la transferul (citire sau scriere) datelor. Pentru a putea valorifica cu uurin viteza dubl de transfer a datelor, circuitele DDR mai au un semnal de ieire numit DQS semnal de validare (de strobare) a datelor. Datele transferate sunt astfel sincronizate cu ambele fronturi ale acestui semnal care are aceiai perioad ca i semnalul de ceas CK. Acest semnal este folosit de utilizator pentru a ajusta fereastra de timp n care sunt valide datele transferate. 3.3.4.3 Interfaa electric Circuitele DDR SDRAM au tensiunea de alimentare nominal VDDQ=2.5V i folosesc o nou interfa electric, standardizat JEDEC, numit SSTL_2 (Stub Series Terminated Logic for 2.5V) pentru a elimina degradarea semnalului datorat zgomotului i refleciilor produse ca urmare a funcionrii la frecvene mai ridicate. Interfaa SSTL-2 reduce efectul refleciilor prin conectarea unei rezistene serie ntre punctul de conectare(numit i stub) din linia de magistral i circuitul de memorie. Nivelele logice de intrare sunt definite prin raportare la o tensiune de referin VREF=1.25V (egal cu jumtate din tensiunea de alimentare) i sunt descrise n figura 3.18. Nivelele logice de ieire sunt VOHmin = VREF + 0.5V i VOLmax = VREF - 0.5V, marginea de zgomot tipic fiind de cca. 0.3V.

56

Circuite integrate numerice. Aplicaii n mecatronic

Figura 3.18

Interfaa SSTL_2

3.3.4.4 Diferene n setul de comenzi n mod similar circuitelor SDRAM un circuit DDR SDRAM este controlat tot prin intermediul unor comenzi, dar setul acestora i modul de lucru este puin diferit. 3.3.4.5 Exemple de utilizare a circuitelor DDR

n continuare se vor prezenta comparativ (DDR i SDR SDRAM) un ciclu de citire i unul de scriere ([50]). Cu Ti, i=0..n sunt notate perioadele semnalului de ceas CK. La ambele categorii de circuite comenzile sunt raportate la frontul cresctor al semnalului de ceas CK diferind modul de transfer al datelor. Pentru circuitul DDR datele sunt sincronizate cu ambele fronturi ale lui DQS, care la rndul lui este sincron cu CK. n figurile 3.19 i 3.20 se prezint comparativ, pentru un circuit DDR i unul SDR, un ciclu de citire (READ), n mod salv, cu CL=2 i BL=4.

57

Circuite de memorie moderne

Figura 3.19

Ciclu de citire (READ) DDR, n mod salv, cu CL=2 i BL=4

Figura 3.20

Ciclu de citire (READ) SDR, n mod salv, cu CL=2 i BL=4

n figurile 3.21.i 3.22 se prezint comparativ, pentru un circuit DDR i unul SDR, un ciclu de scriere (WRITE), n mod salv cu BL=4.

Figura 3.21

Ciclu de scriere (WRITE) DDR, n mod salv cu BL=4.

58

Circuite integrate numerice. Aplicaii n mecatronic

Figura 3.22 3.3.5

Ciclu de scriere (WRITE) SDR, n mod salv cu BL=4 Circuite DDR2 SDRAM

Circuitele din aceast categorie, aa cum era de ateptat, reprezint o evoluie a circuitelor DDR. Ele permit principial dublarea ratei de transfer a datelor comparativ cu circuitele DDR. Caracteristicile noi care fac posibil acest lucru sunt: utilizarea unei arhitecturi bazate pe manipularea n cuartet a biilor (4-bit prefetch), utilizarea unor tehnici pentru mbuntirea integritii semnalelor cum ar fi OCD (Off Chip Driver calibration) i ODT (On-Die Termination), metode de mbuntire a utilizrii magistralei de date (Posted CAS), posibilitatea ntrzierii interne suplimentare a semnalului /CAS fa de semnalul /CAS extern (additive latency). Lungimea posibil a salvelor poate fi doar BL=4 sau 8. Ieirea de validare a datelor este i ea n variant diferenial existnd o pereche de semnale complementare DQS i /DQS. Circuitele din aceast categorie au tensiunea de alimentare nominal de 1.8V, interfaa electric este SSTL_18 i in plus se utilizeaz o nou variant de ncapsulare de tip BGA numit FBGA (Fine Pitch Ball Grid Array). Circuitele DDR2 reprezint la ora actual (2005) varianta de circuite SDRAM cu cel mai bun raport performan/pre ([47]). 3.3.6 Alte circuite DRAM Se vor enumera doar cteva din categoriile prezentate n figura 3.1. a. RDRAM (Rambus DRAM) Circuitele RDRAM utilizeaz o tehnologie specific, proprietate a firmei Rambus Inc.([28]) n mod simplist, putem spune c ele se bazeaz, la fel ca circuitele DDR, tot pe utilizarea ambelor fronturi ale semnalului de ceas pentru transferul datelor. Totui Rambus nu nseamn neaprat o nou categorie de
59

Circuite de memorie moderne

circuite de memorie, ci mai degrab o nou filozofie de proiectare a sistemului, necesitnd modificri majore n arhitectura magistralelor i a modului n care este distribuit semnalul de ceas. Exist nenumrate dificulti tehnologice n implementarea i utilizarea acestor circuite, lucru care explic preul ridicat de cost i lentoarea rspndirii lor. b. SLDRAM (SynchLink DRAM) Circuitele SLDRAM utilizeaz o schema de transfer a datelor bazat tot pe utilizarea ambelor fronturi ale unui semnal de ceas. Numele circuitului este dat de utilizarea unui protocol special numit SynchLink, dup numele consoriului de firme care au promovat aceasta tehnologie ca o alternativ la RDRAM. Cheia acestei tehnologii este protocolul orientat pe pachete i specificaia interfeei. Viitorul acestor circuite este destul de incert. c. Dual Port Graphics Buffer Bufferul bi-port pentru grafic este o memorie dedicat pentru imagini. Caracteristic acestei configuraii este existena a dou porturi prin care se acceseaz informaia: unul de tip RAM (semnale de comand i control similare RAM-ului) i unul serial. Prin intermediul portului serial se citesc datele (se afieaz imaginea), iar prin intermediul portului RAM se scrie n memoria de imagine (se deseneaz). Dei este n esen un circuit DRAM convenional, exist un mod de operare specific pentru scriere (zis mod desenare - drawing) care are rolul de simplifica proiectarea hardware a sistemelor grafice. d. SGRAM (Synchronous Graphics RAM) SGRAM este o memorie sincron dedicat pentru imagini. n esen este un circuit SDRAM pentru care exist un mod de operare specific pentru scriere (desenare-drawing). e. DDR SGRAM (Double Data Rate SGRAM) Sunt circuite SGRAM care utilizeaz tehnologia DDR SDRAM.

60

Circuite integrate numerice. Aplicaii n mecatronic

Capitolul 4 Circuite logice programabile


Obiectul acestui capitol sunt de fapt doar circuitele cunoscute sub numele de FPGA (Field-Programmable Gate Array) i respectiv CPLD (Complex Programmable Logic Device), cu accentul pus pe circuitele unuia din productorii reprezentativi de astfel de circuite, firma Xilinx. Se presupune c cititorul este familiarizat cu circuitele programabile clasice de tip PLD (cum ar fi PAL sau GAL) cunoscute i sub denumirea de SPLD (Simple Programmable Logic Device). Pstrnd proporiile am putea spune c circuitele FPGA i CPLD sunt echivalentul modern al plcilor universale de testare (breadboard) pe care erau montate circuite numerice simple (pori, bistabile, etc.) care puteau fi apoi interconectate prin intermediul unor fire de ctre utilizator pentru a testa o anumit aplicaie. Afirmaia va fi, evident, justificat n cele ce urmeaz. nainte de a aborda problematica specific trebuie menionate i circuitele cunoscute sub denumire de ASIC (Application-Specific Integrated Circuit). ASIC este un circuit integrat complex dedicat implementrii unei aplicaii particulare, mai degrab dect unei utilizri generale. Un circuit ASIC este proiectat de o anumit companie i este realizat pentru un singur beneficiar (client). Creterea exponenial a densitii de integrare a circuitelor VLSI face posibil integrarea aproape a tuturor sub sistemelor numerice imaginabile. Un circuit ASIC poate include un microprocesor de 32 de bii mpreun cu memorie i periferice complexe, caz n care mai poate fi referit i ca un SoC (System on Chip) prin care se nelege un sistem de calcul realizat pe un singur microcircuit. SoC este n realitate o noiune foarte larg innd cont c printre periferice se pot numra sisteme analogice complexe, senzori de tip MEMS (bazai pe micro sau nano tehnologii mecanice) i chiar sisteme de radiofrecven performante. Un exemplu tipic de ASIC i SoC n acelai timp este un circuit cu ajutorul crora se realizeaz cea mai mare parte a unui telefon mobil. Argumentele n favoarea conceptului SoC seamn acum cu cele care, cu mult timp n urm, justificau dezvoltarea circuitelor integrate numerice: scderea dimensiunilor, reducerea consumului energetic i creterea fiabilitii comparativ cu sistemele care utilizau mai multe componente, reducerea costurilor legate de montare, totul la o alt scar de complexitate. ASSP (Application Specific Standard Product) este tot un circuit integrat similar ASIC dedicat unei anume piee de aplicaii, dar destinat mai multor utilizatori (de aici i "standard"). Circuitele de tip ASSP sunt destinate mai multor clieni pentru c sunt de uz general, dar numrul acestora este mic pentru c aplicaia este una specific. Un aspect important legat de circuitele ASIC sunt costurile legate de pregtirea fabricaiei i parial de proiectarea lui. Costurile respective referite drept costuri NRE (Non Recurring Engineering) sunt uzual foarte mari (x100 000USD)

61

Circuite logice programabile

chiar i pentru un circuit pur numeric astfel c este important s fii sigur c aplicaia se va vinde ntr-un volum mare pentru ca aceste costuri s poat fi amortizate. Un alt aspect este c,n acest caz, pregtirea procesului tehnologic de fabricaie referitor la (re)dimensionarea suprafeei de siliciu pentru produse de tip ASIC dureaz mult timp, astfel c eventualele ntrzieri la lansarea produsului pe pia pot reduce profitabilitatea Sistemul numeric dintr-un ASIC care este i cel mai important sub sistem poate fi implementat prin mai multe tehnologii, funcie i de scara de producie necesar. Principial pentru realizarea acestuia se utilizeaz ca principale tehnologii: -circuite total dedicate (Full custom) -circuite bazate pe celule standard (Standard Cell) -circuite FPGA Dezavantajele menionate anterior legate de NRE se refer la prima tehnologie, dei ea este totui i cea mai performant sub aspectul vitezei de lucru, al densitii de integrare i, nu n ultimul rnd, al securitii proprietii intelectuale. Pentru o producie pe scar mic circuitele FPGA reprezint ntotdeauna o alternativ mai ieftin. Circuitele cu celule standard reprezint o cale de mijloc n ce privete raportul pre-performan.

4.1 Circuite FPGA


Xilinx Inc. a lansat pe pia n anul 1985 o nou tehnologie numit FPGA (Field Programmable Gate Array). Aceast tehnologie permite implementarea unor aplicaii complexe ce folosesc logic secvenial i combinaional folosind doar un singur circuit. Aceasta duce la scderea considerabil a preului de cost avnd i mari avantaje legate de flexibilitatea sistemelor dezvoltate pe baza acestei tehnologii. Un circuit FPGA atinge maximul de flexibilitate atunci cnd este configurat pe baza unor celule de memorie RAM i poate fi reprogramat de un numr nedefinit de ori n vederea aducerii unor mbuntiri sistemului prin modificarea funciilor existente sau adugarea unor noi funcii. Datele de configurare sunt volatile i trebuiesc rencrcate de fiecare dat la punerea sub tensiune a circuitului. Tehnologia a fost mbuntit i diversificat pentru a acoperi un spectru ct mai larg de cerine existente privind consumul redus de energie, alimentarea la tensiuni reduse cu meninerea unor viteze mari de lucru. Una din ideile eseniale este c circuitele FPGA trebuie s poat fi programate de cu uurin de utilizator. Punctele de configurare pot fi celule de memorare SRAM, EPROM-UV, EEPROM/FLASH sau de tip fuzibil (fuse) similare circuitelor PROM. Celulele de tip fuzibil pot fi programate doar o singur dat. Configuraiile FPGA cu fuzibile sunt de tip OTP (One Time Programmable), i pot suferi doar o singur programare. Cele de tip EEPROM/FLASH pot fi reprogramate dup ce au fost terse n prealabil. Ambele variante menionate au
62

Circuite integrate numerice. Aplicaii n mecatronic

avantajul c nu sunt volatile, n timp ce configuraiile pe baz de celule SRAM trebuie programate la fiecare conectare a tensiunii de alimentare a sistemului. Circuitele FPGA cu celule de configurare de tip EEPROM/FLASH au dat de fapt natere unei noi familii, circuitele CPLD. Pentru circuitele FPGA pe baz de celule SRAM, n mod uzual configuraia este memorat ntr-o memorie ROM extern din care se ncarc automat la iniializarea sistemului. Aria de siliciu ocupat de o celul SRAM este mult mai mare dect aria ocupat de o celul de tip fuzibil, deci un FPGA pe baz de SRAM va avea mai puine puncte de configurare dect unul bazat pe celule de tip fuzibil, i deci o densitate de integrare mai mic din punct de vedere al resurselor. Evoluia rapid a tehnologiilor SRAM (RAM static) de la sfritul anilor 80 i nceputul anilor 90 i creterea densitilor de integrare au permis dezvoltarea rapid i a circuitelor FPGA cu celule de configurare SRAM. Astfel aceste circuitel FPGA au nceput s fie folosite n mod masiv i ele de fapt domin piaa. Xilinx a dezvoltat mai multe familii de circuite FPGA cu celule de configurare SRAM., reprezentative fiind familiile mari (n ordinea apariiei pe pia): XC4000, Spartan i Virtex. Familiile care mai conteaz la ora actual, Spartan i Virtex au cunoscut fiecare la rndul lor o evoluie spectaculoas datorat n esen progreselor tehnologiei CMOS. Circuitele FPGA aveau performane mai bune dect circuitele PLD chiar i numai pentru faptul c puteau implementa o logic pe mai multe nivele, n timp ce circuitele PLD erau specializate pentru o logic pe doar dou nivele. Circuitele FPGA sunt optimizate pentru o logic organizat pe mai multe nivele. Acest lucru permite implementarea unor circuite mult mai complexe dect cele care se pot implementa ntr-un circuit PLD. Esenial mai era ns din punct de vedere al utilizatorului c datorit memoriei RAM de configurare un circuit FPGA poate fi (re)programat pentru mai multe aplicaii, asemntor unui microprocesor. Un circuit FPGA plus cteva configuraii memorate ntr-un circuit de tip ROM pot fi folosite pentru mai multe modele hardware, selectnd doar la iniializare (sau power up) programul dorit. Mai mult, un sistem bazat pe circuite FPGA poate deveni un hardware generic, putnd fi adaptat uor de la o aplicaie la alta. Unele dintre cele mai noi domenii de aplicaii pentru circuitele FPGA este combinarea acestora n masive pentru calcule matematice. Ecuaiile mapate n aceste dispozitive nu trebuie neaprat s fie ecuaii hardware, ele putnd reprezenta de exemplu algoritmi de criptare, decriptare sau compresie, etc.

63

Circuite logice programabile

Figura 4.1

Celul SRAM pentru configurarea FPGA

O celul SRAM dintr-un FPGA are structura tipic din figura 4.1. Dup cum se poate observa exist perechea de inversoare tipic celulei SRAM care va memora valoarea programat. O singur poart de tranzistor de tip MOSFET n este folosit att pentru scriere ct i pentru citire. Pentru controlul cii de configurare sunt folosite semnalele Q i /Q.

Figura 4.2

LUT cu 8 variabile de intrare

Una dintre cele mai folosite structuri n circuitele FPGA este tabela de cutare (Look-Up Table LUT). Prin conectarea a 2N celule de memorie SRAM prin intermediul unui multiplexor se obine un LUT care poate implementa orice funcie de N variabile. Cu toate c este nevoie de un numr mare de celule SRAM, uzual se construiesc LUT-uri cu 5 variabile de intrare. Pentru funcii cu mai mult de cinci variabile se folosesc multiplexoare pentru a forma LUT-uri de 6 sau 7 variabile. 4.1.1 Seria Spartan-IIE (Xilinx) Seria Spartan-IIE este una din ultimele generaii de circuite FPGA Xilinx din familia Spartan (cea mai nou este Spartan-3). Familia permite dezvoltarea aplicaiilor numerice de complexitate medie spre mare, cu costuri de dezvoltare i producie foarte mici. Caracteristicile principale, n termeni de resurse disponibile, pentru seria Spartan-IIE sunt date n tabelul 4.1. Familia poate opera cu un semnal de ceas de pn la 200 MHz i ofer resurse multiple: memorie RAM de configurare distribuit i organizat ca blocuri RAM, existena a 19 variante de interfee electrice de intrare/ieire configurabile de utilizator, patru bucle de ntrziere digitale (DLL), etc..

64

Circuite integrate numerice. Aplicaii n mecatronic

Tabelul 4.1 Resursele familiei Spartan-IIE

Resursele logice sunt reprezentate de blocurile logice configurabile CLB (Configurable Logic Blocks) organizate matricial (linii, coloane). Resursa de baz care se aloc unei aplicaii este numit slice, astfel fiecare CLB conine dou sliceuri, fiecare slice fiind compus din patru LUT-uri (fiecare LUT putnd realiza o funcie logic de 4 variabile independente), o logic de transport rapid i un element de memorare (bistabil de tip D). n plus, fiecare CLB are dou buffere dedicate cu ieire de tip tri-state care pot fi folosite pentru a implementa magistrale interne de tip tri-state (3-S). LUT-urile pot fi legate n cascad pentru a realiza funcii de 5 sau 6 variabile, pot fi configurate ca un bloc de memorie RAM cu dimensiunea de 1x16 bii sau ca un registru de deplasare. De exemplu se poate implementa direct un multiplexor 8:1 ntr-un singur CLB. RAM-ul distribuit este o soluie ideal pentru aplicaii care necesit memorii rapide, de dimensiune mic, amplasate ct mai aproape de de logica principal. Blocurile RAM sunt reprezentate prin masive RAM cu dimensiunea de 4096 bii. Blocurile RAM pot fi configurate ca memorii de tip RAM sau ROM. Aceste memorii pot fi inter conectate pentru a obine masive de memorie mai mari. Buclele de ntrziere digitale (DLL) asigur distribuia semnalului de ceas eliminnd ntrzierile. Deoarece buclele de ntrziere sunt complet digitale nu apar problemele legate de zgomot. Arhitectura seriei Spartan-IIE este ilustrat de schema bloc a unui circuit FPGA din aceast serie dat din figura 4.3. Pe schema bloc se observ componentele principale: - blocurile IOB (Input Output Blocks) care asigur interfaa ntre pinii circuitului i circuitele interne (logica I/O) - blocurile CLB care conin elementele funcionale pentru implementarea logicii - blocurile de RAM dedicat, fiecare bloc avnd o dimensiune de 4096 bii - blocurile DLL care asigur distribuia semnalului de ceas i compensarea ntrzierilor Toate aceste componente sunt plasate ntr-o matrice de interconectare multifuncional (matrice de rutare GRM - General Routing Matrix) prin intermediul creia se realizeaz configurarea la nivel de sistem.

65

Circuite logice programabile

Figura 4.3

Schema bloc a unui circuit Spartan-IIE Xilinx

Blocurile CLB conin logica central, avnd acces la matricea de rutare. Blocurile IOB sunt plasate in jurul memoriei i al CLB-urilor pentru a permite accesul la pinii circuitului. Fiecare din aceste componente funcionale va fi discutat n detaliu n continuare. 4.1.1.1 Resursele Spartan-IIE a. Blocul IOB O schema detailat a blocului IOB este dat n figura 4.4

66

Circuite integrate numerice. Aplicaii n mecatronic

Figura 4.4

Blocul IOB

Una din caracteristicile importante ale acestui bloc este faptul c el permite implementarea unei mari varieti de standarde de interfa electric intrare-ieire. Standardele suportate sunt date n tabelul 4.2. Cele trei registre disponibile ntr-un bloc IOB pot funciona fie ca registru de tip D, cu comutare pe front negativ sau pozitiv, fie ca latch transparent. Toate bistabilele au acelai semnal de ceas (CLK), dar semnalul de validare a ceasului (CE) este independent pentru fiecare bistabil. n plus fa de aceste dou semnale mai exist un semnal comun care poate fi configurat ca Set sau Reset (SR) pentru fiecare bistabil. Semnalul SR poate fi configurat individual, pentru fiecare registru, ca fiind unul sincron sau asincron. O caracteristic care nu este prezentat n schema de mai sus o prezint posibilitatea controlului polaritii (direct sau inversat). Polaritatea buffer-elor de I/O poate fi selectat independent La nivelul IOB-ului se poate identifica o cale de intrare i respectiv una de ieire care sunt parcurse de semnal. Calea de intrare const n esen ntr-un buffer care face legtura ntre logica intern i pinul de intrare prin intermediul i al unui bistabil. Un element opional de ntrziere de tip bistabil D elimin timpul de hold. Aceast ntrziere este sincronizat cu reeaua intern de distribuie a semnalului de ceas. Fiecare buffer de intrare poate fi programat astfel nct intrarea respectiv s fie compatibil cu unul din standardele prezentate mai sus. n unele cazuri este necesar asigurarea unei tensiune VREF de ctre utilizator.

67

Circuite logice programabile

Tabelul 1.2 Standarde I/O suportate

Calea de ieire include principial buffer de ieire 3-state conectat cu ieirea la pinul respectiv. Sursa semnalului de ieire poate s fie ieirea buffer-ului, poate s provin direct de la logica intern sau prin intermediul unui bistabil de tip D intermediar. Controlul 3-state este controlat de logica intern direct sau prin intermediul unui bistabil de tip D, asigurnd sincronizarea. Fiecare dintre driver-ele de ieire poate debita un curent de pn la 24 mA i absorbi un curent de maxim 48 mA (depinznd evident de tensiunea de alimentare!). Aceste valori de curentului precum i viteza de variaie a semnalului (slew rate) sunt programabile implicit sau explicit . Un circuit opional numit weak-keeper poate fi conectat la fiecare pin. Circuitul respectiv este similar circuitului bus hold prezent la unele din circuitele pentru cuplarea la magistral. Cnd acest circuit este activat, pinul circuitului va putea fi tras slab ctre 1 sau 0, n funcie de starea anterioar a semnalul de intrare. Astfel n momentul n care ieirea trece n High-Z circuitul weak-keeper va pstra pentru pin ultima valoare avut la intrare. n afar de acest circuit mai exist i posibilitatea conectrii la pin a unor rezistene interne de valoare mare ctre sursa de alimentare (pull-up) sau ctre mas (pull-down) pentru a fixa potenialul pinului respectiv.
68

Circuite integrate numerice. Aplicaii n mecatronic

Dup configurarea circuitului pinii care rmn nefolosii de aplicaie sunt forai n starea High-Z (nalt impedan) astfel c trebuie utilizai rezistori externi pentru fixarea potenialului, dac nu s-au folosit facilitile menionate mai sus. Cteva din standardele descrise mai sus necesit o tensiune extern care trebuie aplicat pe pinii VCCO sau VREF. Aceste tensiuni trebuie asigurate din exterior i sunt conectate la pini dedicai pentru fiecare banc. Ca urmare apar o serie de restricii legate de modul n care pot fi combinate standardele de I/O n cadrul unui banc.

Figura 4.2

Bancurile I/O

Pentru utilizator este important de tiut c fiecare latur a circuitului FPGA este mprit n dou bancuri, rezultnd opt bancuri (figura 4.5). Toate conexiunile externe sunt protejate mpotriva descrcrilor electrostatice (ESD). Dup configurarea circuitului diodele din circuitele de protecie ESD sunt conectate la Vcco dac sunt folosite standardele LVTTL, PCI, HSTL, SSTL, CTT i AGP. Toate blocurile IOB din familia Spartan-IIE suport standardul IEEE 1149.1 (boundary-scan test). Fiecare banc are asociai pinii Vcco i VREF, tensiunile la care se vor conecta acetia de ctre utilizator vor fi determinate de standardele I-O folosite. De exemplu pentru variantele de ncapsulare TQ144 i PQ208 intrrile VCCO pentru cele opt bancuri sunt conectate mpreun, iar intrrile VREF sunt conectate separat. n cadrul unui banc se pot folosi numai standarde care necesit aceiai valoare a tensiunii Vcco. n tabelul 4.3 sunt prezentate standardele I-O compatibile din acest punct de vedere.

69

Circuite logice programabile

Tabelul 4.3

Standarde compatibile

b. Blocul CLB Celula de baz pentru CLB este reprezentat de celula logic LC (Logic Cell). O celul logic este format dintr-un generator de funcii cu 4 intrri, ologic pentru lanul de transport (carry chain) i un element de memorare. Ieirea generatorului de funcii din fiecare celul logic poate s fie legat la ieirea CLB-ului sau la intrarea bistabilului de tip D. Fiecare CLB conine patru celule logice, organizate n slice-uri similare cu cel din figura 4.6. n plus CLB-ul conine logica necesar pentru combinarea ieirilor celor patru LC-uri pentru a obine un generator de funcii cu cinci sau ase intrri. Generatoarele de funcii sunt implementate prin intermediul LUT (LookUp Table). n plus, fiecare LUT poate fi folosit ca un RAM static sincron, cu dimensiunea de 16x1 bit. Dou LUT-uri pot fi combinate pentru a crea un bloc RAM static sincron de 16x2 bii sau 31x1 bit. De asemenea un LUT poate fi folosit i ca registru de deplasare pe 16 bii. Elementele de memorare din CLB pot fi configurate fie ca bistabile de tip D cu comutare pe front sau ca bistabile D transparente (latch). Intrrile D ale bistabilelor pot fi conectate la generatorul de funcii sau la una dintre intrrile LUT-ului. n plus fa de semnalele CLK i CE, fiecare slice are semnale de set i reset sincrone (SR i BY). SR foreaz elementul de memorare n starea iniial precizat la configurare, iar BY foreaz circuitul n starea complementar celei de la configurarea iniial. Aceste semnale pot fi de asemenea configurate pentru a aciona sincron sau asincron cu ceasul CLK. Cele dou semnale pot fi complementate independent i sunt comune pentru cele dou bistabile din fiecare slice.

70

Circuite integrate numerice. Aplicaii n mecatronic

Figura 4.6

Slice Spartan-IIE

Circuitele dedicate de transport (Carry and Control Logic) asigur o vitez mare de lucru, permind implementarea unor funcii aritmetice rapide. CLB-ul are dou lanuri de transport per slice. Limea unui lan de transport este de 2 bii. Logica aritmetic include o poart de tipul XOR care permite implementarea unui sumator complet n interiorul unei singure celule logice. n plus, o poart AND dedicat mbuntete implementarea operaiilor de multiplicare. Calea de transport poate fi folosit i pentru cascadarea funciilor. La nivelul CLB-ului mai exist i o logic adiional. Astfel multiplexorul F5 din fiecare slice (figura 4.7) combin ieirea celor dou LUT-uri ale unui slice pentru a obine o funcie de cinci variabile sau un multiplexor 4:1. n mod similar multiplexorul F6 combin ieirile celor dou multiplexoare F5. Acest lucru permite realizarea unei funcii de 6 variabile sau realizarea unui multiplexor de 8:1. Fiecare CLB mai conine i 4 ci de reacie locale pentru a nu consuma din resursele globale de rutare.

71

Circuite logice programabile

Figura 4.7

Logica adiional

Fiecare CLB conine dou buffere tri-state prin care acesta se poate conecta la magistralele interne ale circuitului. Fiecare buffer are un control independent al strii 3-state (linia T activ n 0 logic). Cnd toate bufferele legate la magistrala intern sunt dezactivate, linia respectiv din magistral este n starea 1 . Dac dou drivere conectate la aceiai linie din magistrala intern sunt n stri complementare nu va rezulta un conflict, linia fiind tras n 0 (un I cablat). c. Blocul RAM Spartan-IIE ncorporeaz mai multe blocuri RAM care completeaz memoria RAM distribuit la nivelul CLB-urilor. Blocurile de memorie RAM sunt organizate n coloane. Cele mai multe circuite din familia Spartan-IIE conin dou coloane, distribuite pe laturile verticale(figura 4.3). De exemplu XC2S400E are 4 coloane de blocuri RAM, iar XC2S600E are 6 coloane de blocuri RAM. Fiecare bloc RAM, este complet sincron, de tip bi-port (portul A i portul B), cu o dimensiune de 4096 bii, avnd control independent (semnale dedicate) pentru fiecare port. Lungimea cuvntului de date DIA/DOA i DIB/DOB pentru fiecare din cele dou porturi poate fi configurat independent. n funcie de lungimea cuvntului de date se pot obine urmtoarele tipuri de memorii: 1x4096 bii, 2x2048 bii, 4x1024 bii, 8x512 bii sau 16x256 bii.

72

Circuite integrate numerice. Aplicaii n mecatronic

Figurq 4.8

Bloc RAM

4.1.1.2 Rutarea programabil La modul general viteza unui circuit numeric complex este limitat de cea mai mare ntrziere de propagare intrare-ieire. Timpii de ntrziere in att de resursele de tip component ct i de resursele de tip reea de rutare. Arhitectura Spartan-IIE mpreun cu mediul de programare asociat care face plasarea componentelor i rutarea interconexiunilor au fost optimizate pentru a minimiza aceste ntrzieri. Cea mai bun cale de rutare obtenabil va fi aleas automat pe baza unor restricii pentru timpul de ntrziere definite de utilizator. Un rol esenial n acest sens l au, pentru orice circuit FPGA, resursele numite matrici de rutare sau, n cazul circuitelor FPGA Xilinx, GRM-General Routing Matrix. Exist mai multe nivele de rutare: local, la nivelul I-O i global. Pentru rutare mai conteaz i organizarea matricial a CLB-urilor. Rutarea local este descris n figura 4.9. Exist trei tipuri de conexiuni - interconexiuni ntre LUT-uri, bistabile i matricea de rutare general (GRM) - conexiuni de mare vitez interne CLB-ului, care conecteaz LUT-uri aparinnd aceluiai CLB - conexiuni directe de mare vitez ntre CLB-uri adiacente orizontale care elimin ntrzierile produse de GRM Resursele pentru rutarea general sunt localizate att pe vertical ct i pe orizontal, fiind asociate cu liniile i coloanele de CLB-uri. Exist mai multe posibiliti de rutare general. Adiacent fiecrui CLB exist un GRM. GRM reprezint matricea general de comutaie prin care sunt conectate resursele orizontale i verticale constituind calea de acces a CLB-ului ctre calea de rutare general. Mai exist 24 linii de rutare care asigur legtura ntre GRM-urile adiacente n toate cele 4 direcii.

73

Circuite logice programabile

96 de buffere multiple (grupat cte 6) ruteaz semnalele GRM-ului ctre alte 6 GRM-uri, n fiecare dintre cele patru direcii (stnga, dreapta, sus, jos). Aceste seturi de 6 linii pot fi conectate numai la capete. O treime dintre liniile multiple sunt bidirecionale, iar restul sunt unidirecionale. Exist 12 linii bidirecionale care distribuie eficient semnalele pe toat lungimea i limea microcircuitului.

Figura 4.9

Rutarea local

De-a lungul periferiei microcircuitului se afl distribuite resurse care realizeaz legtura ntre matricea CLB i blocurile IOB, cu alte cuvinte care realizeaz rutarea I-O. Logica de rutare adiional poart denumirea de rutare VersaRing, Exist clase de semnale care necesit tehnici de rutare dedicate. n familia Spartan-IIE sunt oferite resurse de rutare speciale pentru dou clase de semnale: - resurse de rutare orizontale pentru magistrale de tip tri-state constnd n 4 linii de magistral care sunt alocate pentru fiecare rnd de CLB-uri, dup cum se poate observa n figura 4.10 - dou reele verticale sunt dedicate pentru propagarea semnalelor de transport ntre dou CLB-uri adiacente Resursele de rutare global sunt folosite pentru distribuirea semnalelor de ceas i a altor semnale care necesit un fan-out mare. Spartan-IIE include dou reele de rutare global, referite ca o reea de rutare global primar i o reea de rutare global secundar. Reeaua global primar este format din patru reele globale, cu pini de intrare dedicai. Aceste reele sunt folosite pentru distribuirea semnalului de ceas. Fiecare dintre aceste patru reele poate distribui semnalul de ceas la toate CLBurile, blocurile IOB i blocurile RAM din circuit.

74

Circuite integrate numerice. Aplicaii n mecatronic

Figura 4.10

Resursede rutare orizontale

Reeaua global secundar este format din de 24 linii principale (backbone lines), 12 linii pe faa microcircuitului i 12 linii pe spatele microcircuitului. Prin aceste linii pn la 12 semnale unice pe coloan pot fi distribuite prin intermediul celor 12 linii verticale. Aceste resurse secundare sunt mai flexibile dect cele primare deoarece nu sunt restricionate de conectarea lor la anumii pinii dedicai ai dispozitivului. Distribuirea semnalului de ceas pentru Spartan-IIE se asigur prin intermediul reelei globale primare. O reea tipic de distribuie a semnalului de ceas este dat n figura 4.11.

Figura 4.11

Reeaua de distribuie a semnalului de ceas

Sunt prevzute patru buffere globale, dou n zona de centru fa i dou n zona de centru spate a microcircuitului (vezi i figura 4.5). Acestea comand cele patru reele globale primare. Sunt prevzui patru pini dedicai pentru semnalul de ceas care prin intermediul unor buffere pot comanda cele patru linii globale
75

Circuite logice programabile

primare. Semnalul pentru reeaua global primar este selectat fie dintre aceti pinii dedicai, fie din semnalele date de reeaua general de rutare. Fiecare intrare de tip global pentru semnal de ceas (GCLK) are asociat i o bucl digital de ntrziere DLL (figura 4.12). Aceast bucl poate s elimine ntrzierile ntre semnalul de ceas intern (CLKOUT) i semnalul de ceas extern (CLKIN). Fiecare circuit DLL poate comanda dou reele globale de distribuire a ceasului. Circuitul DLL monitorizeaz semnalul de ceas de intrare i ajusteaz automat elementul de ntrziere pentru a asigura sincronizarea. El are n componen o linie de ntrziere numeric auto-programabil, astfel c o ntrziere suplimentar este introdus pentru ca semnalul de ceas s ajung la bistabile exact dup o perioad de ceas, dup ce acesta a ajuns la intrare. n acest mod se asigur comutarea tuturor circuitelor bistabile sincron cu acelai semnal de ceas. Acest sistem n bucl nchis elimin ntrzierile (decalrile temporale) care apar la distribuia semnalului de ceas. Pentru a garanta o funcionare corect la pornire (power-up), DLL-ul poate ntrzia terminarea procesului de configurare pn la intrarea sa n regim de sincronism (lock).

Figure 4.12

Circuitul DLL

n plus DLL-urile asigur controlul semnalului de ceas n mai multe domenii: asigur patru faze ale semnalului de ceas defazate ntre ele cu 90o, pot dubla frecvena semnalului de ceas i realiza o divizare a semnalului de ceas cu factori de 1.5, 2, 2.5, 3, 4, 5, 8, 16. De asemenea circuitele DLL pot fi utilizate pentru a asigura sincronizarea n cazul cnd distribuia semnalului de ceas se face pentru mai multe circuite Spartan-IIE.

76

Circuite integrate numerice. Aplicaii n mecatronic

4.2 Circuite CPLD (Complex Programmable Logic Device)


Tehnologia CPLD se adreseaz unui domeniu larg de aplicaii cu un grad de complexitate mic sau mediu (oricum mai mic dect la FPGA). Familiile CPLD ale firmei Xilinx sunt bazate pe o tehnologie combinat FLASH-EPROM i RAM. Configuraia este memorat permanent ntr-o memorie de tip FLASH, fiind transferat la punerea sub tensiune (power-up) ntr-o memorie de configurare de tip RAM (oarecum similar cu cea de la FPGA). Structura de configurare astfel rezultat este nevolatil. Tehnologia CPLD ofer performane asemntoare tehnologiei FPGA pentru aplicaii de complexitate medie, la un pre de cost mai sczut. n acelai timp circuitele CPLD au o reea de interconexiuni de lungime fix (o proprietate a matricii de interconectare) ceea ce face ca sistemele numerice dezvoltate cu un circuit CPLD s prezinte ntrzieri predictibile n totalitate chiar din faza de proiectare (vezi figura 4.13). ntrzierile dintre fiecare dou celule logice coninute n CPLD sunt fixe i se cunosc. Aceasta se datoreaz faptului c structura de interconexiuni dintr-un CPLD este format din linii conductoare de lungime constant ce strbat structura circuitului pe toat lungimea i limea acestuia. n contrast cu CPLD-urile, FPGA-urile au o structur de interconexiuni format din segmente care strbat circuitul, iar capetele acestora sunt conectate de o matrice de interconectare permind semnalelor s ajung de la o celul logic la alta. Numrul de segmente necesare pentru a conecta dou celule logice nu este nici fix i nici predictibil, deci ntrzierile nu se pot cunoate dect dup ce se face asignarea i plasarea celulelor (dup implementare) .

Figura 4.13

Comparaie CPLD-FPGA privind poziia punctului de conexiune

n figura 4.13 este ilustrat modul diferit de interconectare intern la circuitele CPLD fa de circuitele FPGA.

77

Circuite logice programabile

Familiile reprezentative de circuite CPLD ale firmei Xilinx sunt: XC9500, XC9500XL, XC9500XV, Cool Runner II, Cool Runner XPLA3. Familiile Cool Runner sunt destinate unor aplicaii unde consumul propriu trebuie s fie foarte mic i vitezele de funcionare trebuie s fie mari. Actualmente (2004) cea mai nou familie CPLD Xilinx este Cool Runner II. Seriile XC9500 (XL, XV) difer ntre ele prin anumite valoarea tensiunii nominale de alimentare a circuitului propriu-zis (Vcc INT) i respectiv ale interfeei externe (VccIO). Ele sunt mprite n diverse clase din punct de vedere al frecvenei de lucru (al timpului de propagare) i sunt disponibile n diverse variante de ncapsulare. 4.2.1 Seria Xilinx XC9500XL Familia XC9500XL este realizat ntr-o tehnologie CMOS avansat (0.35 microni) numit FastFLASH i cuprinde circuite alimentate (VccINT ) la tensiunea nominal de 3,3V. ntrzierea minim pin la pin este de 5ns, iar frecvena intern de lucru este de pn la 200 MHz. Porturile I/O tolereaz semnale de intrare provenind de la circuite alimentate la 5V, 3,3V i 2,5V i sunt capabile s furnizeze semnale de ieire compatibile cu circuite TTL, sau CMOS alimentate la 3,3V i 2,5V. Alte caracteristici sunt inversarea local a semnalelor de ceas, validarea individual a ieirilor, controlul timpilor de front (slew rate), individual pe fiecare ieire, capabiliti sporite de securizare a datelor (protecie la citire, scriere, sum de control - checksum). Circuitele sunt garantate la peste 10.000 de cicluri de scriere/tergere, meninerea datelor fiind garantat 20 de ani. Familia cuprinde circuite de patru densiti (ca numr de macrocelule), compatibile pin la pin pentru acelai tip de ncapsulare. Densitile sunt cuprinse ntre 36 i 288 macrocelule cu 800 respectiv 6.400 de pori utilizabile (codurile sunt XC9536XL, XC9572XL, XC95144XL si XC95288XL). Numrul prezent n cod este de fapt numrul de macrocelule disponibile. Circuitele din aceast familie sunt disponibile n mai multe variante de ncapsulare i sunt compatibile pin la pin cu circuitele similare ca densitate din familia XC9500 sau XC9500XV (pentru acelai tip de capsul). Mai mult, aceast compatibilitate pin la pin exist i ntre circuitele de densiti diferite din aceiai familie, atunci cnd au aceiai ncapsulare. n momentul n care, din diverse motive, densitatea actual nu este suficient (proiectul nostru nu ncape n circuit), se poate trece fr probleme, la un circuit cu o densitate superioar, avnd acelai pin-out. n tabelele urmtoare sunt prezentate sintetic circuitele din aceasta familie. n tabelul 4.4 sunt prezentate numrul de macrocelule, numrul de pori utilizabile (usable gates), numrul de circuite bistabile (registers), timpii de propagare tPD i frecvena echivalent a sistemului (fsystem,).
78

Circuite integrate numerice. Aplicaii n mecatronic

Tabelul 4.4 Resurse pentru seria 9500XL

n tabelul 4.5 sunt prezentate variantele de ncapsulare disponibile pentru fiecare circuit, mpreun cu numrul de intrri/ieiri (I/O pins) disponibile pentru fiecare variant de ncapsulare. Tabelul 4.5 Variante de ncapsulare pentru seria 9500XL

Circuitele nglobeaz un anumit numr de Blocuri Funcionale (Functional Block) i de Blocuri de Intrare/Ieire (I/O Block) interconectate prin intermediul unei matrici de interconectare numit FastConnect II. Fiecare Bloc Funcional are maxim 54 de intrri i maxim 18 ieiri. Fiecare Bloc Funcional este compus din 18 macro celule (macrocell). La nivelul Blocului Funcional implementarea este tip sum de produse, fiind disponibili pn la 90 de termeni produs (Product Terms). Fiecare macro celul conine un bistabil - register (numrul de bistabile disponibile este egal cu numrul de macro celule al circuitului) care poate fi configurat ca fiind de tip D sau T sau absent cnd este neutilizat, n cazul n care funcia implementat este pur combinaional. Lund ca exemplu circuitul CPLD XC9572XL acesta este format din 72 de macro celule grupate n patru blocuri funcionale, numrul de pori utilizabile fiind de 1600. Circuitul CPLD-ul prezint caracteristicile specifice familiei i anume intrri tolerante la 5V, 3,3V i 2,5V (VIH), ieiri capabile s furnizeze 3,3V sau 2,5V (VOH). Structura funcional de baz a circuitului CPLD XC9572XL este prezentat n figura 4.14.
79

Circuite logice programabile

Figura 4.14

Structura circuitului XC9572XL

Puterea disipat poate varia substanial n funcie de frecvena de lucru, aplicaia implementat i ncrcarea ieirilor. Pentru a reduce consumul propriu, fiecare macro celul dintr-un dispozitiv XC9500 (XL, XV) poate funciona ntr-un mod de lucru cu putere sczut (low power) dac viteza de lucru nu este critic. Macro celulele neutilizate sunt implicit dezactivate, consumul lor fiind nesemnificativ . Valorile maxime absolute admise pentru tensiunea de alimentare VCCINT sunt ntre -0,5V i 4V fa de mas. Pentru tensiunea de intrare VIN valorile maxime admisibile sunt cuprinse -0,5 i 5V. Valorile nominale de alimentare pentru logica intern VCCINT = 3V ... 3,6V, iar pentru circuitele (bufferele) de ieire VCCIO =2.3V.. 3,6V. Astfel circuitele de ieire pot fi alimentate separat, de exemplu la tensiunea nominal de 2,5V. Indiferent de tensiunea de alimentare VCCIO nivelele de intrare sunt VILmax = 0,8V i VIHmin = 2V cu tensiunea de prag a intrrilor de cca 1.4 V (compatibilitate TTL). Nivelele logice de ieire sunt VOL = 0 i VOH = VCCIO (ieire CMOS, pentru curent de ieire nul).

80

Circuite integrate numerice. Aplicaii n mecatronic

Figura 4.15

Interfeele I-O posibile pentru 9500XL

n figura 4.15 este prezentat interfaa extern posibil pentru un astfel de circuit, n situaia n care (a) VCCIO =VCCINT = 3.3V i respectiv (b) cu VCCINT = 3.3V si VCCIO =2.5V. Configurarea (programarea) circuitului CPLD se face prin intermediul interfeei standard JTAG cu care se poate programa, terge, sau citi (dac nu a fost protejat la citire) coninutul datelor de configurare. Datele de configurare sunt descrise sub forma unui fiier standard JEDEC.

4.3 Aplicaii ale circuitelor CPLD (Complex Programmable Logic Devices)


Circuitele CPLD utilizate si la care se vor face referiri n continuare sunt circuite ale firmei Xilinx i aparin familiei XC9500XL. Mediul de programare la care se fac referiri particulare este Xilinx WebPACK. Pentru dezvoltarea unei aplicaii ce complexitate mic sau medie, cum sunt multe n domeniul mecatronic, n principiu sunt suficiente urmtoarele cunotine: - definirea unui proiect CPLD asociat unei aplicaii - alegerea ca int a unui anumit tip de circuit CPLD (ca resurse i pin-out) - editarea unei surse HDL folosind un editor HDL, detectarea i corectarea erorilor sintactice din sursa HDL - sinteza logic a unui netlist din descrierea HDL - plasarea si rutarea (fitting) netlist-ului obinut n circuitul CPLD int - verificarea modului n care au fost utilizate resursele CPLD-ului - utilizarea vectorilor de test pentru verificarea funcional a aplicaiei - generarea unui fiier JEDEC (implicit i a bitstream-ului) pentru CPLD - ncrcarea fiierului JEDEC (programarea circuitului CPLD) - testarea aplicaiei (a circuitului CPLD programat) Principalele probleme care nu vor fi abordate aici sunt:

81

Circuite logice programabile

proiectarea logic complex folosind un limbaj HDL (analiza timing, analiza puterii disipate) alegerea celui mai bun tip de CPLD pentru o anumit aplicaie configurarea circuitului pentru cea mai eficient utilizare a resurselor circuitului CPLD ce trebuie fcut dac resursele logice ale CPLD-ului sunt insuficiente i fitter-ul nu poate plasa netlist-ul

Realizarea unui proiect (a unei aplicaii, a unui circuit logic) cu ajutorul unui circuit CPLD presupune urmtorii pai (Design Flow): a. Descrierea circuitului logic folosind o schem (Schematics) sau un limbaj HDL cum ar fi ABEL, VHDL sau Verilog. Etapa poart numele i de Design Entry. b. Utilizarea unui program de sintez logic pentru a ajunge de la sursa HDL la o descriere a porilor logice utilizate i a modului n care acestea sunt conectate sau, cu alte cuvinte, pentru a compila sursa HDL ntr-un netlist. n continuare se poate face i o verificare a aplicaiei, prin simularea funcional cu ajutorul vectorilor de test sau a unui test bench. c. Utilizarea unui program fitter pentru a plasa porile logice i a ruta interconexiunile ntr-un anume circuit CPLD int. Circuitul CPLD este compus din mai multe blocuri funcionale care la rndul lor sunt formate din macrocelule. Blocurile funcionale i macrocelelule sunt sunt plasate n interiorul unor matrici de conectare- rutare (routing matrices). Fitter-ul asigneaz porile din netlist diverselor macrocelule din blocurile funcionale i, n acelai timp, configureaz matricile de conectare prin nchiderea sau deschiderea elementelor de comutaie (comutatoarelor) pentru a interconecta porile conform conectivitii descrise n netlist. Dup aceast etap se poate face o verificare complex a circuitului, luandu-se in considerare si timpii de propagare- o analiza de timing (Timing Analysis). d. Odat faza de plasare terminat un alt program (generatorul fiierului de programare) va extrage starea elementelor de comutaie din matricile de rutare i va genera o descriere sub forma unui ir de bii (bitstream). ntr-o descriere simplificatoare biii n 0 corespund unui comutator deschis, iar cei n 1 unui comutator nchis (n realitate lucrurile sunt mai complicate!). Bitstream-ul este incorporat unui fiier JEDEC, fiier coninnd i alte informaii, fiier a crui form i coninut este standard. e. Fiierul JEDEC poate fi acum ncrcat (download) n circuitul fizic (conectat n circuit i alimentat!) cu ajutorul unui program dedicat i al unui dispozitiv de programare extern (JTAG programmer). Dispozitivul de programare se conecteaz cu circuitul CPLD prin intermediul interfeei JTAG standard i utilizeaz unul din porturile externe ale calculatorului gazd (paralel, serial sau USB). Dup realizarea ncrcrii programrii, circuitul CPLD se va comporta conform descrierii din sursa HDL.
82

Circuite integrate numerice. Aplicaii n mecatronic

Biblioteci

Editor Scheme

Sintez

Sursa HDL

Netlist

DESCRIERE

VERIFICARE
Simulare funcional Vectori de test

Translatare

IMPLEMENTARE
Fitting, Plasare si rutare Analiz timing

Generare fisier
Bitstream / JEDEC

Programarea circuitului Testarea si depanarea aplicatiei (proiectului)

Figura 4.16

Etapele unui proiect CPLD


83

Circuite logice programabile

Configurarea (programarea) circuitelor CPLD Xilinx se face prin intermediul unei interfee JTAG standard. Pentru aceasta se utilizeaz un modul de programare (JTAG programmer) cu o arhitectur deschis, care se conecteaz la portul paralel PC i care este recunoscut de componenta de programare a mediului ISE. O schem electric a programatorului JTAG este prezentat n figura 4.17. Programatorul poate fi folosit att pentru configurarea circuitelor CPLD ct i a circuitelor FPGA Xilinx. Bufferele utilizate sunt de tip 74HC125 care funcioneaz (ca de fapt toat seria 74HC) la tensiuni de alimentare de la 2V la 6 V (tensiunile nominale de 2.5V, 3,3V si 5V corespunztoare seriilor 9500XV, 9500XL i 9500 sunt astfel acoperite). Procesul de programare verific prezena modulului de programare, dup care verific prezena circuitului (sau a circuitelor) conectate la interfaa JTAG. Cu ajutorul programatorului se pot programa, se pot terge sau se pot citi datele de configurare. De asemenea se poate verifica dac datele programate n circuit corespund cu fiierul de configurare, se poate citi un identificator al circuitului sau o sum de control (checksum), se poate proteja circuitul la citire.

Figura 4.17

Schema programatorului JTAG Xilinx


84

Circuite integrate numerice. Aplicaii n mecatronic

Capitolul 5 Compatibilitatea electromagnetic n proiectarea cu circuite integrate numerice 5.1 Noiuni introductive
Discuia care urmeaz se refer la problema compatibilitii electromagnetice - CEM (n englez EMC ElectroMagnetic Compatibility) pentru un sistem numeric realizat cu circuite integrate numerice de mare vitez. Problema poate fi abordat din punct de vedere al controlului emisiei energiei electromagnetice radiate de sistem sau al susceptibilitii sistemului fa de acest tip de radiaie perturbatoare. Toate tehnicile utilizate pentru limitarea emisiei duc i la reducerea sensibilitii. Mai mult, reducerea interferenei electromagnetice IE (n englez EMI - ElectroMagnetic Interference) are ca efect reducerea n ansamblu a zgomotului sistemului numeric i eventual al unor subsisteme analogice locale, cu efecte benefice asupra siguranei n funcionare a produsului final oferit utilizatorului. CEM exist doar atunci cnd sistemul funcioneaz corect n condiii de mediu electromagnetic date i nu sunt depite nivelele de IE specificate n standarde. Termenul de IE are n vedere o band de frecven "de la curent continuu la spectrul vizibil" nglobnd astfel i termenul mai vechi de interferen radio- IR (n englez RFI Radio Frequency Interference) care se refer doar la banda de frecven 10KHz - 3GHz. Neluarea n considerare a acestor probleme n faza iniial de dezvoltare a unui produs poate duce modificri ulterioare ale proiectului deosebit de costisitoare (componente suplimentare, reproiectare cablaje imprimate, reomologri, etc.). Prin nsi natura lor sistemele mecatronice pun probleme deosebite de CEM (e suficient s lum ca exemplu aplicaiile din industria automobilului), obiectul acestei prezentri sumare ne acoperind i problematica controlului la surs al perturbaiilor externe sistemului numeric (gen deparazitare, etc.). Exist situaii n care numai controlul la surs al perturbaiilor externe constituie o alternativ acceptabil din punct de vedere economic, dar i situaii n care acesta este practic imposibil, fiind necesare tehnici speciale de ecranare a sistemului i/sau izolare a cilor de semnal. OBSERVAIE Directiva comunitii europene 89/336 EEC Compatibilitate electromagnetic, a fost adoptat n Romnia prin HG 1032/2001 privind stabilirea condiiilor de introducere pe pia i funcionare a aparatelor electrice i electronice din punct de vedere al compatibilitii electromagnetice, modificat i completat ulterior prin HG 497/2003 i HG 1554/2003.

85

Compatibilitatea electromagnetic

5.2 Spectrul de frecven al unui semnal numeric


Spectrul de frecven al unui semnal periodic este compus (n sens Fourier) din componente discrete de frecven, componente care includ frecvena fundamental (fo) i armonici multiple (de forma nfo; n = 2 , 3.. ). Pentru o form de und trapezoidal, caracteristic unui semnal numeric, amplitudinea relativ a componentelor de frecven este legat de frecvena fundamental, timpii de front i de factorul de umplere ([18], [38], [41]). n figura 5.1 este dat o evaluare a componentelor armonice a unei forme de und trapezoidale, cu ajutorul unei diagrame Bode (numit i anvelop Fourier):

Figura 5 .1

Anvelopa Fourier a unui semnal numeric

V- amplitudinea semnalului; P - limea impulsului (n "1"); tr -timpul de front (de cretere); T - perioada [sec]; d = ( P + tr ) / T - factorul de umplere A - aria buclei radiante [cm2 ]; Nivelul de referin este: 0 dB = 20 log ( 2Ad ) [dB] cu f1 = 1/ (P) [ Hz] i f2 =1/ ( tr) [ Hz ]. La frecvene peste f1 amplitudinea armonicilor scade cu - 20dB /octav, iar la frecvene peste f2 cu - 40dB/octav . Pentru multe aplicaii acestea din urm au o amplitudine suficient de mic pentru a fi neglijate, astfel c "banda de frecven" a sistemului este considerat ca fiind 1 / ( tr). Pentru o familie de circuite numerice de mare vitez care asigur, de exemplu, timpi de front de cca. 2nsec, rezult armonici semnificative radiate de pn la 160 MHz! Orice traseu de circuit imprimat, terminal de component, cablu de legtur sau conector cuplat
86

Circuite integrate numerice. Aplicaii n mecatronic

direct (galvanic) sau capacitiv poate aciona ca o "anten" pentru armonicile respective! Radiaia electromagnetic a sistemului poate fi considerat de mod diferenial sau de mod comun, cea din urm fiind i cea mai greu de controlat. Radiaia de mod diferenial este datorat buclelor de curent de nalt frecven formate n jurul conductorilor sistemului. Pentru suprafee mici ale buclei, componenta electric ndeprtat a cmpului (evaluat tipic deasupra unui plan de mas) poate fi aproximat la : E = 2.6 A I f2 / r [ mV/cm ] ; unde 2 A [cm ]aria buclei, I[A]curentul prin bucl, f [MHz] - frecvena, r [ m ] distana. Distana r, la care se face evaluarea, este fixat de standarde. Aria buclei i curentul pot fi reduse printr-o proiectare judicioas a circuitului i a cablajului imprimat. Radiaia de mod comun este datorat cderilor parazite de tensiune din circuit, care fac ca anumite pri ale acestuia, dei conectate la mas, s-i ridice potenialul peste potenialul real al masei. Conductorii conectai la aceste puncte acioneaz ca antene, radiind componenta de mod comun a cmpului. Componenta electric ndeprtat a cmpului poate fi aproximat la: E = (f IMC ) / r [ mV/cm ] ; unde l [m] - lungime anten (conductor) ; IMC [A] - curentul de mod comun Singurele variabile controlabile de proiectant sunt impedanele cilor comune de curent i curentul de mod comun. Curenii de mod comun trebuie redui prin utilizarea unor scheme judicioase de legare la mas a circuitelor integrate i a celorlalte dispozitive electronice, iar impedana antenelor echivalente (conductoarele de alimentare) poate fi crescut prin adugarea de inductane i capaciti (filtre trece-jos).

5.3 Modaliti de realizare a CEM i de reducere a zgomotului


Vom trece n revist principalele puncte care trebuiesc abordate de un proiectant pentru a realiza att CEM a sistemului ct i reducerea n ansamblu a zgomotului ([18], [36], [37]). a. Decuplarea sursei de alimentare Decuplarea adecvat a surselor de alimentare este o cerin esenial n asigurarea unui nivel minim de zgomot al sistemului, garanie a funcionrii lui sigure, ct i a reducerii IE. Circuitele integrate de mare vitez (familii TTL-AS, HCMOS, ACMOS, etc.) sunt caracterizate i de prezena unor vrfuri (variaii rapide) importante de curent pe liniile de alimentare. Valoarea medie a curentului de alimentare nu este relevant (mai ales pentru familiile CMOS),

87

Compatibilitatea electromagnetic

vrful de curent putnd avea valori consistente pentru anumite circuite (V)LSI sau pentru circuite cum ar fi bufferele de magistral (cu sarcini capacitive importante). Sursa de alimentare trebuie s fie capabil s susin vrfurile respective la bornele de alimentare ale circuitului integrat. Rolul unui circuit de decuplare este de reduce impedana echivalent a sursei de alimentare vzut la bornele de alimentare ale circuitului. El se realizeaz cu ajutorul unor capaciti care pot fi dimensionate corespunztor prin impunerea unei limite a variaiei tensiunii la borne, pentru o durat cunoscut a regimului tranzitoriu al curentului ([35]). Ca exemplu numeric, fie un circuit LSI realizat n tehnologie ACMOS alimentat la VDD=5V, la care vrful de curent este IDD max =100mA, cu o form de variaie presupus triunghiular i cu durata regimului tranzitoriu de t = 10 nsec (baza triunghiului!); impunem o limit de variaie a tensiunii de V de 20% din cea mai mic margine de zgomot MZL = 0.9V (vezi de exemplu i familia 74ACT cu intrri compatibile TTL), deci V = 0.2 x 0.9V = 180 mV, astfel c valoarea minim a capacitii de decuplare este: C = IDD max / ( V / t ) = 100mA / (180mV/10nsec) = 0.06mF = 6 nF. Pentru a fi eficient decuplarea, impedana ntre circuitul de decuplare i sarcin trebuie s fie ct mai mic posibil, iar pentru a reduce IE, bucla rezultant prin introducerea decuplrii trebuie s aib dimensiuni (de fapt arie) ct mai mici posibile ([12], [35]).

Figura 5.2

Decuplarea alimentrii unui circuit integrat numeric

Dac ar fi s analizm circuitul de decuplare prezentat n figura 5.2 i schema sa echivalent vom meniona c avem un capacitor de decuplare C, care este plasat la distan fa de bornele de alimentare (lungimea total a traseelor de cablaj fiind de exemplu de cca 15cm). Rt, Lt sunt inductana i rezistena traseului de cablaj imprimat, cu valori specifice de 5nH/cm i 5m /cm. Lc sunt inductanele parazite ale condensatorului de decuplare (ale terminalelor i cele
88

Circuite integrate numerice. Aplicaii n mecatronic

intrinseci) fiind de cca 3nH. Componentele impedanei conexiunilor interne ale pinilor microcircuitului sunt de cca. 4nH cu 1m. Rezult de aici componentele impedanei totale a cilor de alimentare de L = 90nH i R=80m. Cderile de tensiune parazite vor fi (cu aceleai valori ca la exemplul numeric precedent): VpR = 80m x 100mA = 8 mV i VpL = L i / t = 90nH 100mA/ 10nsec = 0.9V. Valoarea rezultat este inacceptabil, fiind de dimensiunea lui MZL! Componenta critic n acest caz este inductana parazit a cilor de curent respective. Reducerea inductanei respective presupune n primul rnd plasarea ct mai aproape de bornele de alimentare ale circuitului integrat a condensatorului de decuplare, folosirea de trasee mai late sau utilizarea unor plane de mas i alimentare (la cablajele multistrat). Se utilizeaz condensatoare de decuplare ceramice tip multistrat (cu o inductan intrinsec Lc minim) i, dac este posibil, n varianta SMD (Surface Mounted Device) - cu montare pe suprafa, fr gurire - care permit mult mai uor plasarea capacitorului la o distan minim de bornele de alimentare ale circuitului integrat. Condensatorul de decuplare mpreun cu inductana buclei formeaz i un circuit rezonant serie cu frecvena proprie de rezonan f =1 / [ 2 (LC)1/2 ]. La frecvene mai mari ca f impedana circuitului devine inductiv i decuplarea va fi mai puin eficient. La rezonan, impedana, pur rezistiv, are o valoare minim, lucru care poate fi valorificat la rezolvarea unor probleme de IR ntr-o band ngust de frecven. Ca regul general, decuplarea individual a circuitelor nu este necesar dect pentru circuitele LSI sau VLSI (microprocesoare, memorii, etc.) sau a unor circuite de cuplare la magistral (drivere multiple), altcumva utilizndu-se doar un condensator de decuplare pentru fiecare grup de 5.. 10 circuite integrate SSI sau MSI. Pentru c evaluarea vrfului de curent este de regul dificil (depinznd de muli factori) se poate utiliza o valoare acoperitoare i anume un condensator polarizat (recomandabil n varianta cu tantal din cauza inductanei interne) de 1F n paralel cu un condensator ceramic multistrat de 0.01F. Condensatorul de valoare mare poate acoperi vrfuri importante de curent, iar cel mic asigur rspunsul de nalt frecven, care altfel ar fi afectat de inductanele parazite ale condensatorului polarizat. Se mai utilizeaz i o decuplare general a alimentrii ntregii plachete PCB, chiar la bornele ei de alimentare, cu un condensator polarizat de 10 .. 100F, funcie i de consumul global. Pentru a evita ca zgomotul eventual prezent pe alimentarea plachetei s fie radiat prin intermediul conectorului i al cablurilor de conexiune, ntre pinul conectorului i borna + a condensatorului de decuplare general se poate introduce o inductan. Ea se poate realiza i cu cteva spire pe un miez de ferit (inel), la dimensionare inndu-se cont i de componenta de curent continuu care nu trebuie s satureze miezul, fcndu-l ineficient ([35]).

89

Compatibilitatea electromagnetic

c. Adaptarea liniilor de semnal Viteza de propagare a unui semnal pe un traseu de cablaj imprimat (linie de semnal), de la surs ctre sarcin, este de cca. 0.6 din viteza luminii (cca. 18cm/nsec). Dac linia de semnal nu este adaptat cu sarcina (impedana de sarcin este diferit de impedana caracteristic a liniei), atunci funcie de gradul de neadaptare, o anumit parte a semnalului va fi reflectat napoi pe linie, ctre surs. n cazul neadaptrii ntre surs i linie, o parte a semnalului va fi din nou reflectat .a.m.d. Reflexiile respective pot duce la o deformare semnificativ a semnalului i, pe lng alte efecte negative, constituie i o surs de IE. Dac linia este adaptat, atunci linia de semnal vede sarcina tot ca o linie infinit, neaprnd reflexii. n cazul unei linii neadaptate, dac timpii de front ai sursei de semnal sunt suficient de mici n comparaie cu timpul de propagare pe linie, atunci reflexiile vor fi absorbite de surs pe durata fronturilor. Ca o regul practic, dac timpul de propagare pe linie a semnalului este mai mic de 1/4 din timpii de front, nu sunt necesare msuri de adaptare a liniei (care presupun de fapt utilizarea unor terminatori de linie prin care se foreaz adaptarea, vezi paragraful 5.4) . e. Tehnici de legare la mas (grounding) "Masa" unui sistem numeric ar trebui s fie un punct sau un plan echipotenial al crui potenial s fie utilizat ca potenial de referin n sistem. n realitate aceast cerin nu este niciodat strict ndeplinit datorit impedanelor parazite i a curenilor care se nchid prin liniile de mas, care duc la apariia unor cderi de tensiune parazite de mod comun ([12]). n figura 5.3 sunt prezentate variante de realizare a legturilor la mas: punctual (i.), multipunct (ii.) sau hibrid (iii.). Varianta (i.) este acceptabil la frecvene joase, dar la frecvene nalte lungimea firelor trebuie redus la minim pentru a reduce inductana i capacitatea de a radia. La varianta (ii.) fiecare element este conectat la cel mai apropiat plan de mas (ca o cale de impedan minim), fiind astfel adecvat la frecvene mari. Varianta (iii.) se comport ca o mas punctual la joas frecven i ca una multipunct la frecvene nalte.

Figura 5 .3

Tehnici de legarea la mas

De regul, ntr-un sistem se utilizeaz, implicit sau explicit, o combinaie a celor trei moduri. n identificarea corect a cilor de curent este util o schem bloc pe care s se pun n eviden principalele componente ale sistemului (din punct de vedere al alimentrii): analogice (de semnal mic), numerice propriu-zise, circuite de interfa intrare/ieire, etc.

90

Circuite integrate numerice. Aplicaii n mecatronic

Precauii deosebite n proiectarea traseelor de alimentare trebuie luate atunci cnd sistemul nglobeaz i subsisteme analogice. n figura 5.4 sunt prezentate: la a. o variant incorect de realizare a legturii de mas, n care zgomotul prezent pe masa numeric (Vzg) apare nsumat cu mrimea de intrare (Ain) a seciunii analogice, iar la b. varianta corect de separare acelor dou mase, ele unindu-se doar la bornele sursei (surselor) de alimentare sau acolo unde liniile de alimentare ajung pe placheta de cablaj imprimat.

Figura 5 .4

Masa analogic i masa numeric

g. Conexiunile pentru intrri/ieiri externe i ecranarea Ecranarea electric (cu un ecran din material conductor o cuc Faraday) i-sau magnetic (cu un ecran din material feromagnetic) a ntregului sistem numeric este de regul necesar atunci cnd perturbaiile nu pot fi controlate la surs. n aceast situaie utilizarea i a unor cabluri ecranate pentru liniile de intrare/ieire (interfaa extern a sistemului) nu este eficient din punct de vedere al IE dect dac punctele de mas la care se conecteaz ecranul nu sunt zgomotoase, altfel ecranul va deveni el nsui o surs de radiaie. n general, pentru semnale de joas frecven, ecranul se poate conecta la mas doar la un capt, iar
91

Compatibilitatea electromagnetic

pentru nalt frecven la ambele capete. Pentru semnale numerice ecranul se conecteaz la mas (dac este posibil) la ambele capete, ncercnd astfel ca el s fie adus ct mai aproape de potenialul masei pe toat lungimea sa. Atenie ns, conectarea sa la ambele capete poate da natere la o bucl radiant de curent de mas de mari dimensiuni, dac cele dou puncte de mas nu sunt la acelai potenial! O soluie radical i foarte util este utilizarea unei bariere de izolare optic (a unui optocuplor) pentru semnalele numerice potenial zgomotoase. Banda de frecven a optocuplorului trebuie corelat cu banda de frecven a semnalului numeric care se dorete izolat. Semnalele care provin din exteriorul sistemului, i sunt potenial zgomotoase, nu trebuie s fie introduse n interiorul acestuia, fiind pstrate la grania acestuia: liniile de semnal corespunztoare nu trebuie plimbate prin sistem, ci vor avea cea mai mic dimensiune posibil (de exemplu, pn la intrarea optocuplorului) . h. Diafonia Diafonia ("crosstalk" n englez) este un efect de interferen prin care o linie de semnal considerat "activ" (pe care exist o tranziie, un regim dinamic, se propag un semnal sau un front de und) acioneaz asupra unei alte linii, considerat "inactiv" (semnalul are o valoare stabilizat), cele dou linii aflnduse n imediat apropiere (adiacente). Exist dou forme de diafonie: direct i respectiv invers, care prezint interes din punct de vedere al proiectrii unui sistem numeric. Cauzele care le provoac sunt similare dar efectele pot diferi considerabil ([36], [37]). Diafonia apare datorit unor factori intercorelai care pot fi grupai n dou mari categorii: - existena unor inductane mutuale distribuite parazite (capacitive i/sau inductive) ntre cele dou linii de semnal - existena unor diferene ntre vitezele de propagare a semnalului pe cele dou linii. O reprezentare schematic a celor dou linii adiacente de semnal este dat n figura 5.5 a. , unde Z1 i Z2 sunt impedanele caracteristice ale celor dou linii de semnal, iar Zc impedana mutual (responsabil de cuplajul celor dou linii de semnal). La capetele liniilor se afl dou pori, una care comand (un driver D) i alta care este comandat (un receptor R). OBSERVAIE Circuitul corespunztor celei de-a doua linii de semnal poate fi n realitate i rotit cu 180o n jurul unei axe verticale. O schem echivalent simplificat este prezentat n figura 5.5.b. Rs este rezistena de ieire a porii (D) cu valori tipice pentru cele dou stri (de exemplu o poart TTL AS) RsL= x Ohmi , RsH = x10 Ohmi i Vout = (VOH - VOL ) = 3.5V fiind o mrime cu semn, funcie de tipul tranziiei LH sau HL. Rezistena de
92

Circuite integrate numerice. Aplicaii n mecatronic

intrare se consider mult mai mare dect valorile menionate de rezisten (pentru linii cu impedane caracteristice Z1, Z2 = x10 ..x100 Ohmi). Rezult o valoare de forma Vd = Vout ( Z2 / 2 ) / ( Rs + Zc + Z1 / 2 + Z2 / 2 ), ca tensiune de diafonie, o mrime cu semn care se nsumeaz cu semnalul util.

Figura 5 .5

Diafonia

Diferena de vitez apare atunci cnd semnalul se propag pe un conductor care este n contact cu substane avnd constante dielectrice diferite (rin epoxy, aer, alte mase plastice diverse, etc.). Diafonia direct apare atunci cnd driverul activ si driverul de pe linia inactiv sunt la acelai capt al liniilor: frontul de und se propag ctre receptorul activ i respectiv ctre cel inactiv simultan. n mod clasic ea este atribuit diferenei de vitez de propagare. Diafonia invers apare atunci cnd driverul activ i receptorul "inactiv" se afl la acelai cap al liniilor de semnal: frontul de und se propag simultan ctre receptorul activ i driverul inactiv. Ea se datoreaz integral impedanei mutuale ntre liniile de semnal. Situaiile care intereseaz n practic sunt cele n care liniile adiacente sunt reprezentate de dou trasee adiacente de cablaj imprimat sau de dou fire dintr-un cablu multi filar numit de obicei cablu panglic ("flat / ribbon cable" ). Cablul panglic este alctuit din mai multe fire (x1.. .. x10) cu izolaie din PVC, lipite ntre ele astfel nct s formeze o panglic sau din perechi de fire izolate analog, dar torsadate dou cte dou (twisted pair), aceste perechi lipite ntre ele formnd panglica. El este destinat interconectrii ntre diverse subsisteme numerice (de exemplu module, plachete de cablaj imprimat ). Pentru aceste situaii se pot face o serie de recomandri practice aplicabile n faza de proiectare ct i pentru un produs deja finalizat (prototip). Astfel n faza de proiectare a cablajului imprimat se pot lua urmtoarele msuri: - asigurarea unui spaiu maxim posibil ntre dou trasee de cablaj - asigurarea unui spaiu minim posibil ntre traseele de semnal i cele de mas - separarea, dac este posibil, a celor dou linii de semnal printr-un traseu de mas - folosirea, dac este posibil, a unui plan de mas (a unui cablaj multistrat)
93

Compatibilitatea electromagnetic

- pentru cablul panglic, intercalarea ntre firele de semnal a unor fire de mas sau folosirea panglicii de perechi de fire torsadate (evident mai scump), la care unul din fire va fi fir de mas. OBSERVAIE Msurile de precauie menionate trebuie s aib n vedere, n primul rnd, liniile de semnal "critice" din punct de vedere al sensibilitii la perturbaii (intrri de ceas, intrri asincrone de set/reset, comenzi asincrone de ncrcare paralel la registre sau numrtoare, .a.m.d ). Ca una din principalele "surse" de diafonie se pot ntotdeauna considera semnalele de ceas vehiculate la nivelul sistemului sau orice alte semnale periodice avnd timpii de front mici i foarte mici . Pentru un produs deja finalizat, de natura unui prototip, la care s-au pus n eviden perturbaii datorate diafoniei i au fost identificate perechile relevante de linii/trasee de cablaj se mai poate : - lipi cu un adeziv un fir de mas de-a lungul liniilor de semnal/traseelor pe cablaj (dac este posibil ntre ele) - tia unul din trasee i nlocui cu un fir exterior Rezultatele acestor aciuni, eventual pozitive, pot fi valorificate la reproiectarea cablajului pentru producia de serie ([39]). h. Proiectarea cablajelor imprimate O proiectare judicioas a cablajului imprimat (PCB - Printed Circuit Board), n ansamblu, este esenial n realizarea CEM i n reducerea zgomotului sistemului. Cea mai mare atenie trebuie acordat reducerii inductanei cilor de semnal, alimentare precum i a suprafeei buclelor radiante ([39]). Inductana unui conductor plat (un traseu de cablaj imprimat) evaluat deasupra cii de ntoarcere a curentului este dat de : L= 2 ln (2p h/d) [ nH/cm ] ; unde d - limea traseului i h nlimea (distana) fa de calea de ntoarcere a curentului. Relaia fiind logaritmic, dublarea limii nu njumtete i inductana! Este de dorit (atunci cnd costul suplimentar se poate justifica) utilizarea unui cablaj multistrat (multilayer), cu planuri de alimentare (supply) i de mas (ground) separate, planurile cu liniile de semnal fiind eventual cuprinse ntre acestea ("sandwiched" ), aranjament care ofer i o oarecare ecranare.

Figura 5 .6

Seciune transversal ntr-un cablaj imprimat (PCB) multistrat

n figura 5.6 este prezentat o seciune ntr-un cablaj multistrat, cu 4 straturi: S1 i S4 sunt straturile exterioare destinate realizrii de interconexiuni de

94

Circuite integrate numerice. Aplicaii n mecatronic

uz general, S2 i S3 sunt straturi interne (planele de alimentare GND i Vcc). Conectarea la planele interne precum i trecerile ntre planele S1 i S4 se face, de exemplu, prin intermediul unor guri metalizate GM (numite "vias" ). Pentru reducerea diafoniei, liniile de semnal din planurile adiacente ar trebui s fie i perpendiculare, atunci cnd este posibil. Utilizarea unor componente SMD este foarte avantajoas nu numai din punct de vedere al tehnologiei de montare, ci i datorit faptului c dimensiunile lor mici fac posibil i reducerea dimensiunilor buclelor de curent! Semnalul de ceas (de tact) al unui sistem sincron este adesea o surs major de radiaie. Componentele aferente generatorului de ceas trebuie grupate ct mai strns, iar liniile de distribuie a acestuia trebuie s fie ct mai scurte i dac este posibil s aib trasee de mas adiacente. Dac avem componente ale unui anumit modul (circuit integrat) utilizate la realizarea generatorului de ceas (pori, bistabile, etc.), componentele rmase eventual disponibile (libere) la nivelul modulului nu mai trebuie utilizate i n alt scop. Pentru a evita distribuirea unui ceas de nalt sau foarte nalt frecven se utilizeaz scheme de distribuie n care frecvena ceasului este multiplicat local, la nivelul modulului utilizator, prin utilizarea unor circuite de tip FLL sau DLL bucle cu calare de frecven sau de ntrziere (Frequency Locked Loop, Delay Locked Loop). Alt surs de IE este modificarea brusc a direciei unui traseu de cablaj, modificare care apare ca o discontinuitate din punct de vedere al impedanei caracteristice a liniei de transmisie i constituie o surs de radiaie. n figura 5.7 este prezentat la a. o astfel de situaie i la b. soluia corect de modificare a direciei unui traseu (ideal ar fi un racord curb cu o raz de racordare ct mai mare).

Figura 5 .7

Modificarea direciei unui traseu PCB

OBSERVAIE Situaia de la a. trebuie evitat i din considerente de tehnologie a realizrii cablajului imprimat, astfel de trasee, mai ales cnd au o lime mic (< 0.8mm), fiind predispuse la fisurare (i ntrerupere) atunci cnd cablajul este supus la tensiuni mecanice. Tot discontinuiti ale impedanei liniei apar la modificrile abrupte ale limii traseelor sau la trecerea liniei respective prin diveri conectori ([18], [39]). Ca o ultim precauie dar nu i cea din urm, nu trebuie uitat c toate intrrile neutilizate ale diverselor circuite numerice trebuie conectate la un potenial ferm ("0" sau "1" funcie de tipul circuitului, vezi i problematica conectrii intrrilor neutilizate pentru diverse familii de circuite integrate numerice).

95

Compatibilitatea electromagnetic

5.4 Terminatori de linie


Pentru a evita efectele nedorite ale neadaptrii de impedan la ambele capete ale liniei de semnal sau numai la captul dinspre sarcin se pot utiliza terminatori de linie prin intermediul crora s se realizeze adaptarea de impedan. Exist mai multe variante de realizare efectiv, niciuna neconstituind o soluie universal aplicabil. Alegerea soluiei concrete se face funcie i de alte criterii cum ar fi: restricii geometrice (de spaiu disponibil), putere consumat, numr de componente discrete, familia de circuite utilizat, alte efecte secundare datorate terminatorului ([11], [18], [36], [37], [41]).

Figura 5.8

Plasarea intrrilor fa de linie

Un factor important care trebuie luat ntotdeauna n considerare este modul n care sarcina (intrarea sau intrrile circuitelor comandate) este plasat fa de linie. Sarcina poate fi plasat (concentrat) la ieirea liniei (figura 5.8a) sau poate fi distribuit pe linie (intrrile sunt conectate n diverse puncte pe linie, figura 5.8b) aa cum se ntmpl atunci cnd linia este fapt este o linie a unei magistrale.

Figura 5.9

Variante uzuale de terminatori de linie


96

Circuite integrate numerice. Aplicaii n mecatronic

Variantele de realizare a terminatorilor de linie sunt prezentate n figura 5.9. a. Rezisten serie Varianta poate fi utilizat atunci cnd sarcina este concentrat la captul liniei i cnd impedana sursei Zs este mai mic dect impedana caracteristic a liniei ncrcate (Zo') precum i atunci cnd se dorete un numr minim de componente. Rezistena este plasat n serie cu ieirea sursei, n imediata apropiere a acesteia, i are valoarea R=Zo'-Zs. n aceste condiii unda incident are jumtate din amplitudinea tranziiei, iar dac impedana de sarcin este foarte mare, sarcina vede imediat ntrega amplitudine a tranziiei datorit reflexiei la acest cap al liniei. Alegerea valorii rezistenei nu este de obicei simpl deoarece impedanele de ieire n cele dou stri ale ieirii pot diferi. Prezena rezistenei duce i la apariia unei ntrzieri suplimentare (circuit RC cu capacitatea total a liniei) i la o oarecare degradare a marginii de zgomat de cc datorit cderii de tensiune pe rezisten. n condiiile menionate, ea este recomandabil n cazul intrrilor CMOS (i datorit consumului redus). b. Rezisten derivaie Se utilizeaz o singur rezisten R=Zo' conectat ctre mas (ca n figur), tensiune de alimentare (Vcc) sau eventual la un potenial intermediar apropiat de Vcc. Principalul dezavantaj este consumul suplimentar de regim static datorit valorilor relativ mici ale rezistenei care trebuie utilizat (R=50-150 innd cont de valorile tipice ale impedanei caracteristice). Este afectat i marginea de zgomot pentru una din cele dou stri (funcie de potenialul la care se conecteaz rezistena). c. Reea Thevenin Reprezint un compromis ntre dou modaliti de conectare a rezistenei derivaie (la mas sau Vcc) obinndu-se astfel o scdere a consumului. Cele dou rezistene se dimensioneaz astfel nct Zo'=R1 // R2. Raportul celor dou rezistene trebuie ales cu grij astfel nct valorile pentru punctele statice de funcionare s nu duc la o degradare a marginii de zgomot de cc. Recomandat pentru intrrile compatibile TTL i mai puin pentru intrrile CMOS cu tensiunea de prag VP=VDD /2. d. Circuit RC Rezistena asigur adaptarea de impedan cu R=Zo', iar capacitorul blocheaz componenta de curent continuu n regim static, conectnd rezistena doar pe durata tranziiilor. Se obine astfel o reducere important a consumului. Capacitorul are valori de x100pF, astfel nct constanta de timp a circuitului RC s fie de dou ori mai mare timpul de propagare pe linia ncrcat. Circuitul se preteaz la utilizare att cu intrri compatibile TTL ct i CMOS.

97

Compatibilitatea electromagnetic

e. Reea de diode Prezena celor dou diode la bornele sarcinii (la intrarea porii) limiteaz supracreterile pozitive sau negative la o cdere de tensiune pe diod fa de mas (negativ) sau tensiunea de alimentare (pozitiv). Diodele utilizate trebuie s aib caracteristici de comutaie corespunztoare cu vitezele de variaie ale semnalului. Se utilizeaz de obicei diode Schottky (cdere de tensiune mai mic, vitez mare de comutaie). Trebuie remarcat c energia corespunztoare reflexiilor nu este disipat rezistiv ca la celelalte variante de terminatori, astfel c pe linie reflexiile continu s existe, lucru de care trebuie inut cont dac avem o sarcin distribuit. Aceast variant, ca i cele de la b., c. i d. nu introduce ntrzieri suplimentare la propagarea semnalului pe linie. Pentru realizarea de economie de spaiu, diverse variante multiple (uzual pentru 4, 8 sau 16 linii) de terminatori sunt disponibile n construcii compacte (unele ncapsulate analog circuitelor integrate) putnd fi folosite n cazul unor magistrale. Pentru a avea o imagine de ansamblu asupra situaiilor se impune asimilarea interconexiunilor unor linii de transmisie, n cazul utilizrii unor familii diverse, n tabelul 5.1 sunt prezentate lungimile maxime ale interconexiunilor care rezult din comparaia ntre durata total a tranziiilor (a fronturilor) d.t.f i timpul de propagare al semnalului pe linie T. Comparaia este fcut pentru o condiie mai puin restrictiv d.t.f / TPD 3 i pentru un timp specific de propagare al semnalului pe interconexiune de cca. 6nsec/m ([36], [37]). Tabelul 5.1 Familie Timpi de front Durat total 10% -90%, fronturi(d.t.f) date de catalog 0% -100%, [nsec] [nsec] 4 5 1.5 2 4 5 1 1.3 6 7.5 2 3 90 113 50 63 10 12.5 3 3.8 2.4 3 Lungime maxim interconexiune pentru d.t.f /TPD =3 [cm] 23 10 23 6 35 14 520 270 58 16.5 12.7

TTL STTL LSTTL AS ALS FAST 4000 (5V) 4000 (15V) HCMOS ACT AC (TI)

98

Circuite integrate numerice. Aplicaii n mecatronic

Capitolul 6 Limbaje de descriere hardware (HDL-Hardware Description language)


Metodele tradiionale de proiectare a unui sistem numeric (numit generic i circuit logic) sunt cele bazate pe ecuaiile booleene sau pe reprezentarea schematic. Orice circuit logic este alctuit pn la urm dintr-un numr oarecare de pori si/sau circuite bistabile, care sunt blocurile funcionale de baz. Proiectarea se fcea n mod tradiional pe baza ecuaiilor boolene. Pentru a optimiza aceast metod s-au dezvoltat tehnici cum ar fi minimizarea ecuaiilor, care permite utilizarea mai eficient a porilor i circuitelor bistabile. Metoda ecuaiilor boolene presupune scrierea practic a unei ecuaii, pentru fiecare circuit bistabil i pentru fiecare bloc de pori. Pentru un sistem secvenial numrul de ecuaii este cel puin egal cu cel al circuitelor bistabile (registrelor). Dac sistemul nostru are sute de circuite bistabile vom avea i sute de ecuaii. Astfel, dei teoretic orice sistem numeric poate fi descris pe baza ecuaiilor boolene, aceasta descriere (ca metod) este total nepractic daca avem zeci, sute sau mii de ecuaii. Metodele bazate pe reprezentarea schematic (Schematics) sunt metode care folosesc o reprezentare grafic a sistemului numeric i care realizeaz n acelai timp o extindere a metodei ecuaiilor boolene, prin utilizarea i a altor blocuri funcionale, mai complexe dect porile i circuitele bistabile. Ele prezint avantajul c permit o proiectare ierarhic i pun n eviden mai bine relaiile care exist ntre diversele blocuri funcionale. Muli ani de zile aceste metode au fost considerate optime pentru reprezentarea unui sistem numeric. Odat cu creterea complexitii sistemelor reprezentate i ele au devenit nepractice. Se mai utilizeaz pentru sisteme de complexitate mic sau medie. Marele dezavantaj al metodelor tradiionale de proiectare este c un sistem trebuie specificat ca o reea de elemente interconectate. n realitate ns un sistem numeric este specificat prin comportarea (behaviour) sa n anumite circumstane specificate. Proiectantul trebuie s ajung de la aceasta form de specificare la un set de ecuaii sau o reprezentare grafic. Acest pas important poate fi n ntregime eliminat prin utilizarea unui limbaj de descriere hardware (HDL). Un alt dezavantaj al metodelor tradiionale este modul in care este descris un sistem complex. Este greu s lucrm cu sute de ecuaii, dar este nc posibil. Un sistem ns, care ar fi descris prin mii de ecuaii, este practic inabordabil prin aceast metod. Mai mult, i o reprezentare schematic n care apar sute sau mii de blocuri funcionale devine de neneles. O descriere din punct de vedere al comportrii sistemului poate fi ns automat convertit ntr-un cod surs HDL, cod care este apoi implementat prin intermediul unor programe de sintez.

99

Limbaje de descriere hardware (HDL)

ABEL(Advanced Boolean Equation Language) este un limbaj din categoria limbajelor de descriere hardware (HDL- Hardware Description Language), dezvoltat la origine de firma Data I/O pentru programarea dispozitivelor logice programabile simple (PLD-Programmable Logic Devices). Exist i alte limbaje similare, foarte utilizate, cum ar fi VHDL sau Verilog. Comparativ cu acestea ABEL este mult mai simplu, dar VHDL sau Verilog sunt mai adecvate pentru descrierea unor sisteme complexe. Prin raportare la alte limbaje de programare cunoscute ABEL este un limbaj care s-ar situa ntre limbajul de asamblare i C, VHDL-ul este similar limbajului ADA, iar Verilog-ul este similar limbajului C. Limbajul ABEL prin simplitatea sa i uurina nvrii este un limbaj adecvat descrierii multor aplicaii de complexitate mic sau medie, aplicaii foarte des ntlnite n mecatronic.

6.1 Limbajul ABEL-HDL


ABEL este un limbaj HDL care poate fi utilizat pentru a descrie comportarea unui sistem sub mai multe forme, cum ar fi: ecuaii logice, tabele de adevr sau diagrame de stare, utiliznd instruciuni similare cu cele din limbajul C. Un compilator ABEL permite i simularea funcional a sistemului folosind vectorii de test, precum i implementarea sa folosind un dispozitiv PLD ncepnd de la cele mai simple SPLD (PAL sau GAL) i terminnd cu cele mai complexe (CPLD-Complex Programmable Logic Devices sau FPGA- Field programmable Gate Array). Bibliografia esenial pentru redactarea acestui paragraf este [19], [20], [48]. Un fiier surs ABEL const din urmtoarele elemente: Antet(Header): incluznd Module, [ Options i Title ] Declaraii: Pin, Constant, Node, Sets, States, Library. Descrieri logice: Equations, Truth-table sau State_diagram [Vectori de test: Test_vectors ] End Cuvintele cheie ale limbajului (recunoscute de ABEL drept comenzi, directive, etc.) nu sunt dependente de tipul de liter folosit (mare sau mic) pe cnd identificatorii definii de utilizator depind de tipul de liter!! De exemplu, MODULE este acelai lucru cu module, dar identificatorul out1 este diferit de Out1! O machet (template) tipic a unui modul surs ABEL este dat mai jos: module nume modul [title sir] [identificator_dispozitiv device tip_dispozitiv;] declaratii pini alte declaratii equations ecuatii
100

Circuite integrate numerice. Aplicaii n mecatronic

[Test_Vectors] [vectori de test] end nume modul Cuvintele cheie utilizate de limbajul ABEL sunt: CASE, DECLARATIONS, DEVICE, ELSE, ENABLE, END, ENDCASE, ENDWITH, EQUATIONS, FUNCTIONAL_BLOCK, FUSES, GOTO, IF, IN, INTERFACE(ntr-un modul top), INTERFACE(ntr-un submodul), ISTYPE, LIBRARY, MACRO, MODULE, NODE, PIN, PROPERTY, STATE(ca declaraie), STATE(n state_diagram), STATE_DIAGRAM, STATE_REGISTER, TEST_VECTORS, THEN, TITLE, TRACE, TRUTH_TABLE, TEST_VECTORS, WITH. Urmtoarea surs ABEL este un exemplu de implementare a unui semi sumator de un bit folosind un circuit PLD (de exemplu un PAL16V8):
module primul_meu_circuit; title 'semisumator ' " pini intrare A, B pin 3, 5; " pini iesire SUM, Carry_out pin 15, 18 istype 'com'; equations SUM = (A & !B) # (!A & B) ; Carry_out = A & B; end primul_meu_circuit;

6.1.1 Elemente de sintax ABEL Elementele prezentate pleac de la macheta unei surse ABEL prezentat anterior. a. Declaraii Module: orice fiier surs ncepe cu o astfel de instruciune urmat de un nume al modulului (identificator). Proiectele mari pot conine mai multe module, fiecare cu propriile declaraii title, equations, end, etc. Title: este opional i poate fi folosit pentru identificarea proiectului. Numele trebuie s fie cuprins ntre ghilimele (simple). Linia respectiv este ignorat de compilator fiind util numai pentru documentare. ir: reprezint este o serie de caractere ASCII cuprinse ntre ghilimele simple ( `). irurile sunt folosite pentru instruciunile TITLE, OPTIONS , precum i n declararea atributelor pentru pin i node. device: este o declaraie opional i asociaz un identificator de dispozitiv cu un anume circuit PLD. Este de dorit evitarea utilizrii acestei declaraii n
101

Limbaje de descriere hardware (HDL)

fiierul surs deoarece astfel se pstreaz independena proiectului de tipul de circuit. Atunci cnd se lucreaz cu un mediu de programare integrat declararea tipului de circuit se face la crearea proiectului, dar poate fi modificat oricnd i ulterior. comentarii: comentariile pot aprea oriunde n fiierul surs , ncep cu ghilimele duble ( ") i se termin fie tot cu ghilimele duble, fie la sfritul liniei (care din situaii apare prima) . pin: prin aceste declaraii compilatorul asociaz numele simbolice cu conexiunile externe ale dispozitivului. Formatul este urmtorul (pin_id identificator pin): [!]pin_id pin [nr. sau cod pin] [istype 'atribut'] ; Se pot specifica mai muli pini pe aceiai linie surs: [!]pin_id , [!]pin_id, [!]pin_id pin [nr. pin, [nr. pin, [nr. pin]]] [istype 'atribut']; Exemplu:
IN1, IN2, A1 OUT1 ENABLE !Chip_select !S0..!S6 pin 2, pin 9 pin; pin 12 pin 3, 4; istype 'reg'; istype 'com'; istype 'com';

Nu este neaprat nevoie s specificm un numr de pin. Numerele de pin pot fi specificate i mai trziu, n faza de implementare a proiectului, utiliznd un fiier de constrngeri utilizator (user constraint file), proiectul avnd astfel un caracter mai general i mai flexibil. ! indic un semnal activ n 0 -Low (semnalul va fi inversat). istype este un atribut opional; variante: 'com' pentru a indica natura combinaional a semnalului de ieire sau 'reg' pentru un semnal de tip registru (memorat ntr-un bistabil). Acest atribut este folosit doar pentru pini de ieire sau noduri interne (node). node: declaraiile node (nod intern) au acelai format ca declaraiile pin; fiind ns vorba de semnale interne care nu au ca echivalent o conexiune extern, numrul de pin lipsete. Exemplu: temp1 node [istype 'com']; alte declaraii permit definirea unor constante, mulimi (sets), macro-uri sau expresii care pot simplifica programul. Declararea unei constante are urmtorul format: id [, id],... = expresie [, expresie].. ; Exemple:
A = 21; c = .C. ; x = .x. 102

Circuite integrate numerice. Aplicaii n mecatronic

z = .Z. ; ADDR = [1,0,1,1]; LARGE = B & C; Data = [D3, D2, D1, D0]; Data = [D3..D0];

Ultimele dou declaraii sunt echivalente. Folosirea " .. " reprezint o modalitate comod de descriere a unui domeniu (range). Declaraia respectiv utilizeaz practic o notaie vectorial: de fiecare dat cnd vom folosi Data ntr-o ecuaie ne vom referi de fapt la vectorul [D3,D2,D1,D0]. b. Constante speciale(predefinite) n ABEL se pot utiliza o serie de constante cu o semnificaie special. Cele mai importante sunt : .C. , .c. descrie o tranziie complet a unui semnal de ceas folosit ca intrare (L,H,L; _|--|_ ) .X. , .x. descrie o valoare indiferent (dont care) .Z., .z. - descrie o valoare Hi-Z(tri-state) c. Numere Numerele pot fi utilizate folosind patru baze de numeraie diferite: binar, octal, zecimal i hexazecimal. Baza implicit este zecimal (fr prefixare). Se utilizeaz urmtoarele prefixe: Binar ^b Octal ^o Zecimal ^d (implicit) Hexazecimal ^h Exemple: 35 , ^h35 , ^b101, ^h4FFB d. Mulimi (sets) O mulime este o colecie de semnale sau constante utilizate pentru a face referire la un grup de semnale folosind un singur nume. Utilizarea mulimilor simplific semnificativ operaiile logice: orice operaie aplicat unei mulimi este aplicat de fapt fiecrui element al ei. O mulime este descris printr-un ir de constante sau semnale, separate prin virgul sau operatorul domeniu ( .. ), ir cuprins obligatoriu ntre paranteze ptrate [] . Exemple: [D0,D1,D2,D4,D5] [D0..D6] " domeniul poate fi enumerat cresctor [b6..b0] " domeniul poate fi enumerat si descresctor [D7..D15] [b1,b2,a0..a3] " un (sub)domeniu ntr-o mulime mai mare
103

Limbaje de descriere hardware (HDL)

[!S7..!S0] " domeniu descresctor de semnale declarate active low (n 0) Urmtoarea declaratie nu este permis: [D0, X] , unde X este de asemenea o mulime X = [X3..X0]; n schimb se poate scrie corect: [D0, X3..X0]; e. Operaii cu mulimi Cea mai mare parte a operaiilor poate fi aplicat i unei mulimi, operaia efectundu-se asupra fiecrui element al mulimii. Operaiile se efectueaz conform prioritii operatorilor, operaiile cu aceiai prioritate se efectueaz de la stnga la dreapta (dac nu exist paranteze). Exemplul 1:
Semnale = [D2,D1,D0]; " declararea multimii Semnale Semnale = [1,0,1] & [0,1,1]; " rezulta Semnale = [0,0,1]

Exemplul 2: [A,B] = C & D; este de fapt echivalent cu dou instruciuni: A = C & D; B = C & D; Exemplul 3: [A1,B1] = [D1,D2] & [C3,C2]; este echivalent cu: [A1,B1] = [D1 & C3, D2 & C2]; astfel vom avea A1 = D1 & C3, si B1= D2 & C2. Exemplul 4: X & [A,B,C]; care este echivalent cu [X&A, X&B, X&C]; n cazul urmtoarei expresii lucrurile stau puin diferit: 2 & [A,B,C]; acum numrul zecimal "2" este convertit n reprezentare binar i completat cu zerouri dac este necesar (010). Astfel ecuaia de mai sus este echivalent cu: [0 & A, 1 & B, 0 & C]; Exemplul 5:
A B = [A2,A1,A0]; "declaratii de multimi = [B2,B1,B0 ];

A # B; este echivalent cu [A2 # B2, A1 # B1, A0 # B0]; !A; este echivalent cu [!A2,!A1,!A0]; Exemplul 6:
[b3,b2,b1,b0] = 2; " echivalent cu b3=0,b2=0,b1=1,b0=0.

Exemplul 7: S presupunem c avem urmtoarea ecuaie (pentru ieirea unui decodificator):


Chip_Sel = !A7 & A6 & A5 & A4;

Mai nti definim mulimea Adr :


Adr = [A7,A6,A5,A4];

Ecuaia propriu-zis va fi:


Chip_Sel = Adr == [0,1,1,1];

Care este echivalent cu:


104

Circuite integrate numerice. Aplicaii n mecatronic

Chip_Sel = !A7 & A6 & A5 & A4;

Dac A7=0, A6=1 , A5=1 si A4=1 expresia Adr ==[0,1,1,1] este adevrat (sau 1) i Chip_Sel va fi i el 1 (sau adevrat). Alt modalitate de a scrie aceiai ecuaie este:
Chip_Sel = Adr = = 7; " 7 zecimal = 0111 binar.

f. Operatori Exist patru tipuri de operatori de baz: logici, aritmetici, relaionali i de asignare. Operatori logici Setul implicit de operatori logici (la nivel de bit) este descris n tabelul de mai jos.. Folosind directiva @ALTERNATE se poate eventual comuta la un set alternativ de operatori logici. Operator (implicit) Descriere Operator alternativ ! NOT (complement fa de 1) / & AND * # OR + $ XOR ( or exclusiv ) :+: !$ XNOR ( nor exclusiv) :*: Operatori aritmetici n continuare sunt prezentai operatorii aritmetici. Ultimii cinci operatori nu pot fi utilizai cu operanzi de tip mulimi. Semnul - poate avea semnificaii diferite: prezent ntre 2 operanzi are semnificaia de scdere (sau adunare complement fa de 2), dar prezent n faa unui operand are semnificaia de complement fa de 2. Operator Exemplu Descriere -D1 Complement fa de 2 (schimbare de semn) C1-C2 Scdere + A+B Adunare Urmtorii operatori nu sunt folosii cu mulimi: * A*B nmulire / A/B mprire ntreag fr semn % A%B Modulo: restul lui A/B << A<<B Deplasare A stnga cu B bii >> A>>B Deplasare B dreapta cu B bii Operatori relaionali Aceti operatori produc valoarea boolean adevrat True (-1) sau fals False (0). Valoarea 1 n cod complement fa de 2 este reprezentat n binar avnd toi biii n 1 (de ex. dac operandul are 8 bii : 1111 1111 ).

105

Limbaje de descriere hardware (HDL)

Operator == != < <= > >=

Exemplu A==B sau 3==5 (false) A!=B sau 3 != 5 (true) A<B sau 3 < 5 (true) A<=B sau 3 <= 5 (true) A>B sau -1 > 5 (true) A>=B sau !0 >= 5 (true)

Descriere Egal Diferit Mai mic Mai mic sau egal Mai mare Mai mare sau egal

Operatorii relaionali sunt fr semn: !0 este complementul fa de 1 al lui 0 sau 11111111 (dac operandul are 8 bii) care are valoarea 255 n reprezentare fr semn. Astfel !0 > 9 este adevrat. Din acelai motiv i expresia 1 >5 este adevrat. O expresie relaional poate fi folosit i mpreun cu expresii numerice, ea fiind substituit cu 1 sau 0 funcie de rezultatul evalurii. De exemplu avem expresia A = B !$ (C == D); aici A va fi egal cu B dac C este egal cu D (adevrat sau 111 ; B XNOR 1 egal cu B) , altfel A va fi egal cu complementul lui B . Operatori de asignare Aceti operatori sunt folosii n ecuaii pentru a asigna valoarea unei expresii unui semnal de ieire sau unui nod intern. Exist dou tipuri de astfel de operatori: combinaionali i de tip registru. n cazul unui operator combinaional asignarea are loc imediat, fr nici o ntrziere. n cazul operatorului de tip registru asignarea are loc odat cu urmtorul impuls de ceas al bistabilului asociat ieirii sau nodului intern. Un exemplu simplu de definire a unui bistabil ar fi :
Q1 pin istype 'reg'; Q1 : = D;

Prima instruciune (declaraie) definete bistabilul Q1, iar a doua instruciune (ecuaie) spune c ieirea bistabilului va lua valoarea intrrii D la urmtoarea tranziie activ a semnalului de ceas. Operator Descriere = Asignare combinaional := Asignare de tip registru Prioritatea operatorilor(precedena) Prioritatea operatorilor este dat n urmtorul tabel , n ordine cresctoare de la 1 la 4. Operatorii cu aceiai prioritate sunt evaluai de la stnga la dreapta. Prioritate Operator Descriere 1 Negare 1 ! NOT 2 & AND 2 << deplasare stnga

106

Circuite integrate numerice. Aplicaii n mecatronic

2 2 2 2 3 3 3 3 3 4 4 4 4 4 4

>> * / % + # $ !$ == != < <= > >=

deplasare dreapta nmulire mprire fr semn modulo adunare scdere OR XOR XNOR egal diferit mai mic mai mic sau egal mai mare mai mare sau egal

g. Descrierea logic a sistemului Descrierea logic poate fi fcut cu ajutorul ecuaiilor, tabelelor de adevr sau a diagramelor de stare. Ecuaii (equations) Se utilizeaz cuvntul cheie equations pentru a ncepe descrierea logic. Expresiile pot conine operatorii descrii anterior precum i instruciunea "WhenThen-Else". Instruciunea "When-Then-Else" poate fi folosit n ecuaii pentru a descrie o funcie logic (ea se mai utilizeaz i n diagramele de stare pentru a descrie o succesiune de stri). Formatul instruciunii "When-Then-Else" este urmtorul : WHEN condiie THEN element = expresie; ELSE ecuaie; sau WHEN condiie THEN ecuaie; Exemple de ecuaii:
SUM = (A & !B) # (!A & B) ; A0 := EN & !D1 & D3 & !D7; WHEN (A == B) THEN D1_out = A1; ELSE WHEN (A == C) THEN D1_out = A0;

107

Limbaje de descriere hardware (HDL)

WHEN (A>B) THEN { X1 :=D1; X2 :=D2; }

Se pot utiliza i acoladele { } pentru a grupa diverse seciuni n blocuri. Textul dintr-un bloc poate avea una sau mai multe linii. Blocurile pot fi folosite n ecuaii, tabele de adevr sau directive. Tabele de adevr (truth_table) Cuvntul cheie cu care se ncepe descrierea este truth_table i sintaxa este: TRUTH_TABLE ( in_ids - > out_ids ) intrri - > ieiri; sau TRUTH_TABLE ( in_ids : > reg_ids ) intrri : > ieiri_registre; sau TRUTH_TABLE ( in_ids :> reg_ids -> out_ids ) intrri :> ieiri_registre -> ieiri; n care "->" este folosit pentru ieiri combinaionale i " : >" pentru ieiri de tip registru, in_ids identificatori intrari , out_ids identificatori ieiri, reg_ids identificatori registre. Prima linie a unei tabele de adevr (ntre paranteze) definete intrrile i ieirile, iar urmtoarele linii corespondenele ntre valorile de intrare i cele de ieire. Fiecare linie trebuie s se termine cu ; . Intrrile i ieirile pot fi semnale singulare sau mulimi. Cnd se utilizeaz mulimi se folosete notaia normal pentru acestea (5). O valoare indiferent este reprezentat prin ".X." (o constant predefinit a limbajului ABEL). Exemplul 1: descrierea unui semisumator
TRUTH_TABLE ( [ A, B] -> [ 0, 0 [ 0, 1 [ 1, 0 [ 1, 1 [Sum, Carry_out] ) ] -> [0, 0 ] ; ] -> [1, 0 ] ; ] -> [1, 0 ] ; ] -> [1, 1 ] ;

Dac vom defini o mulime IN = [A,B]; i respectiv o mulime OUT = [Sum, Carry_out]; tabela de adevr poate deveni mai simpl:
TRUTH_TABLE (IN -> OUT ) 0 -> 0; 1 -> 2; 2 -> 2; 3 -> 3;

Exemplul 2: Un XOR cu dou intrri plus o intrare de activare EN, activ n 1 :


TRUTH_TABLE ([EN, A, B] -> OUT ) [ 0, .X.,.X.] -> .X. ; [ 1, 0 , 0 ] -> 0 ; [ 1, 0 , 1 ] -> 1 ; 108

Circuite integrate numerice. Aplicaii n mecatronic

[ 1, 1 , 0 ] [ 1, 1 , 1 ]

-> 1 ; -> 0 ;

Exemplul 3: Tabelele de adevr pot fi utilizate i pentru descrierea mainilor secveniale, n cazul acestui exemplu fiind vorba de un numrtor binar sincron de 3 bii, cu ieirea de transport OUT (generat n starea 111). Se utilizeaz 3 bistabili QA, QB si QC care vor fi i ieirile numrtorului.
MODULE CNT3; "declaratii CLOCK pin; " intrare ceas RESET pin; " intrare reset OUT pin istype 'com'; " iesire transport (combinaional) QC,QB,QA pin istype 'reg'; " iesiri numarator (tip registru, bistabili) [QC,QB,QA].CLK = CLOCK; "semnalul de ceas pentru bistabili [QC,QB,QA].AR = RESET; " reset asincron pentru aceiasi bistabili TRUTH_TABLE ( [QC, QB, QA] :> [QC,QB,QA] -> OUT) [ 0 0 0 ] :> [ 0 0 1 ] -> [ 0 0 1 ] :> [ 0 1 0 ] -> [ 0 1 0 ] :> [ 0 1 1 ] -> [ 0 1 1 ] :> [ 1 0 0 ] -> [ 1 0 0 ] :> [ 1 0 1 ] -> [ 1 0 1 ] :> [ 1 1 0 ] -> [ 1 1 0 ] :> [ 1 1 1 ] -> [ 1 1 1 ] :> [ 0 0 0 ] -> END CNT3;

0; 0; 0; 0; 0; 0; 0; 1;

Observatie Pentru utilizarea extensiilor de tip .DOT (cum ar fi .CLK i .AR) vezi seciunea corespunztoare. Diagrame de stare ( State_diagram ) Seciunea State_diagram conine descrierea logic a unui circuit sub forma unor diagrame de stare. n aceasta seciune se utilizeaz instruciunile: "Goto", "Case" si "With". De obicei n seciunea de declaraii se declar (se utilizeaz) nume simbolice pentru stri, programul fiind astfel mai uor lizibil. Declararea se face cu urmtoarea sintax (unde state_id identificator stare): state_id [, state_id ...] STATE ; Ca un exemplu avem: SREG = [Q1, Q2]; care asociaz numele simbolic SREG cu starea definit prin intermediul bistabililor Q1 si Q2 (cei doi bistabili alctuiesc practic un registru de stare). Sintaxa este urmtoarea:
109

Limbaje de descriere hardware (HDL)

State_diagram registru_stare STATE valoare_stare : [ecuatie;] [ecuatie;] : instructiune_tranzitie_stare ; ... Cuvntul cheie state_diagram indic nceputul unei descrieri de main secvenial. Cuvntul cheie STATE i instruciunile urmtoare descriu o stare din diagrama de stri, ele incluznd o valoare a strii sau un nume simbolic pentru stare, o instruciune care descrie tranziia strii i, opional, o ecuaie care descrie o ieirile asociate strii. n descrierea de mai sus registru_stare este un identificator pentru semnalele care definesc starea mainii secveniale. Se poate utiliza o notaie simbolic a registrului de stare, definit anterior n seciunea declaraii. valoare_stare: poate fi o expresie , o valoare sau un nume simbolic pentru starea curent. ecuatie : opional, o ecuaie care descrie ieirile asociate strii instructiune_tranzitie_stare: instruciunile "If-Then-Else", CASE sau GOTO utilizate pentru a descrie starea urmtoare; opional sunt urmate de ecuaiile de tranziie descrise cu o instruciune WITH. Instruciunea If-Then-Else: Este utilizat pentru a descrie urmtoarea stare i pentru a specifica condiiile de tranziie mutual exclusive. Sintaxa este urmtoarea: IF expresie THEN expresie _stare [ELSE expresie _stare] ; Mai sus, expresie_stare poate fi o expresie logic sau un nume simbolic al strii. Clauza ELSE este opional. Instruciunile IF-Then-Else pot fi combinate cu instruciuni Goto, Case i With. OBSERVAIE "IF-Then-Else" poate fi utilizat doar n seciunea state_diagram; pentru descrierea unor funcii logice combinaionale (seciunea ecuaii) se utilizeaz "When-If-Then". n urmtorul exemplu (o main cu 2 stri i dou ieiri) se definete mai nti registrul de stare, n seciunea declaraii:
SREG = [Q1, Q0]; "definim registrul de stare S0 = [0, 1]; S1 = [1, 1]; state_diagram SREG state S0: OUT1 = 1; if A then S1 else S0; 110

Circuite integrate numerice. Aplicaii n mecatronic

state S1: OUT2 =1; if A then S0 else S1;

Instruciunile "If-Then-Else" pot fi de asemenea imbricate. Instruciunea "with": Sintaxa instruciunii este: instructiune_tranzitie_stare expresie_stare WITH ecuatie [ecuatie ] ... ; Unde instructiune_tranzitie_stare poate fi o instruciune "If-then-else", 'Goto" sau "Case"; expresie_stare descrie starea urmtoare, iar ecuaie este ecuaia care descrie ieirile asociate strii. n locul unei simple expresii de stare se pot utiliza tot instruciunile "If-Then-Else", "Goto" sau "Case".Instruciunea "With" permite ca ecuaiile de ieire s fie scrise n termeni de tranziii. Exemplul 1:
if ( X#Y==1 ) then S1 with Z=1 else S2;

n exemplul de mai sus ieirea Z va fi 1 n momentul n care expresia este evaluat ca fiind adevrat (tranziia fcndu-se n starea S1). Expresia care apare mpreun cu WITH poate fi orice expresie care va fi ns evaluat doar cnd condiia anterioar este adevrat, ca n exemplul urmtor:
if X&!Y then S3 with Z=X#Y else S2 with Z=Y;

Instruciunea este util i n descrierea ieirilor de tip registru deoarece aceste ieiri vor fi actualizate la urmtorul ciclu al semnalului de ceas. Este astfel posibil s descriem c o anumit ieire de tip registru va avea o valoare specific dup o anumit tranziie, ca n urmtorul exemplu:
state S1: if RST then S2 with { OUT1 : = 1; Error_Adrs : = ADDRESS; } else if (ADDRESS <= ^hC101) then S4 else S1;

S-au utilizat acoladele pentru a delimita blocul de asignri asociat instruciunii With. Dimensiunea timp trebuie avut n vedere atunci cnd instruciunea WITH se folosete mpreun cu ieiri combinaionale sau asincrone (ca n cazul unei maini Mealy). La o main Mealy ieirile se modific n momentul n care se modific intrrile, astfel c ieirile vor fi stabile doar la sfritul unui timp de stare (nainte de tranziia activ a semnalului de ceas). Din acest punct de vedere o main Moore (cu ieiri sincrone cu starea) este mai avantajoas.

111

Limbaje de descriere hardware (HDL)

Instruciunea Case : Sintaxa este urmtoarea: CASE expresie : expresie _stare; [ expresie : expresie _stare; ] : ENDCASE ; Unde expresie este orice expresie ABEL valid i expresie_stare descrie starea urmtoare (urmat opional de instruciunea WITH). Exemplu:
State S0: case ( A == 0) : S1; ( A == 1) : S0; endcase;

Instruciunea case este utilizat pentru a specifica o secven de condiii de tranziie mutual exclusive, corespunznd urmtoarei stri. Condiiile specificate trebuie s fie mutual exclusive (dou tranziii nu pot fi adevrate n acelai timp), n caz contrar rezultatele (tranzitia la starea urmtoare) sunt imprevizibile. h. Vectori de test Vectorii de test sunt opionali i reprezint o modalitate de a verifica funcionarea corect a sistemului numeric proiectat. Ei sunt folosii pentru simularea modelului intern al dispozitivului i testarea funcional a dispozitivului programat. Prin intermediul lor specificm comportarea ateptat a sistemului prin descrierea explicit a ieirilor funcie de intrri. Sintaxa este urmtoarea: Test_vectors (intrare [, intrare ].. -> ieire [,ieire] .. ) [valori intrri -> valori ieiri ; ] : Ca exemplu vom relua semi sumatorul prezentat anterior pentru care vom avea:
Test_vectors ( [A, B] -> [Sum, Carry] ) [ 0, 0 ] -> [0, 0]; [ 0, 1 ] -> [1, 0]; [ 1, 0 ] -> [1, 0]; [ 1, 1 ] -> [1, 1];

sau utiliznd constantele numerice definite anterior:


Test_vectors ( [A, B] -> [Sum, Carry] ) 0 -> 0; 112

Circuite integrate numerice. Aplicaii n mecatronic

1 -> 2; 2 -> 2; 3 -> 3;

Este permis folosirea constantelor .X. , .C., .Z. ca i a oricror alte constante simbolice definite anterior:
test_vectors ( [CLK, RESET, A, B ] -> [ Y0, Y1, [.X., 1, .X.,.X.] -> [ S0, 0, [.C., 0, 0, 1 ] -> [ S0, 0, [.C., 1, 1, 0 ] -> [ S0, 0, Y3] ) 0]; 0]; 1];

i. Instruciuni care descriu proprieti ABEL permite transmiterea (n momentul implementrii) unor proprieti specifice dispozitivului PLD prin intermediul instruciunii property. Aceste proprieti sunt de fapt transmise programului care face implementarea (fitter). Pentru dispozitivele CPLD aceste proprieti includ: viteza de variaie a ieirilor (timpii de front -slew rate), , puterea consumat, valorile care vor fi prencrcate n bistabili la power-up, utilizarea resurselor logice (plasare), optimizare sau protejarea la citire . Aceleai proprieti pot fi stabilite i ca opiuni ale diverselor componente ale mediului integrat de dezvoltare (compilator, fitter, programator), lucru care este de dorit deoarece ofer o mai mare independen de dispozitiv a proiectului . j. Diverse Declaraii de tip active-low (n 0) Un semnal de tip activ n 0 este definit prin prefixarea cu operatorul ! :
!OUT pin istype 'com' ;

Cnd acest semnal va fi utilizat n descrierea logic, el va fi n mod automat complementat. S considerm urmtorul exemplu:
module EXEMPLU A, B pin ; !OUT pin istype 'com'; equations OUT = A & !B # !A & B ; end

n acest exemplu semnalul de ieire OUT este XOR-ul ntre A si B , fiind n 1 (High) cnd doar una din intrri este n 1, altcumva fiind n 0. Deoarece semnalul de ieire a fost ns declarat activ n 0 (!OUT), pinul de ieire OUT va fi n 0 doar cnd numai una din intrri este n 1. Acelai rezultat se putea obine inversnd pe OUT la nivelul ecuaiei i declarndu-l doar ca OUT (o descriere explicit pin la pin a semnalului activ n 0), aa cum se vede n exemplul urmtor:
113

Limbaje de descriere hardware (HDL)

module EXEMPLU A, B pin ; OUT pin istype 'com'; equations !OUT = A & !B # !A & B ; end

Declaraiile de tip activ n 0 pot fi utilizate i pentru mulimi, ca n urmtorul exemplu:


A = [A2,A1,A0]; " declaratie multime B = [B2,B1.B0]; " declaratie multime X = [X2,X1.X0]; " declaratie multime !X = A & !B # !A & B;

Ultima ecuaie este echivalent cu a scrie : !X0 = A0 & !B0 # !A0 & B0; !X1 = A1 & !B1 # !A1 & B1; !X2 = A2 & !B2 # !A2 & B2; Directive Utilizarea directivelor duce la anumite modificri ale fiierului surs ABEL, n momentul prelucrarii acestora. Se pot include condiional seciuni de surs ABEL, se pot include poriuni din alte surse ABEL, se pot afia diverse mesaje pe parcursul compilrii, etc. Prin utilizarea i de parametrii, unele din directive permit construirea i manipularea unor structuri complexe. Sintaxa utilizat este: @directiva [parametrii] Un exemplu prezentat anterior este directiva @ALTERNATE. Alte directive mai utilizate ar fi: @CONST, @DCSET, @EXIT, @IF, @INCLUDE, @MESSAGE, @REPEAT, @RADIX, etc. Exemplu:
@repeat 100 { [.C.]->[0,0] } "insereaza de 100 de ori vectorul de test cuprins ntre " acolade in textul sursa, intr-o sectiune test_vectors

6.1.2 Extensii de tip .DOT Aceast categorie de faciliti se pot utiliza pentru a descrie mai precis comportarea circuitului. Reprezint o modalitate de a descrie semnalele interne i nodurile asociate cu un semnal primar. Sintaxa folosit este nume_semnal.extensie. Numele extensiei este independent de tipul de liter folosit (mare sau mic). Unele din aceste extensii sunt de uz general (numite i independente de arhitectur sau pin-to-pin) putnd fi folosite pentru o mare varietate de circuite programabile (PAL, GAL, CPLD, etc). Altele pot fi folosite doar pentru clase specifice de circuite, fiind numite i dependente de arhitectur sau cu extensii

114

Circuite integrate numerice. Aplicaii n mecatronic

detailate. n general se pot utiliza ambele categorii de extensii. O parte din aceste extensii sunt descrise n tabelul urmtor. Extensie Descriere Independente de arhitectur sau extensii pin-to-pin (pin la pin) .ACLR Reset asincron .ASET Preset asincron .CLK Intrare de ceas ntr-un bistabil cu comutare pe front. .CLR Reset sincron .COM Reacie combinaional provenind de la intrarea de date .FG Reacie registru (bistabil) .OE Activare ieire (de tip buffer tri-state) .PIN Reacie pin .SET Preset sincron Extensii specifice circuitului (dependente de arhitectur) .D Intrare date ntr-un bistabil de tip D .J Intrare J ntr-un bistabil de tip .K Intrare K ntr-un bistabil de tip JK .S Intrare S ntr-un bistabil de tip SR .R Intrare R ntr-un bistabil de tip SR .T Intrare T ntr-un bistabil de tip T .Q Reacie registru (bistabil) .AP Preset asincron .AR Reset asincron .SP Preset sincron .SR Reset sincron Exemplul 1:
[S7..S0].oe = ACTIV;

unde semnalul ACTIV controleaz bufferele tri-state ale celor 8 ieiri S7..S0. Cnd ACTIV este n 1 ieirile sunt active, n caz contrar(ACTIV=0) ieirile respective sunt n starea de nalt impedan (High-Z). Exemplul 2:
Q.AR = reset; Y.AR = reset; [Z.ar, Y.ar] = reset;

aici ieirea bistabilelor Z si Y va fi adus n 0 dac intrarea reset este n 1. Pentru nelegerea semnificaiei acestui tip de extensii vom exemplifica cu ajutorul unei ecuaii care folosete operatorul de asignare tip registru(: =) i unde Preset este o intrare :
Q1 := !Q1 # Preset;

Aici Q1 i va menine starea (valoarea curent) pn n momentul n care elementul de memorie (circuitul bistabil) asociat cu acest semnal primete un
115

Limbaje de descriere hardware (HDL)

semnal de ceas. Acesta ecuaie reprezint o descriere pin-to-pin a semnalului de ieire Q1. Ea descrie comportarea semnalului n termeni de valori dorite pentru pinul de ieire funcie de intrare i este complet independent de arhitectura dispozitivului utilizat pentru implementare. Totui, n ecuaia de mai sus exist o condiie ambigu de reacie pentru elementul de memorie. Semnalul Q1 apare n partea dreapt a ecuaiei, dar nu avem nici o informaie de unde anume provine aceast reacie: direct din logica combinaional care formeaz intrarea bistabilului sau din pinul de ieire asociat cu semnalul Q1. Nu exist de asemenea nici o informaie despre ce tip de bistabil se va utiliza (dei algoritmii de sintez pot , teoretic, plasa acesta ecuaie n orice tip de bistabil posibil). Ecuaia poate fi mai concret astfel:
Q1.CLK = Clock; "Semnal de ceas provenind de la o intrare Q1 := !Q1.FB # Preset; " cu reactie provenind din iesirea bistabilului

Acum setul de ecuaii descrie complet circuitul, informaia fiind suficient pentru ca acest circuit s funcioneze indiferent de dispozitivul n care va fi implementat. Reacia provine direct din ieirea negat a bistabilului , iar extensia .CLK arat ca bistabilul este cu comutare pe front (i nu unul de tip latch !). Spre deosebire de descrierea pin-to-pin acelai circuit poate fi descris i ntr-o form detailat astfel:
Q1.CLK = Clock; Q1.D = !Q1.Q # Preset; "Semnal de ceas de la intrare "Se utilizeaza CBB de tip D

n aceast form n care este descris intrarea D a bistabilului i specificat reacia apar unele restricii legate de arhitectura dispozitivului n care va fi implementat proiectul. Mai mult, ecuaiile descriu doar intrarea i reacia ne existnd nici o informaie despre configuraia pinului de ieire. n consecin aceast descriere va funciona diferit cnd va fi implementat ntr-un dispozitiv cu ieiri inversate (negate) sau ntr-unul cu ieiri ne inversate. Pentru a menine o comportare corect a pinului, folosind descrierea detailat, este necesar un element suplimentar al limbajului: atributul `buffer` (sau complementul su, atributul `invert`). Atributul `buffer` ne asigur ca n implementarea final nu va exista inversare ntre ieirea bistabilului i pinul de ieire asociat cu Q1. Astfel n seciunea de declaraii trebuie s apar:
Q1 pin istype 'buffer';

Observaie Pentru un circuit CPLD, i nu numai, o modalitate de a nelege diferena ntre descrierea pin-to-pin i descrierea detailat este de a vedea descrierea detailat ca o specificaie a macrocelulei. n figura 6.1 este prezentat o macrocelul generic asociat semnalului q1.

116

Circuite integrate numerice. Aplicaii n mecatronic

Figura 6.1

Macrocelul generic

Se observ c exist un nivel de inversare programabil ntre ieirea bistabilului i pin, astfel c pinul q1 poate avea o comportare diferit de cea a ieirii Q(q1.q). Ori de cte ori folosim o descriere pin-to-pin in ABEL, va fi sintetizat o macrocelul generic similar celei din figur, indiferent de tipul particular de macrocelul existent n dispozitivul PLD. 6.1.3 Exemple Familia de circuite destinat implementrii acestor circuite este cea de circuite CPLD Xilinx (9500, 9500XL, 9500XV, Cool Runner) dei unele din ele pot fi implementate i folosind circuite simple PLD (PAL sau GAL). Compilatorul ABEL se presupune c este cel din mediul de programare Xilinx Webpack. Exemplele se bazeaz pe referinele bibliografice [48], [51], [58]. n unele din exemplele care urmeaz cuvintele cheie au fost reprezentate, pe ct posibil, cu litere ngroate (bold). 6.1.3.1. Diverse circuite MSI din familiile logice standardizate a. Buffer tri-state, octal, bi-direcional 74LS245 (74HC245, etc)- figura 6.2
module SN74LS245 title 'Octal Bidirectional Bus Transceiver' OE_, DIR pin; A1..A8 pin istype 'com'; B1..B8 pin istype 'com'; A = [A8..A1]; B = [B8..B1]; X =.X.; Z = .Z.; equations A = B; 117

Limbaje de descriere hardware (HDL)

B = A; A.oe = !DIR & !OE_; B.oe = DIR & !OE_; test_vectors ([OE_,DIR,A,B] -> [A,B]) [1, 0, 0, 0] -> [Z,Z]; [0,0,X,^h00] -> [^h00,X]; [0,0,X,^h55] -> [^h55,X]; [0,0,X,^hAA] -> [^hAA,X]; [0,0,X,^hFF] -> [^hFF,X]; [0,0,X,^hF0] -> [^hF0,X]; [0,1,X,X] -> [Z,X]; [0,1,^h00,X] -> [X,^h00]; [0,1,^h55,X] -> [X,^h55]; [0,1,^hAA,X] -> [X,^hAA]; end

Figura 6.2

Circuitul 74LS245

b. Registru de deplasare serie, cu ncrcare paralel, asincron, 74LS165 (74HCT165,etc)- figura 6.3
Module SN74LS165 Title 'Parallel-Load 8-bit Shift Register, async load' ShLd, ClkInh, Clk, SER pin; A,B,C,D,E,F,G,H pin; QA,QB,QC,QD,QE,QF,QG node istype 'reg, buffer'; QH pin istype 'reg, buffer'; QH_ pin istype 'com'; Equations QH_ = !QH; [QH,QG,QF,QE,QD,QC,QB,QA] : = [QG,QF,QE,QD,QC,QB,QA,SER]; [QH,QG,QF,QE,QD,QC,QB,QA].clk = Clk # ClkInh; 118

Circuite integrate numerice. Aplicaii n mecatronic

when (!ShLd) then { [QH,QG,QF,QE,QD,QC,QB,QA].ar [QH,QG,QF,QE,QD,QC,QB,QA].ap } End

= ![H,G,F,E,D,C,B,A]; = [H,G,F,E,D,C,B,A];

Figura 6.3

Circuitul 74LS 165

c. Registru octal, de tip D-latch (transparent), cu ieire tri-state 74LS373 (74HCT373,etc.). Registru octal, de tip D cu comutare pe front, cu ieire tri-state 74LS374 (74HCT374, etc.) figura 6.4

119

Limbaje de descriere hardware (HDL)

Figura 6.4

Circuitele 74LS373 i 74LS374

Module SN74LS373 Title 'Octal D-type Transparent Latch' OC,C pin; D8..D1 pin; Q8..Q1 pin istype 'reg,buffer'; Input = [D8..D1]; Output = [Q8..Q1]; Equations Output := Input; Output.lh = C; asa se genereaza un latch transparent in high!! Output.oe = !OC; Test_Vectors ([OC ,C ,Input] -> Output) [ 1 ,.X., .X. ] -> [ 0 , 1 ,^h00 ] -> [ 0 , 1 ,^h55 ] -> [ 0 , 1 ,^hAA ] -> [ 0 , 1 ,^hFF ] -> [ 0 , 1 ,^hA5 ] -> [ 0 , 0 ,^hA5 ] -> [ 0 , 0 ,^h00 ] -> [ 0 , 1 ,^h22 ] -> End 120

.Z.; ^h00; ^h55; ^hAA; ^hFF; ^hA5; ^hA5; ^hA5; ^h22;

Circuite integrate numerice. Aplicaii n mecatronic

Module SN74LS374 Title 'Octal edge triggered D-type OC, CLK D8..D1 Q8..Q1

flip-flops'

pin; pin; pin istype 'reg,buffer';

Input = [D8..D1]; Output = [Q8..Q1]; .C.= c; Equations Output := Input; Output.clk = CLK; Output.oe = !OC; Test_Vectors ([OC [ [ [ [ [ [ [ [ [ End ,CLK ,Input] -> Output) 1 ,.X., .X. ] -> .Z.; 0 , c ,^h00 ] -> ^h00; 0 , c ,^h55 ] -> ^h55; 0 , c ,^hAA ] -> ^hAA; 0 , c ,^hFF ] -> ^hFF; 0 , c ,^hA5 ] -> ^hA5; 0 , 0 ,^hA5 ] -> ^hA5; 0 , 0 ,^h00 ] -> ^hA5; 0 , c ,^h22 ] -> ^h22;

6.1.3.2 Decodificator de adrese Exemplul prezint una din aplicaiile tipice ale logicii programabile i anume realizarea unui decodificator pentru spaiul extern de memorie (de 64kBytes) al unui microprocesor sau microcontroler. Pentru identificarea spaiului specific de adres se utilizeaz cei mai semnificativi bii A15..A10, dintr-o magistral de adrese de 16 bii (A15..A0). Exist 3 seciuni de natur diferit n spaiul de memorie de 64k, fiecare identificat printr-un semnal de ieire al decodificatorului, i anume: ROM : 0000- DFFF H (EPROM) I/O : E000 E7FF H (porturi intrare /ieire mapate n memorie) SRAM : F000-FFFF H (SRAM RAM static) Semnalele de ieire sunt active n 0 (se utilizeaz semnal definite explicit ca fiind active n 0). Utilizarea mulimii Adresa i a notaiei pentru un domeniu (..) simplific substanial programul.

121

Limbaje de descriere hardware (HDL)

module dec_mem title ` decodificator A15..A0 ROM,IO,SRAM H,L = 1, 0; Adresa =[ A15..A0];

memorie uP ` pin; pin istype `com`;

equations !ROM = (Adresa <= ^hDFFF); !IO = (Adresa >= ^hE000) & (Adresa <= ^hE7FF); !SRAM = (Adresa >= ^hF000); test_vectors (Adresa ->[ SRAM, IO, ROM]) ^h0000 -> [ H, H, L ]; ^h4000 -> [ H, H, L ]; ^h8000 -> [ H, H, L ]; ^hC000 -> [ H, H, L ]; ^hE000 -> [ H, L, H ]; ^hE800 -> [ H, H, H ]; ^hF000 -> [ H, H, H ]; ^hF800 -> [ L, H, H ]; end

6.1.3.3 Multiplexor 12 : 4 Exemplul prezint de fapt un multiplexor 3 la 1, pentru 3 grupe de semnale, fiecare grup avnd 4 bii: a3..a0, b3..b0 i c3..c0. Se utilizeaz dou semnale de selecie (s1,s0) , combinaia s1s0=11 (3) avnd acelai efect ca s1s0=10 (2). Ieirea este reprezentat de y3..y0. Folosirea instruciunii when .. then permite cea mai compact descriere a unui multiplexor. Pentru toate grupele de semnale relevante s-au utilizat mulimi: select, a, b, c i y. (figura 6.5)
module Mux12to4 title `multiplexor 12 la 4 ` a0..a3 pin; b0..b3 pin; c0..c3 pin; s1,s0 pin; ``selectii y0..y3 pin; ``iesiri H = [1,1,1,1]; L = [0,0,0,0]; X = .X. ; select = [s1,s0]; y = [y3..y0]; a = [a3..a0]; 122

Circuite integrate numerice. Aplicaii n mecatronic

b = [b3..b0]; c = [c3..c0]; equations when when when when (select (select (select (select == == == == 0) 1) 2) 3) then then then then y y y y -> -> -> -> -> -> -> -> -> -> -> -> -> = = = = a; b; c; c; y) 1; 10; 5; 3; 7; 15; 8; 9; 1; 0; 9; 0;

test_vectors ([select, a, [ 0 , 1, X, [ 0 ,10, H, [ 0 , 5, H, [ 1 , H, 3, [ 1 ,10, 7, [ 1 , L,15, [ 2 , L, L, [ 2 , H, H, [ 2 , L, L, [ 3 , H, H, [ 3 , L, L, [ 3 , H, L, end

b, c] X] L] L] H] H] L] 8] 9] 1] 0] 9] 0]

``select = 0 ``select = 1 ``select = 2 ``select = 3

a->y b->y c->y c->y

Figura 6.5 Multiplexorul 12:4

123

Limbaje de descriere hardware (HDL)

6.1.3.4 Comparator de 4 bii n acest exemplu (figura 6.6) este prezentat un comparator de 4 bii cu dou intrri generice de 4 bii A (A3..A0) i B (B3..B0), oferind 4 ieiri active n 1 (NE- diferit, EQ- egal, GT- mai mare i LT- mai mic) .

Figura 6.6

Comparatorul de 4 bii

module comp4 title ` comparator 4 biti ` A3..A0 pin; A = [A3..A0]; B3..B0 pin; B = [B3..B0]; NE,EQ,GT,LT pin istype `com`; ``NE diferit ``EQ- egal ``GT- mai mare ``LT mai mic equations EQ = (A = = B); NE = !(A = = B); GT = (A > B); LT = !((A > B) # (A = = B)); Test_vectors `` aici vectorii de test !!! end

6.1.3.5 Decodificator pentru un afior LED cu 7 segmente Astfel de decodificatoare exist i n diverse familii de circuite numerice (ex. 7446, 7447, 4053, etc.) dar o implementare PLD ofer ntotdeauna o flexibilitate suplimentar. El stabilete o coresponden ntre mrimea de intrare de

124

Circuite integrate numerice. Aplicaii n mecatronic

4 bii interpretat ca un cod BCD de 4 bii (cifre ntre 0 i 9) i un sistem de afiare alfanumeric organizat sub forma a 7 segmente. Prin aprinderea diferit a segmentelor este posibil afiarea cel puin a cifrelor de la 0 la 9. Cele 7 segmente sunt notate de la a la g poziia lor fiind standard pentru toate afioarele (vezi asignare n comentariu i figura 6.7).

Figura 6.7

Decodificator LED 7 segmente

Decodificatorul este realizat pentru un afior cu anod comun, aprinderea segmentului (ON) presupunnd c ieirea respectiv este adus n 0 logic. Pentru afioarele cu catod comun ieirea este activ n 1 i este suficient s modificm doar definirea constantelor ON si OFF. Mai exist i o intrare de activare Ena, activ n 0 logic. Cnd intrarea este inactiv (Ena =1 ), ieirile sunt aduse n starea de nalt impedan (High-Z) toate segmentele fiind stinse, indiferent de starea intrrilor.
module bcd7 title `dec afisor 7segmente ` `` identificare segmente `` -a`` f| |b `` -g`` e| |c `` -dD3,D2,D1,D0,Ena pin; a,b,c,d,e,f,g pin istype `com`; bcd = [D3,D2,D1,D0]; led = [a,b,c,d,e,f,g]; ON,OFF = 0,1; ``LED-uri cu anod comun L,H,X,Z = 0,1,.X.,.Z.; equations led.oe = !Ena; truth_table (bcd -> [ a, b, c, 125 d, e, f, g ])

Limbaje de descriere hardware (HDL)

0 1 2 3 4 5 6 7 8 9 end

-> -> -> -> -> -> -> -> -> ->

[ [ [ [ [ [ [ [ [ [

ON, ON, ON, ON, ON, ON, OFF]; OFF,ON, ON, OFF,OFF,OFF,OFF]; ON, ON, OFF,ON, ON, OFF,ON ]; ON, ON, ON, ON, OFF,OFF,ON ]; OFF,ON, ON, OFF,OFF,ON, ON ]; ON, OFF,ON, ON, OFF,ON, ON ]; ON, OFF,ON, ON, ON, ON, ON ]; ON, ON, ON, OFF,OFF,OFF,OFF]; ON, ON, ON, ON, ON, ON, ON ]; ON, ON, ON, ON, OFF,ON, ON ];

6.1.3.6 Numrtor universal de 4 bii Urmtorul exemplu ilustreaz implementarea unui numrtor binar sincron de 4 bii. Numrtorul este bidirecional, sensul de numrare fiind controlat prin intermediul intrrii u_d . De asemenea numrtorul poate fi ncrcat paralel, intrarea de ncrcare fiind ld (activ n 1) i intrrile corespunztoare de date fiind d3..d0. Este posibil i oprirea/pornirea numrrii cu ajutorul intrrii cnten (1 numr, 0 - oprit). Ieirile sunt q3 ..q0. Exist i o intrare asincron de aducere n 0(reset) numit rst. Descrierea funcionrii se face cu ajutorul ecuaiilor i nu al diagramelor de stare, fiind mult mai compact n acest caz. Exist 4 moduri de operare ale numrtorului: - ncrcare paralel (sincron) a datelor de pe intrrile de date (LOAD) - numrare oprit (HOLD) - numr n sus (DOWN) - numr n jos (UP) Modul ncrcare este prioritar, activarea intrrii ld (n 1) fcnd ca ieirile q s ia valoarea intrrilor d , la urmtorul semnal de ceas (ncrcare sincron). Modul numrare oprit este al doilea ca prioritate; pentru a numra este necesar ca intrarea cnten=1. n momentul n care cnten = 0 (dac i ld=0) numrarea se oprete, ieirile q pstrndu-i valoarea avut n acel moment. Numrtorul este resetat (q3..q0 = 0) n momentul n care intrarea rst =1 (asincron, independent de evolutia intrarii de ceas) . Asignrile pentru mulimea count sunt asignri de tip registru (: =), toi bistabilii au acelai semnal de ceas i respectiv acelai semnal de reset asincron (se utilizeaz extensiile .DOT de tip .clk i .ar).

126

Circuite integrate numerice. Aplicaii n mecatronic

Figura 6.8

Numrtorul universal de 4 bii

module unicnt4 title`numarator binar de 4 biti bidirectional cu incarcare`; "constante X = .X.; "Intrari d3..d0 pin; "intrari date 4-biti clk pin; "intrare ceas rst pin; "reset asincron cnten pin; "activare numarare ld pin; "incarca date paralel u_d pin; "Up/Down sens numarare 1 =up(in sus), 0- down (in jos) "Iesiri q3..q0 pin istype `reg`; "bistabili si iesiri numarator "definire multimi data = [d3..d0]; "date intrare count = [q3..q0]; "numarator "definirea modurilor de lucru MODE = [cnten, ld, u_d] ; "Modul de lucru este definit LOAD = (MODE = = [ X , 1, X ]); "ca o multime de valori ale HOLD = (MODE = = [ 0 , 0, X ]); " intrarilor de control. " Numele simbolic este definit ca multimea MODE UP = ( MODE = = [ 1 , 0, 1 ] ); DOWN = ( MODE = = [ 1 , 0, 0 ] ); " careia i se asigneaza o valoare equations when else when else when else when count.clk LOAD then count := data "incarca date paralel UP then count := count + 1 "numara in sus DOWN then count := count - 1 " numara in jos HOLD then count := count; "opreste numararea = clk; "semnalul de ceas pentru toti bistabilii

127

Limbaje de descriere hardware (HDL)

count.ar

= rst;

"si intrarea de reset asincrona

test_vectors "aici vectori de test end

6.1.3.7 Numrtor zecimal (decimal) sincron, bidirecional, cu semnal de reset sincron Numrtorul zecimal de patru bii va fi descris ca o main secvenial cu 10 stri: S0 la S9. Semnalul de ceas este Clk, sensul de numrare este stabilit cu intrarea Dir (Dir=1 numr n sus, iar cu Dir=0 numr n jos), iar Clr este semnalul de reset activ n 1.
Module counter10 Title Numarator zecimal bidirectional cu reset sincron "intrari Clk pin; "semnalul de ceas Clr,Dir pin; " reset si directie de numarare Dir=1 up /Dir=0 down "iesiri Q3..Q0 pin istype reg; "registre si iesiri numarator "Definim si asignam starile numaratorului S0 = ^b0000; S4 = ^b0100; S8 = ^b1000; S1 = ^b0001; S5 = ^b0101; S9 = ^b1001; S2 = ^b0010; S6 = ^b0110; S3 = ^b0011; S7 = ^b0111; "Numaratorul propriu-zis ca vector CNT = [Q3,Q2,Q1,Q0]; Equations "ceasul pentru toate bistabilele CNT.CLK = Clk; State_diagram [Q3,Q2,Q1,Q0] State S0: if Clr then S0 "reset else if Dir then S1 " in sus else S9; "sau in jos State S1: if Clr then S0 else if Dir then S2 else S0; State S2: if Clr then S0 else if Dir then S3

128

Circuite integrate numerice. Aplicaii n mecatronic

else S1; State S3: if Clr then S0 else if Dir then S4 else S2; State S4: if Clr then S0 else if Dir then S5 else S3; State S5: if Clr else if Dir then else S4; State S6: if Clr else if Dir then else S5; then S0 S6 then S0 S7

State S7: if Clr then S0 else if Dir then S8 else S6; State S8: if Clr then S0 else if Dir then S9 else S7; State S9: if Clr then S0 else if Dir then S0 else S8; End counter10

6.1.3.8 Maini secveniale sincrone Maina sincron aleas ca exemplu ([51]) are trei stri: A,B i C. Mai are trei intrri: start, hold i reset i trei ieiri: halt (sincron-ca la o main Moore), in_B si in_C (asincrone-ca la o masin Mealy). Mai exist, evident, i o intrare de ceas (tact) clock precum i o intrare de activare enab, pentru ieiri, care sunt de tip tri-state. Urmtoarea diagram de stare descrie tranziiile de stare i iesirile mainii. Maina pornete din starea A si rmne acolo pn cnd intrarea start devine 1. Trece apoi n starea B, n starea C i napoi n starea A. Rmne n starea A pan cand start devine din nou activ n 1. Daca intrarea reset este activ, n 1, maina se ntoarce n starea A la urmtorul semnal de ceas(tact). Dac acest reset apare n starea B, o ieire sincron halt se activeaz (n 1) i rmne activ pn cnd start devine activ din nou.

129

Limbaje de descriere hardware (HDL)

Pe durata strilor B si C, ieirile asincrone in_B si in_C trec n 1 pentru a indica starea curent. Activarea intrrii hold (in 1) face ca maina s rmn n starea B sau C pn cnd hold devine inactiv sau se activeaz reset.

Figura 6.9

Diagrama de stri a mainii secveniale

Valoarea vectorilor de stare este aleas astfel ca la pornire (power-up), cnd toate registrele (bistabilele) sunt iniializate implicit n 0, s se plece dintro stare cunoscut, starea A (registrul de stare este 00)!!.
module Masina de paine title 'Exemplu de masina secventiala'; q1,q0 pin istype 'reg,buffer'; clock,enab,start,hold,reset pin; halt pin istype 'reg, buffer '; in_B,in_C pin; ''definim registrul de stare, avem nevoie de 2 registre(bistabile) sreg = [q1,q0]; ''Definim si valorile starilor ... A = 0; B = 1; C = 2; equations [q1, q0, halt].clk = clock; [q1, q0, halt].oe = !enab; state_diagram sreg; State A: in_B = 0; ''Sta in starea A pana cand start devine activ.

130

Circuite integrate numerice. Aplicaii n mecatronic

in_C = 0; IF (start & !reset) THEN B WITH halt : = 0; ELSE A WITH halt : = halt; State B: ''trece in starea C daca reset nu este activ in_B = 1; ''sau hold este activ; halt devine activ daca avem reset in_C = 0; IF (reset) THEN A WITH halt : = 1; ELSE IF (hold) THEN B WITH halt : = 0; ELSE C WITH halt : = 0; '' State C: ''Se intoarce in A daca halt nu este activ. in_B = 0; ''Reset-ul este prioritar fata de hold. in_C = 1; IF (hold & !reset) THEN C WITH halt : = 0; ELSE A WITH halt : = 0; ''aici vectorii de test... end

6.1.4 Proiectarea ierarhic Proiectarea ierarhic reprezint o modalitate de a dezvolta aplicaii mai complexe ca un tot unitar. Mai reprezint i un mod util de organiza i structura un proiect ABEL-HDL. Vor exista mai multe module, din care unul pe nivelul superior (numit i nivel top) i cel puin unul pe un nivel inferior. La rndul lor modulele de pe nivelele inferioare pot instania (apela) alte module aflate pe nivele inferioare fa de ele. n modulul de pe nivelul superior interfaa (intrri->ieiri) este definit cu ajutorul cuvntului cheie INTERFACE, iar identificarea instanei modulului este fcut cu cuvntul cheie FUNCTIONAL_BLOCK (pot exista mai multe instanieri ale aceluiai modul). Vom prezenta un exemplu elementar, pur didactic, n care vom implementa, la nivelul top, o poart NAND cu ajutorul unui modul AND definit pe un nivel inferior. Sursa pentru modulul top este urmtoarea:
MODULE NAND1 TITLE 'Poarta NAND ierarhica instantiaza o poarta AND.' I1, I2, O1 pin; and1 INTERFACE(IN1, IN2 -> OUT1); my_and functional_block and1; EQUATIONS my_and.IN1 = I1; 131

Limbaje de descriere hardware (HDL)

my_and.IN2 = I2; O1 = ! my_and.OUT1; END

Modulul de pe nivelul inferior este descris de sursa urmtoare:


MODULE and1 TITLE 'Poarta and1 care va fi instantiata de NAND1' IN1, IN2, OUT1 pin; EQUATIONS OUT1 = IN1 & IN2; END

Numele pinilor (simbolul asignat) trebuie s fie acelai (atenie la tipul de litera!) cu cel care apare in declaraia interface din modulul top. De asemenea numele modulului instaniat (la noi and1) declarat in modulul top trebuie s fie acelai cu cel care apare in declaraia MODULE din modulul de pe nivel inferior. Este bine ca mai nti s fie create sursele pentru modulele inferioare i dup aceea sursele pentru modulele de pe nivelele superioare. 6.1.5 Alte descrieri ABEL utile, orientate pe arhitectura CPLD Xilinx ([51]) 6.1.5.1 Crearea semnalelor bi-direcionale Exemplul este util pentru implementarea unor registre de stare, la care biii individuali din componena acestora pot fi scrii sau citii, prin intermediul datelor vehiculate pe o magistral tri-state. Avem doi bistabili (doua registre) out0 si out1. Semnalele de ceas strobe0 si strobe1 precum i cel de activare a bufferului de ieire read se presupune ca au fost definite anterior. Data de pe pinul de pe intrare poate fi scris in registrul out0 astfel:
out0:= out0.pin; out0.clk = strobe0; ``data de pe pin in registru ``pe frontul crescator al lui strobe0

Data din out0 este citit napoi pe pin (pe magistral) astfel:
out0.oe = read; `` read este activ in 1

n out1 se va scrie un 1, pe frontul cresctor al lui strobe1, numai cnd starea lui out0 si cea pinului este diferit (un XOR):
out1 : = out0.q $ out1.clk = strobe1; out0.pin;

132

Circuite integrate numerice. Aplicaii n mecatronic

Figura 6.10

Semnale bidirecionale

6.1.5.2 Multiplexarea a dou sau mai multe semnale de ieire O modalitate simpl este de lega mpreun pinii de ieire corespunztori celor dou semnale multiplexate (dout1, dout2) i de a utiliza bufferele de ieire tristate (comandate cu select si !select). La un moment dat nu trebuie s fie activ (n 1) dect un singur semnal de control al bufferului, deci numai o ieire poate fi activ, restul fiind in tri-state. Acesta este i motivul pentru care semnalele de comand pentru aceste buffere, n exemplul nostru, sunt complementare.

Legate impreuna in afara circuitului

Figura 6.11
dout0 dout1

Multiplexare 3-S
: = data0; : = data1; 133

Limbaje de descriere hardware (HDL)

dout0.oe = select; dout1.oe = !select;

Se poate utiliza multiplexorul dintr-o alt macrocelul i data s fie adus la ieire printr-un singur pin. Dezavantajul este c se folosete o macrocelul pentru fiecare bit al multiplexorului. n exemplul de mai jos s0 = = select.
dout = data0 & select # data1 & !select;

Figura 6.12

Multiplexare propriu-zis

Se mai poate utiliza i registrul (bistabilul) din macrocelula respectiv pentru a scurta timpul de propagare de la intrarea de ceas la ieire (tCO).
dout := data0 & select # data1 & !select;

Figura 6.13

Multiplexare sincronizat

OBSERVAIE La toate circuitele CPLD din seriile 9500 Xilinx nu exist posibilitatea implementrii unei magistrale interne de tip tri-state.

134

Circuite integrate numerice. Aplicaii n mecatronic

6.2 Limbajul VHDL


VHDL este unul dintre limbajele standard folosite n industrie la ora actual, pentru a descrie sistemele numerice. VHDL nseamn VHSIC (Very High Speed Integrated Circuits) Hardware Description Language adic un limbaj pentru descriere hardware a circuitelor integrate de foarte mare vitez. Iniial, acest limbaj foarte asemntor cu ADA, a fost destinat doar modelrii i simulrii unor circuite ASIC complexe i numai ulterior a fost utilizat pentru sinteza i implementarea logicii corespunztoare. Referinele bibliografice eseniale sunt [7], [9], [31], [54] i [48]. Aa cum s-a menionat deja, un sistem numeric poate fi reprezentat la diferite nivele de abstractizare. Acest lucru faciliteaz mai ales descrierea i proiectarea sistemelor complexe. Cel mai nalt nivel de abstractizare este nivelul de descriere al comportrii (funcionrii) numit n englez behavioral. La acest nivel de abstractizare un sistem este descris prin ceea ce face, adic modul cum se comport i nu prin componentele sale i conexiunile dintre acestea. O descriere de acest tip specific relaiile dintre semnalele de intrare i ieire. Descrierea poate fi o expresie boolean sau o descriere mai abstract, la nivelul transferului ntre registre sau la nivelul algoritmilor. Ca un exemplu tipic s considerm un circuit simplu care avertizeaz pasagerul atunci cnd ua automobilului este deschis sau centura nu este folosit, de fiecare dat cnd se introduce cheia n contact. Descrierea la nivel funcional s-ar putea face n modul urmtor : Avertizare utilizator = Contact AND (Usa_deschisa OR Nu_Centura) Nivelul structural, spre deosebire de nivelul 'behavioral', descrie un sistem ca o colecie de pori i componente care sunt conectate ntre ele pentru a realiza funcia dorit. O reprezentare structural poate fi comparat cu o schem de pori logice conectate ntre ele. Aceasta este o reprezentare care se apropie mai mult de realizarea fizic a sistemului. Limbajul VHDL permite reprezentarea sistemelor la nivel funcional (behavioral) sau structural. Nivelul behavioral poate fi mprit n dou stiluri de reprezentare: al fluxului de date (Data Flow) i algoritmic. Reprezentarea de tip Data Flow descrie modul cum circul datele prin sistem, aceasta realizndu-se n termenii transferului de date ntre registre (RTL). Aceast descriere folosete instruciuni concurente, care se execut n paralel n momentul n care datele sunt prezente la intrare. Pe de alt parte n reprezentarea de tip algoritmic instruciunile sunt secveniale i se execut n ordinea specificat. VHDL permite atribuirea semnalelor n ambele moduri (secvenial i concurent). 6.2.1 Structura unui fiier surs VHDL Un sistem numeric este descris ca o entitate principal care, la rndul ei, poate conine alte entiti, acestea fiind considerate componente ale entitii
135

Limbaje de descriere hardware (HDL)

principale. Fiecare entitate este modelat de o declaraie a entitii i de corpul arhitectural. Declaraia entitii se poate considera o interfa cu mediul extern care definete semnalele de intrare i de ieire, pe cnd corpul arhitectural conine descrierea entitii i este compus din alte entiti, procese i componente interconectate, toate funcionnd n acelai timp. La fel ca orice alt limbaj VHDL, folosete cuvinte cheie, iar acestea nu pot fi folosite ca nume de semnale sau identificatori (simboluri definite de utilizator). O linie de comentariu, care va fi ignorat de compilator, ncepe cu -- . Declararea entitilor Declararea entitii definete numele entitii i specific porturile de intrare i de ieire. Forma general este urmtoarea : entity NUME_ENTITATE is [ generic declaratii_generice);] port ( nume_semnale : mode tip ; nume_semnale : mode tip ; : nume_semnale : mode tip; end [NUME_ENTITATE] ; O entitate ncepe ntotdeauna cu cuvntul cheie entity (entitate) urmat de numele entitii i de cuvntul cheie is (este). n continuare sunt declaraiile porturilor cu cuvntul cheie port. Declaraia entitii se termin ntotdeauna cu cuvntul cheie end. NUME_ENTITATE este un identificator (simbol) ales de utilizator; nume_semnale const ntr-o list de identificatori separai prin virgul care specific semnalele interfeei externe ; mode este un cuvnt rezervat care indic sensul semnalelor ; in - semnal de intrare; out - semnal de ieire; valoarea poate fi citit dect de alte entiti buffer - semnal este ieire, dar valoarea poate fi citit n arhitectura entitii inout - semnal ce poate fi ieire sau intrare (bi-direcional); tip este tipul de semnal; exemple de tipuri sunt: bit, bit_vector, boolean, character, std_logic, std_ulogic Corpul arhitectural Corpul arhitectural specific modul n care funcioneaz i n care este implementat o entitate. Dup cum am spus mai devreme, o entitate sau circuit poate fi specificat n modul funcional sau cel structural dar i de o combinaie dintre cele dou. Generaliznd, corpul arhitectural arat n felul urmtor:
architecture nume_arhitectura of NAME_ENTITATE is -- Declaratii

136

Circuite integrate numerice. Aplicaii n mecatronic

------begin

declaratii declaratii declaratii declaratii declaratii declaratii

ale componentelor de semnale de constante de functii de proceduri de tipuri

-- Instructiuni end nume_arhitectura;

Descrierea funcional (behavioral) a arhitecturii pentru exemplul amintit mai sus, n care avertizarea s-ar realiza prin intermediul semnalului BUZZER este:
architecture behavioral of BUZZER is begin Avertizare <= ( not Usa AND Contact ) OR ( not Centura AND Contact ) ; end behavioral;

Descrierea structural a aceluiai circuit, bazat pe utilizarea unor pori AND, OR cu dou intrri i a inversorului NOT va fi urmtoarea:
architecture structural of BUZZER is -- Declaratii component AND2 port (in1, in2: in std_logic; out1: out std_logic); end component; component OR2 port (in1, in2: in std_logic; out1: out std_logic); end component; component NOT1 port (in1: in std_logic; out1: out std_logic); end component; -- declaratiile semnalelor folosite la interconectare signal USA_NOT, CENTURA_NOT, B1, B2: std_logic; begin -- Componentele trebuie si instantiate U0: NOT1 port map (USA, USA_NOT); U1: NOT1 port map (CENTURA, CENTURA_NOT); U2: AND2 port map (CONTACT, USA_NOT, B1); U3: AND2 port map (CONTACT, CENTURA_NOT, B2); U4: OR2 port map (B1, B2, AVERTIZARE); end structural;

137

Limbaje de descriere hardware (HDL)

n partea de declaraii se precizeaz componentele ce urmeaz a fi folosite n descrierea circuitelor. n exemplul nostru folosim o poart I cu dou intrri, dou pori SAU cu dou intrri i un inversor. Aceste pori trebuie definite n prealabil, adic vor avea nevoie de declararea entitii i de un corp arhitectural aa cum s-a artat mai sus. Acestea pot fi pstrate ntr-unul din package-uri dup cum se va arta n continuare. Instruciunile de dup cuvntul cheie begin creeaz instanieri ale componentelor i descriu modul cum acestea sunt conectate ntre ele. Definirea unei instane creeaz un nou nivel ierarhic. Fiecare linie ncepe cu numele (de exemplu U0) urmat de dou puncte, numele componentei i cuvntul cheie port map. Acest cuvnt cheie definete modul n care sunt conectate componentele. n exemplul de mai sus, aceasta se face prin asocierea poziiei: semnalul USA corespunde intrrii in1 a porii NOT1, iar USA_NOT corespunde ieirii. La fel este i pentru poarta AND2 unde primele dou semnale, CONTACT i USA_NOT, corespund intrrilor in1 i in2, iar semnalul B1 corespunde ieirii out1. Se poate folosi i un mod alternativ de asociere a porturilor, astfel eticheta: numele componentului port map (port1=>semnal1, port2=> semnal2, portn=>semnaln);
U0: NOT1 port map (in1 => USA, out1 => USA_NOT);

Modelarea structural impune o proiectare ierarhizat n care se pot defini componente care sunt folosite de mai multe ori. Odat ce au fost definite, aceste componente pot fi folosite ca blocuri, celule sau macro-uri ntr-o entitate la un nivel mai nalt. Aceasta poate reduce n mod semnificativ complexitatea proiectelor mari. La fel ca la orice aplicaie software proiectele ierarhizate sunt preferate ntotdeauna n locul celor pe un singur nivel. Biblioteci (library) i package-uri; cuvintele cheie library i use O bibliotec poate fi considerat ca un loc unde compilatorul pstreaz informaii despre un proiect. Un package VHDL este un fiier sau un modul care conine: declaraiile obiectelor folosite n mod curent, tipuri de date, declaraii de componente, semnale, proceduri i funcii care pot fi folosite de diferite modele VHDL. Spre exemplu std_logic este definit n package-ul ieee.std_logic_1164 din biblioteca ieee. Pentru a folosi std_logic trebuie specificat biblioteca i package-ul. Aceasta se face la nceputul fiierului VHDL folosind cuvintele cheie library i use dup cum urmeaz :
library ieee ; use ieee.std_logic_1164.all ;

Extensia .all indic faptul c se folosete tot package-ul ieee.std_logic_1164. Lund ca exemplu mediul Xilinx ISE biblioteca ieee conine urmtoarele packageuri: - std_logic_1164; definete tipurile de date standard

138

Circuite integrate numerice. Aplicaii n mecatronic

- std_logic_arith; pune la dispoziie funcii aritmetice, de conversie i comparaie pentru tipurile de date signed, unsigned, integer, std_ulogic, std_logic i std_logic_vector - std_logic_unsigned - std_logic_misc; definete tipuri suplimentare, subtipuri, constante i funcii pentru package-ul std_logic_1164 . Pentru a folosi oricare dintre aceste package-uri trebuiesc folosite directivele library i use:
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;

Pentru a folosi funciile de baz AND2, OR2, NAND2, NOR2, XOR2, etc. acestea trebuiesc definite. Aceasta se poate face ntr-un package definit de utiliyator, de exemplu functii_baza, pentru fiecare din aceste componente, dup cum urmeaz :
-- Declararea package library ieee; use ieee.std_logic_1164.all; package functii_baza is -- Declarare AND2 component AND2 generic (DELAY: time :=5ns); port (in1, in2: in std_logic; out1: out std_logic); end component; -- Declarare OR2 component OR2 generic (DELAY: time :=5ns); port (in1, in2: in std_logic; out1: out std_logic); end component; end package functii_baza; -- Declararea corpului package-ului library ieee; use ieee.std_logic_1164.all; package body functii_baza is -- poarta I cu dou intrri entity AND2 is generic (DELAY: time); port (in1, in2: in std_logic; out1: out std_logic); end AND2; architecture model_conc of AND2 is begin out1 <= in1 and in2 after DELAY;

end model_conc;

139

Limbaje de descriere hardware (HDL)

--poarta SAU cu dou intrri entity OR2 is generic (DELAY: time); port (in1, in2: in std_logic; out1: out std_logic); end OR2; architecture model_conc2 of OR2 is begin out1 <= in1 or in2 after DELAY; end model_conc2; end package body basic_func;

ntrzierea intrareieire de 5ns (delay) este ignorat la sintez (Xilinx ISE). A fost folosit tipul predefinit std_logic care este declarat n package-ul std_logic_1164. S-au inclus directivele library i use pentru acest package. Package-ul creat mai sus trebuie compilat i plasat ntr-o bibliotec pe care o putem numi spre exemplu, funct_pers. Pentru a putea folosi componentele din acest package, acesta la rndul lui trebuie declarat folosind directivele library i use:
library ieee,funct_pers ; use ieee.std_logic_1164.all, funct_pers.functii_baza.all ;

Directivele library i use trebuiesc folosite de fiecare dat cnd se declar o entitate. 6.2.2 Elemente lexicale ale limbajului VHDL Identificatori (simboluri utilizator) Identificatorii sunt cuvinte definite de utilizator pentru a numi obiectele din modulele VHDL. Pn acum s-au ntlnit exemple de identificatori pentru semnale de intrare i ieire, dar i nume de entiti i de corpuri arhitecturale. La alegerea unui identificator trebuie sa se in cont de cteva reguli de baz: - identificatorii pot conine numai caractere alfanumerice (A-Z , a-z , 0-9) i caracterul 'underscore' ( _ ) - primul caracter trebuie sa fie o liter iar ultimul nu poate fi ' _ ' - un identificator nu poate conine dou caractere underscore consecutive - nu conteaz tipul de liter (literele mari sau mici), spre exemplu And2 i AND2 se refer la acelai obiect - un identificator poate avea orice numr de caractere Exemple de identificatori coreci : AND2 , poarta_1 , AND_2 . Exemple de identificatori incoreci : _AND2 , poarta__2, AND-2, semnal_1_ Identificatorii de mai sus sunt numii identificatori de baz. Regulile pentru identificatorii de baz sunt uneori prea restrictive pentru a indica semnale. De exemplu dac se dorete indicarea unui semnal activ n zero ca de exemplu un RESET activ n zero, acesta nu va putea fi denumit /RESET. Pentru a depi aceste
140

Circuite integrate numerice. Aplicaii n mecatronic

limitri exist un set de reguli pentru aa ziii identificatorii extini care permit definirea de identificatori cu orice secven de caractere. - un identificator extins este cuprins ntre caractere backslash " \ " - pentru un identificator extins conteaz tipul de liter (litere mari sau mici) - un identificator extins este difereniat de cuvintele rezervate (cuvinte cheie) sau de orice identificator de baz (ex. identificatorul \identity\ este permis) - ntre dou caractere backslash se poate folosi orice secven de caractere cu excepia faptului c un caracter " \ " n interiorul unui identificator extins trebuie dublat. Ca un exemplu, pentru a folosi identificatorul BUS:\data acesta se va declara n felul urmtor \BUS:\\data\ Cuvinte rezervate Anumii identificatori sunt folosii de sistem ca i cuvinte cheie. Aceste cuvinte nu pot fi folosite ca identificatori de baz pentru semnalele sau obiectele definite de utilizator. Am ntlnit deja cteva cuvinte rezervate cum ar fi in, out, or, and, port, map, end, etc. Cuvintele cheie sunt de cele mai multe ori listate cu caractere ngroate. Identificatorii extini pot folosi cuvintele cheie deoarece acetia sunt privii ca i cuvinte separate (de exemplu identificatorul extins \end\ este permis) Reprezentrile numerice Reprezentarea numeric obinuit este reprezentarea zecimal. VHDL permite reprezentri de tip ntreg i real. Reprezentarea de tip ntreg const n numr, fr punct zecimal, iar reprezentarea real include ntotdeauna punctul zecimal. Notaia exponenial este permis folosindu-se 'E' sau 'e'. Pentru tipul ntreg exponentul trebuie s fie ntotdeauna pozitiv. Exemple de reprezentri sunt : - tipul ntreg : 12 , 10 , 256E3 , 12e+6 - tipul real : 1.2 , 256.24 , 3.14E-2 Pentru a exprima un numr n alt baz dect baza 10, se folosete urmtoarea convenie gneral: baza#numr#. Cteva exemple sunt date n continuare. baza 2 : 2#10010# (reprezentnd numrul zecimal 18) baza 16 : 16#12# baza 8 : 8#22# baza 16 : 16#1D# Pentru a face citirea numerelor cu mai multe ranguri mai uoar se pot insera caractere underscore atta timp ct nu sunt inserate la nceput sau la sfrit : 2#1001_1101_1100_0010# , 215_123 . Caractere, iruri de caractere, iruri de bii Pentru a se putea folosi caractere literale n codul VHDL, se pune caracterul ntre ghilimele simple: 'a' , 'B' , ',' . Pe de alt parte irurile de caractere sunt plasate ntre ghilimele duble: "Acesta este un sir de caractere". Pentru a folosi
141

Limbaje de descriere hardware (HDL)

ghilimelele n interiorul unul ir de caractere acestea se vor dubla: "Acesta este un ""sir""." Orice caracter ASCII ce are un echivalent tipribil poate fi introdus n interiorul unui ir de caractere. Un ir de bii reprezint o secven de valori 0 sau 1. Pentru a se indica faptul c acesta este un ir de bii, se plaseaz litera 'B' n faa irului: B"1001" . Se pot folosi de asemenea iruri n baza 16 sau 8 folosind specificatorii X respectiv O. Cteva exemple sunt urmtoarele: binar : B"1100_1001" , b"1001011" hexazecimal : X"C9" , X"4b" baza 8 : O"311" , o"113" Trebuie menionat c n sistemul hexazecimal fiecare digit reprezint exact 4 bii. De aceea numrul b"1001011" nu este acelai cu X"4b" deoarece primul are doar 7 bii, iar al doilea reprezint o secven de 8 bii. Obiecte de tip date: semnale, variabile i constante Un obiect de tip dat este creat de o declaraie a obiectului i are asociate o valoare i un tip. Un obiect poate fi o constant, o variabil, un semnal sau un fiier(file). Pn acum s-au ntlnit semnale care erau folosite ca porturi de intrare/ieire sau conexiuni interne. Semnalele pot fi considerate trasee ntr-o schem care au o valoare curent i valori viitoare i care sunt funcii ale instruciunilor de asignare a semnalelor. De cealalt parte, variabilele i constantele sunt folosite pentru a modela funcionarea circuitului i sunt folosite n procese, proceduri i funcii la fel cum se folosesc n orice limbaj de programare. Constante - O constant poate avea o singur valoare de un tip specificat i nu se poate modifica pe parcursul modelrii. O constant se declar n felul urmtor: constant numele_constantei : tipul [ := valoare_iniial ] unde valoarea iniial este opional. Constantele se pot declara la nceputul unei arhitecturi i pot fi folosite apoi oriunde n arhitectur. Constantele care se declar ntr-un proces pot fi folosite numai n procesul respectiv. Ca exemple:
constant constant constant constant const_1 : integer := 24 ; const2 : time := 2 ns ; const_1,const2 : integer := 24; DATA_BUS : integer := 16;

Variabile - O variabil poate avea o singur valoare la un moment dat, ca o constant, dar ea poate fi i actualizat folosind o instruciune de actualizare. Variabila este actualizat fr nici o ntrziere, imediat ce instruciunea este executat. Variabilele trebuie declarate n interiorul proceselor. Declararea variabilelor se face n modul urmtor: variable lista_nume_variabile : tipul [ := valori initiale ]; Cteva exemple de declaraii de variabile sunt urmtoarele:
142

Circuite integrate numerice. Aplicaii n mecatronic

variable variable variable variable

CNTR_BIT: bit :=0; VAR1: boolean :=FALSE; SUM: integer range 0 to 256 :=16; STS_BIT: bit_vector (7 downto 0);

Variabila SUM, din exemplul de mai sus, este un numr ntreg care poate lua valori ntre 0 i 256 cu valoarea iniial 16 la nceputul modelrii. Al patrulea exemplu definete un vector de 8 bii: STS_BIT(7), STS_BIT(6), ... , STS_BIT(0). Valoarea unei variabile poate fi actualizat printr-o instruciune de asignare de genul: nume_variabil := expresie; Semnale - Semnalele sunt declarate cu urmtoarele instruciuni:
signal lista_nume_semnale : tipul [ := valori initiale ];

Exemple de astfel de declaraii sunt:


signal signal signal signal signal SUMA,CARRY : std_logic ; TRIGGER : integer :=0 ; CLOCK : bit ; DATA_BUS : bit_vector (0 to 7); VALOARE : integer range 0 to 100 ;

Semnalele sunt actualizate cnd este executat instruciunea de asignare, cu o anumit ntrziere, cum se arat mai jos
SUMA <= (A xor B) after 2 ns;

n particular se poate astfel specifica i o form de und:


signal unda : std_logic; unda <= '0','1' after 5ns, '0' after 10ns, '1' after 20ns ;

Diferenele dintre variabile i semnale sunt importante i const n special n momentul la care acestea i schimb valoarea. O variabil este actualizat imediat cnd este executat instruciunea de actualizare. Semnalele i modific valoarea cu o anumit ntrziere dup ce a fost evaluat expresia de asignare. Dac nu este specificat ntrzierea, semnalul va avea o ntrziere generic delta. Aceasta are consecine importante pentru valorile actualizate ale semnalelor i ale variabilelor. Pentru a ilustra acest lucru, se va face o comparaie ntre dou surse VHDL n care se folosete un proces pentru a calcula semnalul RESULT, odat folsosind variabile i odat semnale. Exemplul de proces n care se folosesc variabile este:
architecture VAR of EXEMPLU is signal TRIGGER, RESULT: integer := 0; begin process variable variable1: integer :=1; variable variable2: integer :=2; variable variable3: integer :=3; begin wait on TRIGGER; variable1 := variable2; variable2 := variable1 + variable3; variable3 := variable2; 143

Limbaje de descriere hardware (HDL)

RESULT <= variable1 + variable2 + variable3; end process; end VAR

Iar exemplul n care se folosesc semnale este:


architecture SIGN of EXEMPLU is signal TRIGGER, RESULT: integer := 0; signal signal1: integer :=1; signal signal2: integer :=2; signal signal3: integer :=3; begin process begin wait on TRIGGER; signal1 <= signal2; signal2 <= signal1 + signal3; signal3 <= signal2; RESULT <= signal1 + signal2 + signal3; end process; end SIGN;

n primul caz, variabilele 'variable1' , 'variable2' i 'variable3' sunt calculate secvenial i valorile lor actualizate instantaneu dup apariia semnalului TRIGGER. n continuare semnalul RESULT este calculat folosind noile valori ale variabilelor. Rezult urmtoarele valori: variable1 = 2 , variable2 = 5 , variable3 = 5. Deoarece RESULT este un semnal, acesta va fi calculat la momentul TRIGGER i actualizat la momentul TRIGGER + delta, iar valoarea sa va fi RESULT = 12. n al doilea exemplu ns, semnalele vor fi calculate la momentul TRIGGER. Toate aceste semnale sunt calculate n acelai timp, folosind vechile valori ale signal 1, 2 i 3. Toate semnalele vor fi actualizate la momentul delta dup sosirea semnalului TRIGGER. n acest mod, semnalele vor avea urmtoarele valori: signal1 = 2, signal2 = 4, signal3 = 2, iar RESULT va avea valoarea 7. 6.2.3 Tipuri de date VHDL Fiecare obiect de natura unei date are un tip asociat. Tipurile definesc un set de valori pe care obiectul le poate avea i implicit un set de operaii care sunt permise pe acesta. Noiunea de tip este noiune cheie pentru VHDL deoarece acesta este un limbaj n care fiecare obiect trebuie s aib un tip riguros definit (strongly typed). n general nu este permis asignarea unei valori de un tip unui obiect de un alt tip. Exist patru categorii de tipuri: scalar, compus (composite), acces (access) i fiier (file). Tipurile scalar reprezint o singur valoare i sunt ordonate astfel nct se pot efectua operaii relaionale. Tipul scalar include subtipurile discret, virgul

144

Circuite integrate numerice. Aplicaii n mecatronic

mobil (real) i fizic. Subtipul discret cuprinde integer i tipuri gen enumerare de valori booleene, bii i caractere. Tipurile compuse sunt cele vectoriale (array) i nregistrare (record). Tipurile de date predefinite care exist n VHDL sunt predefinite n package-ul standard (std) dup cum se arat n tabelul 6.1. Pentru a folosi acest package trebuie inclus urmtoarea directiv :
library std, work; use std.standard.all;

Tabelul 6.1 Tip Bit Tipurile definite n package-ul standard din biblioteca std Domeniul de valori Exemplu signal A: bit :=1; 0, 1

Bit_vector un ir de elemente de tip bit

signal INBUS: bit_vector(7 downto 0); variable TEST: Boolean Boolean FALSE, TRUE :=FALSE variable VAL: character :=$; character orice caracter permis VHDL

Integer Natural

domeniul depinde de implementare dar include cel puin (2311) : +(2311) ntreg ncepnd cu 0 pn la valoarea maxim admis ntreg ncepnd cu 1 pn la valoarea maxim admis un ir de elemente de tip caracter

constant CONST1: integer :=129; variable VAR1: natural :=2;

Positive

variable VAR2: positive :=2;

String

variable VAR4: string(1 to 12):= @$#ABC*()_%Z;

Tipuri de date definite de utilizator se pot introduce ca noi tipuri folosind declaraia de tip, care denumete tipul i specific domeniul de valori. Sintaxa pentru definirea tipurilor este : type identificator is definitia_tipului; n continuare vor fi date cteva exemple de definiii de tipuri. Tipurile ntregi
type small_int is range 0 to 1024; type my_word_length is range 31 downto 0; subtype data_word is my_word_length range 7 downto 0;

Un subtip este un subset al unui tip definit anterior. Ultimul exemplu ilustreaz modul de folosire al subtipurilor. Subtipul numit data_word este un

145

Limbaje de descriere hardware (HDL)

subtip al my_word_length al criu domeniu este restricionat ntre 7 i 0. Alt exemplu de subtip ar fi: subtype int_small is integer range -1024 to +1024; Tipurile n virgul mobil
type cmos_level is range 0.0 to 3.3; type pmos_level is range -5.0 to 0.0; type probability is range 0.0 to 1.0; subtype cmos_low_V is cmos_level range 0.0 to +1.8;

Tipurile fizice Definirea tipului fizic include un identificator al unitii de msur a mrimii fizice n cauz dar acest tip prezint o importan mai mic pentru sintez (de exemplu el nu este un tip permis de programul de sintez Xilinx Foundation). Tipurile enumerative Un tip enumerativ const ntr-o list de caractere sau identificatori. Tipul enumerativ poate sa fie foarte util la scrierea modelelor la un nivel abstract. Sintaxa pentru tipurile enumerative este, type nume_tip is (identificatori sau list de caractere); Iat cteva exemple,
type type type type my_3values is (0, 1, Z); PC_OPER is (load, store, add, sub); oct_digit is (0,1,2,3,4,5,6,7; state_type is (S0, S1, S2, S3);

Exemple de obiecte care folosesc tipurile de mai sus sunt date n continuare,
signal SIG1: my_3values; variable ALU_OP: pc_oper; variable first_digit: hex_digit :=0; signal STATE: state_type :=S2;

Dac nu se iniializeaz semnalul, iniializarea implicit este valoarea extrem din stnga domeniului. Tipurile enumerative trebuiesc definite n corpul arhitectural sau n interiorul unui package dup cum se arat n continuare:
type STD_ULOGIC is ( U, X, 0, 1, Z, W, L, H. -); ---------neiniializat impus nedeterminat impus 0 impus 1 nalt impedan slab nedeterminat slab 0 slab 1 neimportant

Pentru a se folosi acest tip trebuie s se includ clauza nainte de fiecare declaraie:
library ieee; use ieee.std_logic_1164.all;

146

Circuite integrate numerice. Aplicaii n mecatronic

Este posibil ca mai multe pori sa impun valoarea unui semnal (cazul SI cablat la ieire). n acest caz ar putea exista un conflict i semnalul ar putea fi nedeterminat. Ca un exemplu ieirile porilor AND i NOT sunt conectate mpreun la portul de ieire OUT1. Pentru a rezolva valoarea ieirii, se poate apela o funcie special. Aceste funcii sunt de obicei funcii scrise de utilizator i care vor rezolva problema. Package-ul std_logic_1164 are o astfel de funcie pre definit, numit RESOLVED. Se poate folosi urmtoarea declaraie pentru semnalul OUT1:
signal OUT1: resolved: std_logic;

Dac exist conflict, funcia RESOLVED va fi folosit pentru intermedierea conflictului i determinarea valorii semnalului. Tipurile compuse Obiectele compuse constau ntr-o colecie de date legate ntre ele sub forma unui vestor sau a unei nregistrri. nainte de a se putea folosi, acest tip trebuie declarat. Un tip array este declarat n felul urmtor:
type nume is array (schema indexare) of tip_element; type type type type MY_WORD is array (15 downto 0) of std_logic; YOUR_WORD is array (0 to 15) of std_logic; VAR is array (0 to 7) of integer; STD_LOGIC_1D is array (std_ulogic) of std_logic;

n primele dou exemple este definit un vector unidimensional de elemente de tipul std_logic indexat de la 15 la 0, i respectiv de la 0 la 15. Ultimul exemplu definete tot un vector unidimensional de elemente de tipul std_logic care folosete tipul std_ulogic pentru a defini index-ul. Aceast vector arat astfel: U X 0 1 Z W L H -. Cteva exemple de obiecte de acest tip sunt:
signal MEM_ADDR: MY_WORD; signal DATA_WORD: YOUR_WORD := B1101100101010110; constant SETTING: VAR := (2,4,6,8,10,12,14,16);

n primul exemplu, semnalul MEM_ADDR este un vector de 16 bii iniializai toi cu 0. Pentru a accesa elemente individuale ale vectorului, trebuie specificat indexul. Astfel M_ADDR(15) acceseaz bitul cel mai din stnga al vectorului, DATA_WORD(15) acceseaz bitul cel mai din dreapta al irului, care are valoarea 0. Pentru a accesa un subdomeniu, se specific indexul subdomeniului, MEM_ADDR(15 downto 8) sau DATA_WORD(0 to 7). Vectorii multidimensionali pot fi de asemenea declarai folosind o sintax similar cu urmtoarele declaraii:
type MATRICE3X2 is array (1 to 3, 1 to 2) of natural; type MATRICE4X2 is array (1 to 4, 1 to 2) of integer; type STD_LOGIC_2D is array (std_ulogic,std_ulogic) of std_logic; variable DATA_ARR: MATRICE4X2 :=((0,2), (1,3), (4,6), (5,7)); 147

Limbaje de descriere hardware (HDL)

Pentru a accesa un element se va specifica indexul, de exemplu DATA_ARR(3,1) care returneaz valoarea 4. Uneori este util s nu se specifice dimensiunea vectorului cnd se declar tipul. Sintaxa este urmtoarea: type nume is array (tip range <>) of tip_elemente; Tipul nregistrare (record) este al doilea tip compus este. O nregistrare (record) const n mai multe elemente care pot fi de tipuri diferite. Sintaxa pentru tipul record este : type nume_tip is record identificator :indicarea_subtipului; identificator : indicarea_subtipului; end record; Ca un exemplu se poate da :
type MY_MODULE is record RISE_TIME FALL_TIME SIZE DATA end record; signal A, B: MY_MODULE; :time; : time; : integer range 0 to 200; : bit_vector (15 downto 0);

Pentru a accesa valorile sau a atribui valori unui record, se poate folosi una dintre metodele urmtoare:
A.RISE_TIME <= 5ns; A.SIZE <= 120; B <= A;

Conversiile de tip au o mare importan deoarece VHDL este un limbaj puternic bazat pe tipuri. Astfel nu se poate asigna o valoare de un anumit tip, unui semnal de alt tip. n general, se prefer folosirea aceluiai tip de date pentru semnalele dintr-un design, spre exemplu std_logic (n loc de combinaii de std_logic i bit). Uneori ns nu se poate evita folosirea tipurilor diferite. Pentru a permite atribuirea datelor ntre diferite tipuri este nevoie de o conversie de la un tip la altul. Din fericire exist funcii disponibile n cteva package-uri din biblioteca ieee, cum ar fi package-urile std_logic_1164 i std_logic_arith. De exemplu package-ul std_logic_1164 permite conversiile de tip din tabelul 6.2. Tabelul 6.2 Conversii suportate de package-ul std_logic_1164 Conversia std_ulogic -> bit Funcia to_bit(expresie)
148

Circuite integrate numerice. Aplicaii n mecatronic

std_logic_vector -> bit_vector std_ulogic_vector -> bit_vector bit -> std_ulogic bit_vector -> std_logic_vector bit_vector -> std_ulogic_vector std_ulogic -> std_logic_vector std_logic -> std_ulogic_vector

to_bitvector(expresie) to_bitvector(expresie) To_StdULogic(expresie) To_StdLogicVector(expresie) To_StdUlogicVector(expresie) To_StdLogicVector(expresie) To_StdUlogicVector(expresie)

Package-urile std_logic_unsigned i std_logic_arith permit conversii adiionale cum ar fi integer -> std_logic_vector i invers. Sintaxa unei conversii de tip este : nume_tip (expresie); Pentru a fi permis conversia, expresia trebuie s ntoarc un tip ce poate fi convertit n tipul nume_tip. Condiiile ce trebuiesc ndeplinite pentru a fi posibil conversia sunt: - conversiile sunt posibile ntre tipuri ntregi i tipuri array similare; - conversia ntre tipurile array este posibil dac au aceeai lungime i dac au acelai tip de elemente sau tipuri de elemente convertibile; - tipurile enumerative nu pot fi convertite. Atributele (attributes) exist n VHDL n dou categorii: unele pre definite ca parte a standardului 1076 i unele introduse n afara standardului, eventual de ctre utilizator. Atributele pre definite sunt ntotdeauna aplicate ca un prefix numelui unui semnal,variabile sau tip. Atributele sunt folosite pentru a returna diferite tipuri de informaie despre un semnal, variabil sau tip. Atributele constau ntr-un prefix () urmat de numele atributului. Ele sunt prezentate n tabelul 6.3. Tabelul 6.3 Atribut nume_semnalevent nume_semnalactive nume_semnaltransaction nume_semnallast_event nume_semnallast_active nume_semnallast_value nume_semnaldelayed(T) Funcie ntoarce valoarea boolean True dac semnalul a avut o tranziie i False dac nu ntoarce True dac a existat o atribuire a valorii semnalului, dac nu, ntoarce False ntoarce un semnal de tip 'bit' care se schimb din 1 n 0 sau din 0 n 1 la fiecare tranziie a semnalului. ntoarce intervalul de timp care a trecut de la ultimul eveniment al semnalului ntoarce intervalul de timp care a trecut de la ultima atribuire a valorii semnalului furnizeaz valoarea semnalului nainte de ultimul eveniment al acestuia furnizeaz un semnal care este ntrziat cu (T) fa
149

Limbaje de descriere hardware (HDL)

nume_semnalstable(T) nume_semnalquiet(T)

de semnalul original [T este opional, implicit T=0] ntoarce True, dac nu a existat nici un eveniment n intervalul de timp T, altfel ntoarce False. [T este opional, implicit T=0] ntoarce True, dac nu a existat nici o atribuire a valorii semnalului n intervalul de timp T, altfel ntoarce False. [T este opional, implicit T=0]

Un exemplu ar fi urmtoarea expresie care verific apariia unui front cresctor de ceas:
if (CLOCKevent and CLOCK=1) then ...

6.2.4 Operatori VHDL Limbajul VHDL suport diferite clase de operatori care opereaz pe semnale, variabile i constante. Clasele de operatori sunt prezentate n tabelul 6.4. Tabelul 6.4 Clasa 1. Operatori logici and or nand nor xor xnor 2. Operatori relaionali = /= < <= > >= 3. Operatori de deplasare sll srl Sla sra rol ror 4. Operatori aditivi + = & 5. Operatori unari + 6. Operatori multiplicativi * / mod rem 7. Ali operatori ** abs Not Prioritatea operatorilor este maxim pentru operatorii din clasa 7, urmat de clasa 6, iar cea mai mic prioritate o au operatorii din clasa 1. Dac nu sunt folosite paranteze, operatorii din clasa 7 sunt aplicai prima dat, dup care urmeaz celelalte clase n ordinea prioritii. Operatorii din aceeai clas au aceeai prioritate i sunt aplicai de la dreapta la stnga ntr-o expresie. Ca un exemplu s considerm urmtorii vectori : X (=010), Y(=10), i Z (10101). n acest caz expresia: not X & Y xor Z rol 1 este echivalent cu ((not X) & Y) xor (Z rol 1) = ((101) & 10) xor (01011) =(10110) xor (01011) = 11101. Operatorul xor este executat la nivel de bit. Operatorii logici (and, or, nand, nor, xor i xnor) sunt definii pentru tipurile bit, boolean, std_logic, std_ulogic i pentru vectorii de aceste tipuri. Acetia sunt folosii pentru a definii expresii logice booleene sau pentru a face operaii la nivel de bit ntre iruri de bii. Rezultatul acestor operatori este de tipul operanzilor (Bit sau Boolean). Aceti operatori pot fi aplicai semnalelor, variabilelor sau constantelor. Trebuie reinut c operatorii nand i nor nu sunt asociativi i trebuiesc folosite paranteze ntr-o secven de nand i nor pentru a preveni erori de sintax.
150

Circuite integrate numerice. Aplicaii n mecatronic

De exemplu X nand Y nand Z va da o eroare de sintax i va trebui scris (X nand Y) nand Z. Operatorii relaionali (tabelul 6.5) testeaz relaia dintre dou tipuri scalare i ofer ca rezultat o ieire boolean True sau False. Tabelul 6.5 Op. Descriere Tipul Operanzilor Tipul Rezultatului = Egalitate orice tip Boolean /= Inegalitate orice tip Boolean < Mai mic scalar sau array discret Boolean <= Mai mic sau egal scalar sau array discret Boolean > Mai mare scalar sau array discret Boolean >= Mai mare sau egal scalar sau array discret Boolean De menionat c simbolul operatorului <= (mai mic sau egal) este acelai cu cel al operatorului de atribuire pentru semnale i variabile. n exemplul urmtor primul simbol <= este operator de atribuire.
variable STS : Boolean; constant A : integer :=24; constant B_COUNT : integer :=32; constant C : integer :=14; STS <= (A < B_COUNT) ; -- va atribui valoarea TRUE variabilei STS STS <= ((A >= B_COUNT) or (A > C)); -- STS va fi TRUE STS <= (std_logic (1, 0, 1) < std_logic(0, 1,1)); -- STS va fi FALSE type new_std_logic is (0, 1, Z, -); variable A1: new_std_logic :=1; variable A2: new_std_logic :=Z; STS <= (A1 < A2);

n ultimul exemplu STS va rezulta TRUE deoarece 1 este la stnga lui Z deoarece la tipurile enumerative discrete, comparaia se face la nivel de element, ncepnd de la stnga spre dreapta.. Operatorii unari '+' i '-' (tabelul 6.6) sunt folosii pentru a specifica semnul unui tip numeric. Tabelul 6.6 Op. + Descriere Identitate Negaie Tip Operand Orice tip numeric Orice tip numeric Tip Rezultat Acelai tip Acelai tip

Operatoriii de deplasare execut o deplasare sau rotire la nivel de bit ntrun vector de elemente de tip bit (std_logic) sau boolean.

151

Limbaje de descriere hardware (HDL)

n tabelul 6.7 sunt prezentai operatorii de deplasare, descrierea i tipul operanzilor. Ca exemplu dup aplicarea operatorului din urmtorul exemplu:
variable NUM1 :bit_vector := 10010110; NUM1 srl 2;

NUM1 va fi evaluat ca 00100101. Dac argumentul este un ntreg negativ deplasarea stnga va deveni deplasare dreapta: NUM1 srl 2 este echivalent cu NUM1 sll 2 vor da ca rezultat 01011000. Tabelul 6.7 Op. Descriere Tip Operand Tip Rezultat Tipul sll Deplasare logic la stnga - Stnga: orice tip array operandului din spaiile rmase n dreapta unidimensional cu stnga sunt completate cu '0' elemente de tip bit sau boolean Dreapta: ntreg srl Deplasare logic la dreapta idem idem spaiile rmase libere completate cu '0' sla Deplasare aritmetic stnga - Idem idem spaiile sunt completate cu bitul din marginea dreapt sra Deplasare aritmetic dreapta - Idem idem spaiile sunt completate cu bitul din marginea stng rol Rotire stnga (circular) Idem idem ror Rotire dreapta (circular) idem idem Operatorii aditivi (tabelul 6.8) sunt folosii pentru operaii aritmetice (adunare i scdere) pe orice tip numeric de operanzi. Operatorul de concatenare (&) este folosit pentru a concatena doi vectori avnd ca rezultat un vector mai mare. Pentru a folosi aceti operatori trebuie specificate package-ul std_logic_unsigned sau std_logic_arith pe lng package-ul std_logic_1164. Tabelul 6.8 Op. Descriere Tip operand stnga Tip operand dreapta + Adunare Tip numeric Tipul op din stnga Scdere Tip numeric Tipul op din stnga & Concatenare Tip Array sau element Tipul op din stnga Tip rezultat Acelai tip Acelai tip Acelai tip

Operatorii de multiplicare (tabelul 6.9) sunt folosii pentru a executa funcii matematice pe tipurile numerice (ntreg sau virgul mobil)

152

Circuite integrate numerice. Aplicaii n mecatronic

Tabelul 6.9 Op. Descriere Tip operand stga. Tip operand dreapta Tip rezultat ntreg sau virgul Acelai tip Acelai tip mobil * nmulire Orice tip fizic ntreg sau real Acelai tip ntreg sau real Tip fizic Acelai tip ntreg sau virgul ntreg sau virgul Acelai tip mobil mobil / mprire Orice tip fizic ntreg sau real Tip op. stnga Orice tip fizic Acelai tip ntreg mod modul Orice tip ntreg Acelai tip rem rest Orice tip ntreg Acelai tip

Ali operatori relevani mai sunt prezentai n tabelul 6.10. Tabelul 6.10 Op. Descriere ** Ridicare la putere Tip operand Tip rezultat Dreapta ntreg tip operand stnga virgul mobil ntreg tip operand stnga orice tip numeric acelai tip orice tip bit sau boolean acelai tip Tip operand Stnga ntreg

abs not

Valoare absolut Negare logic

6.2.5 Exemple Exemplele de sintez ([48], [54]) sunt orientate pe circuite CPLD i pot compilate folosind mediul Xilinx ISE Foundation/Webpack i compilatorul XST VHDL. a. Multiplexoare Este prezentat un circuit de multiplexare 4:1 implementat clasic, cu nivele de pori i ieire normal.
library ieee; use ieee.std_logic_1164.all; entity MUX4_1 is port ( Sel : in std_logic_vector(1 downto 0); A, B, C, D : in std_logic; Y : out std_logic 153

Limbaje de descriere hardware (HDL)

); end MUX4_1; architecture behavior of MUX4_1 is begin process (Sel, A, B, C, D) begin case Sel is when 00 => Y<=A; when 01 => Y<=B; when 10 => Y<=C; when 11 => Y<=D; when others => Y<=A; end case; end process; end behavior;

b. Codificatoare i decodificatoare Exemplele prezint un codificator 8:3, un decodificator 3:8 i un decodificator pentru adresare. n cazul decodificatorului de adresare spaiul de adrese de 64k adresat cu 16 bii de adres, este mprit liniar din punct de vedere al decodificrii n 16 seciuni egale de 4k i/sau 4 seciuni de 16k; din acestea 3 seciuni egale de 16k sunt identificate prin semnalele de decodificare AddDec active n 1, iar o a doua zon de 16 k este la rndul ei mprit n patru cu semnale de decodificare similare.
Library IEEE; Use IEEE.STD_LOGIC_1164.all, IEEE.NUMERIC_STD.all; entity ENCODER8 is port (A: in std_logic_vector (7 downto 0); Y: out std_logic_vector (2 downto 0)); end entity ENCODER8; architecture ARCH of ENCODER8 is begin with A select Y <= "000" when "00000001", "001" when "00000010", "010" when "00000100", "011" when "00001000", "100" when "00010000", "101" when "00100000", "110" when "01000000", "111" when "10000000", "XXX" when others; end architecture ARCH;

154

Circuite integrate numerice. Aplicaii n mecatronic

library IEEE; use IEEE.STD_LOGIC_1164.ALL, IEEE.NUMERIC_STD.all; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Decoder3_8 is Port ( A : in integer range 0 to 7; Y : out std_logic_vector(7 downto 0)); end Decoder3_8; architecture behavioral of Decoder3_8 is begin process (A) begin for N in 0 to 7 loop if (A = N) then Y(N) <= 1; else Y(N) <= 0; end if; end loop; end process; end behavioral; library IEEE; use IEEE.STD_LOGIC_1164.ALL, IEEE.NUMERIC_STD.all; entity decoder_4_bit is Port ( Address : in integer range 0 to 15; AddDec_0to3 : out std_logic; AddDec_8to11 : out std_logic; AddDec_12to15 : out std_logic; AddDec_4to7 : out std_logic_vector(3 downto 0)); end decoder_4_bit; architecture behavioral of decoder_4_bit is begin process (Address) begin AddDec_0to3 <= 0; AddDec_4to7 <= (others => 0); AddDec_8to11 <= 0; AddDec_12to15 <= 0; case Address is --prima zona when 0 to 3 => AddDec_0to3 <= 1; --a doua zona, 4 iesiri dec. 155

Limbaje de descriere hardware (HDL)

when 4 => AddDec_4to7(0) when 5 => AddDec_4to7(1) when 6 => AddDec_4to7(2) when 7 => AddDec_4to7(3) --a treia zona when 8 to 11 => AddDec_8to11 <= 1; --a patra zona when 12 to 15 => AddDec_12to15 <= 1; end case; end process;
end behavioral;

<= <= <= <=

1; 1; 1; 1;

c. Circuite secveniale Exemplul este un numrtor binar sincron de 16 bii, cu intrare de reset .
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -entity num16 is Port ( rst : in std_logic; clk : in std_logic; count: out std_logic_vector(15 downto 0)); end num16; architecture behavioral of num16 is signal temp: std_logic_vector(15 downto 0); begin process (clk, rst) begin if (rst = 1) then temp <= "0000000000000000"; elsif (clkevent and clk=1) then temp <= temp + 1; end if; end process; count <= temp; end behavioral;

156

Circuite integrate numerice. Aplicaii n mecatronic

6.3 Limbajul Verilog


Limbajul Verilog HDL este utilizat pentru a modela i simula structura hardware a unui sistem sau a unei pri dintr-un sistem numeric. La fel ca la VHDL numai o parte din instruciuni sunt sintetizabile i implementabile ntr-un circuit logic. Cei care l-au conceput au dorit ca el s fie bazat pe limbajul C astfel ca s fie cu uurin acceptat de comunitatea proiectanilor, dei finalmente nu este chiar aa de asemntor cu C-ul (de exemplu nu exist pointeri!). Referinele bibliografice eseniale sunt [8], [44], [48] i [53]. La fel ca VHDL el difer de un limbaj convenional prin aceea c execuia instruciunilor nu este una strict liniar. Pe scurt, un model Verilog const ntr-o ierarhie de module. Modulele sunt definite ca avnd un set de porturi de intrare, ieire sau bidirecionale. Intern fiecare modul conine o list de aa zise fire de conexiune (wires) i registre (bistabile). Exist instruciuni concurente i instruciuni secveniale care descriu comportarea modulului prin definirea relaiilor ntre porturi, fire i registre. Instruciunile secveniale sunt plasate n interiorul unui bloc de tip begin-end i executate secvenial n interiorul blocului. Toate instruciunile concurente i toate blocurile begin-end proiectului sunt executate ns n paralel. Un bloc poate la rndul su s conin una sau mai multe instane ale altor module. Modelele Verilog sunt capabile s descrie att comportarea funcional a modelelor ct i conexiunile ntre componente. Modelele Verilog pot fi dezvoltate pentru diferite nivele de abstractizare: - un model care descrie fluxul de date ntre registre (RTL). - un model care descrie fluxul de date la nivelul porilor logice (gate-level) - un model care descrie modelul la nivelul de tranzistor (switch-level) n continuare se va prezenta sumar limbajul Verilog (Verilog-95) punnduse accent pe componentele sale sintetizabile. Un modul Verilog ncapsuleaz un model. Modelul poate fi descris n funcional, prin structural sau printr-o combinaie a cele dou metode. Atunci cnd un circuit este descris n mod funcional, modelul va fi descris prin algoritmi de nivel nalt sau prin ecuaii booleene. Atunci cnd un circuit este descris structural, modelul va fi descris prin elementele din care este compus, net-urile existente, etc. Descrierea structural poate conine elemente care au fost descrise n mod funcional. Un proiect Verilog const din unul sau mai multe module conectate ntre ele prin intermediul porturilor. Fiecare port are asociat un nume i un mod de lucru (input, output, inout). Definiiile modulelor nu pot fi imbricate. Un modul este definit dup sintaxa urmtoare:
module <name> (interface_list) ; endmodule

157

Limbaje de descriere hardware (HDL)

interface_list ::= port_reference | {port_reference { , port_reference } } port_reference ::= port_identifier | port_identifier [ constant_expression ] |port_identifier [ msb_constant_expression : lsb_constant_expression ] module_item ::= module_item_declaration | continuous_assignment | gate_instantiation | module_instantiation | always_statement module_item_declaration ::= parameter_declaration | input_declaration | output_declaration | inout_declaration | net_declaration | wire_declaration | reg_declaration | integer_declaration | task_declaration | function_declaration

De exemplu, codul urmtor descrie un circuit basculant de tip D, sincron cu comutarea pe frontul pozitiv al ceasului:
// bistabil de tip d cu comutare pe front pozitiv module my_dff (clk, d, q) ; input clk, d; output q; wire clk, d ; reg q ; always @(posedge clk) begin q = d ; end endmodule

n Verilog o ierarhie este specificat prin iniializarea unei instane.


<module_name> [ parameter_value_assignment ] <instance_name> module_instance {, module_instance } ; module_instance ::= instance_identifier ( [ list_of_module_connections ] ) list_of_module_connections ::= ordered_port_connection {, ordered_port_connection } |named_port_connection {, named_port_connection }

158

Circuite integrate numerice. Aplicaii n mecatronic

Urmtorul exemplu corespunde unui registru de deplasare serie-paralel care instaniaz 4 circuite bistabile de tipul celor descrise anterior.
// un registru de deplasare serie-paralel folosind // patru instane ale unui bistabil de tip d module shift_reg(clk, d, q) ; input clk, d; output q; wire q0, q1, q2 ; // 4 instane pentru bistabilul d my_dff inst_3 (clk, d, q0) ; my_dff inst_2 (clk, q0, q1); my_dff inst_1 (clk, q1, q2); my_dff inst_0 (clk, q2, q) ; endmodule

6.3.1 Elemente lexicale Verilog Un identificator (un simbol) este compus dintr-o secven de caractere alfanumerice. Primul caracter al unui identificator trebuie s fie o liter. Identificatorii depind de tipul de liter folosit (mic au mare), cu alte cuvinte sunt case sensitive. Astfel and2 i AnD2 vor fi dou simboluri diferite. Limbajul Verilog conine un set de cuvinte cheie care nu pot fi folosite ca identificatori. n sursa Verilog se pot folosi comentarii de tip linie (//) sau comentarii de tip bloc (/* ... bloc sursa ... */). Liniile comentate vor fi ignorate de compilator. Comentariile de tip bloc nu pot fi imbricate.
// comentariu tip line /* comentariu tip bloc always@(negedge clk) begin D <= DATA; end */

Constantele sunt numere specificate ca ntregi. Constantele pot fi asignate n dou moduri: ca un numr zecimal sau ca un ir de bii. Constantele pot fi exprimate prin prefixare n urmtoarele baze de numeraie: - baza 16 cu prefixul h - baza 10 cu prefixul d (implicit) - baza 8 cu prefixul o - baza 2 cu prefixul b Prefixul nu este nu depinde de tipul de liter ca de altfel i caracterele alfanumerice din setul: 0-9, a-f(A-F), x(X) i z (Z). unde x reprezint o stare neprecizat (indiferent), iar caracterul z reprezint o stare High-Z

159

Limbaje de descriere hardware (HDL)

Exemple: b011100, h0FFAA, h90aFd sau aceiai constant hex h90afd. a. Tipuri de date Verilog n Verilog exist trei clase de date: net, reg i parameter. Clasa de tipuri de date net este folosit pentru a reprezenta conexiunea fizic dintre dou elemente. Poate fi unul dintre tipurile urmtoare: wire, tri, supply0, supply1. Tipul wire reprezint o legtur direct ntre doi pini. Tipul tri este folosit pentru magistrale tri-state. Tipurile supply0 i supply1 sunt folosite pentru a modela sursele de alimentare. De obicei se folosete tipul wire pentru linii care sunt comandate de o singur ieire i tipul tri pentru linii care sunt comandate de mai multe ieiri. Un tip din clasa net poate fi scalar sau vectorial, pentru cazul unui vector se folosindu-se urmtoarea declaraie:
tri[7:0] my_bus; // magistrala 3-S cu dim. de 8 bii

Clasa i tipul reg este folosit ca variabil. Datele sunt memorate n variabil pn la urmtoarea actualizare. Tipul de date reg nu trebuie neaprat privit ca un registru (un bistabil). Exemplu:
reg a, b; // declara doua variabile de 1 bit reg[31:0] x // declara o variabil pe 32 bii

Registrele pot fi eventual combinate n vectori multidimensionali pentru a implementa de exemplu memorii:
reg[7:0] mem[1024] // declara o memorie de 1024 x 8 bii.

Spre deosebire de celelalte tipuri de date prezentate anterior parameter reprezint tipuri de date constante. Parametrii sunt folosii pentru a realiza modele parametrizate ca ]n exemplul urmtor:
parameter msb = 7, lsb = 0; reg[msb:lsb] x; // declar un registru de 8 bii

b. Operatori n tabelul de mai jos sunt dai tipurile de operatori suportai de limbajul Verilog. Tabelul 6.11 Operatori aritmetici *, +, -, /, % Operatori pentru deplasare <<, >> Operatori relaionali <, >, <=, >= Operatori egalitate ==, != Operatori la nivel de bit ~, &, |, ^, ^ ~, ~ ^ Operatori pentru reducere &, |, ^, ^ ~, ~ ^, ~&, ~| Operatori logici !, &&, ||

160

Circuite integrate numerice. Aplicaii n mecatronic

Operatorii aritmetici + i - realizeaz operaiile de adunare i scdere, operatorul * realizeaz operaia de nmulire (multiplicare). Operatorii de mprire / i modul % sunt suportai numai dac ambii operanzi sunt de tip constant. Exemple:
reg [3:0] sum, diff, mult, div, mod; reg [1:0] a, b ; parameter size1 = 16, size2 = 4; sum = a + b ; diff = a - b ; mult = a * b ; div = size1/size2; mod = size1%size2;

Operatorii pentru deplasare << realizeaz deplasarea spre stnga cu n poziii, iar >> realizeaz deplasarea spre dreapta cu n poziii Exemplu:
wire [7:0] a, b ; parameter shift = 4 ; //a are asignat b[3],..,b[0],0,0,0,0 assign a <= (b << shift) ; // a are asignat 0,0,0,0,b[7],..,b[4] assign a <= b >> shift;

Operatorii relaionali execut o comparare ntre doi operanzi i returneaz 1 dac expresia este adevrat sau 0 dac expresia este fals. Dac cei doi operanzi nu au aceiai dimensiune, operandului cu dimensiunea mai mic i vor fi adugate 0-uri n fa pentru a avea aceiai dimensiune cu operandul cu dimensiune mai mare. Exemplu:
reg a, b, c; a < b; /* evaluat 1 daca b mai mare dect a, altfel evaluat la 0 */ a <= b; /* evaluat la 1 dac b mai mare sau egal cu a, altfel evaluat la 0*/

Operatorii de egalitate = = i inegalitate ! = compar fiecare bit al operandului din stnga cu cel al operandului din dreapta. Operatorul de egalitate va evalua expresia n 1 dac cei doi operanzi sunt egali. Operatorul != va evalua expresia n 1 dac cei doi operanzi sunt diferii. Exemplu:
always@(negedge RST or negedge CLK) begin if(RST==1'b0) // detectez reset D <= 1'b0; else D <= DATA; // latch end

161

Limbaje de descriere hardware (HDL)

Operatorii la nivel de bit (bit wise) vor evalua rezultatul efectund operaia logic respectiv asupra fiecrui bit al operanzilor. Exemplu:
reg a = c = c = c = c = c = [1:0] a, b, c; 2'b1; b = 2'b3 ; a & b ; // bit-wise and c = "01" a | b ; // bit-wise or c = "11" ~a ; // bit-wise negation c = "10" a ^ b ; // bit-wise xor c = "10" a ^~ b ; // bit-wise xnor c = "01"

Operatori pentru reducere efectueaz operaia asupra biilor dintr-un vector, rezultatul fiind exprimat pe un bit. Exemplu:
reg reg a = c = c = c = c = [2:0] a ; c; 2'b01 ; &a; // c devine 0 |a ; // c devine 1 ^a ; // c devine 1 ^~a ; // c devine 0

Operatorii logici sunt folosii pentru a evalua o expresie ca True sau False. Operatorii logici returneaz 1'b0 pentru condiie fals i 1'b1 pentru condiie adevrat. Operatorul logic not (!) este folosit pentru a testa dac o expresie este adevrat sau fals. Operatorul logic and (&&) va returna 1'b1 dac ambii operanzi sunt evaluai ca True. Operatorul logic or (||) va returna 1'b1 dac cel puin unul dintre operanzi este evaluat ca True. Operatorul condiional "?:" este folosit pentru a scrie expresii bazate pe valoarea de adevr a unor condiii. Exemplu:
reg A; wire Q; wire nOE; assign Q = nOE == 0 ? A : 1'bZ,

Expresia de mai sus asociaz ieirii Q valoarea registrului A dac variabila nOE este egal cu 0 i valoarea High-Z dac nOE este egal cu 1. n acest mod se poate implementa controlul unei ieiri de tip tri-state. Operatorul pentru concatenare permite combinarea mai multor vectori ({}). Concatenarea se obine prin nchiderea operanzilor separai prin virgule ntre paranteze. Exemplu:
reg [7:0] a ; reg [3:0] b ;

162

Circuite integrate numerice. Aplicaii n mecatronic

reg x1, x2, x3, x4 ; a = {b, x1, x2, x3, x4} ;

Asignarea de mai sus produce acelai rezultat ca urmtoarea secven de cod:


a[7] a[6] a[5] a[4] a[3] a[2] a[1] a[0] = = = = = = = = b[3]; b[2]; b[1]; b[0]; x1; x2; x3; x4;

Concatenarea poate fi i multiplicativ folosind o constant de multiplicare ca n urmtorul exemplu:


reg reg reg a = [7:0] a ; x1, x2, x3, x4 ; b; {2{x1, x2, x3, x4}} ;

Concatenarea de mai sus este echivalent cu urmtoarea secven de cod:


a = {x1, x2, x3, x4, x1, x2, x3, x4}.

c. Operanzi O expresie poate conine urmtoarele tipuri de operanzi: constante, referine la date de tip net sau reg. Cnd se face referire la o clas de tipul net sau reg , se face referire la toi biii acelei clase. Pentru a folosi numai o parte din biii clasei se poate folosi operatorul de selecie [ ], ca n exemplul urmtor:
reg[15:0] wire[7:0] assign ah assign al ax; ah, al; = ax[15:8]; = ah[7:0]; //registru 16 bii // declarare net // selectez byte superior // selectez byte inferior

6.3.2 Modelarea funcional n Verilog

Asignarea continu este identificat prin prezena cuvntului cheie assign i va atribui continuu valori unei clase de tip net prin urmtoare sintax:
assign net_assignment {, net_assignment } net_assignment ::= net_lvalue = expression net_lvalue ::= net_identifier | net_identifier [expression] | net_identifier [msb_const_expression :

n urmtoarele exemple sunt prezentate astfel de asignri pentru sacalari i vectori:


wire a ; reg b, c; // asignare continua assign a = b ; 163

Limbaje de descriere hardware (HDL)

// asignare continu wire d = b + c; wire [3:0] dataA ; wire dataB ; wire [2:0] dataC ; wire [4:0] dataD, dataE ; wire [7:0] dataF, dataG ; assign dataE = dataA - dataB ; assign dataD[2:0] = dataC ; assign {dataF, dataG} = ~dataE + dataD;

Este posibil i o asignarea procedural care atribuie valori variabilelor de tip registru. Asignrile procedurale sunt folosite numai n interiorul blocurilor de tip always, initial, function i task. Expresia din dreapta poate fi orice expresie care poate fi evaluat la o valoare fix, iar expresia din stnga poate fi: - un scalar sau un vector de tip reg - o selecie de bii ai unui vector de tip reg - concatenarea celor dou variante de mai sus. n Verilog exist dou tipuri de asignri procedurale: - asignri de tip blocking cu operatorul "=" - asignri de tip nonblocking cu operatorul "<=" Sintaxa este urmtoarea
blocking_assignment ::= reg_lvalue = expression nonblocking_assignment ::= reg_lvalue <= expression reg_lvalue ::= reg_identifier | reg_identifier [expression] | reg_identifier [msb_const_expression : lsb_const_expression] | reg_concatenation

O atribuire procedural de tip blocking se va executa n mod secvenial n interiorul modulului. O atribuire procedural de tip nonblocking se va executa n paralel (concurent) cu alte instruciuni. Exemplele urmtoare ilustreaz aceast afirmaie:
// atribuire blocking reg a, b, c ; a = b ; c = a ; // variabila c va lua valoarea b // atribuire non-blocking reg a, b, c; a <= 0 ; c <= a; // c va lua valoarea a inainte de atribuirea a<=0

164

Circuite integrate numerice. Aplicaii n mecatronic

Un bloc de instruciuni este folosit pentru a grupa mai multe instruciuni mpreun. Este delimitat de cuvintele cheie begin i end i are sintaxa:
begin [ :block_name { block_item_declaration }] { statement } end block_item_declaration ::= parameter_declaration | reg_declaration | integer_declaration

Exemple de grupare a unor instruciuni n blocuri:


// un bloc secvenial begin a = b ; if( (c + d) > 1) begin ... end else begin ... end end // bloc secvential etichetat begin : reset_block if( reset) .. else .. end

Instruciunea if-else este folosit pentru a controla execuia n interiorul unui bloc, bazat pe valoarea de adevr a unui expresii. Ea are sintaxa:
if(expression) statement_or_null [ else statement_or_null ]

Expresia este o expresie boolean. Dac expresia este evaluat adevrat, secvena din blocul if este executat. Dac expresia este evaluat fals este executat secvena din blocul else. Exemplu:
/* q = 0 if dac reset=1. altfel q = d*/ if( reset) // reset == 1 q = 0 ; else q = d ; // if-else mbricate if( p_state == 2'b1) next_state = 2'11 ; else if( p_state == 2'b11 ) next_state = 2'00 ; else 165

Limbaje de descriere hardware (HDL)

next_state = p_state ;

Instruciunea case poate realiza o execuie de tipul multi decizie pe ramuri. Ea are sintaxa:
case (expression) case_item { case_item } endcase

Exemplul urmtor descrie un multiplexor:


// mux define selA 4'd1 define selB 4'd2 define selC 4'd3 define selD 4'd4 define selE 4'd5 reg [3:0] select ; reg out ; reg a, b, c, d, f; case (select) selA: out <= a ; selB: out <= b ; selC: out <= c ; selD, selE: out <= d ; default: out <= f; endcase

Deoarece constantele speciale x i z nu pot fi evaluate ntr-o expresie case, pentru evaluarea expresiilor care conin i aceste valori se vor folosi instruciunile casex i casez. Sintaxa este aceiai ca pentru case. n cadrul casex i casez valorile x i z sunt tratate ca valori indiferente (don-care). Instruciunile de ciclare de tip for i while sunt folosite pentru a executa repetat un bloc. Numrul de repetri este determinat de condiia buclei. Ele au sintaxa:
for ( init_assignment; condition ; step_assignment) statement while ( expression ) statement unde init_asignment este un registru iniializat la intrarea n bucl, iar step_assignment este o atribuire procedural care asigneaz o valoare nou registrului la fiecare pas. Instruciunea statement va fi evaluat atta timp ct

condiia este adevrat., ca n exemplul:


int i ; reg [7:0] a, b; for ( i = 0 ; i < 8; i = i + 1) if( i > 3) b[i] = ~a[i] ; else b[i] = a[i] ;

Instruciunile de buclare sunt suportate numai n interiorul unui bloc always, initial, function sau task. De exemplu:
function [7:0] b; 166

Circuite integrate numerice. Aplicaii n mecatronic

input [7:0] a; reg i; begin i = 0 ; while (i <= 7) begin if(i > 3) b[i] = ~a[i] ; else b[i] = a[i] ; i = i + 1 ; end end endfunction

Controlul n domeniul timpului asigur de fapt controlul asupra momentului la care o expresie va fi evaluat. Sunt suportai pentru sintez numai identificatorii negedge (front negativ, tranziie din 1 n 0) i posedge (front pozitiv, tranziie din 0 n 1). Exemplu:
// control n domeniul timpului always @(posedge clk or negedge reset ..) ...

O declaraie de tipul always conine un bloc care va fi executat cnd condiia sa devine activ. Toate procedurile always active la un moment dat vor fi executate concurent. O procedur always poate fi activat de modificarea semnalele descrise ntro list zis de sensibilitate. Sintaxa este:
always@(event_expression [ or event_expression { or event_expression }] )

Expresiile care nu au asociat identificatorul negedge sau posedge sunt considerate ca fiind combinaionale. Lista de sensibilitate trebuie s conin numai semnale cu aceiai polaritate, numai semnale sincrone sau numai semanle asincrone. Exemple:
// bloc always asincron: always @(x or y) begin .... end // bloc always sincron cu front pozitiv semnal de ceas always @(posedge clock) begin ... end

167

Limbaje de descriere hardware (HDL)

Task-urile, identificate de cuvntul cheie task, sunt secvene de declaraii care pot fi invocate repetitiv din codul Verilog. Ele ofer posibilitatea de a structura programele mai mari. Un task poate returna 0 valori sau mai multe valori. Sintaxa este:
task <task_name> ; { task_item_declaration } statement_or_null endtask task_item_declaration ::= parameter_declaration | reg_declaration | integer_declaration | input_declaration | output_declaration | inout_declaration

Numai variabilele de tip reg pot primi valori de ieire ntr-un task, ca n exemplul urmtor:
module task_example(a,b,c,d,sum); output sum; input a,b,c,d; reg sum; always @(a or b or c or d) begin t_sum(a,b,c,d,sum); end task t_sum; input i1,i2,i3,i4; output sum ; begin sum = i1+i2+i3+i4; end endtask endmodule

Funciile, identificate de cuvntul cheie function, sunt secvene de declaraii care pot fi invocate repetat din codul surs Verilog. Permit i ele structurarea programelor mari. Sintaxa este:
function [ range_or_type ] <function_name> function_item_declaration { function_item_declaration } statement endfunction function_item_declaration ::= parameter_declaration | reg_declaration | integer_declaration | input_declaration

Spre deosebire de task, funcia returneaz o singur valoare. Declararea funciei va declara implicit un registru care are acelai tip cu tipul funciei. O funcie trebuie s aib cel puin un argument de intrare. Funcia nu poate avea un argument de tipul output sau inout. Exemplu:
module func_example(a,b,c,d,sum); 168

Circuite integrate numerice. Aplicaii n mecatronic

output sum; input a,b,c,d; reg sum; always @(a or b or c or d) begin sum = func_sum(a,b,c,d); end function func_sum; input i1,i2,i3,i4; begin func_sum = i1+i2+i3+i4; end endfunction endmodule

Pentru compilatoarele Verilog exist, la fel ca la orice compilator, i nite directive de compilare din care se vor meniona doar cteva. Directiva `define definete un macro de tip text pentru substituie n sursa Verilog. Textul macro creat poate fi folosit oriunde n textul surs. Exemple:
'define selA 4'b1 'define selB 4'b2 'define selC selA

Directiva `undef este folosit pentru a dezactiva o macro substituie definit anterior. Exemple:
'define selA 4'b1 'undef selA

Directiva `include este folosite pentru a permite compilatorului s includ coninutul unui fiier surs n alt fiier surs la momentul compilrii. Numele fiierului poate fi specificat fr cale, folosind o cale relativ sau o cale complet. Fiierul inclus poate s conin la rndul sau alte directive `include. Directiva `include nu poate fi ns recursiv. n Verilog exist predefinite primitive de pori care vor permite i modelarea circuitelor la nivelul de poart caz n care urmtoarele primitive sunt: . and , . nand , .or , .nor , .xor i .xnor .
Primitivele and, nand, or, nor, xor, xnor au o ieire i una sau mai multe intrri. Primul terminal din lista porturilor este terminalul de ieire, iar restul sunt terminale de intrare.

6.3.3 Exemple Exemplele de sintez ([53]) sunt orientate pe circuite CPLD i pot compilate folosind mediul Xilinx ISE Foundation/Webpack i compilatorul XST Verilog.

169

Limbaje de descriere hardware (HDL)

a. Multiplexoare Este prezentat un circuit de multiplexare 4:1 bazat pe o magistral tri-state la ieire i unul implementat clasic, cu nivele de pori i ieire normal.
// // multiplexare folosind // module MUX( SEL, A, B, C, D, MUX_OUT ); input [3:0] SEL; input A, B, C, D; output MUX_OUT; wire MUX_OUT; assign MUX_OUT = assign MUX_OUT = assign MUX_OUT = assign MUX_OUT = endmodule 3-S

SEL[3] SEL[2] SEL[1] SEL[0]

? ? ? ?

A B C D

:1'bz; :1'bz; :1'bz; :1'bz;

// // mux cu porti // module MUX( SEL, A, B, C, D, MUX_OUT ); input [1:0] SEL; input A, B, C, D; output MUX_OUT; reg MUX_OUT; always @(SEL or A or B or C or D) begin case (SEL) 2'b00 : MUX_OUT = A; 2'b01 : MUX_OUT = B; 2'b10 : MUX_OUT = C; 2'b11 : MUX_OUT = D; default : MUX_OUT = 0; endcase end endmodule

170

Circuite integrate numerice. Aplicaii n mecatronic

b. Codificatoare i decodificatoare Exemplele prezint un codificator 8 la 3 sincronizat cu un registru pe ieire i cu o intrare de reset precum i un decodificator 4:16, cu o intrare de activare i ieiri de tip tri-state.
// codificator 8 la 3 cu registru la iesire // reset sincron activ in 1 // module ENCODER( RESET, CLK, D_IN, D_OUT ); input RESET; input CLK; input [7:0] D_IN; output[2:0] D_OUT; reg [2:0] D_OUT; always@(posedge CLK or posedge RESET) if (RESET) D_OUT <= 3'b0; else case (D_IN) 8'b00000001 : D_OUT <= 3'b000; 8'b00000010 : D_OUT <= 3'b001; 8'b00000100 : D_OUT <= 3'b010; 8'b00001000 : D_OUT <= 3'b011; 8'b00010000 : D_OUT <= 3'b100; 8'b00100000 : D_OUT <= 3'b101; 8'b01000000 : D_OUT <= 3'b110; 8'b10000000 : D_OUT <= 3'b111; default : D_OUT <= 3'b0; endcase endmodule // // decodificator 4 biti // module DEC( OUT, DATA, nOE); input[3:0] DATA; // date intrare 4 biti input nOE; // output enable activ in 0 logic output[15:0] OUT; // date iesire 171

Limbaje de descriere hardware (HDL)

reg[15:0] OUT1; assign OUT = nOE == 1'b0 ? OUT1 : 16'bz; always@(DATA) begin case(DATA) 4'h0: 4'h1: 4'h2: 4'h3: 4'h4: 4'h5: 4'h6: 4'h7: 4'h8: 4'h9: 4'hA: 4'hB: 4'hC: 4'hD: 4'hE: 4'hF: endcase end endmodule

OUT1 OUT1 OUT1 OUT1 OUT1 OUT1 OUT1 OUT1 OUT1 OUT1 OUT1 OUT1 OUT1 OUT1 OUT1 OUT1

= = = = = = = = = = = = = = = =

16'b0001; 16'h0002; 16'h0004; 16'h0008; 16'h0010; 16'h0020; 16'h0040; 16'h0080; 16'h0100; 16'h0200; 16'h0400; 16'h0800; 16'h1000; 16'h2000; 16'h4000; 16'h8000;

c. Circuite secveniale Exemplele sunt un bistabil de tip D cu comutare pe frontul pozitiv i intrare de reset, un bistabil de tip D transparent (D latch) cu intrare de reset i un numrtor binar sincron de 16 bii, cu intrare de reset i ieire de transport.
// bistabil de tip d sincron // comutare pe front pozitiv // reset activ in 1 module reg_d(Q, D, CLK, RST); input D, RST, CLK; output Q; reg Q; always@(posedge CLK or posedge RST) begin if(RST==1'b1) Q <= 1'b0; // reset else Q <= D; // incarca date end endmodule

172

Circuite integrate numerice. Aplicaii n mecatronic

// // D latch cu semnal LE activ in 1 // cu reset activ in 1 module latch(Q, D, LE, RST); input D, RST; output Q; reg Q; always@(LE or D or RST) begin if(RST==1'b1) Q <= 0; // reset else if(LE==1'b1) Q <= D; // data latch end endmodule // // numarator binar sincron 16 biti // reset activ in 1 // module counter( Q, CLK, RST, CARRY ); input CLK; input RST; // output CARRY; output[15:0] Q; reg[15:0] Q; reg CARRY;

// semnal ceas semnal reset activ in 1 //transport // iesire numarator

always@(posedge CLK or posedge RST) if( RST == 1'b1 ) CARRY <= 16'b0; else CARRY <= &Q; // transport daca Q = 0xFF always@(posedge CLK or posedge RST) if( RST == 1'b1 ) Q <= 16'b0; else Q <= Q+1; Endmodule

173

Limbaje de descriere hardware (HDL)

6.4 Testarea aplicaiilor HDL (testbenches)


Datorit creterii dimensiuni i complexitii proiectelor i verificarea lor a devenit un proces dificil i laborios. Mecanismul vectorilor de test aa cum era utilizat la proiectele ABEL este unul primitiv pentru o astfel de sarcin. Astfel c sau dezvoltat o serie de mijloace i metode specifice adecvate i scrii proiectului. Pentru proiecte de dimensiuni rezonabile (nu pentru proiecte avnd ca grad de complexitate milioanele de pori) sunt utilizate simulatoarele HDL mpreun cu un mijloc formal de verificare numit testbench (banc de testare). Testbench-urile au devenit metoda standard de verificare a proiectelor care folosesc ca mijloc de descriere un limbaj evoluat precum VHDL sau Verilog ([48]). n mod tipic un testbench realizeaz urmtoarele: - instaniaz circuitul care va fi testat - stimuleaz intrarea circuitului aplicnd vectori de test modelului - genereaz rezultate care pot fi evaluate de utilizator, sub form de text sau grafic (form de und) - poate compara rezultatele actuale cu cele dorite (sau ideale) Un testbench poate fi scris n VHDL sau Verilog i el este un exemplu de descriere care, de regul, nu este sintetizabil, ea fiind folosit numai pentru simularea modelului. Din acest motiv ele nu sunt supuse la aceleai limitri semantice ca descrierile utilizate n sinteza propriu-zis. Ele pot fi scrise la un mod mult mai general, folosindu-se numai constructori de tip comportamental (behavioral), fcndu-le astfel mai lizibile ([23]). Orice testbench conine cel puin seciunile descrise n tabelul 6.12, mai putnd ns exista seciuni care controleaz modul n care sunt afiate rezultatele simulrii sau acestea sunt comparate cu o referin. Tabelul 6.12 VHDL Declarare entitate i arhitectur Declarare semnale Instaniere proiect la nivel top Creare stimuli Verilog Declarare modul Declarare semnale Instaniere proiect la nivel top Creare stimuli

Urmtoarele categorii de activiti sunt asociate unui testbench. Generarea semnalelor de ceas: unui sistem sincron trebuie s i se asigure semnalele de ceas corespunztoare pentru a putea fi simulat. Generarea iterativ a unui semnal de ceas sau a mai multor astfel de semnale sincronizate se poate realiza cu uurin ntr-un testbench, att n VHDL ct i n Verilog.. Generarea i aplicarea stimulilor: pentru a obine rezultatele simulrii trebuie aplicai anumii stimuli sistemului modelat (identificat ca DUT- Device

174

Circuite integrate numerice. Aplicaii n mecatronic

Under Test sau UUT- Unit Under Test). Pentru aceasta se utilizeaz pentru stimularea cu ajutorul unor blocuri ce se execut concurent. Sunt utilizate dou metode de stimulare: una care folosete o definire absolut a timpului i una care folosete o definire relativ a timpului. n prima metod valorile aferente simulrii sunt specificate prin raportare la o origine a axei timpului (t=0). Prin comparaie, la a doua metod sunt specificate valori iniiale pentru stimuli i apoi se ateapt un eveniment care va declana stimulul dorit. Ambele metode pot fi combinate n cadrul aceluiai testbench. Prezentarea rezultatelor este necesar pentru a putea realiza evaluarea ndeplinirii obiectivelor proiectului. Prezentarea (afiarea) rezultatelor este uurat n Verilog de existena instruciunilor (cuvintelor cheie) $display i $monitor. Dei n VHDL nu exist comenzi echivalente pentru afiare, exist ns package-ul std_textio, care permite i redirectarea ctre consol a fiierelor I/O. Un alt concept important legat de simulare este cel de verificare automat a rezultatelor simulrii, verificare care este de dorit s fie utilizat, ea mrind productivitatea mai ales n cazul proiectelor complexe. Ea va reduce timpul necesar verificrii corectitudinii proiectului i poate elimina categoriile de erori subiective. Exist mai multe metode, mai des utilizate, prin care se poate realiza aceast automatizare. Comparaiile la nivelul unei baze de date presupun ca prim pas crearea unui fiier (un vector) n care sunt memorate rezultatele ateptate de ctre proiectant pentru simulare (golden vector). Apoi rezultatele simulrii propriuzise vor fi memorate ntr-un alt fiier (vector) i cele dou vor putea fi comparate. Un dezavantaj al acestei metode este c nu exist mijloace prin care s se asocieze ieirile cu intrrile astfel c este destul de dificil de identificat care este cauza unei anumite ieiri eronate. Compararea formelor de und poate fi realizat manual de utilizator sau automat chiar de codul din testbench. Comparaia este realizat ntre cei doi vectori menionai anterior. Xilinx ofer, de exemplu, o component a mediului de programare ISE numit HDL Bencher care poate realiza compararea automat a celor dou forme de und. Autoverificarea realizeaz verificarea chiar n momentul rulrii codului testbench-ului i nu dup finalizarea acesteia. Aceasta este o modalitate de a scurta considerabil timpul de depanare a unui proiect deoarece permite identificarea cu promptitudine a cauzei erorii. 6.4.1 Exemplu Exemplul prezentat (care poate fi compilat cu mediul de simulare ModelSim -MTI) i care reprezint o adaptare dup [23], este unul foarte simplu. Rezultatele simulrii pot fi prezentate sub form grafic sau ca text n ferestrele dedicate.

175

Limbaje de descriere hardware (HDL)

Este dat o descriere Verilog a unui registru de deplasare de 4 bii, cu intrare paralel de date i cu semnal de reset. Prin intermediul semnalelor de control sel care stabilesc modul de lucru, registrul poate fi ncrcat paralel comandat cu semnalul load sau realizeaz deplasarea propriu-zis ctre stnga sau ctre dreapta.
module shift_reg (clock, reset, load, sel, data, shiftreg); input clock; input reset; input load; input [1:0] sel; input [4:0] data; output [4:0] shiftreg; reg [4:0] shiftreg; always @ (posedge clock) begin if (reset) shiftreg = 0; else if (load) shiftreg = data; else case (sel) 2b00 : shiftreg = shiftreg; 2b01 : shiftreg = shiftreg << 1;// stanga 2b10 : shiftreg = shiftreg >> 1;//dreapta default : shiftreg = shiftreg; endcase end endmodule

Urmtorul cod pentru un testbench Verilog instaniaz registrul de deplasare de mai sus.
module testbench; // numele testbench-ului reg clock; reg load; reg reset; // declarare semnal wire [4:0] shiftreg; reg [4:0] data; reg [1:0] sel; // instantierea registrului shift_reg dut(.clock (clock), .load (load), .reset (reset), .shiftreg (shiftreg), .data (data), .sel (sel));

176

Circuite integrate numerice. Aplicaii n mecatronic

//acest process genereaza ceasul initial begin clock = 0; forever #50 clock = ~clock; end initial begin // acest proces genereaza stimuli reset = 1; data = 5b00000; load = 0; sel = 2b00; #200 reset = 0; load = 1; #200 data = 5b00001; #100 sel = 2b01; load = 0; #200 sel = 2b10; #1000 $stop; end initial begin // acest proces redirecteaza rezultatele la consola // $timeformat(-9,1,"ns",12); $display(" Time Clk Rst Ld SftRg Data Sel"); $monitor("%t %b %b %b %b %b %b", $realtime, clock, reset, load, shiftreg, data, sel); end endmodule

Testbench-ul Verilog de mai sus instaniaz proiectul, genereaz semnalul de ceas i apoi stimulii care n acest caz sunt semnalele care stabilesc modul de lucru al registrului precum i datele de la intrarea paralel. Toate blocurile ncep execuia la momentul t=0 i se execut concurent. Semnul # specific ntrzierea dup care este aplicat urmtoarea combinaie de stimuli. Comanda $stop este una obligatorie deoarece ea este singura care deoarece ea este singura care i transmite simulatorului cnd trebuie oprit simularea.. Comanda $monitor redirecteaz rezultatele ctre consola utilizator sau ctre un editor de text. Utilizatorul poate observa n urma simulrii dac datele de la intrare sunt nscrise corect, dac deplasarea se efectueaz corect, etc. Urmtorul testbench VHDL instaniaz proiectul registrului de deplasare (descris n Verilog) i genereaz aceiai stimuli ca mai sus.
library IEEE; use IEEE.std_logic_1164.all; 177

Limbaje de descriere hardware (HDL)

entity testbench is end entity testbench; architecture test_reg of testbench is component shift_reg is port (clock : in std_logic; reset : in std_logic; load : in std_logic; sel : in std_logic_vector(1 downto 0); data : in std_logic_vector(4 downto 0); shiftreg : out std_logic_vector(4 downto 0)); end component; signal clock, reset, load: std_logic; signal shiftreg, data: std_logic_vector(4 downto 0); signal sel: std_logic_vector(1 downto 0); constant ClockPeriod : TIME := 50 ns; begin UUT : shift_reg port map (clock => clock, reset => reset, load => load, data => data, shiftreg => shiftreg); process begin clock <= not clock after (ClockPeriod/2); end process; process begin reset <= 1; data <= "00000"; load <= 0; set <= "00"; wait for 200 ns; reset <= 0; load <= 1; wait for 200 ns; data <= "00001"; wait for 100 ns; sel <= "01"; load <= 0; wait for 200 ns; sel <= "10"; wait for 1000 ns; end process; end architecture test_reg;

Codul VHDL pentru testbench este similar din punct de vedere funcional cu cel Verilog, cu excepia redirectrii rezultatelor simulrii ctre consola utilizator care trebuie fcut n VHDL prin intermediul package-ului std_textio.

178

Circuite integrate numerice. Aplicaii n mecatronic

Capitolul 7 Aplicaii n mecatronic


Scopul acestui capitol este doar de a prezenta cteva componente ale unui sistem mecatronic, de fapt ale unui sistem de poziionare, care pot fi implementate cu uurin folosind circuite logice programabile (CPLD sau FPGA) pentru implementarea propriu-zis i limbajele HDL pentru descriere. La ntrebarea ce fel de circuite (CPLD sau FPGA) trebuie utilizate rspunsul este legat n general de complexitatea proiectului, n esen de numrul echivalent de pori i de registre necesare, de raportul pre-performan precum i alte caracteristici hardware ale proiectului (de exemplu, dac sistemul are nevoie i de o memorie RAM). Toate exemplele din acest capitol pot fi cu uurin implementate folosind circuite CPLD (cum ar fi cele din seriile 9500 Xilinx), la un raport pre-performan foarte avantajos. Ca o observaie important: orice familie de circuite s-ar utiliza, sistemele numerice descrise trebuie s fie sincrone i este recomandabil s fie utilizate i semnalele de validare a ceasului (de tip Clock Enable). Cu alte cuvinte utilizarea logicii asincrone trebuie evitat pe ct posibil. Rspunsul la ntrebarea ce fel de limbaj HDL trebuie folosit este puin mai complicat. Limbajul ABEL-HDL este avantajos pentru proiecte de complexitate mic spre medie fiindc este unul mult mai apropiat de implementarea hardware. Aceasta nseamn c dac pentru un anumit sistem numeric exist deja o descriere schematic, la nivel de pori i registre, se poate ajunge cu uurin la o descriere ABEL, descriere care odat funcional poate fi rafinat ulterior n sensul descrierii comportamentale. De fapt adevrata ntrebare este: VHDL sau Verilog ? Att VHDL ct i Verilog sunt limbaje de descriere hardware cu ajutorul crora se poate sintetiza un sistem numeric. n mod ideal amndou ar trebui nvate. Anumite proiecte sunt descrise chiar folosind ambele limbaje. Nu trebuie uitat nici un moment c cea ce se face de fapt este o descriere hardware i nu se scriu nite instruciuni care vor fi executate secvenial ca n C. Mai trebuie tiut care cod este sintetizabil i care nu este. Exist cod care nu este sintetizabil, dar poate fi folosit pentru simulare i modelare. Verilog face mai puine verificri de tip la compilare astfel c utilizatorul trebuie s fie mai atent n acest caz. La fel de adevrat este c un cod surs Verilog este mai puin stufos dect echivalentul VHDL, dar aceasta nu este neaprat un dezavantaj al VHDL-ului. La fel ca n orice limbaj de programare Copy-Paste este o operaie foarte util! Exist programe de conversie a surselor din VHDL n Verilog, din Verilog n VHDL, sau din ABEL n VHDL sau Verilog, dar ieirea lor este foarte puin lizibil de ctre utilizatorul uman, astfel c vom avea un cod surs rezultat care nu

179

va putea fi ntreinut (mentenabilitatea codului). Un proiect al crui cod poate fi uor ntreinut este un aspect foarte important n orice limbaj de programare. Pentru nceput este util de se ncerca descrierea aceluiai sistem, de preferat nu de complexitate mare, folosind ambele limbaje, mai trziu putnd aprea o preferin pentru unul din limbaje. Buna cunoatere a ambelor limbaje este un atu important pentru un proiectant hardware. 7.1 Componente pentru sisteme de poziionare utilizate n mecatronic Principial exist dou astfel categorii de astfel de sisteme: sisteme n bucl nchis sau servosisteme i sisteme n bucl deschis. Ele difer i prin elementul de acionare, care n primul caz este un motor electric (de exemplu, motor clasic de curent continuu cu perii sau fr perii, cu comutaie electronic, BLDC Brushless DC), iar n al doilea caz un motor numit de tip pas cu pas (stepper), numindu-se i sistem de acionare pas cu pas. Trebuie menionat ns c mai exist i sunt din ce n ce mai des utilizate i servo sisteme care folosesc ca element de acionare un motor pas cu pas. Acionrile de tip pas cu pas n bucl deschis sunt adecvate sistemelor simple, cu acceleraii mici i sarcini mecanice statice. Componentele unui servo sistem de poziionare (sistem de poziionare n bucl nchis) pentru o singur ax sunt prezentate n figura 7.1, iar cele ale unui sistem de poziionare n bucl deschis, de tip pas cu pas, n figura 7.2. Noiunea de ax este una generic, putnd fi vorba de o ax de rotaie sau una de translaie, de o ax a unui sistem CNC (Computerised Numerical Control) utilizat la o main unealt sau la o main de msurat n coordonate (CMMCoordinate Measuring Machine) din industrie sau doar de controlul uneia din roile de antrenare a unui mic robot mobil utilizat n laborator.
Date SCC PWM

I/F PWM

AMPLI

MCC

Date I/F INC TI

SCC DEC

Figura 7.1

Componentele unui servosistem de acionare

Componentele prezentate n figura 7.1 sunt:


180

Circuite integrate numerice. Aplicaii n mecatronic

MCC motor de curent continuu AMPLI circuit de amplificare pentru comanda motorului de cc MCC, poate fi i de tipul punte H astfel nct s permit i controlul sensului de rotaie TI- traductor incremental, variant rotativ sau liniar (rigl), cuplat mecanic direct sau indirect cu motorul de curent continuu I/F INC interfa specific de intrare pentru traductorul incremental n afar de decodificatorul propriu-zis (pentru semnale n cuadratur) conine i resurse de numrare I/F PWM- interfa specific de ieire (controler) PWM destinat generrii unei forme de und cu factor de umplere programabil Pentru fiecare din cele dou interfee exist un set de semnale de comand i control SCC. Prin intermediul unei magistrale de date cu o anumit deschidere (numr de bii) sunt transmise sau preluate valori de la interfee, sincronizarea fcndu-se prin intermediul SCC. Curentul prin motorul MCC (implicit i viteza de rotaie a acestuia) este controlat prin intermediul unei forme de und PWM fiind direct proporional cu factorul de umplere, ntre 0 i 100%, cu o anumit rezoluie (uzual 8, 16 sau 32 de bii). Poziia curent a axei acionate de acest motor este determinat (n acest exemplu) cu ajutorul unui traductor incremental i al unei interfee specializate. ntr-o aplicaie tipic, utilizatorul direct al acestor componente este de fapt un controler (regulator) PID la nivelul cruia poziia comandat de utilizator este comparat cu poziia curent fiind calculat o eroare de poziionare (de neurmrire) pe baza creia este elaborat o comand pentru motor astfel nct acesta s se deplaseze n poziia dorit sau s i menin poziia curent. Existena acestor interfee numerice specifice este justificat de faptul c regulatorul PID este evident implementat numeric, dar acest regulator nu face obiectul acestei descrieri.
Date SCC MPP

I/F MPP

AMPLI

MPP

Figura 7.2

Componentele unui sistem de acionare pas cu pas

Componentele prezentate n figura 7.2 sunt enumerate n continuare. MPP este motorul pas cu pas. AMPLI este un circuit de amplificare multicanal pentru comanda motorului pas cu pas; configuraia lui difer funcie de varianta de motor MPP utilizat, de numrul de faze ale acestuia i eventual de tehnica de deplasare

181

utilizat; n mod curent se utilizeaz chei de curent simple (tranzistoare bipolare sau MOSFET) sau, cu aceleai categorii de componente, de tipul punte n H I/F MPP este o interfa specific de ieire (controler) MPP destinat generrii unei forme de und cu factor de umplere programabil Interfaa poate fi tipic comandat doar prin setul de semnale de comand i control SCC prin intermediul creia se prescriu numrul i direcia pailor, mai rar exist i o magistral de date. Aspectele specifice vor fi prezentate i discutate n paragraful 7.4. 7.2 Interfee pentru traductoare incrementale (I/F INC) Abordarea care urmeaz se bazeaz pe analiza i emularea unuia din cele mai utilizate circuite dedicate acestui scop, circuit numit HCTL-2016 i produs de Agilent (ex Hewlett Packard). El este n esen o interfa pentru traductoare incrementale (de fapt pentru semnalele n cuadratur specifice acestor traductoare) avnd rezoluia de 16 bii (numrtor de 16 bii) i o interfa paralel pentru o magistral tri-state de 8 bii. Circuitul ca atare este actualmente (2005) demodat, fiind nlocuit cu variantele sale mai noi cum ar fi HCTL-2032 cu o rezoluie de 32 de bii. Schema bloc, extras din foaia de catalog a circuitului ([1]), este dat n figura 7.3.

Figura 7.3

Schema bloc a circuitului HCTL-2016 (Agilent)

Structura este una n ntregime sincron CLK (care nu apare n aceast schem) fiind semnalul global de ceas. CHA i CHB sunt intrrile pentru cele dou semnale n cuadratur, SEL este semnalul prin care utilizatorul selecteaz individual cei doi octei (inferior-L, superior-H), iar /OE activeaz ieirile tri-state plasnd octetul selectat pe magistrala de 8 bii D0..D7. Aciunea semnalelor /OE i /SEL este corelat prin intermediul unei logici interne (logica de inhibare a actualizrii registrului de ieire).
182

Circuite integrate numerice. Aplicaii n mecatronic

Pe baza acestei scheme s-a realizat o alt schem bloc simplificat care va fi utilizat pentru descriere i sintez, schem prezentat n figura 7.4. La nivelul acestei scheme se va face explicitarea funcionalitii blocurilor. FILIN sunt filtrele numerice de pe intrri, avnd rolul de elimina influena impulsurilor parazite care pot aprea suprapuse peste semnalul util de intrare. Prin impuls parazit, n acest caz, se nelege un impuls avnd durata mai mic de dou perioade ale ceasului general CLK. DECQ este decodificatorul pentru semnale n cuadratur, care poate fi ntro variant fr multiplicare (x1) sau cu multiplicare (interpolare) ori patru (x4). Cele dou mrimi de intrare trebuie s fie ntotdeauna defazate cu +-90o electrice, deoarece pe baza acestui defazaj, ca mrime cu semn se, face discriminarea de sens de deplasare.
CLK

A FILIN B DECQ x1 , x4

CNT NUM16 UP/DN

REG16 MUX2:1 OUT3-S D[7..0]

LGI RST SEL

OE

Figura 7.4

Schema bloc principial utilizat pentru emularea HCTL-2016

Numrtorul NUM16 este un numrtor sincron cu o intrare de validare (activare) a numrrii CNT i una care stabilete sensul de numrare UP-DN. Cele dou semnale sunt elaborate de DECQ. Ieirea numrtorului este memorat ca un vector de 16 bii n registrul REG16. Cei doi octei de ieire ai acestui registru sunt multiplexai la deschiderea magistralei de date (un octet) cu un multiplexor MUX2:1 care are i o ieire de tip tri-state (OUT 3-S). Exist o logic de inhibare a actualizrii registrului de ieire LGI care va bloca actualizarea registrului cu coninutul curent al numrtorului pn cnd cei doi octei vor fi citii. Se elimin astfel posibilitatea ca un octet s provin dintr-o valoare a numrtorului i alt octet dintr-o alt valoare. Acolo unde acest lucru se justific vor fi prezentate i alte extrase din foaia de catalog a circuitului ([1]). Acolo unde este cazul vor fi indicate i unele modificri care se pot face cu uurin i care pot adapta mai bine aceast structur la nevoile utilizatorului. Un
183

prim exemplu n acest sens este c a fost eliminat logica care permitea cascadarea a mai multor astfel de module pentru a obine o interfa cu rezoluie mai mare (de exemplu 32 de bii) pentru c n cazul implementrii folosind un circuit logic programabil nu aceasta este soluia de cretere a rezoluiei. 7.2.1 Descrierea ABEL-HDL n descrierea ABEL care urmeaz este utilizat o metod de proiectare ierarhic care primite o descriere corespunztoare gradului de complexitate al sistemului, dar trebuie avut n vedere c soluia prezentat nu este probabil una optim din punct de vedere ingineresc, deoarece codul de mai jos dorete, printre altele, s ilustreze i anumite tehnici de programare ABEL, cum se poate trece direct de la o descriere schematic la una ABEL, cum se poate folosi descrierea unor module numerice din seriile standardizate (74_ _ _), etc.
"============================================================ " Emulare HCTL-2016, modulul top, interfata externa "============================================================ MODULE MULTIENC TITLE 'Interfata externa HCTL-2016' "declarare intrari CHA,CHB pin ; " cele 2 canale A si B CLK pin ; " ceas RES pin ; " reset SEL pin ; " selectie byte OE pin ; " "declarare iesiri D0..D7 pin istype 'buffer'; "magistrala date " descriere top down ENC16 interface (CHA,CHB,CLK,RES,SEL,OE -> D0..D7 ); enc1 functional_block ENC16; EQUATIONS "descriere interfata enc1.CHA = CHA; enc1.CHB = CHB; enc1.OE = OE; enc1.SEL = SEL; enc1.CLK = CLK; enc1.RES = RES; [D0..D7] = [enc1.D0.. enc1.D7]; [D0..D7].oe = !OE; "aici se pot insera vectorii de test end "=========================================================== " Descriere functionala: emulare HCTL2016 "=========================================================== 184

Circuite integrate numerice. Aplicaii n mecatronic

MODULE ENC16 TITLE 'inc_enc16' "intrari CHA,CHB pin; "intrari canale A si B RES pin; "general reset SEL pin; "byte select OE pin; "output enable CLK pin; " ceas "iesiri D0..D7 pin ; "iesiri date " descrierea componentelor functionale "filtrul numeric 2 canale DIGFILX2 interface (IN_A,IN_B,CLK -> OUT_A,OUT_B); "decodificatorul incremental x4 DECX4 interface (A_DEC,B_DEC,CLK -> CNT,UP_DWN); "numaratorul bidirectional 16 biti UD_CNT16 interface (CLK,CNT_IN,DIR_CNT,CLR -> Q0..Q15,TC); " logica de inhibare acces INHLOG interface (IN_SEL,IN_OE,CLK,CLR -> OUT_INH); "registrul de 16 biti LATCH16C interface (D0..D15,CLR,CLK,INH -> Q0..Q15); " multiplexorul de iesire MUX28 interface (A1,B1,A2,B2,A3,B3,A4,B4,A5,B5,A6,B6,A7,B7,A8,B8,SEL -> Q1..Q8); " instantele componentelor digfil functional_block DIGFILX2; dec_inc functional_block DECX4; cnt16 functional_block UD_CNT16; inh functional_block INHLOG; latch functional_block LATCH16C; mux functional_block MUX28; EQUATIONS digfil.IN_A = CHA; digfil.IN_B = CHB; digfil.CLK = CLK; dec_inc.A_DEC = digfil.OUT_A; dec_inc.B_DEC = digfil.OUT_B; dec_inc.CLK = CLK; cnt16.CNT_IN = dec_inc.CNT; cnt16.DIR_CNT = !dec_inc.UP_DWN; cnt16.CLK = CLK; cnt16.CLR = RES; [latch.D0.. latch.D15] = [cnt16.Q0.. cnt16.Q15]; latch.CLK = CLK; latch.CLR = RES;

185

latch.INH = inh.OUT_INH; inh.IN_SEL = SEL; inh.IN_OE = OE; inh.CLK = CLK; inh.CLR = RES; mux.SEL = !SEL; [mux.A1..mux.A8] = [latch.Q0..latch.Q7]; [mux.B1..muxB8] = [latch.Q8..latch.Q15]; [D0..D7] = [mux.Q1..mux.Q8]; END

n figura 7.5 este prezentat schema celor dou filtre numerice, extras din foaia de catalog. Este vorba de dou circuite identice, de ntrziere cu 4 perioade ale semnalului de ceas, ieirile acestui registru de deplasare fiind utilizate pentru a stabili dac un impuls (n 0 sau n 1) a durat mai mult de trei perioade ale semnalului de ceas, numai atunci el fiind declarat semnal de intrare valid. Descrierea ABEL este un exemplu cum se poate trece direct de la schem la cod i cum se poate realiza un circuit bistabil de tip J-K pe baza unuia de tip D.

Figura 7.5

Schema filtrelor numerice de pe intrrile HCTL-2016

"=========================================================== " Descriere functionala: doua filtre numerice, cate unul pt. " fiecare canal incremental (A si B) "=========================================================== MODULE DIGFILX2 " intrari IN_A,IN_B,CLK " iesiri OUT_A,OUT_B

pin; pin istype 'reg buffer'; 186

Circuite integrate numerice. Aplicaii n mecatronic

"sunt necesare 3 bistabile J-K pentru fiecare canal qa0,qa1,qa2,qa3 node istype 'reg buffer'; qb0,qb1,qb2,qb3 node istype 'reg buffer'; ja,ka,jb,kb node; EQUATIONS "sectiunea A [qa0..qa3].ck = CLK; OUT_A.ck = CLK; qa0.d = IN_A; qa1.d = qa0; qa2.d = qa1; qa3.d = qa2; ja = qa3 & qa2 & qa1; ka = !qa3 & !qa2 & !qa1; OUT_A.d = OUT_A $ (ja & !OUT_A # ka & OUT_A); " sectiunea B [qb0..qb3].ck = CLK; OUT_B.ck = CLK; qb0.d = IN_B; qb1.d = qb0; qb2.d = qb1; qb3.d = qb2; jb = qb3 & qb2 & qb1; kb = !qb3 & !qb2 & !qb1; OUT_B.d = OUT_B $ (jb & !OUT_B # kb & OUT_B); END

Figura 7.6

Formele de und n cuadratur

Figurile 7.6 i 7.7 sunt extrase de asemenea din foaia de catalog a circuitului pentru a ilustra modul de funcionare al decodificatorului. Acesta se bazeaz pe starea prezent i starea trecut a perechii de semnale CHA i CHB pentru a elabora un semnal de validare a numrrii i unul de sens. n figura 7.7 sunt prezentate strile de baz i tranziiile valide de stare. Astfel dac avem CHA

187

n avans de faz fa de CHB numrarea trebuie s se fac n sensul incrementrii valorii care reprezint poziia, iar cnd CHB este n avans de faz fa de CHA numrarea trebuie se fac n sensul decrementrii valorii care reprezint poziia. Orice alte tranziii de stare (oricare ar fi cauza lor) sunt ilegale i duc la rezultate eronate. Formele de und propriu-zise sunt prezentate n figura 7.6. Deoarece o intrare trebuie s fie stabil pentru cel puin trei perioade de ceas tCLK , limea pulsurilor de la intrare tE (n 1 sau 0) trebuie s fie de cel puin 3 tCLK asigurndu-se astfel c o intrare CHA sau CHB, asincron prin natura ei, este stabil pentru cel puin 3 tCLK. Aceast constrngere dicteaz i relaia care exist ntre frecvena ceasului i frecvena maxim a semnalelor de intrare (1/tELP) care pot fi numrate corect. O alt constrngere temporal provine de la principul de decodificare al strii, din faptul c o stare este definit de intervalul dintre dou fronturi consecutive, pe ambele canale de intrare. Acesta este motivul pentru care durata unei stri tES trebuie s fie mai mare ca perioada ceasului tCLK , aceasta fiind i o descriere a erorii maxime de faz acceptabile (ca abatere de la cele 90o electrice).

Figura 7.7

Tranziiile de stare valide

Pentru a realiza multiplicarea x4 care asigur o cretere a rezoluiei echivalente, maina secvenial trebuie s aib 16 stri (pentru decodificarea de tip x1 sunt suficiente doar cele 4 stri de baz).
"=========================================================== " Descriere functionala: decodificator semnale in cuadratura " cu multiplicare (interpolare) x 4 "=========================================================== MODULE DECX4 TITLE 'decodificator A, B cuadratura x4' "Constante C=.C.; "Intrari A_DEC , B_DEC , CLK pin ; "Iesiri CNT, UP_DWN pin istype 'reg,buffer' ; 188

Circuite integrate numerice. Aplicaii n mecatronic

" definirea registrului de stare Q1, Q2 ,Q3, Q4 node istype 'reg,buffer' ; SREG1 =[Q1,Q2,Q3,Q4]; " cele 16 stari ale masinii secventiale S1=0;S2=1;S3=2;S4=3; S5=4;S6=5;S7=6;S8=7; S9=8;S10=9;S11=10;S12=11; S13=12;S14=13;S15=14;S16=15; EQUATIONS "ceasul masinii SREG1.clk=CLK; [CNT, UP_DWN].clk=CLK; "diagrama de stari State_diagram SREG1 State S1: UP_DWN:=0;CNT:=0; if (!A_DEC & B_DEC) then S10 else if A_DEC & !B_DEC then S15 else S1 ; State S2: UP_DWN:=0;CNT:=0; if !A_DEC & !B_DEC then S13 else if A_DEC & B_DEC then S11 else S2 ; State S3: UP_DWN:=0;CNT:=0; if !A_DEC & B_DEC then S14 else if A_DEC & !B_DEC then S12 else S3 ; State S4: UP_DWN:=0;CNT:=0; if A_DEC & B_DEC then S16 else if !A_DEC & !B_DEC then S9 else S4; State S5: UP_DWN:=1;CNT:=0; if (!A_DEC & B_DEC) then S10 else if A_DEC & !B_DEC then S15 else S5 ; State S6: UP_DWN:=1;CNT:=0; if (!A_DEC & !B_DEC) then S13 else if A_DEC & B_DEC then S11 else S6 ; State S7: UP_DWN:=1;CNT:=0;

189

State

State State State State State State State State END

if (!A_DEC & B_DEC) then S14 else if (A_DEC & !B_DEC) then S12 else S7 ; S8: UP_DWN:=1;CNT:=0; if (A_DEC & B_DEC) then S16 else if (!A_DEC & !B_DEC) then S9 else S8 ; S9: UP_DWN:=0;CNT:=1; goto S1 ; S10: UP_DWN:=0;CNT:=1; goto S2; S11: UP_DWN:=0;CNT:=1; goto S3; S12: UP_DWN:=0;CNT:=1; goto S4; S13: UP_DWN:=1;CNT:=1; goto S5; S14: UP_DWN:=1;CNT:=1; goto S6; S15: UP_DWN:=1;CNT:=1; goto S8; S16: UP_DWN:=1;CNT:=1; goto S7;

"=========================================================== "Descriere functionala: numarator bidirectional 16 biti " foloseste 4 numaratoare de 4 biti,cascadate,similare 74169 "===========================================================" MODULE ud_cnt16 TITLE 'cnt' "intrari CLK pin; "intrare ceas CNT_IN pin; "validare numarare DIR_CNT pin; "Directie numarare CLR pin; "RESET "iesiri Q0..Q15,TC pin ; "iesiri si transport " instantele celor 4 numaratoare de 4 biti

190

Circuite integrate numerice. Aplicaii n mecatronic

MYUD4 cnt1 cnt2 cnt3 cnt4

interface(U_DN,ENT,CK,CLR->TC,Q0..Q3); functional_block MYUD4; functional_block MYUD4; functional_block MYUD4; functional_block MYUD4;

EQUATIONS " cele 4 num. sunt instantiate si cascadate similar 74169 cnt1.CK=CLK; cnt2.CK=CLK; cnt3.CK=CLK; cnt4.CK=CLK; cnt1.CLR=CLR; cnt2.CLR=CLR; cnt3.CLR=CLR; cnt4.CLR=CLR; cnt1.U_DN=DIR_CNT; cnt2.U_DN=DIR_CNT; cnt3.U_DN=DIR_CNT; cnt4.U_DN=DIR_CNT; cnt1.ENT = !CNT_IN; cnt2.ENT = cnt1.TC; cnt3.ENT = cnt2.TC; cnt4.ENT = cnt3.TC; TC = cnt4.TC; " agregarea iesirilor numaratorului de 16 biti [Q0..Q3] = [cnt1.Q0..cnt1.Q3]; [Q4..Q7] = [cnt2.Q0..cnt2.Q3]; [Q8..Q11] = [cnt3.Q0..cnt3.Q3]; [Q12..Q15] = [cnt4.Q0..cnt4.Q3]; END "=========================================================== "Descriere functionala: numarator bidirectional 4 biti " similar 74169 "===========================================================" MODULE MYUD4 TITLE ' Numarator 4 biti up/down' "intrari U_DN pin; ENT pin; CK pin; CLR pin; "iesiri TC pin istype 'com'; "iesire transport Q3..Q0 pin istype 'reg';

191

"asa se utilizeaza macroinstructiunile ABEL Q = [Q3..Q0]; DECLARATIONS bincnt4 S0 S2 S4 S6 S8 S10 S12 S14 EQUATIONS Q.clk = CK; Q.sr = !CLR ; WHEN ((Q==^hF) & !ENT & U_DN) THEN TC = 0; ELSE WHEN ((Q==^h0) & !ENT & !U_DN) THEN TC = 0; ELSE TC = 1; " diagrama de stari state_diagram bincnt4 " hold, nu numara state S0: case ([ENT,U_DN] == ^b01): S1; ([ENT,U_DN] == ^b00): S15; ([ENT,U_DN] == ^b10): S0; ([ENT,U_DN] == ^b11): S0; endcase; state S1: case ([ENT,U_DN] == ^b01): S2; ([ENT,U_DN] == ^b00): S0; ([ENT,U_DN] == ^b10): S1; ([ENT,U_DN] == ^b11): S1; endcase; state S2: case ([ENT,U_DN] ([ENT,U_DN] ([ENT,U_DN] ([ENT,U_DN] endcase; state S3: case ([ENT,U_DN] == == == == ^b01): ^b00): ^b10): ^b11): S3; S1; S2; S2; = [Q3,Q2,Q1,Q0]; = [0,0,0,0]; = [0,0,1,0]; = [0,1,0,0]; = [0,1,1,0]; = [1,0,0,0]; = [1,0,1,0]; = [1,1,0,0]; = [1,1,1,0];

S1 = S3 = S5 = S7 = S9 = S11= S13= S15=

[0,0,0,1]; [0,0,1,1]; [0,1,0,1]; [0,1,1,1]; [1,0,0,1]; [1,0,1,1]; [1,1,0,1]; [1,1,1,1];

"count-up "count-down "hold "hold "count-up "count-down "hold "hold

"count-up "count-down "hold "hold "count-up

== ^b01): S4;

192

Circuite integrate numerice. Aplicaii n mecatronic

state

state

state

state

state

state

state

state

([ENT,U_DN] == ^b00): S2; ([ENT,U_DN] == ^b10): S3; ([ENT,U_DN] == ^b11): S3; endcase; S4: case ([ENT,U_DN] == ^b01): S5; ([ENT,U_DN] == ^b00): S3; ([ENT,U_DN] == ^b10): S4; ([ENT,U_DN] == ^b11): S4; endcase; S5: case ([ENT,U_DN] == ^b01): S6; ([ENT,U_DN] == ^b00): S4; ([ENT,U_DN] == ^b10): S5; ([ENT,U_DN] == ^b11): S5; endcase; S6: case ([ENT,U_DN] == ^b01): S7; ([ENT,U_DN] == ^b00): S5; ([ENT,U_DN] == ^b10): S6; ([ENT,U_DN] == ^b11): S6; endcase; S7: case ([ENT,U_DN] == ^b01): S8; ([ENT,U_DN] == ^b00): S6; ([ENT,U_DN] == ^b10): S7; ([ENT,U_DN] == ^b11): S7; endcase; S8: case ([ENT,U_DN] == ^b01): S9; ([ENT,U_DN] == ^b00): S7; ([ENT,U_DN] == ^b10): S8; ([ENT,U_DN] == ^b11): S8; endcase; S9: case ([ENT,U_DN] == ^b01): S10; ([ENT,U_DN] == ^b00): S8; ([ENT,U_DN] == ^b10): S9; ([ENT,U_DN] == ^b11): S9; endcase; S10: case ([ENT,U_DN] == ^b01): S11; ([ENT,U_DN] == ^b00): S9; ([ENT,U_DN] == ^b10): S10; ([ENT,U_DN] == ^b11): S10; endcase; S11: case ([ENT,U_DN] == ^b01): S12;

"count-down "hold "hold "count-up "count-down "hold "hold "count-up "count-down "hold "hold "count-up "count-down "hold "hold "count-up "count-down "hold "hold "count-up "count-down "hold "hold "count-up "count-down "hold "hold "count-up "count-down "hold "hold "count-up

193

state

state

state

state

END;

([ENT,U_DN] ([ENT,U_DN] ([ENT,U_DN] endcase; S12: case ([ENT,U_DN] ([ENT,U_DN] ([ENT,U_DN] ([ENT,U_DN] endcase; S13: case ([ENT,U_DN] ([ENT,U_DN] ([ENT,U_DN] ([ENT,U_DN] endcase; S14: case ([ENT,U_DN] ([ENT,U_DN] ([ENT,U_DN] ([ENT,U_DN] endcase; S15: case ([ENT,U_DN] ([ENT,U_DN] ([ENT,U_DN] ([ENT,U_DN] endcase;

== ^b00): S10; == ^b10): S11; == ^b11): S11; == == == == == == == == == == == == == == == == ^b01): ^b00): ^b10): ^b11): ^b01): ^b00): ^b10): ^b11): ^b01): ^b00): ^b10): ^b11): ^b01): ^b00): ^b10): ^b11): S13; S11; S12; S12; S14; S12; S13; S13; S15; S13; S14; S14; S0; S14; S15; S15;

"count-down "hold "hold "count-up "count-down "hold "hold "count-up "count-down "hold "hold "count-up "count-down "hold "hold "count-up "count-down "hold "hold

"=========================================================== "Descriere functionala: registru de memorare 16 biti " 16 CBB de tip D, cu reset activ in 0 "===========================================================" MODULE latch16c TITLE 'Similar 74174' "intrari D15..D0 pin; CLR pin; CLK,INH pin; "iesiri si bistabile Q15..Q0 pin istype 'reg'; CK node; EQUATIONS CK = !INH & CLK;

194

Circuite integrate numerice. Aplicaii n mecatronic

[Q15..Q0].CLK [Q15..Q0].AR [Q0..Q15] END

= CK; = !CLR; := [D0..D15];

O descriere schematic a logicii de inhibare a actualizrii, extras din foaia de catalog a circuitului, este dat n figura 7.8. Semnalul de ieire al circuitului bistabil de tip J-K este cel utilizat pentru a bloca semnalul de ceas al registrului pentru memorarea valorii curente a numrtorului. Logica este iniializat i de semnalul de reset global RST (activ).

Figura 7.8

Schema logicii de inhibare a accesului (HCTL-2016)

"=========================================================== "Descriere functionala: logica de inhibare actualizare "===========================================================" MODULE INHLOG " intrari IN_SEL,IN_OE CLK,CLR "iesire OUT_INH "noduri interne q0 NODE ISTYPE j,k node; EQUATIONS q0.ck OUT_INH.ck q0.ar OUT_INH.ar q0.d k = = = = = =

PIN; PIN; PIN ISTYPE 'reg buffer'; 'reg buffer';

!CLK; !CLK; !CLR; !CLR; IN_SEL & !IN_OE; q0 & IN_OE; 195

j OUT_INH.d END

= =

!IN_SEL & !IN_OE; OUT_INH $ ( j & !OUT_INH # k & OUT_INH);

"=========================================================== "Descriere functionala: multiplexor octal 2:1 " iesiri neinversoare "===========================================================" MODULE MUX28 TITLE '8 x MUX 2:1' "intrari A1..A8 B1..B8 SEL "iesiri Q1..Q8 EQUATIONS WHEN (!SEL) { [Q1..Q8] = } WHEN (SEL) { [Q1..Q8] = } THEN [A1..A8]; THEN [B1..B8]; pin; pin; pin; " intrarea 0 " intrarea 1 "select

pin istype 'com';

ELSE END

7.2.2 Descrierea VHDL Descrierea VHDL a aceleai structuri este bazat pe note de aplicaie Atmel ([3], [4]), singura deosebire major, datorit creia i sursa VHDL este oarecum mai simpl, fiind la nivelul decodificatorului care nu este cu multiplicare x4 fiind numai n varianta x1. Modulul top este descris n urmtoarea surs VHDL.
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; library work; use work.all; ENTITY quad_top IS generic (WIDTH : integer := 16); PORT ( CHA : IN std_logic;

196

Circuite integrate numerice. Aplicaii n mecatronic

); END quad_top;

CHB : IN std_logic; CLK : IN std_logic; RST : IN std_logic; OE : IN std_logic; SEL : IN std_logic; inh : in std_logic; CNT : OUT std_logic; UP_Down :OUT std_logic; D : OUT std_logic_vector (7 downto 0)

ARCHITECTURE behavior OF quad_top IS signal filt_cha,filt_chb : std_logic; signal signal signal signal t_count data_out cnt_en up_ndown : : : : std_logic_vector(15 downto 0); std_logic_vector(7 downto 0); std_logic; std_logic;

COMPONENT digital_filter PORT ( CHA : IN std_logic; CHB : IN std_logic; CLK : IN std_logic; Rst : IN std_logic; CHA_filt: OUT std_logic; CHB_filt: OUT std_logic ); END COMPONENT; COMPONENT Quad_decoder PORT ( filt_A : IN std_logic; filt_B : IN std_logic; Clk : IN std_logic; Rst : IN std_logic; Count : OUT std_logic; Updown : OUT std_logic ); END COMPONENT; COMPONENT Position_counter PORT( rst : IN std_logic; CLK : IN std_logic; ENABLE : IN std_logic;

197

UP_DOWN : IN std_logic; Q_count : OUT std_logic_vector (15 downto 0) ); END COMPONENT ; COMPONENT position_latch PORT ( DATA : IN std_logic_vector (15 downto 0); RST : IN std_logic; CLK : IN std_logic; OE : IN std_logic; SEL : IN std_logic; INH : IN std_logic; Q : OUT std_logic_vector(7 downto 0) ); END COMPONENT; BEGIN U1: Digital_Filter PORT MAP( CHA => CHB => CLK => RST => CHA_filt CHB_filt ); CHA, CHB, CLK, RST, =>filt_cha, => filt_chb

U2: Quad_decoder PORT MAP ( filt_A =>filt_cha, filt_B => filt_chb, Clk => clk, Rst => rst, count => cnt_en, updown => up_ndown ); U3: Position_counter PORT MAP( rst => rst, CLK => clk, ENABLE => cnt_en, UP_DOWN => up_ndown, Q_count => t_count

198

Circuite integrate numerice. Aplicaii n mecatronic

); U4: Position_latch PORT MAP ( DATA => t_count, RST => rst, CLK => clk, OE => oe, SEL => sel, INH => inh, Q => Data_out ); CNT <= cnt_en; up_down <= up_ndown; D <= data_out; end behavior;

Filtrele numerice pentru cele dou canale de intrare au o structur identic, dar spre deosebire de varianta ABEL unde au fost descrise pe baza schemei, acum au o descriere mai general i mai lizibil pentru utilizator.
LIBRARY ieee ; USE ieee.std_logic_1164.all; ENTITY digital_filter IS PORT ( CHA : IN std_logic; CHB : IN std_logic; Clk : IN std_logic; RST : IN std_logic; CHA_filt : OUT std_logic; CHB_filt : OUT std_logic ); END digital_filter; ARCHITECTURE arch_digital_filter OF digital_filter IS SIGNAL SIGNAL BEGIN Channel_A:PROCESS(CLK, RST) VARIABLE Afilter: std_logic_vector(0 to 3); BEGIN IF RST = '0' THEN Afilter := "0000"; 199 temp_CHA: std_logic; temp_CHB: std_logic;

temp_CHA <= '0'; ELSIF (CLK'event AND CLK = '1') THEN Afilter(1 to 3) := Afilter(0 to 2); Afilter(0) := CHA; IF Afilter(1 to 3) = "000" THEN temp_CHA <= '0'; END IF; IF Afilter(1 to 3) = "111" THEN temp_CHA <= '1'; END IF; END IF; END PROCESS; CHA_filt <= temp_CHA; Channel_B:PROCESS(CLK, RST) VARIABLE Bfilter: std_logic_vector(0 to 3); BEGIN IF RST = '0' THEN Bfilter := "0000"; temp_CHB <= '0'; ELSIF (CLK'event AND CLK = '1') THEN Bfilter(1 to 3) := Bfilter(0 to 2); Bfilter(0) := CHB; IF Bfilter(1 to 3) = "000" THEN temp_CHB <= '0'; END IF; IF Bfilter(1 to 3) = "111" THEN temp_CHB <= '1'; END IF; END IF; END PROCESS; CHB_filt <= temp_CHB; END arch_digital_filter;

Decodificatorul pentru intrare n cuadratur, varianta x1 are o structur mult mai simpl fiind vorba de o main secvenial cu numai patru stri (spre deosebire de cel 16 stri de la varianta cu multiplicare x4).
LIBRARY ieee ; USE ieee.std_logic_1164.all; ENTITY Quad_decoder PORT ( filt_A : filt_B : Clk : rst : IS IN IN IN IN std_logic; std_logic; std_logic; std_logic; 200

Circuite integrate numerice. Aplicaii n mecatronic

Count : OUT std_logic; Updown : OUT std_logic ); END Quad_decoder; ARCHITECTURE behavior OF quad_decoder IS TYPE DecoderStates is (S0, S1, S2, S3); SIGNAL PresentState: DecoderStates; SIGNAL up_down: std_logic; SIGNAL cnt: std_logic; BEGIN Decode: PROCESS(clk,rst,presentstate,up_down,cnt,filt_a,filt_b) BEGIN IF rst = '0' THEN PresentState <= S0; Up_Down <= '0'; Cnt <= '0'; ELSE IF (Clk'event AND Clk = '0') THEN CASE PresentState is WHEN S0 => IF filt_A = '1' THEN PresentState <= S1; Up_Down <= '1'; Cnt <= '1'; ELSIF filt_B = '1' THEN PresentState <= S3; Up_Down <= '0'; Cnt <= '1'; ELSE Up_Down <= '0'; Cnt <= '0'; END IF; WHEN S1 => IF filt_B = '1' THEN PresentState <= S2; Up_Down <= '1'; Cnt <= '1'; ELSIF filt_A = '0' THEN PresentState <= S0; Up_Down <= '0'; Cnt <= '1'; ELSE Up_Down <= '0'; Cnt <= '0'; END IF;

201

WHEN S2 => IF filt_A = '0' THEN PresentState <= S3; Up_Down <= '1'; Cnt <= '1'; ELSIF filt_B = '0' THEN PresentState <= S1; Up_Down <= '0'; Cnt <= '1'; ELSE Up_Down <= '0'; Cnt <= '0'; END IF; WHEN S3 => IF filt_B = '0' THEN PresentState <= S0; Up_Down <= '1'; Cnt <= '1'; ELSIF filt_A = '1' THEN PresentState <= S2; Up_Down <= '0'; Cnt <= '1'; ELSE Up_Down <= '0'; Cnt <= '0'; END IF; END CASE; END IF; END IF; END PROCESS; updown <=up_down; count <=cnt; END behavior;

Numrtorul binar sincron pe 16 bii este implementat ca o singur entitate (evident mult mai simplu dect n descrierea ABEL), cu o intrare de activarea numrrii (ENABLE) i una care d sensul de numrare (UP_DOWN). RST este intrarea sincron de reset. Exist i o ieire de transport sau mprumut (RCO) care ar permite cascadarea mai multor numrtoare de acest fel, dar care poate fi eliminat.
library ieee ; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; ENTITY Position_counter IS

202

Circuite integrate numerice. Aplicaii n mecatronic

generic (WIDTH : integer := 16); port( RST : IN std_logic; CLK : IN std_logic; ENABLE : IN std_logic; UP_DOWN : IN std_logic; Q_count : OUT std_logic_vector (15 downto 0) ); END position_counter ; ARCHITECTURE behv OF position_counter IS SIGNAL Qtmp : std_logic_vector(15 downto 0); SIGNAL RCO : std_logic; BEGIN PROCESS(Clk,rst,up_down,qtmp,enable) begin if(rst = '0') then Qtmp <= "0000000000000000"; elsif (CLK = '1' and CLK'event) then if (UP_DOWN = '1' and enable ='1') then Qtmp <= Qtmp + '1'; elsif (UP_DOWN = '0' and enable ='1') then Qtmp <= Qtmp - '1'; end if; end if; end process; Q_count <= Qtmp; PROCESS(Qtmp,UP_DOWN,rco) begin if (Qtmp = CONV_STD_LOGIC_VECTOR(-1,WIDTH)and up_down ='1') then RCO <= '1'; else RCO <= '0'; end if; if (Qtmp = CONV_STD_LOGIC_VECTOR(0,WIDTH) and up_down ='0') then RCO <= '1'; else RCO <= '0'; end if; end process; end behv;

Registrul de 16 bii, similar cu cel de la ABEL, are o intrare de reset activ n 0 i este utilizat pentru memorarea coninutului curent al numrtorului.
203

library ieee ; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; ENTITY position_latch IS GENERIC (WIDTH : integer :=16); PORT ( DATA : IN std_logic_vector (15 downto 0); RST : IN std_logic; CLK : IN std_logic; OE : IN std_logic; SEL : IN std_logic; inh : IN std_logic; Q : OUT std_logic_vector(7 downto 0) ); END position_latch ; ARCHITECTURE behv OF position_latch IS signal Qtmp : std_logic_vector (15 downto 0); BEGIN PROCESS(Clk,rst,Data) BEGIN if(rst = '0') then Qtmp <= "0000000000000000"; elsif (CLK = '1' and CLK'event) then Qtmp <= DATA; end if; END PROCESS;

Multiplexorul de ieire pentru octetul inferior i respectiv cel superior, este unul cu ieire de tip tri-state i este controlat i de logica de inhibare a actualizrii.
PROCESS(CLK,SEL,OE,qtmp,inh,q) BEGIN if (CLK = '1' and CLK'event) then if(sel ='0' and oe='0' and inh ='1') then Q <=qtmp(15 downto 8); elsif( sel = '1' and oe ='0' and inh ='1') then Q <=qtmp(7 downto 0); elsif(oe ='1' and inh ='0') then q <= "zzzzzzzz"; else end if; end if; END PROCESS; END behv; 204

Circuite integrate numerice. Aplicaii n mecatronic

Dac se dorete implementarea acestui multiplexor folosind un circuit CPLD din seria 9500 Xilinx ieirea de tip tri-state trebuie mutat pe un nivel ierarhic superior deoarece aceast descriere presupune posibilitatea implementrii fizice a unei magistrale tri-state interne, lucru imposibil la seria 9500 Xilinx. 7.3 Interfa PWM cu rezoluia de 8 bii (I/F PWM) n acest exemplu de cod VHDL (adaptat dup [3]) un registru de 8 bii este utilizat pentru memorarea valorii prescrise (Data_value) pentru factorul de umplere al semnalului. Actualizarea valorii prescrise se face la fiecare front cresctor al ceasului sistem (clock). Un numrtor binar de 8 bii, bidirecional, va numra n cu frecvena ceasului sistem n sus sau n jos funcie de starea semnalului pwm_int. Exist i o ieire de transport (rco) activ cnd numrtorul atinge valoarea maxim (la numrare n sus) sau valoarea zero (la numrare n jos). Ieirea respectiv este folosit pentru generarea semnalului de ieire PWM propriu-zis (pwm) i a copiei sale memorate intern (pwm_int), dar mai poate fi folosit, de exemplu, pentru interfaa cu un microcontroler putnd genera o cerere de ntrerupere asociat evenimentului respectiv. Semnalul reset realizeaz iniializarea schemei, inclusiv a factorului de umplere la valoarea 0. Mai puin transparent la prima vedere este principiul utilizat: de fapt ieirea registrului (reg_out) este comparat cu valoarea curent a numrtorului (cnt_out_int), ieirea pwm fiind n 1 atta timp ct coninutul numrtorului este mai mic dect valoarea memorat n registru. n particular, INC i DEC sunt dou exemple de funcii VHDL utilizate pentru numrarea n sus sau n jos i care sunt incluse ntr-un package definit de utilizator.
library IEEE; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all ; USE work.user_pkg.all; ENTITY pwm_fpga IS PORT ( clock,reset Data_value pwm ); END pwm_fpga; :in STD_LOGIC; :in std_logic_vector(7 downto 0); :out STD_LOGIC

ARCHITECTURE arch_pwm OF pwm_fpga IS SIGNAL reg_out : std_logic_vector(7 downto 0); SIGNAL cnt_out_int : std_logic_vector(7 downto 0); SIGNAL pwm_int, rco_int : STD_LOGIC; BEGIN

205

PROCESS(clock,reg_out,reset) BEGIN IF (reset ='1') THEN reg_out <="00000000"; ELSIF (rising_edge(clock)) THEN reg_out <= data_value; END IF; END PROCESS; PROCESS (clock,cnt_out_int,rco_int,reg_out) BEGIN IF (rco_int = '1') THEN cnt_out_int <= reg_out; ELSIF rising_edge(clock) THEN IF (rco_int = '0' and pwm_int ='1' and cnt_out_int <"11111111") THEN cnt_out_int <= INC(cnt_out_int); ELSE IF (rco_int ='0' and pwm_int ='0' and cnt_out_int > "00000000") THEN cnt_out_int <= DEC(cnt_out_int); END IF; END IF; END IF; END PROCESS; -- Generarea transportului PROCESS(cnt_out_int, rco_int, clock,reset) BEGIN IF (reset ='1') THEN rco_int <='1'; ELSIF rising_edge(clock) THEN IF ((cnt_out_int = "11111111") or (cnt_out_int ="00000000")) THEN rco_int <= '1'; ELSE rco_int <='0'; END IF; END IF; END PROCESS; -- generarea semnalului PWM propriu-zis PROCESS (clock,rco_int,reset) BEGIN IF (reset = '1') THEN pwm_int <='0'; ELSIF rising_edge(rco_int) THEN

206

Circuite integrate numerice. Aplicaii n mecatronic

pwm_int <= NOT(pwm_int); ELSE pwm_int <= pwm_int; END IF; END PROCESS; pwm <= pwm_int; END arch_pwm; -- Descrierea functiilor utilizate se face intr-un package -- definit de utilizator user_pkg.vhd LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE user_pkg IS function INC(X: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function DEC(X: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; END user_pkg ; PACKAGE BODY user_pkg IS function INC(X: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is variable XV: STD_LOGIC_VECTOR(X'LENGTH - 1 downto 0); begin XV := X; for I in 0 to XV'HIGH LOOP if XV(I) = '0' then XV(I) := '1'; exit; else XV(I) := '0'; end if; end loop; return XV; end INC; function DEC(X: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is variable XV: STD_LOGIC_VECTOR(X'LENGTH - 1 downto 0); begin XV := X; for I in 0 to XV'HIGH LOOP if XV(I) = '1' then XV(I) := '0'; exit; else XV(I) := '1'; end if;

207

end loop; return XV; end DEC; END user_pkg;

7.4 Interfaa pentru motorul pas cu pas (I/F MPP) nainte de a prezenta un exemplu de sistem numeric care poate fi utilizat ca interfa numeric pentru un MPP sunt utile cteva informaii cu un caracter general despre principiile de funcionare ale acestora, suficiente pentru proiectantul circuitului numeric propriu-zis ([5]). Astfel exist cel puin trei variante constructive de motoare pas cu pas (MPP): - cu magnei permaneni - cu reluctan variabil - hibride (de fapt o combinaie a celor dou principii anterioare, din punct de vedere al utilizatorului identice cu cel cu magnei permaneni) Varianta cu magnei permaneni (la care rotorul este realizat cu ajutorul unor astfel de magnei) este cea mai utilizat n aplicaiile care nu presupun un cuplu motor foarte mare i este cea mai flexibil din punct de vedere al modurilor de funcionare posibile. Pentru orice MPP o mrime esenial este dimensiunea unghiular a pasului care depinde de numrul de poli ai rotorului i respectiv ai ansamblului statoric. Pentru MPP cu magnei permaneni dimensiunea minim a pasului este relativ mare fiind de ordinul minutelor unghiulare ('). Valorile pasului sunt standardizate pentru a da un numr ntreg de pai per revoluie. De exemplu pentru un pas de 1,8o avem 200 de pai per revoluie (360o/200 = 1,8o). Pentru a deplasa (roti) rotorul nfurrile statorice sunt energizate ntr-o anumit secven, frecvena cu care este actualizat aceast secven dnd i viteza de rotaie a rotorului. Cuplul oricrui motor pas cu pas scade odat cu cretere frecvenei de actualizare i respectiv a vitezei de rotaie. Se utilizeaz dou variante de comand asociate celor dou modaliti de realizare a bobinelor statorice. Astfel exist MPP unipolare i motoare bipolare. .

Figura 7.9

Variant MPP unipolar


208

Circuite integrate numerice. Aplicaii n mecatronic

Modul concret de realizare al nfurrilor i corespunztor circulaia de curent care trebuie realizat difereniaz cele dou variante, dar din punct vedere al circuitului numeric diferena ntre cele dou variante este aproape transparent n cazul MPP unipolare nfurrile statorice sunt mprite n dou jumti, cu o priz median (figura 7.9) care este tipic conectat la tensiunea de alimentare, astfel c circulaia de curent pentru energizarea nfurrii poate fi de forma 1-a (ca n figur), 1-b, 2-a sau 2-b. Cheile de curent ar fi conectate n acest caz ntre capetele de tip a sau b i mas. Cele dou jumti ale unei aceleiai nfurri nu trebuie niciodat energizate n acelai timp, n schimb exist posibilitatea de a energiza fie numai cte o jumtate de nfurare la un moment dat, fie cte dou jumti din nfurri diferite n acelai timp. Varianta cu energizare simultan duce la creterea cuplului de cca. 1.4 ori cu dublarea ns a puterii consumate. Astfel dac un 1 reprezint o comand de energizare a unei seminfurri, pentru o roti un astfel de MPP n sensul acelor de ceasornic (CW-Clock Wise) vom avea nevoie de o secven de forma: 1a: 1 0 0 0 1 0 0 0 1 1b: 0 0 1 0 0 0 1 0 0 2a: 0 1 0 0 0 1 0 0 0 2b: 0 0 0 1 0 0 0 1 0 t=01 2345678 Dac se dorete rotirea MPP n acelai sens n varianta cu semi-nfurri energizate simultan vom avea nevoie de o secven de forma: 1a: 1 1 0 0 1 1 0 0 1 1b: 0 0 1 1 0 0 1 1 0 2a: 0 1 1 0 0 1 1 0 0 2b: 1 0 0 1 1 0 0 1 1 t=012345678 Dac se dorete rotirea n sens invers acelor de ceasornic (CCWCounter Clock Wise) pur i simplu secvena trebuie parcurs invers.

Figura 7.10

Variant MPP bipolar

n cazul MPP bipolare nu exist dect dou nfurri statorice fr priz median (figura 7.10) astfel c circulaia de curent pentru energizarea nfurrilor trebuie s fie forma 1a-1b, 1b-1a (ca n figur), 2a-2b sau 2b-2a. Cheile de curent
209

conectate la capetele nfurrilor trebuie s poat susine o circulaie de curent n ambele sensuri (bipolar). n secvena de control care urmeaz i care rotete motorul CW este indicat sensul curentului prin reportare la borna respectiv (cu + pozitiv, dac intr n borna respectiv, cu - negativ, dac iese din borna respectiv). Se observ c formal, din punct de vedere numeric, secvena de comanda este aceiai cu cea de la varianta cu energizarea unei singure nfurri de MPP unipolar. 1a: + - - - + - - - + 1b: - - + - - - + - - 2a: - + - - - + - - - 2b: - - - + - - - + - t=0 1 2 3 4 5 6 7 8 La fel ca la comanda unui motor de curent continuu unde este nevoie de schimbarea sensului curentului pe la bornele unei nfurri i aici, n cazul MPP bipolare, cel mai utilizat circuit de comand (ca amplificator de putere AMPLI) este cel n punte H (H bridge). Puntea H (figura 7.11) nu este altceva dect o reea de 4 chei de curent K1..K4 care conectate ntre sursa de alimentare V+ i mas, printr-o comand corespunztoare, permit comutarea sensului curentului IL pe la bornele unei sarcini ZL. Astfel, pentru comanda MPP bipolar prezentat sunt necesare dou astfel de circuite. Exist numeroase circuite integrate monolitice de putere care implementeaz acest principiu, folosind tranzistoare bipolare sau MOSFET.
V+ V+

K1 ZL

K3

K1 ZL

K3

K2

IL

K4

K2

IL

K4

Figura 7.11

Principiul unei puni H

210

Circuite integrate numerice. Aplicaii n mecatronic

Bornele nfurrilor conectate ctre cheile de curent sunt numite uneori faze al MPP, la fel ca i semnalele numerice care comand energizarea nfurrilor respective. Din acest punct de vedere cele dou variante prezentate au ambele patru faze. Oricare ar fi secvena de control i modalitatea de comand avantajul esenial este legat de modalitatea numeric secvenial de generare a comenzilor. Codul VHDL prezentat n continuare (adaptat dup un cod open source, www.opensource.org ) descrie un controler pentru un MPP pas cu pas, cu patru faze (StepDrive). Exist un semnal de ceas global (clock) pe baza cruia se realizeaz periodizarea secvenei de acionare a MPP, un semnal (Direction) care stabilete sensul de deplasare i unul care valideaz deplasarea (StepEnable). Pentru a se putea controla n limite largi frecvena de generare a secvenei de comand (viteza de rotaie) este utilizat un divizor de frecven (prescaler) StepCounter avnd deschiderea maxim de 32 de bii (o valoare puin exagerat!), al crui factor concret de divizare este dat de constanta StepLockOut. Aceasta nseamn c la fiecare StepLockOut perioade ale lui clock se va genera o secven de comand distinct pentru MPP. Valoarea constantei respective care are aici semnificaia de vitez maxim i unic de rotaie este doar un exemplu generic, ea trebuind n mod concret adaptat de utilizator funcie de valorile concrete ale frecvenei ceasului clock i de caracteristicile MPP utilizat. Mai mult, codul poate fi eventual modificat astfel nct ea s devin o valoare programabil de utilizator, iar dimensiunea divizorului poate fi i ea modificat n sensul micorrii ei.
-library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity StepperMotorPorts is Port ( StepDrive : out std_logic_vector(3 downto 0); clock : in std_logic; Direction : in std_logic; StepEnable: in std_logic ); end StepperMotorPorts; architecture StepDrive of StepperMotorPorts is -- o masina secaventiala cu 4 stari signal state : std_logic_vector(1 downto 0); signal StepCounter : std_logic_vector(31 downto 0); -- divizor (prescaler) ceas de sistem --definire depasire pt. numarator, adic factorul de divizare constant StepLockOut : std_logic_vector(31 downto 0) := "00000000000000110000110101000000"; signal InternalStepEnable : std_logic; 211

-- utilizat pentru memorarea interna a semnalului de activare begin process(clock) begin -- incrementare divizor if ( (clock'Event) and (clock = '1') ) then StepCounter <= StepCounter+ "0000000000000000000000000000001"; if (StepEnable = '1') then InternalStepEnable <= '1'; --memorare cerere generare pasi end if; if (StepCounter >= StepLockOut) then StepCounter <= "00000000000000000000000000000000"; -- tratare depasire si memorare cerere if (InternalStepEnable = '1') then InternalStepEnable <= StepEnable; --control directie prin succesiunea tranziii stare if (Direction = '1') then state <= state + "01"; end if; if (Direction = '0') then state <= state - "01"; end if; --generarea secventelor de comanda case state is when "00" => StepDrive <= "1010"; when "01" => StepDrive <= "1001"; when "10" => StepDrive <= "0101"; when "11" => StepDrive <= "0110"; when others => end case; end if; end if; end if; end process; end StepDrive;

212

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