Circuite Logice Programabile. Filtre Numerice
CAPITOLUL I
Circuite logice programabile
I.1. Introducere în PLD
I.1.1. Viziune de ansamblu
Este bine cunoscut că pentru a proiecta un sistem digital, în afară de microprocesoare și microcontrolere mai sunt necesare și alte dispozitive cum ar fi porțile logice și circuitele SSI (Small Scale Integration), MSI (Medium Scale Integration) sau VLSI (Very Large Scale Integration). De asemenea pentru a testa astfel de sisteme, intrările și ieșirile lor trebuie să fie conectate prin switch-uri, generatoare de frecvență, LED-uri etc. Acest lucru nu numai că transformă proiectarea într-un proces complicat, dar conduce la cheltuieli ridicate și necesită mult timp. Mai mult, este dificil să proiectăm un sistem nou, utilizând părți ale proiectelor anterioare sau plăci imprimate utilizate în sistemele digitale realizate anterior.
Metodele tradiționale, cum ar fi tabelele de adevăr, minimizările și toate celelalte calcule pe care noi le putem realiza, de cele mai multe ori conduc la erori cu totul neașteptate. Există totuși o modalitate care îmbunătățește considerabil proiectarea sistemelor digitale și, deși aceasta nu este foarte diferită de celelalte modalități clasice, totuși cu ajutorul ei se poate ajunge la rezultatele dorite mult mai ușor, într-un timp mai scurt și cu costuri mai mici. Această metodă folosește și ea calcule manuale, ca de exemplu tabele de adevăr sau diagrame de stări, însă conferă posibilitatea de a verifica proiectul detaliat utilizând simularea software în așa fel încât în final proiectul devine funcțional. Dacă rezultatele simulărI sunt cele dorite, circuitul proiectat este bun. Însă, dacă la acest pas există erori, circuitul nu trebuie reproiectat și nici nu trebuie construit o placă experimentală pentru a găsi erorile. Proiectul digital este de fapt implementat printr-un software special în circuitele logice care au o structură internă configurabilă,
la fel ca o memorie și această structură poate fi modificată sau complet reproiectată în orice moment fără a modifica în nici un fel legăturile externe.
Circuitele logice care au o structură internă ce poate fi modificată în concordanță cu un fișier de configurare se numesc Dispozitive Logice Programabile (Programmable Logic Devices – PLD). Aceste circuite folosesc un software special pentru conexiuni și pentru implementarea funcțIlor logice în interiorul structurI integrate și astfel alcătuiesc proiectul digital dorit.
Ustensilele de proiectare oferă posibilitatea unei utilizări a resurselor hardware într-un mod eficient fără chinul programărI manuale. Implementarea proiectului poate fi realizată printr-o schemă sau prin limbaje de programare care utilizează un editor de text accesibil. Indiferent de metoda utilizată, performanțele circuitului pot fi verificate, chiar și din punct de vedere al răspunsului în timp al circuitelor integrate. După aceea proiectul este încadrat în circuit pentru a putea fi configurat. Astfel eliminarea erorilor se reduce la corectarea schemelor sau a programului introdus.
În figura de mai jos este prezentat un grafic care reprezintă raporturile dintre costurile fiecărei clasă de circuite. Aprecierea costurilor este mai dificil de făcut întrucât acestea se reduc în mod continuu.
Se prezintă în continuare timpul necesar producerI unor anumite tipuri de circuite:
I.1.2. Tehnici utilizate în realizarea CLP
În figura următoare se prezintă o trecere în revistă a tehnologIlor bazate pe Si.
I.1.2.1. Perfecționarea CMOS
În vederea perfecționărI tehnologiei CMOS, la nivelul etapei de procesare, s-au utilizat mai multe tehnici. Una dintre acestea se referă la Siliciu pe izolator, care are avantajul, față de CMOS, că dispozitivele sunt extrem de bine izolate unul față de altul, ceea ce elimină efectele de latch-up și de corp, reducând totodată capacitățile parazite. Izolarea înseamnă că numai arIle pereților laterali asociați cu sursa și drena contribuie la capacitățile parazite. În același timp curențI de scurgere asociați cu dispozitivele adiacente și cu substratul sunt aproape complet eliminați. Reducerea capacitățI va face ca circuitele să fie extrem de rapide. Întrucât nu există insule, se poate ajunge la densități mai mari decât în cazul CMOS. În figura de mai jos se prezintă o implementare de siliciu pe izolator, acesta fInd safirul (SOS).
Una dintre dificultățile cu care se confruntă această tehnologie se referă la creșterea siliciului monocristalin pe izolator. Un avantaj important al tehnologiei SOS este legat de rezistența la radiațI, ceea ce o recomandă pentru niște de aplicațI speciale.
O altă opțiune examinată, pentru a perfecționa tehnologia CMOS, a constat în adăugarea mai multor straturi, ceea ce a avut ca efect realizarea de dispozitive în 3D. În figura de mai jos se prezintă un exemplu de pseudo-3D-CMOS. Un inversor poate fi implementat într-o formă extrem de compactă, în sensul că doi tranzistori ocupă, în această implementare, un spațiu corespunzător unuia singur. Evident, pe măsură ce sunt depuse mai multe straturi, structura devine din ce în ce mai compactă.
Una dintre problemele dificile puse de această tehnologie se referă la disiparea căldurI. În mod normal, la circuitele CMOS, disiparea căldurI are loc prin substrat. În cazul 3D- CMOS este mult mai dificil să se disipe căldura, ceea ce impune operarea la frecvențe mai joase sau răcirea acestora eventual în lichid. Cea mai mare dificultate pentru 3D CMOS o reprezintă tehnologia de fabricație, întrucât necesită depozitarea a numeroase straturi.
I.1.2.2. TehnologI Bipolare
Tranzistoarele bipolare și-au găsit o largă popularitate înaintea dispozitivelor MOS, în principal datorită simplitățI procesului de fabricație. Aceste dispozitive sunt caracterizate prin capabilități de a conduce curenți importanți, prin viteza ridicată și prin posibilități de comandă mari (10 sarcini, în raport cu 4 sarcini, pentru CMOS). Există numeroase variante ale acestei tehnologI: ECL (Emitter Coupled Logic), caracterizată prin viteza mare și putere mare consumată, TTL (Transistor Transistor Logic), cea mai răspândită, și I2L (Integrated Injection Logic). TTL reprezintă, în continuare, o tehnologie importantă, constituind un standard la care trebuie să se interfațeze alte tehnologI semiconductoare.
I.1.2.3. BiCMOS
Un mare avantaj al BiCMOS este acela că producătorI de circuite pot mări substanțial performanțele acestora, fără a mai investi într-un nou echipament de procesare, care este extrem de costisitor.
Prin combinarea posibilităților de comandă și de viteză ridicată ale dispozitivelor bipolare, cu puterea consumată redusă și densitatea mare ale dispozitivelor CMOS, se obțin structuri extrem de puternice și eficiente. Avantajul principal al dispozitivului CMOS este legat de dimensiuni. Având în vedere că, obținerea dispozitivului CMOS se bazează pe autoalinierea măștilor și că acesta consumă o putere redusă, se poate realiza ușor o scalare spre dimensiuni mai reduse. Astfel, dispozitivele CMOS pot fi mult mai mici decât cele bipolare, care, în plus, disipă și puteri mai mari, ceea ce va face ca viteza de lucru pentru CMOS să fie comparabilă cu cea a dispozitivelor bipolare. TTL consumă mai multă putere decât CMOS, ca și ECL, comparativ cu TTL. Viteza circuitelor ECL este incomparabil mai mare decât cea a circuitelor CMOS. Astfel, trebuie să se ajungă la un compromis între puterea consumată, posibilitățile de comandă și viteză.
I.1.2.4. GaAs
O zonă de mare interes în cercetare o reprezintă combinațIle dintre elementele plasate în grupurile II-V, din Tabela lui Mendeleev și în particular combinația GaAs. Unul dintre avantajele utilizărI acestor combinațI o reprezintă marea mobilitate a purtătorilor de sarcină, în comparație cu mobilitățile ce caracterizează purtătorI de sarcină din elementele grupului IV. Aceste dispozitive au caracteristici excelente pentru utilizări în circuitele cu microunde, ca și în aplicațIle cu emisie de lumină.
Încercările cu GaAs au început cu mult timp în urmă, însă realizările recente în tehnologia de procesare a permis realizarea de circuite bazate pe GaAs. Una dintre dificultățile cu care se confruntă GaAs este legată de dificultatea de formare a oxidului sau a dielectricului de poartă.
I.1.3. Tipuri de dispozitive logice programabile
Rețelele logice programabile cunoscute ca circuite PLA au fost inventate în 1978 de firma Monolitich Memories. Evoluția circuitelor logice a evoluat dinamic. De la circuitele logice TTL simple s-a trecut la tehnologia de succes a circuitelor PROM, tehnologie care a realizat nu numai un circuit care este configurabil de către utilizator, dar a devenit și foarte popular. Programele de dezvoltare vin în ajutorul proiectantului reducându-se astfel timpul de proiectare. În acest fel, deoarece proiectantul este eliberat de dificultățile proiectărI, a devenit posibilă realizarea unor proiecte complexe, implementate într-un timp foarte scurt.
I.1.3.1. Reconfigurarea prin metode electrice
Deoarece circuitele PLD sunt reprogramabile, probabil acesta este cel mai important avantaj oferit de tehnologia CMOS. Ștergerea configurației prin metode electrice este o metodă mult superioară celei prin raze ultra-violete (UV). Avantajul constă în a reconfigura circuitul practic în fracțiuni de secundă față de câteva ore, care este timpul necesar pentru ștergerea configurației cu raze UV.
Un alt beneficiu al ștergerI prin metoda electrică este ușurința cu care utilizatorul poate executa această reconfigurare. La realizarea prototipurilor acest fapt reduce ciclul de proiectare. Ștergerea configurației practic este echivalentă cu reprogramarea circuitului.
I.1.3.2. Consum de putere scăzut
Consumul de putere scăzut este proprietatea cea mai cunoscută a circuitelor fabricate în tehnologia CMOS. Toate circuitele din familia PALCE (Programable Array Logic CMOS Electrically-Erasable) au versiuni cu consum de putere redusă. Practic consumul de putere în modul de funcționare economic este jumătatea puterI consumate în modul de funcționare normală. Alte circuite, în modul de funcționare economic, oferă variante cu consum de 1/4. Scăderea puterI de consum nu înseamnă implicit și scăderea vitezei de lucru.
Circuitele CMOS consumă curentul electric doar în stările de tranziție ale tranzistoarelor, față de tranzistoarele bipolare care consumă curentul electric pe toată perioada de funcționare. Circuitele PAL CMOS cu consum economic (1/2 sau 1/4) ale firmei AMD folosesc acest avantaj la maximum posibil; totuși pentru ca viteza de lucru să nu scadă, unele tranzistoare trebuie să lucreze în zona caracteristicI liniare. Deoarece aceste circuite lucrează în mod de comutație, consumul de putere nu se reduce la zero cum ar fi la un circuit CMOS convențional.
Puterea de alimentare scăzută este ideală în aplicațI unde această cerință este un factor important, cum ar fi de exemplu telecomunicațIle mobile. Puterea de consum scăzută reduce și disipația termică. Permite proiectantului să reducă distanța dintre circuitele integrate, cum ele au nevoie de un spațiu redus pentru disipația termică. Acest lucru duce la circuite imprimate de dimensiuni reduse, și din nou se reduce costul sistemelor proiectate.
I.1.3.3. Consum de putere nul (Zero standby)
Unele circuite oferă posibilitatea de a intra într-un mod de lucru unde consumul de putere este nul. Acest mod de lucru se numește stare de veghe. Circuitul în loc să fie în stare operațională tot timpul (adică tranzistorI care lucrează în zona de lucru lineară consumă putere), în anumite condițI o parte a circuitului este decuplată de la tensiunea de alimentare, și circuitul intră în starea de veghe, unde practic consumul de putere este nul sau aproape zero. Condiția de intrare în starea de veghe este ca intrările circuitului să nu-și schimbe starea o anumită perioadă de timp (tipic 50 ns). În starea de veghe consumul de curent electric va fi tipic Icc<15A. starea ieșirilor va fi menținută pe toată perioada de veghe.
În momentul schiate în 1978 de firma Monolitich Memories. Evoluția circuitelor logice a evoluat dinamic. De la circuitele logice TTL simple s-a trecut la tehnologia de succes a circuitelor PROM, tehnologie care a realizat nu numai un circuit care este configurabil de către utilizator, dar a devenit și foarte popular. Programele de dezvoltare vin în ajutorul proiectantului reducându-se astfel timpul de proiectare. În acest fel, deoarece proiectantul este eliberat de dificultățile proiectărI, a devenit posibilă realizarea unor proiecte complexe, implementate într-un timp foarte scurt.
I.1.3.1. Reconfigurarea prin metode electrice
Deoarece circuitele PLD sunt reprogramabile, probabil acesta este cel mai important avantaj oferit de tehnologia CMOS. Ștergerea configurației prin metode electrice este o metodă mult superioară celei prin raze ultra-violete (UV). Avantajul constă în a reconfigura circuitul practic în fracțiuni de secundă față de câteva ore, care este timpul necesar pentru ștergerea configurației cu raze UV.
Un alt beneficiu al ștergerI prin metoda electrică este ușurința cu care utilizatorul poate executa această reconfigurare. La realizarea prototipurilor acest fapt reduce ciclul de proiectare. Ștergerea configurației practic este echivalentă cu reprogramarea circuitului.
I.1.3.2. Consum de putere scăzut
Consumul de putere scăzut este proprietatea cea mai cunoscută a circuitelor fabricate în tehnologia CMOS. Toate circuitele din familia PALCE (Programable Array Logic CMOS Electrically-Erasable) au versiuni cu consum de putere redusă. Practic consumul de putere în modul de funcționare economic este jumătatea puterI consumate în modul de funcționare normală. Alte circuite, în modul de funcționare economic, oferă variante cu consum de 1/4. Scăderea puterI de consum nu înseamnă implicit și scăderea vitezei de lucru.
Circuitele CMOS consumă curentul electric doar în stările de tranziție ale tranzistoarelor, față de tranzistoarele bipolare care consumă curentul electric pe toată perioada de funcționare. Circuitele PAL CMOS cu consum economic (1/2 sau 1/4) ale firmei AMD folosesc acest avantaj la maximum posibil; totuși pentru ca viteza de lucru să nu scadă, unele tranzistoare trebuie să lucreze în zona caracteristicI liniare. Deoarece aceste circuite lucrează în mod de comutație, consumul de putere nu se reduce la zero cum ar fi la un circuit CMOS convențional.
Puterea de alimentare scăzută este ideală în aplicațI unde această cerință este un factor important, cum ar fi de exemplu telecomunicațIle mobile. Puterea de consum scăzută reduce și disipația termică. Permite proiectantului să reducă distanța dintre circuitele integrate, cum ele au nevoie de un spațiu redus pentru disipația termică. Acest lucru duce la circuite imprimate de dimensiuni reduse, și din nou se reduce costul sistemelor proiectate.
I.1.3.3. Consum de putere nul (Zero standby)
Unele circuite oferă posibilitatea de a intra într-un mod de lucru unde consumul de putere este nul. Acest mod de lucru se numește stare de veghe. Circuitul în loc să fie în stare operațională tot timpul (adică tranzistorI care lucrează în zona de lucru lineară consumă putere), în anumite condițI o parte a circuitului este decuplată de la tensiunea de alimentare, și circuitul intră în starea de veghe, unde practic consumul de putere este nul sau aproape zero. Condiția de intrare în starea de veghe este ca intrările circuitului să nu-și schimbe starea o anumită perioadă de timp (tipic 50 ns). În starea de veghe consumul de curent electric va fi tipic Icc<15A. starea ieșirilor va fi menținută pe toată perioada de veghe.
În momentul schimbărI unui semnal de intrare, circuitul reintră în modul de funcționare normal și consumul de putere va fi cel nominal. Această posibilitate duce la economI de putere electrică considerabile, mai ales la frecvențe de lucru medI sau joase.
Circuitele zero-standby sunt folosite din motive lesne de înțeles mai ales la echipamentele portabile, echipamentele industriale de telecomandă, echipamentele alimentate de la baterI solare.
Tipuri existente pe piață
Logica programabilă a fost utilizată începând cu anI 70. Primele dispozitive au fost matricile logice programabile (PAL – Programmable Array Logic). Acestea sunt alcătuite din două plane logice care oferă orice combinație de porți ȘI și SAU.
I.2. CPLD
După acestea au urmat PLD-urile (Programmable Logic Devices), tehnologie la a cărei dezvoltare a contribuit și firma Altera. Au apărut astfel dispozitive CMOS cu un consum redus, bazate pe tehnologie Flash. PLD-urile Flash sunt reprogramabile, ele pot fi programate și șterse de oricâte ori, într-un timp rapid.
Dispozitivele logice programabile complexe, CPLD-urile, sunt construite pe baza conceptului de a avea mai multe blocuri PLD, numite macrocelule, într-un singur dispozitiv. Căile logice simple pot fi implementate în cadrul unui singur bloc, iar cele mai sofisticate presupun conexiuni între blocuri. CPLD-urile sunt dispozitive care utilizează matrici de porți complexe și de dimensiuni mari, cu întârzieri de 5ns (ceea ce conduce la frecvențe de lucru de 200 Mhz). Comportarea temporală (timingul) pentru CPLD-uri este foarte ușor de calculat, astfel că, încă înainte de realizarea practică, pentru un anumit design se poate determina întârzierea dintre intrări și ieșiri.
I.2.1. Blocul funcțional
După cum se arată în fig.2.8, blocurile funcționale sunt alcătuite din 18 macrocelule independente. În afară de semnalele de intrare, blocurile funcționale recepționează semnalele de comandă și control (tact, set/reset, semnale de inhibare). Cele 18 ieșiri ale blocului funcțional sunt conduse în matricea de conexiuni, de aici pot fi conectate la blocurile IOB (Input/Output Block) sau la blocuri funcționale. Cele 36 intrări ale blocului funcțional realizează funcțIle logice prin implementarea “termenilor produs” corespunzând formei canonice disjunctive (suma a 90 de termeni produs).
I.2.2. Macrocelula
Fiecare macrocelulă se poate configura să implementeze funcțI logice combinaționale sau secvențiale. Structura internă a unei macrocelule este arătată în fig.2.9. Datele primare de intrare în macrocelulă pot fi conectate în 5 funcțI logice AND, apoi funcțIle OR, XOR sunt realizate cu sumatorul de termeni produs, pentru a implementa apoi funcțIle combinaționale. Bistabilul macrocelulei se poate configura fie ca bistabil D sau T. Fiecare registru suportă setarea/resetarea sincronă/asincronă.
Toate semnalele globale pot comanda/controla registrul macrocelulei. Ambele nivele ale acestor semnale (semnalul și complementul) pot fi utilizate pentru controlul bistabilului.
I.2.3. Blocurile configurabile de intrare/ieșire (IOB)
Blocurile de intrare/ieșire realizează interfața între logica internă și exteriorul circuitului programabil CPLD. Fiecare bloc IOB include un buffer, un amplificator de linie ieșire, selecție multiplexor inhibare, control conectare la masă semnal, etc. Circuitul este capabil să realizeze compatibilitatea cu circuitele logice TTL/CMOS, sau cu logica 3.3V realizată prin legarea pinului de alimentare VCCINT la 3.3V (fig.2.10).
Capabilitatea de conectare la masă a semnalului de intrare/ieșire permite filtrarea zgomotelor generate din cauza numărului mare de comutațI a semnalelor. Un rezistor este conectat la tensiunea de alimentare (valoarea tipică de 10 K) pentru prevenirea intrărilor flotante, în cazul în care circuitul nu este configurat.
CPLD-urile oferă o proiectare facilă. Proiectantul, după ce a descris modelul, prin scheme și/sau limbaj hardware, pur și simplu folosește unelte soft-uri pentru optimizarea, potrivirea (fitting) și simularea design-ului. Soft-ul creează un fișier pentru programarea CPLD-ului cu funcționalitatea dorită. Uneltele soft-uri sunt în general ieftine, iar în cazul firmei Altera, sunt chiar gratuite.
Pentru că CPLD-urile sunt reprogramabile, proiectanțI pot rapid și fără nici un cost suplimentar să schimbe designul. CPLD-urile oferă un nivel înalt de integrare și sunt disponibile în chip-uri de dimensiune mică, ideale pentru produsele cu consum redus și cu spațiu limitat pe placa circuitului.
I.2.4. Avantajele circuitelor PLD față de alte circuite
La fel ca circuitele logice semi-programabile, circuitele programabile PLD asigură un compromis în care se combină multe avantaje ale circuitelor logice discrete și ale circuitelor integrate ASIC. Avantajele majore sunt:
Flexibilitatea în proiectare. Programele care ajută proiectarea și utilizarea circuitelor PLD simplifică foarte mult procesul de proiectare. În fapt, utilizatorul novice poate însuși cunoștințele de proiectare cu circuite PLD în 2-3 ore și poate implementa proiecte digitale în scurt timp după perioada de învățare. Programele utilizate în proiectare nu numai că ajută proiectarea dar implementează proiectul digital și în plus conține programatorul. Programul de proiectare facilitează proiectarea digitală iar programatorul este folosit pentru configurarea circuitului. Mediul de programare asigură interfața între proiectarea la nivel înalt și programarea detaliată la nivel de chip.
Toate software-ele de proiectare digitală rezolvă în esență aceleași probleme. Proiectul este introdus relativ ușor fie ca schemă electrică fie ca program descriptor hardware. Convertirea și implementarea proiectului este rezolvată de software, apoi programatorul este folosit pentru configurarea circuitului PLD. Majoritatea pachetelor de proiectare oferă simularea logică, eliminarea greșelilor de proiectare. Programul creează și documentația aferentă proiectului, care conține ecuațIle logice implementate, optimizate și corespondența între picioarele circuitului integrat și semnalele utilizate etc. Ușurința proiectărI, marea gamă a circuitelor permit alegerea circuitului care corespunde criterIlor de proiectare (consum de putere și viteză de răspuns). Varietatea arhitecturilor posibile ajută utilizatorul la alegerea circuitului corespunzător aplicației respective. De altfel un proiect se poate implementa în esență prin utilizarea circuitelor PLD standard. Dacă proiectul digital necesită schimbări, atunci reproiectarea constă în reeditarea schemei electrice și reimplementarea acesteia în circuitul PLD. Proiectarea circuitului imprimat este mult simplificată prin utilizarea circuitelor logice programabile. Unul din avantajele circuitelor PLD constă în a oferi flexibilitatea intrărilor și ieșirilor practic mobile. Din moment ce proiectele de dimensiuni pot fi implementate în PLD, practic proiectarea circuitului imprimat începe odată cu definirea ieșirilor și intrărilor. DetalIle conținute de PLD pot fi specificate în paralel cu proiectarea circuitului imprimat. În orice caz, modificările ulterioare nu influențează în totalitate proiectul.
Performanțele PLD. Viteza de răspuns a acestor circuite este una din motivele care fac ca proiectanțI să prefere utilizarea circuitelor PLD. Circuitele PLD pot asigura performanțe egale sau mai bune decât circuitele logice discrete. Performanța acestor circuite nu poate fi măsurată în consumul de putere, prin simplul fapt că aceste circuite înlocuiesc mai multe circuite discrete al căror consum de putere poate fi mai mare decât consumul de putere al circuitului PLD. Cum majoritatea circuitelor programabile sunt construite în tehnologie CMOS, permit consum zero de putere în mod de așteptare, fapt care face inutilă comparația acestui criteriu.
Siguranță în funcționare. Siguranța în funcționare este un criteriu de importanță majoră. Cum sistemul digital proiectat crește în dimensiuni și complexitate raportat la suprafața ocupată, duce la descreșterea siguranței de funcționare. Însă o soluție care reduce numărul componentelor utilizate atrage după sine implicit creșterea siguranței în funcționare. Utilizarea circuitelor programabile asigură o mai mare siguranță în funcționare prin utilizarea numărului scăzut al circuitelor utilizate. Prin reducerea numărului de circuite și a spațiului de circuite imprimat, scade densitatea circuitelor pe placă, fapt ce îmbunătățește cu mult siguranța în funcționare. Reducerea densitățI reduce și perturbațIle la zgomot, astfel că sistemul devine din punct de vedere al perturbațIlor mai curat și va crește siguranța de funcționare.
Cost scăzut. Orice realizare practică trebuie să fie optimă din punct de vedere al prețului. Costul sistemelor este un factor important în modificările proiectului sau a schimbărilor necesare. Dar costul total al sistemului poate fi calculat în mod greșit și uneori nu include toate laturile afectate. De exemplu este dificilă cuantificarea pierderilor datorate întârzierilor de introducere pe piață. Reducerea cheltuielilor se realizează prin faptul că un singur circuit PLD înlocuiește mai multe circuite discrete. Reducerile de cheltuieli prin spațiul de circuit imprimat salvat poate fi de până la 25%.
Utilizarea unui singur tip de circuit este un alt beneficiu economic, care rezultă din faptul că se reduc cheltuielile de stocare. Utilizarea unui singur circuit integrat la diferite produse electronice atrage după sine reducerea cheltuielilor de stocare amintite. Un alt beneficiu este protecția circuitelor împotriva copierI proiectului. Cum fiecare circuit PLD posedă proprietatea de protecție împotriva copierI acest beneficiu material este evident. Utilizarea intensivă a circuitelor PLD în proiectare mărește protecția împotriva securitățI decriptărI proiectelor. Acest fapt forțează competitorI la proiectarea intensivă dacă vor să vândă produse de calitate asemănătoare, dar până atunci propriul produs va câștiga piața.
Circuitele logice programabile asigură crearea proiectelor digitale „semi-custom”, dar cu circuite standardizate. Gama largă a circuitelor programabile asigură libertatea de proiectare a unor funcțI de bază a căror realizare este de altfel mult prea costisitoare. Circuitele PLD asigură reducerea costului și timpului de proiectare. Siguranța în funcționare mărește calitatea produselor, fără scăderea complexitățI proiectelor. Problemele de proiectare sunt mult simplificate prin gama largă a programelor oferite de producătorI circuitelor PLD. Simularea proiectelor permite detectarea erorilor de proiectare, astfel încât se reduc cheltuielile de proiectare și testare încă din faza proiectărI.
Toate aceste motive au contribuit la creșterea utilizărI circuitelor logice programabile, și această utilizare va crește prin simplificarea metodelor de proiectare și a cheltuielilor de proiectare.
I.3. FPGA. Circuitele XC4000 fabricate de XILINX
Se va prezenta pe scurt FPGA (Field Programmable Logic Arrays) ca tehnologie alternativă de implementare. FPGA sau ArI de Celule Logice reprezintă grupări (clusters) de blocuri logice, după cum se vede in figura de mai jos. Oricare funcție de n intrări (de regulă 5) poate fi implementată de acest bloc, multe asemenea blocuri fInd plasate pe o singură pastilă, cu posibilități de interconectare reconfigurabilă între blocuri.
În figura 2.11.b se prezintă modul în care blocurile logice configurabile se conectează, pentru a forma un circuit. Fiecare plot poate fi configurat ca intrare sau ieșire, ploturile de masă și alimentare fInd rezervate. La nivelul anului 1997 exista posibilitatea configurărI a circa 30.000-100.000 porți utilizabile pe o pastilă. Acest număr este în continuă creștere.
O altă caracteristică utilă a acestei tehnologI constă în abilitatea de a reconfigura rapid un sistem complet. Aceasta însemnă că, dacă un ASIC este operațional, în condițIle în care este necesară o altă operație, el poate fi reconfigurat și modificat de un număr nelimitat de ori. La început această tehnologie era caracterizată printr-o viteză mică de operare și printr-un număr mic de porți. Aceste inconveniente sunt în mare măsură depășite pas cu pas. Există, de asemenea, o varietate de arhitecturi de bază asociate cu FPGA-urile, multe dintre acestea fInd asemănătoare unor rețele multiple de PLA-uri, cu o matrice de interconectare.
În continuare va fi descrisă seria de circuite FPGA XC4000 fabricate de firma XILINX
I.3.1. Descrierea structurI interne
Seria XC4000 este implementată printr-o structură regulară, flexibilă, cu o arhitectură programabilă, realizată prin blocuri/celule logice configurabile (Configurable Logic Blocks CLBs), blocuri/celule de intrare/ieșire (Input/Output Blocks IOBs), și resurse de conexiuni abundente programabile.
Circuitele sunt configurate cu ajutorul memoriei interne (inaccesibilă utilizatorului). Configurația este realizată fie în mod activ de către FPGA prin citirea unei memorI EPROM (serie/paralel), sau configurația este înscrisă de un microprocesor, microcontroler sau alt FPGA prin mai multe metode.
I.3.2. Descrierea funcțională
Seria XC4000 realizează, prin tehnologia submicron avansată, o arhitectură performantă cu o viteză de lucru ridicată. Seria 4k permite frecvențe de funcționare externă 66MHz, iar structura internă poate funcționa chiar și la frecvența de 150 MHz.
Seria 4000 oferă realizarea unor structuri de dual-port RAM, inhibarea frecvenței de tact, transmisia carry rapidă la operațI aritmetice. Circuitele sunt flexibile în aplicațI, mai ales unde este nevoie de utilizarea unor circuite de memorI rapide.
Descrierea blocurilor componente
Structura internă programabilă de utilizator include două elemente majore:
Blocurile logice configurabile (Configurable Logic Blocks-CLBs) care furnizează elemente funcționale și realizează structura logică proiectată
Blocurile de intrare/ieșire (Input/Output Blocks-IOBs) care realizează interfața între semnalele interne și exteriorul circuitului.
Structura cuprinde încă alte trei elemente programabile:
Fiecărui CLB îi este asociat un 3-state buffer (TBUF) a cărui ieșire este conectată la linIle lungi asociate;
Decodificatoare rapide implementate pentru viteze ridicate;
Un oscilator intern cu frecvența de 8MHz;
Interconexiunile programabile furnizează resursele de conectare între elementele CLB, IOB.
I.3.2.1. Blocurile logice configurabile (CLB)
Blocurile logice configurabile implementează majoritatea funcțIlor logice proiectate. Elementele principale ale unui bloc configurabil sunt arătate în fig. 2.12. 2×4 intrări în generatoarele de funcțI (F și G) oferă o versatilitate practic nelimitată. Majoritatea funcțIlor logice combinaționale necesită mai puțin de 4 sau 8 intrări. Oricum un generator de funcție suplimentar (H) este implementat. Generatorul de funcțI H posedă trei intrări din care intrările 0, 1 sau toate pot forma alte funcțI logice cu semnale de ieșire împreună cu F’ și G’. Astfel blocul configurabil poate implementa funcțI logice cu 9 variabile de intrare, cum ar fi generatoarele de paritate, comparatoarele de identitate sau un set de două funcțI a câte patru intrări.
Un bloc configurabil CLB conține două elemente de stocare/registru (bistabili D), care se pot utiliza pentru stocarea rezultatelor date de generatoarele de funcțI. Dar elementele de registru sau generatoarele de funcțI se pot utiliza și independent. Intrările DIN, H1 sunt intrări directe de stocare. Ieșirile generatoarelor de funcțI se pot utiliza ca fInd independente de ieșirile elementelor de stocare. Această flexibilitate mărește resursele logice și simplifică implementarea proiectelor. Astfel 13 intrări și 4 ieșiri CLB asigură accesul la fiecare bloc configurabil. Acestor intrări-ieșiri legate la resursele programabile de interconectare vor realiza funcțI logice.
Generatoarele de funcțI
Pentru fiecare generator de funcțI sunt asigurate patru intrări independente (F1-F4 și G1-G4). Generatoarele de funcțI cu ieșirile F’ și G’, sunt capabile pentru implementarea oricărei funcțI logice Boole cu 4 variabile. Generatoarele sunt implementate ca tabele de memorI (Memory Look-Up Table). Astfel timpul de propagare este independent de funcția implementată. Al treilea generator de funcțI cu ieșirea H’, poate implementa orice funcție logică Boole cu 3 variabile. Două din aceste intrări împreună cu H1, ieșirile F’ și G’ formează o altă funcție logică. Alternativ, una sau ambele intrări (H2, H0) pot fi semnale externe blocului. Intrarea H1 trebuie să provină din exterior. Semnalele de ieșire ale generatoarelor de funcțI pot forma ieșirile CLB. Ieșirile F’ sau H’ sunt conectate la ieșirea X, iar G’ sau H’ sunt conectate la ieșirea Y.
Prin implementarea funcțIlor logice cu un număr mare de variabile într-un singur bloc se reduce numărul de blocuri necesare pentru realizarea proiectului. De asemenea se reduc și timpI de propagare, astfel că va crește capacitatea de implementare și viteza de lucru.
Versatilitatea generatoarelor de funcțI din blocul CLB mărește în mod semnificativ viteza de lucru.
Set/Reset global
Semnalul global Set/Reset asigură ștergerea bistabililor în momentul cuplărI la tensiune, pe durata reconfigurărI, sau când linia de Reset global este activată. Această linie de Reset global (GSR) nu interferează cu resursele de interconectare, ea este implementată într-o rețea separată. Fiecare bistabil este configurat în așa fel ca fie setarea locală SR sau globală GSR să seteze bistabilă. Astfel dacă un bistabil este setat de SR el va fi setat și de GSR. Semnalul GSR se poate conecta la orice pin programabil.
Avantajul utilizărI memorIlor RAM implementate în chip
MemorIle implementate în CLB sunt extrem de rapide. Timpul de citire memorie este asemănător timpului de întârziere a celulei CLB, iar timpul de înscriere memorie este cu puțin mai mare decât întârzierea celulei. Ambele timpuri de acces memorie sunt mult mai rapide decât în cazul implementărI în circuite reale de memorie. Cauza vitezei de răspuns rapidă este că implementarea interioară nu folosește porțile de intrare/ieșire ale circuitului.
Logica de propagare carry
Fiecare generator de funcțI din CLB (F și G) conține circuite aritmetice dedicate generărI rapide a bitului de transport (superior/inferior sau carry/borrow). Acest semnal de ieșire este conectat la blocul configurabil adiacent. Realizarea legăturI bitului de transport este independentă de resursele de conectare. Circuitul logic dedicat realizărI bitului de transport mărește performanțele circuitelor de adunare/scădere și numărătoare. Acest fapt orientează circuitele FPGA pentru aplicațI în care prelucrarea semnalelor necesită viteză mare de calcul cum ar fi de exemplu prelucrarea digitală a semnalelor.
I.3.2.2. Blocurile de intrare/ieșire (Input/Output Blocks-IOBs)
Blocurile configurabile de intrare/ieșire realizează interfața între mediul exterior și structura internă a circuitului FPGA. Fiecare IOB controlează un pin al circuitului integrat. Blocurile de intrare/ieșire se pot configura ca și port de intrare, port de ieșire sau port bidirecțional. Figura 2.13 arată structura simplificată a blocului IOB a circuitelor din seria XC4000E.
Semnalele de intrare din blocul IOB spre interiorul FPGA
Două semnale de intrare I1 și I2 furnizează semnalele de intrare spre interiorul circuitului FPGA. Aceste semnale sunt conectate în IOB la un bistabil al cărui tact de înscriere poate fi pe front sau pe nivel logic. Selectarea bistabilului dorit se face la introducerea schemei electrice prin selectarea simbolului corespunzător.
Blocurile IOB se pot configura astfel încât nivelele tensiunilor de intrare/ieșire să fie compatibile cu nivelele de tensiune TTL sau CMOS. Opțiunea se selectează la lansarea programului de generare a fișierului de configurare.
Intrări pe registru
Semnalele I1 și I2 se pot conecta la bistabilul de intrare al blocului IOB. Semnalul de inhibare al bistabililor din IOB poate fi configurat astfel încât să fie comun sau separat pentru cele două registre. Acest semnal de inhibare operează în mod asemănător ca și semnalul de inhibare EC al blocurilor configurabile CLB. Însă nu se poate inversa în interiorul IOB.
I.3.2.3. Interconexiunile programabile
Toate conexiunile interne sunt compuse din segmente de metal cu puncte de cuplare programabile și matrice de cuplare pentru realizarea legăturilor interne. Resursele de conectare sunt structurate în matrici ierarhice pentru a realiza implementarea legăturilor într-un mod eficient.
Există următoarele tipuri de interconexiuni:
Realizarea legăturilor între blocurile CLB este asociată rândurilor și coloanelor matricei CLB;
Realizarea legăturilor între blocurile IOB formează un cordon în jurul matricei CLB (cordonul mai este numit și VersaRing); acest cordon conectează pinI I/O cu blocurile logice interne;
Conexiunile globale sunt compuse din rețele dedicate, proiectate pentru distribuirea rapidă a semnalelor de comandă și control utilizate în proiect; aceste semnale au un timp de propagare minim și un slew rate minim; aceste rețele se pot utiliza mai ales pentru semnalele ce necesită un "fanout" mare.
Matricea de cuplare programabilă
LinIle de legătură verticale și orizontale se intersectează în așa numita matrice de cuplare programabilă (Programmable Swiching Matrix-PSM). Fiecare matrice este alcătuită din tranzistori de trecere utilizați pentru realizarea conexiunilor între linI (fig. 2.14).
De exemplu dacă o linie intră în matricea de cuplare în colțul din stânga-sus, atunci această linie poate fi cuplată în orice combinație cu o altă linie.
Având în vedere lungimea relativă a linIlor de interconectare se disting: linI de lungime simplă, linI de lungime dublă, linI de lungime quad-dublă, linI de lungime octală și linI lungi.
LinI de simplă lungime. Acestea permit interconectarea rapidă a blocurilor adiacente. Fiecărui bloc îi sunt asociate 8 linI verticale și 8 linI orizontale de simplă lungime. Aceste linI sunt conectate în matricele programabile situate la intersecțIle fiecărei linI și coloane.
Conectarea linIlor de simplă lungime la matricele programabile este arătată în figura 2.16, iar realizarea conexiunilor este arătată în fig 2.15.
LinIle de simplă lungime introduc întârzieri în propagarea semnalelor ori de câte ori intră într-o matrice programabilă. Din această cauză nu sunt utilizabile pentru realizarea legăturilor la “distanță”. Ele sunt utilizate în mod normal pentru a ghida semnalele într-o arie restrânsă.
LinIle de dublă lungime. Acestea realizează o grilă din segmente de metal. Fiecare linie are lungimea dublă în comparație cu linIle simple. LinIle duble sunt grupate în perechi și intră în fiecare a doua matrice (fig. 2.16.).
Fiecărui bloc CLB I se asociază 4 linI verticale și 4 orizontale, pentru realizarea conexiunilor. Realizarea conexiunilor este arătată în fig.2.15.
LinIle lungi. Asemănător cu cele de dublă lungime formează o grilă de metal ce acoperă toată aria circuitului. Aceste linI cu un fan-out ridicat, și timpi de propagare minimi, pot conduce semnalele critice.
La cele 2 linI orizontale fiecare CLB se poate conecta prin intermediul buffer-elor three-state. Astfel, aceste linI pot implementa bus-uri uni- sau bi-direcționale, sau funcțI cablate.
Resurse de conectare a intrărilor/ieșirilor I/O
Seria XC4000 posedă resurse adiționale pentru conectarea blocurilor IOB. Un cordon de legături realizat în jurul blocurilor CLB, numit, numit VarsaRing facilitează conectarea pinilor și realizarea conexiunilor interne fără a consuma resursele de conectare pentru implementarea proiectului. Cordonul VersaRing conține 8 linI de dublă lungime și 4 linI lungi. Decodificatoarele rapide se pot conecta direct la cordonul de legătură.
LinI globale și buffere
SerIle XC4000E și XC4000EX conțin rețele globale de conectare. Aceste rețele sunt destinate conectărI semnalelor de ceas, sau a altor semnale cu un fan-out ridicat. Conectarea la aceste rețele se face prin intermediul buffer-elor. Aceste buffere cu un fan-out ridicat se numesc BUFG și poziția lor în interiorul circuitului este aleasă de programul de implementare, pentru a asigura o propagare optimă a semnalului.
ArIle de Porți programabile de către utilizator, pentru o singură aplicație, asigură densități mai mari decât FPGA-urile reprogramabile, apropIndu-se, din acest punct de vedere, de arIle de porți realizate manual. Ele necesită o suprafață mai mare decât arIle de porți, datorită facilitățI de programare, pe care o conține. Aceste proiecte încorporează adesea elemente EPROM, pentru stocarea programelor.
Alternativ, legăturile fuzibile (sau adesea anti-fuzibile) sunt utilizate pentru configurare permanentă. Întrucât fuzibilele sau anti-fuzibilele sunt permanente, se poate evita cea mai mare parte a suportului necesar amplasărI traseelor, pentru FPGA-urile reprogramabile. Aceste elemente sunt, de asemenea, destul de mici și fiabile. Atunci când se aplică o tensiune mai mare, de exemplu 4 VDD, la legăturile fuzibile, acestea fie deconectează, fie conectează (în cazul anti-fuzibile) cele două straturi ale lor. Întrucât aceste componente pot fi făcute nevolatile și destul de dense, ele prezintă un interes deosebit pentru aplicațIle industriale.
Field Programmable Gate Arrays (FPGA-urile) și Complex Programmable Logic Devices (CPLD-urile) pot fi utilizate aproape în orice sistem digital. Ele au fost și sunt folosite într-o mare varietate de aplicațI cu echipamente periferice, pornind de la sisteme de ghidare pentru rachete până la sintetizoare de instrumente muzicale. Ele conferă avantajul unei integrări de nivel înalt, evitând riscurile și costurile de construire. Spre deosebire de programarea cu măști a porților, programarea logică conferă următoarele avantaje:
Proiectare și testare rapidă. FPGA-urile pot fi proiectate și testate rapid în timp ce lucrând cu porți logice același proces ne poate lua câteva săptămâni. Nu există costuri inginerești care să se repete, vectori de testare de generat și nici întârziere în manufacturarea prototipelor dorite.
Schimbări în proiectare fără penalizări. Deoarece dispozitivele sunt configurate software și programate de utilizator, modificările sunt mult mai puțin riscante și pot fi realizate oricând – într-un timp care poate fi de ordinul minutelor sau orelor în comparație cu timpul alocat schimburilor pentru porțile logice care poate ajunge de ordinul săptămânilor.
Ușor de procurat de pe piața de specialitate. Deoarece multe componente sunt disponibile în pachete cu caracteristici comune, proiectarea poate fi ușor deplasată de la dispozitive de mare densitate la altele de mică densitate, sau chiar de la o familie de produse la alta, fără a fi necesare schimburi pe placa de bază a circuitului. Ideile de proiectare, concretizate într-un fișier text sau schematic sunt convertite într-un fișier de date de configurare pentru dispozitivul FPGA sau CPLD utilizând o dezvoltare software treptată.
I.4. Furnizori importanți
La alegerea unui anumit produs trebuie avuți în vedere următorI factori esențiali:
densitatea, adică numărul de porți (sau de macrocelule) al dispozitivului (numărul de macrocelule trebuie să fie cel puțin egal cu numărul de bistabile pe care le solicită schema);
numărul pinilor de intrare/ieșire;
cerințele legate de viteză (frecvența maximă la care poate lucra un dispozitiv și timpul de propagare a semnalelor – tpd, exprimat în ns);
cerințele legate de puterea consumată.
În fig.2.18 se prezintă piața actuală a circuitelor programabile.
Se vor prezenta unele trăsături caracteristice celor două mari familI de circuite programabile. În fig. 2.19 se face o comparație între aceste două tipuri:
De asemeni există diferențe și între timpI de întârziere datorați tranzițIlor semnalelor prin porțile circuitelor programabile, iar în fig.2.20 este exemplificat de ce sunt diferențe.
CPLD sunt recunoscute pentru performanțele lor “in-system”, care rezultă direct din faptul că structura lor de conexiuni este continuă și semnalele au un traseu eficient. Întârzierile CPLD-urilor nu sunt cumulative; întârzierea semnalului este independentă de calea pe care acesta o urmează. Semnalele care trebuie să ajungă într-un anumit loc de pe circuit sosesc cu întârziere neglijabilă. În contrast cu acestea întârzierile circuitelor FPGA sunt cumulative, cu cât va crește numărul de segmente interconectate cu atât va crește și întârzierea globală. Deci nu se poate garanta că două semnale ajung în același moment într-un anumit loc. Performanțele circuitelor sunt verificate de Programmable Electronics Performance Corporation (PREP), care reprezintă o grupare de companI producătoare de CLP. În figura următoare se prezintă cotele medI de viteză stabilite de această comisie pentru circuitele unor firme diferite, dar care au același număr de porți.
Se vor prezenta in continuare câteva oferte de arI logice programabile de la unele firme producătoare de asemenea circuite.
I.5. Descrierea clasei de circuite MAX
I.5.1. Descriere generală
Familia de circuite MAX7000 (Multiple Array Matrix) este o familie de circuite PLD de înaltă performanță care se bazează pe a doua generație de circuite cu arhitectură MAX realizate de firma ALTERA. Fabricate pe baza avansatei tehnologI CMOS, aceste circuite oferă posibilitatea a 600 până la 5.000 de porți utilizabile, la frecvențe de până la 175.4 MHz.
Arhitectura MAX7000 suportă 100% semnale TTL și o înaltă integrare a funcțIlor logice SSI, MSI și LSI. Aceste circuite sunt disponibile sub diferite feluri de ambalaje:
pachet PLCC (Plastic Chip Carrier Package – capsulă de plastic);
pachet PGA (Pin Grid Array – tip de capsulă cu peste 100 de pini, dispuși perpendicular pe suprafața circuitului, pe mai multe rânduri);
pachet PQFP ( Plastic Quad Flat Package – Capsulă de plastic plată);
pachet RQFP
pachet TQFP
Circuitele MAX folosesc celule EEPROM CMOS pentru a implementa funcțIle logice. Arhitectura configurabilă de către utilizator a acestor circuite poate suporta o varietate mare de funcțI combinaționale și secvențiale. Circuitele pot fi reprogramate repede și eficient de-a lungul duratei de funcționare și de depanare. Pot fi șterse de peste 100 de ori.
CPLD-urile de tip MAX7000 conțin de la 32 la 256 macrocelule care sunt combinate în grupuri de câte 16 macrocelule, obținându-se astfel LABs (Logic Array Blocks). Fiecare macrocelulă are o arie de porți ȘI programabile și o arie de porți SAU fixe și un registru configurabil independent prin intermediul unor semnale clock, clock enable, clear și preset.
Această serie de circuite permite programarea caracteristicilor de viteză și de putere. Porțiunile de viteză critică dintr-un proiect pot rula cu viteză și putere maximă, în timp ce porțiunile rămase rulează la viteză și putere redusă. Acest tip de proiectare permite proiectanților să configureze una sau mai multe macrocelule să ruleze la putere de până la 50%, adăugând doar o întârziere nominală. De asemeni aceste circuite pot lucra la tensiuni de 3.3V, 5.0V sau chiar în mod mixt.
I.5.2. Descriere funcțională
Circuitele MAX7000 sunt alcătuite din următoarele elemente:
arie de blocuri logice LABs (Logic Array Blocks);
macrocelule;
spațiu de termeni produs;
arie de conexiuni programabile;
blocuri de control intrare/ieșire.
Structura circuitelor MAX conține 4 pini de intrare dedicați pentru fiecare macrocelulă și bloc de intrare/ieșire. Acești pini pot fi utilizați ca intrări cu scop general, semnale globale de control (tact, clear, două semnale de validare a ieșirilor).
Arhitectura MAX se bazează pe combinația optimă între performanță și flexibilitate a modulelor de arI logice numite LABs (Logic Array Blocks). LABs sunt alcătuite dintr-o arie de 16 macrocelule după cum se arată în figura 2.24.. Mai multe LABs sunt intercalate printr-o arie de conexiuni programabile PIA (Programmable Interconnect Array), o magistrală globală care este comandată de intrările dedicate, de pinI I/O și de macrocelule.
Fiecare LAB primește următoarele semnale:
36 de semnale de la PIA care sunt utilizate pentru intrările logice generale;
semnale de control globale care sunt folosite pentru regiștrI de funcțI secundari;
intrări directe de la pinI I/O către regiștrI care sunt folosiți pentru setarea rapidă a circuitelor MAX.
I.5.2.2. Macrocelula
Macrocelula circuitului MAX poate fi configurată individual de către altă operație combinațională sau secvențială. Aceasta, (fig.2.25) este alcătuită din trei blocuri funcționale: aria logică (logic array), matricea de selectare a termenilor produs și regiștrI programabili.
Logica combinațională este implementată în aria logică, care furnizează cinci termeni produs pentru fiecare macrocelulă. Matricea de selectare a termenilor produs atribuie acești termeni pentru a obține funcțI logice primitive (porți OR și XOR), sau ca intrări secundare ale regiștrilor de clear, preset, clock și clock enable ale macrocelulei. Două tipuri de termeni produs de expandare sunt disponibile pentru a suplimenta resursele macrocelulei: un tip de termeni produs revine înapoi în macrocelulă și reprezintă produsul inversat, iar alt tip este termenul produs al macrocelulelor vecine.
Pentru funcțIle secvențiale, fiecare registru al macrocelulei poate fi programat individual pentru a implementa bistabili de tipul D, T, JK sau SR cu un tact programabil. RegiștrI pot fi ocoliți pentru operațI combinaționale. Pe durata proiectărI se specifică tipul de registru dorit, iar software-ul ALTERA va selecta cea mai eficientă operație pentru fiecare funcție optimizând astfel resursele de utilizare.
Fiecare registru programabil poate primi semnal de tact în trei moduri diferite:
printr-un semnal de tact global, acest mod asigură cea mai bună performanță din punct de vedere a vitezei;
printr-un semnal de tact autorizat de un semnal de clock-enable;
printr-un semnal de tact implementat cu ajutorul unui termen produs, în acest mod regiștrI pot primi semnal de clock de la macrocelulele învecinate sau de la pinI I/O.
La seria de circuite MAX7000S, sunt disponibile două semnale de tact global. După cum se vede în fig.2.24. aceste semnale pot fi complementul sau semnalul însăși provenit de la alt pin de tact global, GLK1 sau GLK2.
Fiecare registru suportă de asemeni funcțI de preset și clear asincron. După cum se vede în fig.2.25 matricea termenilor produs alocă acești termeni pentru a controla aceste operațI.
Toți pinI I/O au o intrare rapidă către regiștrI macrocelulelor. Această cale dedicată permite semnalului să treacă prin PIA și prin logica combinațională, ajungând la intrarea unui registru de tip D cu o viteză remarcabilă (2.5ns).
I.5.2.3. TermenI produs expandați
Deși majoritatea funcțIlor pot fi implementate cu cei 5 termeni produs disponibili în fiecare macrocelulă, cele mai complexe funcțI logice necesită termeni produs adiționali. Altă macrocelulă poate fi folosită pentru a furniza resursele logice necesare. Acest lucru este posibil întrucât circuitele MAX permit un termen produs adițional direct către altă macrocelulă aparținând aceluiași LAB. Aceste expandări asigură că rezultatul dorit se va obține cât mai rapid, utilizând minimul de resurse necesar.
I.5.2.4. Aria de conexiuni programabile
(Programable Interconnect Array – PIA)
Semnalul logic este trecut de la un LAB la un altul prin intermediul PIA. Această magistrală globală este o cale programabilă care conectează orice semnal sursă către orice destinație din circuit. Toate intrările generale, pinI I/O și semnalele de ieșire din macrocelule ajung în PIA, ceea ce le face disponibile pentru întregul circuit. Numai semnalele cerute de către fiecare LAB trec realmente prin PIA înspre acel LAB. Figura 2.26 arată cum sunt trecute semnalele prin PIA către LAB. O celulă EEPROM controlează o intrare către o poartă ȘI, care va selecta semnalul din PIA care va ajunge la LAB.
În timp ce întârzierile de trecere a semnalelor prin FPGA-uri sau alte tipuri de circuite digitale sunt cumulative, variabile și dependente de calea aleasă, aria de conexiuni programabile a circuitelor MAX7000 are o întârziere fixă. PIA elimină în acest mod întârzierile dintre semnale și face ca performanțele de timp să fie foarte ușor determinate.
I.5.2.5. Blocurile de control I/O (I/O Control Blocks)
Blocurile de control I/O permit fiecărui pin I/O să poată fi configurat separat pentru operațI de intrare, ieșire sau bidirecționale. Toți pinI I/O au un buffer tri-state care este controlat separat de către unul din semnalele globale de validare a ieșirI sau este conectat direct la GND sau Vcc. Figura 2.27 arată blocurile de control a intrărilor/ieșirilor în cazul familIlor de circuite MAX7000. Aceste blocuri de control au 6 semnale globale de validare a ieșirilor care pot fi comandate de valoarea adevărată sau negată a două semnale de validare, de un subset de pini I/O sau de un subset de macrocelule.
Atunci când buffer-ul tri-state este conectat la GND, ieșirea este tri-state (înaltă impedanță), iar pinul I/O poate fi utilizat ca intrare dedicată. În cazul în care buffer-ul tri-state este conectat la Vcc, ieșirea este validată.
Arhitectura internă a acestui tip de circuite oferă o dublă reacție-inversă a intrărilor/ieșirilor, adică macrocelulele și pinI I/O au reacțI inverse independente. Acest lucru oferă posibilitatea ca atunci când un pin este selectat ca intrare, macrocelula asociată poate fi utilizată pentru o altă funcție logică.
I.5.2.6. Programarea circuitului In-System ISP
(In-System programmability)
ISP simplifică procesul de realizare a unui produs finit întrucât permite circuitelor CPLD să fie montate pe echipamentul destinat înainte de a fi programate. Circuitele MAX7000 pot fi “scrise” prin încărcarea informațIlor cu ajutorul ICT (In-Circuit Testers), procesoarelor implementate, sau cu ajutorul cablurilor de programare ale firmei Altera. Programarea circuitelor după ce acestea au fost așezate pe plăcile destinate reduce riscul de distrugere a acelor circuite cu număr mare de pini și în același timp permit reconfigurarea circuitului după ce un sistem a ajuns deja în câmpul de lucru.
I.5.2.7. Controlul programărI vitezei și puterI consumate
Seria MAX7000 oferă un mod de funcționare cu putere redusă care suportă operațI de putere scăzută pe o arie prezisă de utilizator sau pe întreaga suprafață. Această caracteristică permite ca puterea disipată totală să scadă până la 50% sau mai mult, deoarece majoritatea aplicațIlor cer numai o mică parte din numărul de porți pentru a funcționa la frecvență maximă.
Proiectantul poate programa fiecare macrocelulă să funcționeze la o viteză mărită (opțiunea Turbo Bit pornită), sau putere scăzută (opțiunea Turbo Bit oprită). Ca rezultat, căile de viteză critică din proiect pot lucra la viteză mare, în timp ce restul porților să lucreze la putere scăzută.
I.5.2.8. Interfața I/O multivolt (MultiVolt I/O Interface)
Seria MAX7000 suportă interfața multivolt, care permite circuitelor să fie conectate cu sisteme care au tensiuni de alimentare diferite. Circuitele 5.0V pot fi programate pentru 3.3V sau 5.0V la pinI I/O. Acestea pot fi setate pentru o anumită tensiune a operațIlor și buffer-elor interne (VCCINT) și o altă tensiune pentru pinI intrare/ieșire (VCCIO). Pinul VCCINT trebuie să fie în permanență conectat la o sursă de 5.0V. Dacă tensiunea la pinul VCCINT este de 5.0V atunci tensiunile semnalelor de intrare sunt de nivel TTL, fInd compatibile cu tensiunile de intrare de 3.3V și 5.0V. Pinul VCCIO poate fi conectat la oricare din tensiunile de 3.3V sau 5.0V funcție de cerințele semnalelor de ieșire. Când acest pin este conectat la 5.0V ieșirile sunt compatibile cu sistemele care funcționează la 5.0V. Dacă acest pin este conectat la 3.3V semnalul de ieșire “1” logic va avea tensiunea de 3.3V și este compatibil cu ambele sisteme digitale. Circuitele care lucrează cu nivelul semnalului la pinul VCCIO mai mici decât 4.75V au o întârziere mai pronunțată, fInd dată ca parametru de catalog.
I.5.2.9. Securizarea proiectului
Toate circuitele MAX7000 conțin un bit de securitate programabil care controlează accesul către datele scrise în circuit. Când acest bit este selectat, un proiect implementat pe circuitul respectiv nu poate fi copiat sau recuperat. Această caracteristică oferă un înalt nivel de securitate al proiectului deoarece programarea datelor cu celulele EEPROM este invizibilă. Bitul de securitate este șters ca toate celelalte date de programare în momentul în care circuitul este reconfigurat.
Deoarece acest circuit este configurat cu memorie EEPROM, atunci când tensiunea de alimentare este întreruptă nu se pierd datele înscrise.
I.6. Descrierea clasei de circuite FLEX
I.6.1. Descrierea generală
Familia de circuite Flex10k ale firmei Altera sunt primele circuite PLD care au fost încadrate în domeniul industrial. Bazându-se pe reconfigurarea cu elemente CMOS SRAM, arhitectura FLEX (Flexible Logic Element MatriX) încorporează toate caracteristicile necesare implementărI unei game foarte largi de megafuncțI cu porți logice. Deoarece numărul de porți logice se ridică la 250.000 circuitele Flex10k au capacitatea, viteza și trăsăturile necesare integrărI unor sisteme întregi – chiar și multiple magistrale de 32 de biți – într-un singur chip. FInd reconfigurabile, aceste circuite oferă posibilitatea testărI de zeci de ori înainte de finalizare. De aceea proiectantul nu este silit să genereze vectori de test pentru a evita greșelile iminente. Pentru proiectare nu este necesară nici o tehnică specială, aceasta fInd posibilă prin simpla interconectare a mai multor funcțI în limbajele de programare sau într-un editor de scheme grafice. Printre limbajele de programare a acestor circuite se numără: Verilog HDL, VHDL (VHSIC HDL-Very High Speed Integrated Circuit Hardware Description Language) și AHDL (Altera Hardware Description Language).
Arhitectura circuitelor Flex10k este asemănătoare cu cea a arIlor de circuite logice încorporate, cel mai dezvoltat segment al arIlor de porți de pe piața actuală. Ca și arIle logice standard, arIle încorporate implementează funcțI logice generale într-o “sea-of-gates” (“mare” de porți). Deci, arIle încorporate au o suprafață nefolosibilă în cazul realizărI unor funcțI mai mari, specializate. Prin introducerea acestor funcțI în siliciu se reduce considerabil suprafața nefolosibilă și crește în același timp viteza în comparație cu arIle de porți standard. În orice caz arIle încorporate nu pot fi individualizate limitând opțiunile proiectantului. În contrast cu acestea, circuitele Flex10k sunt programabile, acordând proiectantului posibilitatea de control în totalitate a megafuncțIlor încorporate și a logicei generale.
Fiecare Flex10k conține o arie încorporată și o arie logică. Aria încorporată este folosită pentru a se implementa o varietate de funcțI din memorie sau funcțI logice complexe cum ar fi DSP (Digital Signal Processing), microcontrolere, manipularea unor date foarte mari și realizarea unor funcțI de transformare a semnalelor. ArIle logice îndeplinesc aceleași funcțI ca și “mările de porți” din arIle de porți, fInd folosite pentru a implementa funcțI logice generale cum ar fi numărătoare, sumatoare, multiplexoare etc. Combinarea acestor două tipuri de arI acordă o înaltă performanță și densitate a arIlor logice încorporate, făcând posibilă implementarea unui întreg sistem pe un singur circuit.
Circuitele Flex10k sunt configurate în timp ce sunt alimentate cu tensiune iar datele sunt păstrate într-un circuit de configurare serial Altera sau furnizate de un controler de sistem. Altera oferă următoarele circuite de configurare: EPC1, EPC2, EPC16 și EPC1441. Datele de configurare pot fi de asemenea încărcate dintr-un RAM sau prin intermediul cablurilor de încărcare BitBlaster TM serial sau ByteBlasterMV TM paralel. După ce un circuit a fost configurat, reconfigurarea se poate face în timpul funcționărI resetând circuitul și încărcând noile date. Deoarece reconfigurarea cere mai puțin de 320 ms, schimbările în timp real pot fi făcute în timp ce sistemul este operațional.
Circuitele Flex10k au o interfață optimizată care permite ca acestea să poată fi configurate de către microprocesoare în mod serial sau paralel, sincron sau asincron. Această interfață permite microprocesoarelor să trateze dispozitivul Flex ca o memorie, scrInd datele pe o memorie virtuală, fInd foarte ușor pentru proiectant să reconfigureze circuitul.
I.6.2. Descrierea funcțională
Fiecare circuit Flex10k conține o arie încorporată pentru implementarea memoriei și funcțIlor logice specializate, și o arie logică pentru a implementa funcțIle logice generale. Aria încorporată este alcătuită dintr-o serie de EABs (Embedded Array Block). Atunci când se implementează funcțI de memorie fiecare EAB conține 2048 biți care pot fi folosiți pentru a crea memorI de tip RAM (Random Access Memory), ROM (Read Only Memory), dual-port RAM sau FIFO (First-In First-Out). În cazul în care se implementează funcțI logice, fiecare EAB poate contribui cu 100-600 porți logice pentru a se obține funcțI logice complexe, cum ar fi multiplicatoare, microcontrolere, stări-mașină și DSP. Blocurile EAB pot fi utilizate independent sau mai multe blocuri pot fi combinate pentru a se obține funcțI complexe.
Aria logică este constituită din blocuri de arI logice (LABs). Fiecare LAB conține 8 elemente logice (LEs) și interconexiuni locale. Un LE este alcătuit din 4 LUT (Look-Up Table), un bistabil programabil și căi de semnale dedicate pentru funcțI în cascadă și carry. Cele 8 LE pot fi folosite pentru a crea blocuri de mărime medie (numărătoare pe 8 biți, decodificatoare de adresă sau stări-mașină) sau combinate în interiorul unui LAB pentru a crea funcțI logice mai complexe. Fiecare LAB reprezintă 96 de porți logice utilizabile.
Interconexiunile de semnal în interiorul Flex10k sunt comandate de către FTI (Fast Track Interconnect), o serie de coloane și linI rapide și continue care rulează pe toată lungimea și lățimea circuitului.
Fiecare pin I/O este alimentat de către un element intrare/ieșire (IOE), care se află la sfârșitul fiecărei linI și coloane a pistei de conexiuni rapide. Fiecare IOE conține un buffer I/O bidirecțional și un bistabil care pot fi utilizați ca intrări, ieșiri sau elemente bidirecționale. În cazul în care este folosit semnalul de tact general performanțele acestor regiștri sunt excepționale. Ca intrări, permit timpi de setare mai mici decât 1.6ns și timpi de păstrare nuli, ca ieșiri furnizează tact de ieșire mai mic decât 5.3 ns. Elementele I/O au o varietate de caracteristici, cum ar fi JTAG BST (Built-In Joint Test Action Group Boundary-Scan Test), control slew-rate și buffere tri-state.
Diagrama bloc a circuitului Flex10k este prezentată în figura 2.28. Fiecare grup de elemente logice (LE) este combinat în interiorul unui LAB; LAB-urile sunt poziționate pe linI și coloane. Fiecare linie conține un singur EAB. Pista de interconexiuni rapide (FTI) conectează LAB-urile și EAB-urile între ele. Elementele I/O (IOE) sunt amplasate la sfârșitul fiecărei linI și coloane a FTI.
Circuitele Flex10k prezintă șase intrări dedicate care comandă bistabilI pentru a asigura o distribuție eficientă a semnalelor de control al vitezei și al slew-rate-ului (mai mic de 1.5 ns). Aceste semnale folosesc trasee separate ce îngăduie întârzieri mai scurte decât cele generate de FTI. Patru din cele șase intrări dedicate constituie semnale generale, care pot fi de asemenea comandate de logica internă, ceea ce constituie o soluție ideală pentru divizoarele de frecvență sau pentru generatoarele de clear asincron.
I.6.2.1. Blocurile de arI încorporate EAB (Embedded Array Block)
EAB este un circuit RAM flexibil cu regiștri de intrare și ieșire și este folosit pentru implementarea megafuncțIlor de arI de porți obișnuite. EAB este de asemenea potrivit pentru funcțI ca înmulțire și circuite de corectare a erorilor deoarece este vast și flexibil. Aceste funcțI pot fi combinate în aplicațI precum filtrele digitale și microcontrolerele.
FuncțIle logice sunt implementate prin programarea EAB-urilor cu o structură read-only în timpul configurărI, obținându-se vaste tabele Look-Up (LUT). Această implementare a funcțIlor combinaționale poate fi mai rapidă decât utilizarea algoritmilor logici generali. Capacitatea mărită a EAB-urilor permite proiectantului să implementeze funcțI complexe la un singur nivel logic fără întârzierile provocate de LE sau de FPGA. De exemplu un singur EAB poate implementa un multiplicator 4×4 cu 8 intrări și 8 ieșiri.
Blocurile EA sunt mai avantajoase decât FPGA-urile care implementează funcțIle pe circuite RAM mici și distribuite. Aceste memorI RAM ale FPGA conțin întârzieri cu atât mai puțin previzibile cu cât mărimea RAM-ului crește.
EAB poate fi utilizat pentru a implementa RAM sincron care este mai facil de utilizat decât RAM-ul asincron. Un circuit care folosește RAM asincron trebuie să genereze un semnal propriu de validare a scrierI (WE). Contrar acestui lucru RAM-ul sincron al circuitelor EAB generează propriul său semnal WE respectând semnalul de clock global.
Blocuri RAM mai vaste se obțin prin combinarea mai multor EAB. De exemplu (fig. 2.29) două circuite RAM 256×8 pot fi combinate pentru a se obține un RAM 256×16, două 512×4 RAM pot fi combinate pentru a obține un circuit RAM 512×8.
Dacă este necesar, toate blocurile EA dintr-un circuit pot fi combinate pentru a obține un singur RAM. Softul de programare Altera combină automat EAB-urile pentru a se încadra în specificațIle proiectantului. EAB permit opțiuni flexibile pentru controlul și transportul semnalelor de tact. Pentru intrările și ieșirile circuitelor EAB pot fi folosite diferite semnale de clock. Semnalele globale, pinI de tact dedicați și interconexiunile locale pot comanda semnalele de clock ale EAB. Deoarece interconexiunile locale ale EAB sunt comandate de LE, acesta poate controla semnalul WE sau semnalul de clock.
Fiecare EAB este alimentat de conexiunile unei linI și poate comanda contactele unei linI sau coloane (fig.2.30).
BistabilI programabili din LE pot fi configurați ca regiștri de tip D, T, JK sau SR. Tactul, clear-ul, set-reset-ul bistabililor poate fi un semnal global, un semnal de la pinI
I/O sau orice semnal logic intern. Pentru funcțI combinaționale, bistabilI sunt înconjurați și ieșirile din LUT comandă ieșirile din LE.
LE are două ieșiri, una comandă conexiunile locale iar cealaltă comandă oricare din linIle sau coloanele FTI. Cele două ieșiri pot fi controlate independent. De exemplu LUT poate comanda o ieșire în timp ce un registru comandă cealaltă ieșire. Arhitectura Flex10k permite două tipuri de căi dedicate de mare viteză care conectează elemente logice învecinate fără a folosi căile de conexiuni locale: carry și cascadă. Lanțul carry suportă viteza mărită a numărătoarelor și sumatoarelor, lanțul cascadă suportă date de intrare mari cu întârzieri minime. Lanțurile carry și cascadă conectează toate LE-urile dintr-un LAB și toate LAB-urile pe aceeași linie. Utilizarea intensivă a acestor două semnale poate reduce flexibilitatea legăturilor. De aceea aceste două semnale se utilizează în cazul vitezelor critice într-un proiect.
I.6.2.2. Modurile de operare ale LE
Elementele logice ale familiei de circuite Flex10k pot lucra în următoarele patru moduri (fig.2.31):
mod normal;
mod aritmetic;
mod de numărător up/down;
mod de numărător cu clear.
Fiecare din aceste moduri utilizează resursele LE în mod diferit. În fiecare mod de lucru sunt 7 intrări valabile pentru LE: 4 intrări de date de la conexiunile locale ale LAB, reacția de la registrul programabil și semnalele de carry și cascadă de la elementul logic anterior. Aceste semnale sunt direcționate către diferite puncte pentru a selecta modul de lucru dorit. Software-ul Altera, în conformitate cu parametrI doriți, alege automat modul de lucru corespunzător funcțIlor de numărare, adunare și înmulțire.
I.6.2.3. Pista de interconexiuni FTI (FastTrack Interconnect)
În familia de circuite Flex10k conexiunile între LE și pinI I/O sunt efectuate de către FTI care reprezintă o serie de canale de legătură orizontale și verticale ce traversează chipul. Aceste structuri de legături globale permit performanțe previzibile chiar în interiorul proiectelor complexe.
Fiecare linie de LAB este deservită de către o serie de interconexiuni specifice. Linia de interconexiuni poate comanda pinI I/O și alte blocuri logice din chip. Coloanele de interconexiuni configurează semnalele între linI și pot comanda pinI I/O. Un canal liniar poate fi comandat de către un element logic sau de către una din cele trei canale verticale. Fiecare coloană de LAB-uri este deservită de către o coloană de conexiuni dedicate. Accesul la canalele de linI și coloane poate fi schimbat între elementele logice ale unor LAB-uri vecine. Această flexibilitate de conectare face ca resursele de conexiuni să fie utilizate mai eficient (fig.2.32).
I.6.2.4. Elementul Intrare/Ieșire
Un element intrare/ieșire IOE (Input/Output Element) conține un buffer I/O bidirecțional și un registru care poate fi folosit ca registru de intrare pentru datele externe care necesită viteză mărită sau ca registru de ieșire pentru datele care cer un tact de ieșire performant din punct de vedere al vitezei.
În unele cazuri folosirea unui registru LE pentru intrare va avea rezultate mai rapide decât utilizarea unui registru IOE. Elementele I/O pot fi folosite ca intrări, ieșiri sau pini bidirecționali. Fig.2.33 arată regiștrI bidirecționali I/O.
I.6.2.5. Configurarea circuitului
Circuitele Flex10k folosesc elemente de configurare SRAM care impun ca datele de programare să fie încărcate de fiecare dată când este pornit circuitul. Înaintea configurărI, la începutul alimentărI cu tensiune circuitul inițiază un reset POR (Power-On Reset). Acest POR șterge circuitul și îl pregătește pentru configurare. Timpul necesar pentru acest proces nu depășește 50 s. Pe durata inițializărI, care urmează imediat după configurare, are loc resetarea regiștrilor, validarea pinilor de intrare/ieșire și chipul începe să lucreze ca un circuit logic.
I.7. Software de programare a CPLD. MAX+PLUS I
I.7.1. Imagine de ansamblu
Programul MAX+PLUS I (Multiple Array MatriX Programmable Logic System) produs de firma Altera constituie un program multi-nivel de proiectare a CPLD care se adaptează ușor cerințelor utilizatorului. MAX+PLUS I oferă posibilitatea introducerI ușoare a datelor de proiectare, procesare rapidă și o finalizare eficientă a proiectului prin implementarea acestuia pe dispozitivul aferent. MAX+PLUS I, după cum se prezintă în figura 2.34 este un program pentru proiectarea cu circuite de tip MAX5000, MAX 7000, MAX 9000, FLEX 6000, FLEX 8000 și FLEX 10k.
MAX+PLUS I oferă un spectru întreg de capacități de proiectare digitală: o varietate de metode de intrare pentru proiectele ierarhizate, sinteză logică puternică, repartiție, simulare de funcționare și de timp, simularea mai multor circuite unite, analiză de timp, localizarea automată a erorilor, programarea și verificarea circuitelor. MAX+PLUS I citește și scrie programe în format AHDL (Altera Hardware Description Language), Verilog HDL, VHDL, fișiere standard de conexiuni EDIF (Electronic Design Interchange Format) și scheme grafice editate în OrCAD (Computer Aided Design). În plus, recunoaște fișiere Xilinx și scrie fișiere SDF (Standard Delay Format) pentru o interfațare sigură cu alte software-uri standardizate CAE (Computer Aided Engineering).
MAX+PLUS I are o interfață grafică cu utilizatorul bogată, fInd completată cu un sistem de help on-line ilustrat și ușor de utilizat. MAX+PLUS I, versiunea completă include 11 aplicațI care au rostul de a furniza și culege informațI despre toate etapele proiectărI.(fig.2.35).
În MAX+PLUS I se pot combina diferite tipuri de fișiere în cadrul unui proiect, alegându-se astfel metoda de modelare optimă pentru fiecare bloc funcțional în parte. O librărie vastă de macrofuncțI și megafuncțI incluzându-se și funcțIle LPM (Library of Parameterized Modules), oferă posibilitatea unui spectru mare de funcțI de intrare.
Se poate lucra cu mai multe aplicațI MAX+PLUS I în același timp. De exemplu, se pot deschide mai multe fișiere de modelare pentru a transfera datele între acestea în timp ce un proiect este compilat.
I.7.2. Modelarea datelor de intrare în vederea proiectărI
Toate accesorIle necesare modelărI unui proiect digital sunt ușor accesibile în cadrul programului MAX+PLUS I. Totodată, proiectarea este accelerată prin intermediul funcțIlor primitive, macrofuncțIlor, megafuncțIlor, funcțIlor LPM și vechile funcțI din seria 74-. Prevede de asemenea caracteristici de bază și avansate pentru editare, ceea ce fac intrările logice și depanarea mai facile.
MAX+PLUS I permite trei aplicațI de editare-modelare: text, grafic și formă de undă. Suportă o varietate de tipuri de intrare-modelare:
Schemele sunt introduse cu MAX+PLUS I Graphic Editor. Acesta poate de asemenea deschide, modifica și salva scheme create în OrCAD;
Programele în format AHDL, VHDL și Verilog HDL sunt introduse cu MAX+PLUS I Text Editor sau orice editor standard de text
Formele de undă sunt introduse cu MAX+PLUS I Waveform Editor
Fișierele EDIF și Xilinx pot de asemenea introduse în mediul MAX+PLUS I
Fișierele create cu programele A+PLUS și SAM+PLUS (tot ale firmei Altera) pot fi încadrate cu ușurință în MAX+PLUS I
Atribuirea unui pin sau nod din proiectul actual poate fi făcută într-un mediu grafic cu Floorplan Editor. Acesta salvează aceste atribuiri într-un fișier *.acf (Assignement & Configuration File), unde se află toate tipurile de resurse, probe și setările cipului, precum și configurațIle alese pentru Compiler, Simulator și Timing Analyzer.
Simbolurile grafice care pot reprezenta orice tip de fișier de proiectare pot fi generate automat în cadrul oricărui editor de modelare.
În proiectele ierarhice se pot mixa ușor fișiere de tip *.gdf (Graphic Design Files), *.tdf(Text Design Files), *.vhd(VHDL Design Files), *.v(Verilog Design Files), *.edf(EDIF Input Files) și *.scf(OrCAD Schematic Files), la orice nivel al proiectului.
Oricum, fișierele de tip *.wdf (Waveform Design Files), *.xnf (Xilinx Netlist Format Files), *.adf (Altera Design Files) și *.smf (State Machine Files) trebuie să se afle la oricare nivel ierarhic cu excepția celui mai de jos sau pot fi singurul fișier de modelare din proiect. Aceste lucruri se evidențiază în figura 2.36.
Etapele de proiectare până la finalizarea unui proiect sunt prezentate în fig 2.37.
După introducerea modelului dorit utilizând un editor schematic sau HDL, acesta este automat interpretat, optimizat, sintetizat și salvat ca o listă de conexiuni. Un procedeu automat încadrează proiectul în interiorul circuitului realizând conexiunile necesare. Urmează o simulare pentru a putea decide dacă rezultatul proiectului este pe măasura așteptărilor. Dacă apar unele erori se modifică modelul de intrare. Ultimul pas este programarea circuitului logic și verificarea hardware-ului.
I.7.3. AplicațIle MAX+PLUS I
Cum se preciza anterior, acest software conține 11 aplicațI. Mai multe tipuri de aceste aplicațI pot fi active simultan, trecerea de la una la alta fInd posibilă în orice moment. În același timp una dintre următoarele aplicațI: compilatorul, simulatorul, analizorul de timp sau programatorul pot rula în background. Aceste aplicațI sunt:
I.7.3.1. Editorul grafic MAX+PLUS I
Acest mediu de proiectare, prezentat în figura 2.38 este de tipul “what-you-see-is-what-you-get”. Este un program de captură schematică sofisticat care permite introducerea rapidă și facilă chiar și a modelelor complexe. Librăria extinsă de funcțI primitive, megafuncțI, macrofuncțI și funcțI LPM (Library of Parameterized Modules), prevede blocuri logice de bază pentru construirea unui proiect, în timp ce capacitatea de generare a simbolurilor permite alcătuirea proprIlor librărI de funcțI particularizate.
Un fișier de modelare grafică *.gdf sau un fișier *.sch obținut cu ajutorul OrCAD creat cu ajutorul editorului grafic poate include orice combinație de simboluri ale funcțIlor primitive, megafuncțIlor și macrofuncțIlor existente în bibliotecile programului. Simbolurile pot reprezenta orice tip de fișier de proiectare cum ar fi: GDF-uri și fișiere schematice OrCAD, AHDL Text Design (.tdf), VHDL Design (.vhd), Verilog Design (.v), Waveform Design (.wdf), EDIF (.edf), Xilinx Netlist Format (.xnf), Altera Design Files (.adf), and State Machine Files (.smf).
Editorul grafic MAX+PLUS I are multe opțiuni. De exemplu se poate mări sau micșora schema la scări variate pentru a se putea vedea întregul model schematic sau anumite porțiuni din acesta. De asemenea se pot selecta o multitudine de fonturi, mărimi de text și tipuri de linI. Se pot șterge, tăia, copia, lipi unul sau mai multe obiecte selectate, pot fi rotite cu 90, 180 sau 270 de grade.
I.7.3.2. Editorul de simboluri MAX+PLUS I
MAX+PLUS I Symbol Editor, aplicație prezentată în figura 2.39 permite vizualizarea, crearea și editarea unui simbol care reprezintă un circuit logic.
Un simbol are același nume ca și fișierul pe care îl reprezintă și are extensia .sym. Crearea unui simbol din orice aplicație de proiectare MAX+PLUS I se face cu comanda Create Default Symbol disponibilă în meniul File.
I.7.3.3. Editorul de texte MAX+PLUS I
Fig.2.40
Această aplicație (fig.2.40) este un instrument flexibil pentru introducerea fișierelor de tip text în format AHDL (Altera Hardware Description Language), VHDL (Very High Speed Integrated Circuit Hardware Description Language), și Verilog HDL. Se pot de asemenea vizualiza, edita,introduce și modifica orice fișier sub format ASCI (American Standard Code for Information Interchange).
Cu toate că pentru a se obține fișiere AHDL, VHDL sau Verilog HDL se pot utiliza orice alte editoare de text ASCI, avantajele oferite de MAX+PLUS I conduc la o utilizare sigură și eficientă a editorului de text.
Iată unele din avantajele oferite de editorul de text MAX+PLUS I:
Deoarece limbajele AHDL, VHDL și Verilog HDL sunt integrate complet în program, un fișier de acest tip se poate procesa în Compilator, iar procesorul de mesaje localizează imediat erorile de sintaxă în fișierul sursă.
De asemenea prevede funcțI predefinite AHDL, VHDL și Verilog HDL.
Dacă opțiunea “syntax coloring” este activată atunci se observă clar sintaxa limbajului de programare utilizat.
I.7.3.4. Editarea formelor de undă cu MAX+PLUS I
Această aplicație are dublu rol: este în primul rând un instrument de proiectare, iar în al doilea rând este folosită pentru a vizualiza rezultatele simulărI. Este prezentată în figura 2.41.
Se pot crea Waveform Design Files (.wdf) care conțin semnalele logice pentru un proiect și Simulator Channel Files (.scf) care conțin vectorI de intrare pentru simulare și pentru testarea funcționărI.
Modelarea cu formele de undă este o alternativă la modelarea grafică sau format text. Se poate proiecta un anumit circuit specificându-se combinațIle semnalelor logice de intrare cu semnalele de ieșire dorite.
Acest tip de modelare este ideal pentru circuitele care au intrări și ieșiri secvențiale bine definite cum ar fi stările mașină, numărătoarele și regiștrI.
I.7.3.5. MAX+PLUS I Floorplan Editor
Această aplicație poate fi folosită pentru a aloca resursele fizice ale unui circuit și pentru a vedea rezultatele de partiționare și de implementare (fig.2.42).
I.7.4. MegafuncțI, macrofuncțI și funcțI primitive
LibrărIle Altera conțin funcțI primitive, megafuncțI și macrofuncțI mai vechi (ex. seria 74-) dar și funcțI care sunt optimizate pentru diferite familI de circuite. LibrărIle sunt copiate pe durata instalărI programului. InformațI ample despre aceste funcțI se găsesc în “help”-ul programului.
I.7.4.1. FuncțIle primitive
FuncțI ca buffere, bistabili, regiștri, pini de intrare/ieșire și porți logice primare sunt elemente de bază în proiectarea unor circuite numerice. Pot fi folosite în aplicațI de modelare cum ar fi: GDF, AHDL, VHDL și Verilog HDL. Pe durata compilărI proiectului, programul transformă o arie de funcțI primitive într-un număr corect de primitive individuale. ArIle de funcțI primitive constituie o alternativă în utilizarea funcțIlor parametrice.
I.7.4.2. MegafuncțIle
Sunt blocuri complexe sau de nivel înalt care pot fi folosite împreună cu funcțIle primitive și cu alte megafuncțI pentru a crea un model logic. Multe megafuncțI printre care și cele LPM (Library of Parameterized Modules) sunt ajustate pentru a obține rezultate eficiente în ce privește mărimea, funcționarea și implementarea în siliciu. Scalabilitatea funcțIlor LPM și a altor funcțI parametrizabile poate simplifica mult modelul de intrare în cadrul unui proiect. MegafuncțIle pot fi folosite foarte ușor în editorul grafic sau HDL.
Atunci când compilatorul analizează întregul circuit logic poate înlocui cu ajutorul familiei de megafuncțI toate porțile și bistabilI neutilizați pentru obținerea unei eficiențe de proiectare optime.
I.7.4.3. Vechile macrofuncțI
Sunt arhitecturi logice de nivel ridicat care pot fi utilizate împreună cu toate celelate familI de funcțI pentru a crea un model logic. Pot fi folosite independent în editorul grafic sau HDL. Atunci când proiectul este compilat, programul folosește macrofuncțIle pentru a înlocui orice tip de funcție primitivă cu scopul de a obține un model eficient. MacrofuncțIle au semnalele de intrare inițializate pentru ca pinI neutilizați să poată fi neconectați. Multe macrofuncțI au magistrale echivalente care funcționează la fel ca linIle separate.
I.7.4.4. Concluzie
Este recomandată utilizarea megafuncțIlor existente în librărIle MAX+PLUS I în locul macrofuncțIlor clasice. FuncțIle LPM și altele parametrizabile sunt mai ușor de folosit, scalabile și se implementează mult mai eficient în siliciu.
I.7.5. VHDL și Verilog HDL, limbaje de configurare a circuitelor logice programabile
I.7.5.1. Introducere
În prima jumătate a anilor 1990, industria electronică a înregistrat o explozie în cererea de calculatoare personale, telefoane celulare și de circuite rapide din punct de vedere al transferului de date. În acest sens producătorI au construit produse cu funcționalitate crescută, performanțe mărite, cost mai scăzut, putere de consum mai mică precum și cu dimensiuni mai mici. De aceea aceștia au utilizat o integrare crescută, sisteme complexe cu puține circuite integrate și mult mai puține circuite imprimate PCB (Printed-Circuit-Board). Aceste tehnologI au forțat apariția unor modalități de programare avansate care să permită proiectarea eficientă și testarea a PLD-urilor. Ambele, PLD-urile și HDL au devenit elemente cheie în expansiunea metodologIlor.
ProiectanțI care utilizează CPLD-uri sau FPGA-uri cu un număr de porți cuprins între 500 și 100.000 nu mai pot utiliza ecuațI booleene sau descrierea la nivel de poartă. VHDL este un limbaj de nivel înalt care permite proiectanților să descrie circuite extinse și să aducă produsele finite pe piață într-un timp foarte scurt. FInd un limbaj standard permite portabilitatea codului între sintetizare și simulare precum și între circuite diferite.
Circuitele simple cu un număr mai mic de 500 de porți au fost utilizate cu succes pentru integrarea la scară redusă și au oferit o flexibilitate corespunzătoare. Tehnicile tradiționale de proiectare cum ar fi diagramele Karnaugh sunt utilizate pentru obținerea unor ecuațI ce urmează a fi implementate în PLD.
Pentru sisteme mai mari care folosesc CPLD-uri, FPGA-uri sau ASIC-uri metodele tradiționale nu sunt fezabile în sensul că necesită prea mult timp și pot introduce și erori.
La momentul actual numai două limbaje satisfac cerințele proiectărI circuitelor digitale: VHDL și Verilog.
Complexitatea alegerI limbajului de programare HDL (Hardware Description Language) ce urmează a fi utilizat a crescut odată cu sporirea numărului de astfel de programe. Mulți proiectanți și companI plănuiesc din timp când anume să-și schimbe limbajul de programare. Dintre acestea amintim:
VHDL (IEEE-Std 1076);
Verilog (IEEE-Std 1364).
I.7.5.2. VHDL
VHDL, (Very High Speed Integrated Circuit-VHSIC- Hardware Description Language) este foarte potrivit pentru proiectarea circuitelor logice programabile și de aceea înregistrează o creștere a popularitățI.
VHDL este un produs al programului VHSIC fondat de Departamenul pentru Apărare în anI 1970 și 1980. Prima dată acest limbaj a fost destinat utilizărI ca un cod de programare asfel încât programul unui proiectant să nu poată fi recunoscut de către alt proiectant. A fost stabilizat ca standard IEEE 1076 în 1987. În anul 1988 standardul MilStd454 a cerut ca toate circuitele ASIC livrate de Ministerul ApărărI să fie descrise în VHDL, iar în 1993 standardul IEEE1076 a fost medernizat și un standard adițional intitulat IEEE1164 a fost adoptat.
Astăzi, VHDL este un produs standard pentru descrierea, modelarea și simularea circuitelor și sistemelor digitale.
De ce VHDL?
Fiecare inginer din industria electronică trebuie să învețe cât mai curând să utilizeze un limbaj de proiectare hardware a circuitelor. Cu VHDL se pot programa circuite cu cinci, zece sau douăzeci de mI de porți logice. Modelarea echivalentă cu ecuațI booleene poate cere unei persoane câteva luni de lucru. VHDL furnizează unele capacități, care vor fi enumerate în continuare.
a. Putere și flexibilitate
Limbajul VHDL are porțiuni de limbaj puternice care permit scrierea succintă a unui cod pentru o schemă complexă. Are de asemenea mai multe nivele de proiectare pentru a controla implementarea modelului. Suportă modelare ierarhică ceea ce permite proiectarea pe module.
b. Proiectare independentă de circuit
VHDL permite modelarea unui proiect fără a alege dinainte tipul de circuit pe care urmează să fie implementat. Cu un singur proiect programat se pot configura mai multe tipuri de circuite programabile. Nu este necesară o familiarizare cu arhitectura internă a unui PLD pentru a obține o optimizare a resurselor și performanțelor. VHDL permite multiple tipuri de modelare. În figura 2.43 se ilustrează patru modalități de programare a unui comparator pe 2 biți.
c. Portabilitate
Deoarece VHDL este un limbaj standard, descrierea proiectului se poate transfera de la un simulator la altul, de la o platformă de programare la alta. Aceasta înseamnă că descrierea în limbajul VHDL poate fi utilizată în multiple proiecte, iar deprinderile dobândite în urma lucrului cu un simulator sunt utile și la altul. Figura 2.44 arată cum codul sursă pentru un proiect poate fi folosit cu orice sintetizator și modelul poate fi implementat pe orice circuit suportat de sintetizatorul respectiv.
d. Capabilitatea de testare
Modelarea independentă a circuitelor și portabilitatea permit testarea unui proiect pe diferite circuite și diferite compilatoare. Nu mai este nevoie a se cunoaște dinainte tipul de circuit ce urmează a fi utilizat, sau dacă acesta este un CPLD sau un FPGA. Se poate modela și simula până la final un proiect. După aceea se pot evalua rezultatele și urmează alegerea unui circuit care este cel mai aproape de cerințele proiectului.
e. Trecerea către ASIC
Eficiența pe care VHDL o generează permit produselor să „lovească” piața repede dacă proiectul este implementat pe CPLD sau pe FPGA. Atunci când volumul de producție atinge nivele mai mari, VHDL facilitează implementarea pe ASIC. Uneori codul utilizat pentru un PLD poate fi utilizat și pentru un ASIC. Deoarece VHDL este un limbaj foarte bine definit distribuitorul de circuite poate oferi circuite cu un mod de funcționare corespunzător.
f. Cost scăzut și trecerea rapidă pe piață
Circuitele programabile și limbajul VHDL formează un ansamblu care permite un proces foarte rapid de proiectare. VHDL permite ca modelarea să se facă repede. PLD și VHDL se combină pentru a forma un vehicul puternic și rapid de aducere pe piață a unor anumite produse.
Utilizarea VHDL pentru sinteza proiectelor
Procesul de proiectare poate fi împărțit în șase etape.
Definirea cerințelor proiectului
Descrierea modelului VHDL (formularea și codificarea modelului)
Simularea codului sursă
Sintetizarea, optimizarea și fixarea proiectului
Simularea modelului rezultat după potrivirea proiectului pe circuitul ales
Programarea circuitului.
1. Definirea cerințelor proiectului
Înainte de a începe scrierea codului pentru modelul dorit trebuie să se cunoască foarte bine obiectivele și cerințele proiectului. Care este rolul proiectului? Care sunt setările cerute pentru semnalul de tact, care este frecvența maximă de lucru și care sunt căile de semnal critice? Având o idee clară despre cerințele proiectului se poate alege o metodologie de lucru și un circuit cu o arhitectură corespunzătoare.
2. Descrierea modelului în VHDL
Formularea modelului. După ce s-au definit cerințele proiectului unI ar putea fi tentați să treacă direct la scrierea codului. Înainte de aceasta trebuie aleasă o metodologie de scriere. Ca metodologI de scriere putem aminti: de sus în jos, de jos în sus și un mod „plan”. Primele două metodologI se referă la faptul că se începe modelarea unui proiect de la nivelul superior ierarhic respectiv inferior și se termină la cel inferior respectiv superior. Metodologia de tip “plan” presupune ca toate componentele să fie definite la același nivel al proiectărI. Acest tip de modelare dă rezultate bune în cazul proiectelor mici. Trebuie evitată utilizarea prea multor nivele ierarhice deoarece acest lucru ar duce la neînțelegerea modelului de către altcineva.
Codificarea modelului. După ce s-a ales metodologia de scriere se poate trece la programarea efectivă acordând atenție sintaxei și semanticei de scriere. Majoritatea inginerilor modifică un model deja existent pe care îl particularizează pentru a se potrivi cerințelor modelului actual. Cheia de scriere în limbaj VHDL este de a gândi la nivel hardware.
3. Simularea codului sursă.
Simularea codului sursă în cazul proiectelor mai mari demonstrează viteza acestora. Deoarece este permisă simularea codului sursă defectele pot fi determinate din timp și se pot face modificările de rigoare. În cazul proiectelor mai mici este inutilă această etapă. În general proiectele mai mari sunt alcătuite din mai multe blocuri componente. Aceste blocuri componente pot fi verificate individual.
4. Sintetizarea, optimizarea și fixarea proiectului.
Sintetizarea se referă la reducerea unei scheme mai mari în unele mai mici, la nivel de listă de legături. Acest procedeu de transformare a proiectului modelat sub formă de listă de legături sau de ecuațI poate părea abstract.
Optimizarea depinde de factori ca forma expresIlor booleene, de tipul resurselor disponibile, etc. Unele forme de descriere pot fi mai potrivite pentru resursele logice decât altele. De exemplu o sumă minimă de termeni produs poate fi implementată cu succes într-un circuit de tip PAL, iar o sumă te termeni produs sub formă canonică poate fi implementată mai eficient într-un circuit de tip multiplexor sau RAM.
Fixarea este procesul de plasare a modelului rezultat în urma sintetizărI și optimizărI. Fixarea pe un circuit de tip CPLD poate fi complicată având în vedere numeroasele căi prin care o formă logică poate fi plasată pe un circuit.
5. Simularea modelului final.
Chiar dacă a avut loc o presimulare în unele cazuri este necesară o simulare după ce modelul a fost fixat pe un anumit tip de circuit. O astfel de simulare permite nu numai verificarea globală a proiectului ci și determinarea parametrilor de timp. Dacă unI parametri nu sunt corespunzători cu cerințele inițiale atunci trebuie sintetizat proiectul pe alt tip de circuit.
6. Programarea circuitului.
După terminarea descrierI modelului, sintetizărI, optimizărI, fixărI și simulărI cu succes se poate programa circuitul. Software-ul folosit va genera un fișier necesar pentru configurarea circuitului.
I.7.5.3. VERILOG
Verilog reprezintă un limbaj de descriere a Hardware-lui (Hardware Description Language-HDL). Un asemenea limbaj este utilizat pentru descrierea sistemelor numerice, de exemplu, un calculator sau o componentă a acestuia. Un sistem numeric poate fi descris, la niveluri diferite, în funcție de aspectele care interesează.
Verilog reprezintă unul dintre cele două limbaje importante HDL, folosite de către proiectanțI din industrie și din medIle academice. VHDL reprezintă cel de-al doilea limbaj. În ceea ce privește industria părerile sunt împărțite. UnI cred că Verilog este mai ușor de învățat și de utilizat decât VHDL. Standardul IEEE, pentru VHDL, a apărut în 1987, în timp ce standardul IEEE, pentru Verilog, a fost elaborat în 1995. Verilog este asemănător limbajului C, care este foarte răspândit în rândurile inginerilor electroniști și de calculatoare.
Verilog a fost lansat, în 1985, de către Gateway System Corporation, care a fost preluată de către Cadence Design Systems, Inc.’s Systems Division. Până în 1990, când a luat fInță Open Verilog International (OVI), HDL Verilog a fost proprietatea companiei Cadence. Ulterior, Cadence a plasat Verilog în Domeniul Public, cu speranța deschiderI unei piețe de produse software legate de Verilog VHDL, în condițIle în care acesta se va bucura de o largă răspândire.
Este un limbaj limitat și cu unele lacune. Are rădăcini în limbajul “C” și în alt limbaj de tip HDL numit „Hilo”. Toate datele utilizate în Verilog sunt predefinite în limbaj. Limbajul recunoaște toate datele care au o reprezentare la nivel de bit. Cu excepția șirurilor, toate datele recunoscute pot fi manipulate liber în Verilog.
Semantica limbajului Verilog este mai ambiguă decât cea VHDL. Această ambiguitate oferă o mai mare flexibilitate în aplicarea optimizărilor, dar dacă nu sunt urmăriți îndeaproape pașI de programare pot rezulta unele erori. Este astfel posibil ca același cod să funcționeze diferit pe alte tipuri de circuite chiar ale aceluiași producător.
Începând cu 1970, inginerI de calculatoare și inginerI electroniști au apelat la limbajele de descriere a hardware-lui (HDL). Cele mai răspândite HDL-euri în industrie sunt Verilog și VHDL. În urma cu 5 ani Verilog se afla pe primul loc cu peste 10.000 de utilizatori/proiectanți la companI de renume cum sunt: Sun Microsystems, Apple Computer, Motorola s.a.
Limbajul Verilog oferă proiectantului mijloace de descriere a unui sistem numeric în cadrul unei largi game de niveluri de abstractizare și, în același timp, îi asigură accesul la uneltele de proiectare asistată de calculator, la nivelurile avute în vedere.
Verilog permite proiectanților de hardware să descrie proiectele cu ajutorul construcțIlor comportamentale, amânând detalIle de implementare pentru stadIle ulterioare ale procesului de proiectare. O reprezentarea abstractă ajută proiectantul în explorarea alternativelor arhitecturale prin simulări, pentru a detecta congestIle proiectului înaintea începerI proiectărI detaliate. Deși nivelul comportamental Verilog reprezintă un nivel înalt de descriere a unui sistem numeric, el reprezintă o notație precisă.
Există unelte de proiectarea asistată, materializate prin programe, care vor “compila” programele elaborate în Verilog până la nivelul circuitelor constând în porți și bistabile. Astfel, se poate merge în laborator pentru a se conecta circuitele logice prin cablaje în vederea obținerI unui sistem funcțional. Alte unelte de proiectare pot “compila” programele descrise în Verilog într-o descriere a măștilor de circuite integrate , pentru Integrarea pe Scara Larga (VLSI). De aceea, cu ajutorul unor unelte automatizate corespunzătoare se poate crea o descriere a proiectului VLSI în Verilog, în vederea transmiterI ei prin poșta electronică, către o “topitorie de siliciu”, pentru a primi ulterior, în câteva săptămâni, circuitul integrat.
Verilog permite, de asemenea, proiectantului să specifice proiectele la nivelul porțI logice, folosind construcțIle porți și la nivelul tranzistorului, utilizând construcțIle comutator. În orice caz, un circuit VLSI, proiectat pe baza construcțIlor comportamentale din Verilog, va fi destul de lent și va ocupa o arie importantă pe pastila de siliciu. Nivelurile mai coborâte ale limbajului Verilog permit inginerilor să optimizeze circuitele logice și măștile/șabloanele VLSI pentru a maximiza viteza și a minimiza aria circuitului VLSI.
Structura unui program Verilog.
Limbajul Verilog descrie un sistem numeric ca un set de module. Fiecare dintre aceste module are o interfață cu alte module, pentru a specifica modul în care sunt interconectate. De regulă se plasează un modul într-un fișier, fără ca aceasta să fie o cerință obligatorie. Modulele operează concurent. În general, există un modul pe nivelul cel mai înalt, care specifică un sistem închis ce conține, atât datele de test, cât și modelele hardware. Modulul de pe nivelul cel mai înalt invocă aparițI ale celorlalte module.
Modulele reprezintă părți hardware, care pot fi de la simple porți până la sisteme complete ex., un microprocesor. Modulele pot fi specificate, fie comportamental, fie structural (sau o combinație a celor două). O specificare comportamentală definește comportarea unui sistem numeric (modul) folosind construcțIle limbajelor de programare tradiționale, de exemplu: if, instrucțiuni de atribuire. O specificare structurală exprimă comportarea unui sistem numeric (modul) ca o conectare ierarhică de submodule. La baza ierarhiei componentele trebuie să fie primitive sau să fie specificate comportamental. Primitivele Verilog includ atât porți, cât și tranzistoare de trecere (comutatoare).
Semantica construcției unui module în Verilog este diferită de cea a subrutinelor, procedurilor și a funcțIlor din alte limbaje. Un modul nu este chemat niciodată. Un modul are o instanță la începutul unui program și este prezent pe întreaga durată a programului. O instanță a unui modul Verilog este utilizată ca model al unui circuit hardware la care se presupune că nu se efectuează modificări de cablaj. La fiecare instanță a modulului, acesteia i se da un nume.
Tipuri de Date
A.Tipuri de date fizice.
Întrucât scopul limbajului Verilog este acela de a modela hardware-ul numeric, tipurile primare de date vor fi destinate modelărI registrelor (reg) și firelor (wire). Variabilele reg stochează ultima valoare, care le-a fost atribuită procedural, în timp ce variabilele wire reprezintă conexiuni fizice între entități structurale cum ar fi porțile. Un fir (wire) nu stochează o valoare. O variabilă wire reprezintă numai o etichetă pe un fir. Trebuie remarcat faptul că tipul de date wire reprezintă unul dintre tipurile de date net prezente în Verilog în care mai sunt incluse: “and cablat (wand)”, “or cablat (wor)” și “magistrala cu trei stări (tri)”. Aceste note se limitează numai la tipul de date wire.
Obiectele reg și wire , care reprezintă date, pot lua urmatoarele valori:
0: valoarea logică zero sau fals;
1: unu logic sau adevărat;
x: valoare logică necunoscută;
z: impedanță ridicată a unei porți “tristate”.
La începutul simulărI variabilele reg sunt inițializate la valoarea x. Oricare variabilă wire neconectată la ceva are valoarea x.
B. Tipuri de Date Abstracte.
Într-un model de hardware, pe lângă variabilele, care modelează hardware-ul, se găsesc și alte tipuri de variabile. De exemplu, proiectantul dorește să folosească o variabilă integer, pentru a contoriza numărul de aparițI ale unui eveniment. Pentru comoditatea proiectantului, Verilog HDL posedă mai multe tipuri de date cărora nu le corespund realizări hardware. Aceste tipuri de date include integer, real și time. Tipurile de date integer și real se comportă ca și în alte limbaje, de exemplu C.
Trebuie subliniat faptul că variabila reg este fără semn, în timp ce variabila integer reprezintă un întreg de 32 de biți cu semn. Acest fapt are o mare importanță la scădere. Variabila time specifică cantități, pe 64 de biți, și sunt folosite în conjuncție cu funcția de sistem $time. Sunt acceptate tablouri de variabile integer și time , dar nu de reali. În Verilog nu sunt permise tablouri multidimensionale.
C. Operatori
Operatori Aritmetici binari.
OperatorI aritmetici binari operează cu doi operanzi. OperanzI de tip reg și net sunt tratați ca fără semn. OperanzI de tip real și integer pot avea semn. Dacă un bit oarecare, al unui operand, este necunoscut (‘x’), atunci rezultatul este necunoscut.
Operatori Aritmetici Unari.
Operatori Relaționali
OperatorI relaționali compară doi operanzi și întorc o valoare logică, adică TRUE(1) sau FALSE(0). Dacă un bit oarecare este necunoscut, relația este ambiguă și rezultatul este necunoscut.
Operatori Logici
OperatorI logici operează cu operanzi logici și întorc o valoare logică, adică TRUE(1) sau FALSE(0). Sunt utilizați în instrucțiunile if și while. A nu se confunda cu operatorI logici Booleeni la nivel de bit. De exemplu, ! este un NOT logic iar ~ este NOT la nivel de bit. Primul neagă, ex., !(5 == 6) este TRUE. Al doilea complementează bițI, de exemplu: ~{1,0,1,1} este 0100.
Operatori la nivel de bit.
OperatorI la nivel de bit operează pe bițI operandului sau operanzilor. De exemplu, rezultatul lui A& B este AND pentru bițI corespunzători din A și B. Operând pe un bit necunoscut, se obține un bit necunoscut (x) în valoarea rezultatului. De exemplu, AND-ul unui x cu un FALSE este un x. OR-rul unui x cu un TRUE este un TRUE.
Operatori unari de reducere.
OperatorI unari de reducere furnizează un rezultat de un singur bit prin aplicarea operatorului la toți bițI operandului. De exemplu, &A va efectua AND pe toți bițI lui A.
Alți Operatori
Operatorul condițional se comportă ca și în limbajul C.
I.7.6. Programarea circuitelor CPLD
Toate dispozitivele Hardware și Software necesare programărI și verificărI circuitelor logice programabile sunt fabricate de firma Altera. Partea hardware include o placă de programare (Logic Programmer Card) pentru PC, care comandă unitatea de programare Altera MPU (Altera Master Programming Unit). Dispozitivele Altera suportă programabilitate “In-System” (ISP) și ICR (In-Circuit Reconfiguration) prin intermediul cablurilor de legătură “Flex Download Cable” și “ByteBlaster Parallel Download Cable”. Cablurile “ByteBlaster” și “BitBlaster” sunt conectate respectiv la portul paralel (LPT) și la portul serial (RS-232 sau COM). Aceste cabluri permit programarea a una sau mai multe dispozitive ISP sau ICR compatibile într-un lanț Flex sau JTAG.
CAPITOLUL II
Filtre numerice
II.1. Introducere
Filtrele numerice (FN) sunt sisteme liniare de tip discret implementabile la nivelul structurilor hardware de tip platformă PC, procesor de semnal, microcontroler.
Proiectarea unor astfel de structuri de tratare numerică include parcurgerea următoarelor etape:
Etapa specificațiilor de frecvență,
Etapa aproximării specificațiilor de frecvență impuse prin determinarea efectivă a coeficienților filtrului numeric,
Etapa realizării diagramei structurale a FN,
Etapa analizei efectului lungimii finite a cuvintelor binare asociate valorilor numerice asupra performanțelor FN,
Etapa implementării filtrului dimensionat la nivelul suporturilor hardware ce au la bază microprocesoarele de uz general, procesoarele de semnal sau microcontrolerele.
În cadrul proiectării filtrelor numerice destinate diferitelor aplicații parcurgerea tuturor etapelor nu este strict necesară, excepție făcând etapa determinării valorii coeficienților filtrului numeric, ak și bl asociați ecuației cu diferențe finite a filtrului numeric (FN).
(1)
În ecuația (1) y(n) reprezintă secvența numerică asociată ieșirii filtrului numeric în timp ce x(n) reprezintă semnalul aplicat la intrarea filtrului numeric. Un alt mod de descriere a unui filtru numeric este cel bazat pe funcția de transfer în “z” a FN, H(z).
Obținerea lui H(z) se realizează prin aplicarea transformatei z ambilor membri ai ecuației (1). Astfel se obține:
(2)
Caracteristica H(z) a filtrelor numerice este ușor reprezentabilă la nivelul diagramei structurale asociate filtrului numeric. Elementele de bază a unei astfel de scheme structurale sunt celulele de întârziere sau de memorie, sumatoarele și multiplicatoarele. În cadrul diagramei structurale reprezentată în fig.3.1 se evidențiază ponderea fiecărui tip de element în materializarea diagramei structurale asociată ecuațiilor (1) și (2).
În realizarea diagramei structurale s-au avut în vedere ecuațiile FN pentru cazul sistemelor cauzale. Un sistem numeric liniar este numit cauzal atunci când pentru n<0, x(n)=0 și y(n)=0.
Semnificația lui n=0 este cea de origine a axei timpului discret t=nTe. valorile negative ale lui n semnific[ practic timpi negativi, t=nTe, timpi ce nu corespund sistemelor reale de prelucrare numerică de semnal.
Pornind de la cele de mai sus se poate spune că proiectarea filtrelor numerice reprezintă în principal, determinarea coeficienților ak și bl astfel încât în final prin derularea algoritmului, eșantioanele semnalului numeric de intrare x(n) să fie modificate în deplin acord cu specificațiile de frecvență asociate primei etape ale proiectării filtrelor numerice.
II.2. Clasificări ale filtrelor numerice
O primă clasificare are la bază caracteristicile amplitudine-frecvență (fig.3.2).
În figura 3.2 cu ft, ft1 și ft2 s-au notat frecvențele de tăiere asociate caracteristicilor.
Clasificarea FN funcție de caracteristicile amplitudine-frecvență este următoarea:
Filtru numeric cu caracteristică de tip trece-jos (FN-TJ)
Filtru numeric cu caracteristică de tip trece-sus (FN-TS)
Filtru numeric cu caracteristică de tip trece-bandă (FN-TB)
Filtru numeric cu caracteristică de tip oprește-bandă (FN-OB)
O altă clasificare a FN are la bază criteriul ordinului filtrului, m. Indiferent de valoarea lui m, FN pot fi descompuse în structuri elementare de filtrare care se clasifică în:
Filtre numerice de ordinul I a căror ecuație cu diferențe finite este:
(3)
Filtre numerice de ordinul II a căror ecuație cu diferențe finite este:
(4)
O altă clasificare a FN este bazată pe răspunsul la impuls a filtrului, h(nT). Ținând cont de acesta filtrele se clasifică în:
FN cu răspuns la impuls de durată finită (FIR – Finite Impulse Response). Aceste FN sunt caracterizate de un răspuns la impuls h(nT) de durată finită (h(nT) este dimensiune finită), adică:
(5)
(6)
N1>N2
FN cu răspuns la impuls de durată infinită (IIR – Infinite Impulse Response). Aceste filtre se caracterizează de către un răspuns h(nT) de durată infinită, cu alte cuvinte nu există valori finite pentru N1 și N2 astfel încât relațiile (5) și (6) să fie satisfăcute.
Un alt criteriu de clasificare este cel al modului în care sunt realizate. Astfel se disting două tipuri de filtre numerice:
FN recursive pentru care mărimea curentă de ieșire depinde de valorile anterioare ale mărimii de ieșire (z(nTe-Te)…y(nTe-iTe)), precum și de valorile curente și anterioare ale mărimii de intrare (x(nTe)…x(nTe-iTe)). Ecuația caracteristică unor astfel de FN este:
(7)
în relație Te reprezintă perioada de eșantionare, iar coeficienții ai și bI sunt coeficienți reali și constanți. Acest tip de FN este numit și FN cu memorie infinită.
FN nerecursive la aceste filtre mărimea de ieșire se exprimă explicit în funcție de valorile prezente și anterioare ale mărimii de intrare conform relației:
(8)
Acest tip de FN este numit și FN cu memorie finită. Datorită structurii lor, mai sunt numite și filtre transversale.
Filtrele de tip FIR și IIR pot fi realizate atât în formă recursivă cât și nerecursivă. În mod uzual FN de tip FIR se realizează nerecursiv, iar FN de tip IIR se realizează recursiv.
Principalele avantaje ale filtrelor numerice (FN) sunt:
Dimensiuni reduse
Stabilitate termică – Variațiile de temperatură care în cazul filtrelor analogice (FA) influențează valorile rezistoarelor, condensatoarelor și bobinelor nu influențează în nici un fel filtrele numerice ținând cont că implementarea acestora se face pe baza blocurilor integrate de tip sumator, multiplicator-acumulator.
Precizie ridicată – Îmbunătățirea performanțelor FN cum ar fi precizia, gama dinamică, stabilitatea și tolerantele caracteristicii amplitudine-frecvență pot fi obținute prin creșterea numărului de biți ai reprezentării valorilor numerice la nivelul regiștrilor.
Adaptabilitate – Răspunsul FN poate fi modificat în mod eficient prin introducerea unui nou set de coeficienți rezultat în urma proiectării. În comparație cu proiectarea în domeniul filtrării analogice în care creșterea ordinului filtrului este limitată de complexitatea implementării practice (număr mare de componente), în cazul filtrelor numerice nu există o limitare strictă a ordinului maxim de filtrare.
Capacitatea de multiplexare – În condițiile în care frecvența semnalelor ce urmează a fi procesate nu impune utilizarea unei rate de eșantionare ridicată filtrul numeric poate fi multiplexat în vederea utilizării acestuia mai eficient. Spre exemplu în condițiile în care se urmărește prelucrarea mai multor semnale numerice aferente mai multor canale de măsură se poate utiliza multiplexarea FN. Astfel eșantioanele de intrare aferente diferitelor canale sunt multiplexate și transmise unității de prelucrare, spre exemplu un procesor de semnal TMS320C50 la nivelul căruia este implementat algoritmul de filtrare numerică.
Absența problemelor legate de adaptarea de impedanțe
În comparație cu filtrele analogice realizate în varianta activă sau pasivă se poate spune că FN prezintă avantaje asimptotice. Se utilizează termenul asimptotic pentru a fi descrise avantajele care apar când se impun niște performanțe foarte ridicate filtrelor. Spre exemplu dacă trebuie realizat un filtru trece-jos cu f1=3000Hz cu un riplu de R=0.5dB și o atenuare la f=3005Hz egală cu At=90dB este absolut necesar ca structura de filtrare să fie reprezentată de un filtru numeric.
Avantajele asimptotice rezultă și în cazul când o necesită utilizarea unui număr mare de filtre. În acest caz cu o singură structură hard aferentă FN se pot implementa toate blocurile de filtrare numerică necesare, costul realizării fiind același pentru unul sau mai multe FN. Dacă se utilizează filtrarea analogică diferite funcții de filtrare sunt materializate de filtre analogice diferite ce conțin componente diferite ceea ce conduce la creșterea costurilor. Un alt avantaj asimptotic apare atunci când se cere un filtru cu o
complexitate extremă. Astfel un filtru analogic cu mai mult de 20 de poli este aproape imposibil de realizat spre diferență de filtrele numerice.
Principalele dezavantaje ale FN sunt:
Banda de frecvență limitată – Această limitare este strâns legată de procesul de eșantionare și conversie analog-numerică.
Erori datorate efectului lungimii finite a regiștrilor – Trecerea de la etapa de stabilire a valorilor coeficienților la implementarea practică a acestora conduce ca urmare a limitărilor hardware la degradarea performanțelor algoritmului proiectat. Această degradare se datorează implementării coeficienților filtrului folosind regiștri de lungime finită.
II.3. Filtre Numerice cu Răspuns Finit la Impuls (FIR)
II.3.1. Generalități
În exprimarea ieșirii, y(n), a unei structuri de filtrare de tip IIR s-a evidențiat faptul că aceasta depinde atât de valorile prezente și anterioare ale intrării, cât și de valorile anterioare ale ieșirii. În cazul filtrelor cu răspuns finit la impuls (FIR), semnalul numeric de ieșire depinde doar de valorile prezente și anterioare ale semnalului de intrare. În aceste condiții ecuația generală asociată unui filtru de tip FIR este:
(9)
Valorile coeficienților filtrului numeric sunt egale cu valorile răspunsului la impuls h(n) ale filtrului numeric.
Ca și în cazul filtrelor numerice cu răspuns infinit la impuls în continuare se va considera un exemplu care să exprime concret caracteristicile filtrelor de tip FIR. Se consideră astfel un FN dat prin ecuația (9). Valorile lui h(n) se obțin prin aplicarea unui impuls unitar (n) pe intrarea filtrului. Astfel h(n) se obține pe baza relației:
(10)
Ținând cont de relația de definiție a lui (n) rezultă:
(11)
Mărimile ce caracterizează din punct de vedere cantitativ complexitatea algoritmului de filtrare numerică pentru cazul filtrelor FIR sunt:
– numărul de multiplicări pe secundă
– numărul de adunări pe secundă
unde L este dat de ecuația (9), iar fe este frecvența de eșantionare.
O caracteristică a filtrelor de tip FIR este aceea că, răspunsul la impuls h(n) este simetric și de aici crește viteza de procesare pe baza reducerii numărului de calcule aferente obținerii lui h(n) la jumătate.
Nu același lucru se întâmplă în cazul filtrelor IIR. În aceste condiții simetria valorilor coeficienților FN poate reprezenta un criteriu de identificare a tipului FN, IIR sau FIR.
O altă precizare ce trebuie făcută este aceea că FN de tip FIR sunt realizate în general sub forma filtrelor numerice cu bază liniară, filtre cu aplicabilitate sporită în domeniul practic.
Filtrele numerice de tip FIR sunt în general filtre nerecursive, semnalul numeric de ieșire, y(nT), depinzând doar de valorile prezente și trecute ale semnalului numeric aplicat intrării x(nT), x(nT-T), …, x(nT-iT).
Ca avantaje ale FN de tip FIR pot fi enumerate:
FN de tip FIR pot fi proiectate astfel încât caracteristica fază-frecvență să fie liniară. Acest tip de caracteristică este de mare importanță în aplicații în care distorsiunile de fază datorate fazei neliniare degradează informația conținută în semnalul prelucrat x(n). Ca domenii în care FN de tip FIR prezintă o largă aplicabilitate pot fi menționate: procesarea semnalului vocal, transmisia de date.
FN de tip FIR fiind de tip nerecursiv sunt prin definiție filtre stabile ceea ce prezintă un important avantaj în raport cu filtrele de tip IIR caracterizate prin stabilitate condiționată.
Eroarea de cuantizare legată de lucrul în aritmetică finită poate fi considerată neglijabilă pentru aplicații.
FN de tip FIR pot fi implementate în mod facil în cadrul sistemelor cu procesor de semnal.
FN de tip FIR sunt caracterizate printr-un ordin crescut în raport cu FN de tip IIR pentru satisfacerea aceleiași caracteristici de frecvență impuse.
II.3.2. Metode de proiectare
Cea mai importantă caracteristică a filtrelor FIR este, prin definiție, lungimea finită a răspunsului la impuls. În plus, după cunoașterea acestuia, se poate obține direct o formă de realizare, cunoscută sub numele de filtru transversal. Acesta este motivul pentru care răspunsul la impuls joacă un rol central în diferitele metode de proiectare a filtrelor FIR. De asemenea, plecând de la răspunsul la impuls al filtrului RIF, se pune ușor în evidență liniaritatea sau neliniaritatea caracteristicii de fază a acestuia.
II.3.2.1. Proiectarea bazată pe TFSD și utilizarea ferestrelor de ponderare
Punctul de plecare al acestei metode este răspunsul în frecvență Hd(ej), care se dorește realizat, în raport cu cel mai apropiat filtru FIR posibil. Cu ajutorul TFISD se deduce direct răspunsul la impuls ideal hd[n]. În general, totuși, nu se poate realiza practic imediat un filtru pe baza lui hd[n], deoarece:
hd[n] este de durată (“lungime”) foarte mare sau chiar infinită, și
hd[n] este necauzal (adică hd[n]0 pentru n<0).
Prin urmare trebuie:
limitată lungimea lui hd[n] la un număr de eșantioane L acceptabil, și
introdus un decalaj (“întârziere”) suficient pentru a obține un răspuns la impuls cauzal.
Pentru proiectarea filtrelor se utilizează mai multe tipuri de ferestre:
fereastra dreptunghiulară:
(12)
fereastra Barlett:
(13)
fereastra Hanning:
(14)
fereastra Hamming:
(15)
fereastra Blackman:
(16)
Ferestrele Kaiser formează o familie destul de specială. Ele sunt definite după cum urmează:
(17)
unde I0(x) este o funcție Bessel, definită în modul următor:
(18)
Forma exactă a ferestrei Kaiser se determină prin alegerea lui : dacă crește, lărgimea benzii de tranziție se mărește, dar ondulațiile se diminuează. Pentru calculul funcției Bessel I0(x), nu este necesară utilizarea unui număr infinit de termeni ca la dezvoltarea în serie din relația (18).
II.3.2.2. Metoda Seriilor Fourier
Metoda seriilor Fourier de proiectare a FN pornește de la premiza că răspunsul în frecvență al oricărui filtru numeric este periodic în frecvență acesta conducând la posibilitatea dezvoltării în serie Fourier. Seria rezultantă este de forma:
(19)
iar imaginea în domeniul timp a lui H(ej) este:
(20)
În relația de mai sus h(n) reprezintă practic eșantioanele răspunsului la impuls al filtrului numeric. Astfel ieșirea FN se calculează cu relația:
(21)
Dacă se consideră ej=z, din expresia (19) se obține:
(22)
Din păcate, această dezvoltare este necauzală și infinită. Se va interveni astfel pentru eliminarea acestor două neajunsuri.
Pentru o funcție de transfer finită de dimensiune N, seria poate fi trunchiată considerând că:
(23)
(24)
În acest caz se obține:
(25)
Pentru îndeplinirea principiului cauzalității
se înmulțește H(z) cu obținându-se:
(26)
O asemenea modificare este posibilă, având în vedere faptul că răspunsul în amplitudine rămâne neschimbat, iar întârzierea de grup va crește cu o constantă egală cu .
În concluzie, aproximarea unui filtru ideal prin trunchierea răspunsului ideal la impuls este identică cu problema studierii convergenței seriilor Fourier.
Cel mai familiar aspect rezultat din studiul convergenței seriilor Fourier este fenomenul Gibbs. Acesta este reprezentat prin supracreșterea în cazul unei funcții treaptă reprezentate printr-o serie Fourier trunchiată.
II.3.2.3. Metoda eșantionării în frecvență
Proiectarea FN de tip FIR pe baza Seriilor Fourier și a funcțiilor fereastră este o metodă simplă și într-un anumit sens foarte generală. Cu toate acestea, sunt multe situații când este necesar ca filtrul proiectat să fie cel mai bun ce poate fi obținut pentru un ordin dat. În aceste condiții metoda eșantionării în frecvență reprezintă una din soluțiile cele mai folosite.
Un filtru de tip FIR este determinat în mod unic fie de coeficienții răspunsului la impuls h(n), fie de coeficienții DFT, H(k). Presupunem că obiectivul propus este de a determina coeficienții h(n) a unui FN de tip FIR a cărui răspuns în frecvență este dat în figura 3.3.a. Coeficienții h(n) pot fi obținuți aplicând transformata Fourier discretă inversă (DFT-1) eșantioanelor H(k) din domeniul frecvență.
(27)
unde H(k), k=0, 1, 2, …, N-1, sunt eșantioanele aferente unui răspuns ideal în frecvență.
În cazul unui FN cu fază liniară pentru N par, unde N reprezintă dimensiunea lui H(k) se poate scrie:
(28)
unde Pentru N impar limita superioară de sumare este . Filtrul rezultat va fi caracterizat de un răspuns în frecvență identic cu răspunsul filtrului ideal la momentele asociate eșantioanelor prelevate însă mult diferit între eșantioane (fig.3.3.c).
Pentru obținerea unei bune aproximări este necesar a se preleva un număr ridicat de eșantioane. O a doua structură de filtrare rezultă eșantionând răspunsul în frecvență a filtrului ideal la momente:
(29)
Pentru un set de specificații de frecvență date aplicarea uneia sau alteia din cele două metode de proiectare FIR cu eșantionare în frecvență conduce la obținerea de caracteristici de filtrare diferite. În aceste condiții proiectantul va alege metoda care corespunde răspunsului frecvențial optimal pentru aplicația propusă.
II.3.2.4. Metoda optimizării
În vederea îmbunătățirii răspunsului amplitudine-frecvență FN de tip FIR se propune o metodă de optimizare a proiectării acestor filtre bazată pe eșantionarea în banda de tranziție a caracteristicii frecvențiale. În figura 3.4 este prezentat cazul caracteristicii unui FN-TJ caracterizat prin trei benzi supuse eșantionării.
Pentru un filtru trece-jos, atenuarea în banda de oprire crește cu aproximativ 20dB pentru fiecare bandă de frecvență eșantionată. Această creștere a atenuării este însoțită de o creștere a lărgimii benzilor de frecvență. Relațiile de corelație între numărul de benzi de tranziție M și valoarea atenuării și lărgimea benzii de tranziție sunt:
(30)
(31)
În relația (31) cu WBf s-a notat lărgimea benzii, cu N s-a notat dimensiunea lui h(n).
Valorile eșantioanelor benzii de tranziție care conduc la obținerea unui optim în ceea ce privește atenuarea în banda de oprire sunt determinate printr-un proces de optimizare. Un obiectiv de optimizare este acela de a găsi valorile eșantioanelor aferente benzii de tranziție T1, T2, …TM în vederea minimizării riplului și creșterea atenuării. Acest criteriu se exprimă matematic:
(32)
unde HD() și H() reprezintă răspunsul în frecvență al filtrului ideal respectiv răspunsul în frecvență al filtrului deja proiectat, iar W reprezintă un factor de ponderare. Pe baza condiției (32) s-au stabilit tabele de valori ce include valorile lui T1, T2, T3, astfel încât să se obțină optimul menționat (fig.3.4). Valorile numerice ale lui T1, T2, T3 pentru cazul particulat N=15 sunt prezentate în tabelul de mai jos. În tabel BW se referă la numărul de eșantioane din banda de trecere a FN.
În majoritatea cazurilor valorile considerate în cadrul benzii de tranziție corespund:
unui eșantion în banda de tranziție
0.250<T1<0.450
unui număr de două eșantioane în banda de tranziție
0.040<T1<0.150
0.450<T2<0.650
unui număr de trei eșantioane în bandă de tranziție
0.003<T1<0.035
0.100<T2<0.300
0.550<T3<0.750
Valorile scăzute sunt pentru FN de bandă largă și conduc la o atenuare ridicată în banda de oprire. Efectul obținut prin utilizarea unui număr de unul, două sau trei eșantioane în banda de tranziție a FN este exprimat grafic în figura 3.5.
În figura 3.5.a este prezentată H(f) pentru cazul în care nu sunt prelevate eșantioane din banda de tranziție a caracteristicii ideale H(k) a filtrului. Figurile 3.5.b, c, d sunt asociate prelevării unui număr de unu, două sau trei eșantioane frecvențiale din banda de tranziție a filtrului de proiectat. Se observă că nivelul ondulațiilor scade odată cu creșterea numărului de eșantioane prelevate.
II.4. Filtre numerice cu Răspuns Infinit la Impuls (IIR)
II.4.1. Generalități
Răspunsul unui FN de tip IIR depinde de valorile prezentă și trecute ale eșantioanelor secvenței numerice de intrare x(n) precum și de valorile trecute ale semnalului de ieșire. Astfel la modul general ecuația ce caracterizează un astfel de filtru este dată de:
(33)
Pentru simplificare în continuare se va omite notarea explicită a perioadei de eșantionare Te în cadrul ecuațiilor notațiile folosite fiind:
(34)
(35)
Se consideră un FN de ordin I. Ecuația (33) în acest caz devine:
(36)
Cunoașterea structurii de filtrare numerică coincide cu determinarea răspunsului la impuls unitar, (n) al FN, h(k) (fig. 3.6).
Se consideră astfel x(n)= (n), iar y(n) va deveni h(n), se obține astfel:
(37)
Ținând cont de cauzalitatea filtrului se urmărește determinarea h(n) din aproape în aproape.
Pentru n=0
(38)
n=1
(39)
n=2
(40)
n=k
(41)
Analizând relațiile (38)-(41) rezultă
(42)
Acest rezultat a fost obținut în manieră inductivă prin calculul ieșirii filtrului numeric de tip IIR pentru valori consecutive ale intrării. Rezultatele obținute sunt prezentate în tabelul ce urmează:
Răspunsul la impuls a filtrului de ordin I propus
Diagrama structurală aferentă filtrului numeric anterior definit este dată în figura 3.7.
În diagramă se evidențiază:
1 bloc de multiplicare (multiplicare cu coeficientul b al FN),
1 bloc de întârziere care în planul variabilei complexe z corespunde multiplicării z-1,
1 bloc de sumare.
Câțiva din parametrii utilizați pentru a exprima în manieră cantitativă complexitatea algoritmului de filtrare sunt:
MPS – numărul de multiplicări pe secundă care în cazul FN de tip IIR se calculează cu relația:
(43)
unde P și M sunt definite în relația (33).
APS – număr de adunări pe secundă care în cazul filtrelor numerice de tip IIR se calculează cu relația:
(50)
În relațiile de mai sus fe reprezintă frecvența de eșantionare asociată structurilor de filtrare numerică.
II.4.2. Tehnici de proiectare a FN de tip IIR
Abordarea cea mai întâlnită în proiectarea filtrelor numerice de tip IIR este cea a determinării pe baza diagramei de toleranțe a unui filtru analogic prototip, filtru ce va fi supus ulterior transformării în FN caracterizat de o caracteristică de frecvență identică. Această modalitate de proiectare se bazează pe următoarele experiențe:
Proiectarea filtrelor analogice este pe deplin cunoscută astfel încât proiectarea unui astfel de filtru este facilă;
Numeroase metode de proiectare a filtrelor analogice (FA) sunt bazate pe seturi de relații ușor implementabile la nivelul unui soft de proiectare și în același timp ușor transferabile către proiectarea filtrelor numerice de tip IIR (Infinite Impulse Response);
În numeroase aplicații se impune utilizarea filtrelor numerice pentru simularea performanțelor filtrelor analogice.
Metodele principale de proiectare a FN pe baza FA prototip pentru o diagramă de toleranțe dată sunt:
Metoda invariantei impulsului,
Metoda transformatei biliniare.
II.4.2.1. Metoda invariantei impulsului
În cadrul acestei metode se pornește de la un filtru analogic (FA) caracterizat de răspunsul la impuls ha(t), răspunsul în frecvența Ha() și de funcția de transfer Ha(s).
(51)
(52)
Relația de legătură între s și este:
(53)
Pornind de la mărimile caracteristice filtrului analogic prototip care satisfac diagrama de toleranțe, obiectivul impus în proiectarea FN prin metoda invarianței impulsului este ca răspunsul la impuls a filtrului IIR, hd(n) să satisfacă relația:
(54)
în care Te reprezintă perioada de eșantionare a sistemului discret. În acest caz relația de legătură între funcția de transfer a sistemului discret și cea a sistemului analogic este:
(55)
Legătura dintre răspunsurile la impuls precum și dintre funcția de transfer a sistemului discret și a celui continuu este prezentată în figura 3.8.
Analizând imaginile frecvențiale ale răspunsurilor la impuls pentru sistemul continuu și cel discret se observă că imaginea frecvențială a lui hd(n) depinde hotărâtor de valoarea perioadei de eșantionare aferentă sistemului discret, alegerea necorespunzătoare a lui T conducând la apariția fenomenului de aliasing, fenomen exprimat în figură.
Determinarea coeficienților filtrului numeric de tip IIR
Se consideră funcțiile de transfer respectiv caracteristica de frecvență aferente unei diagrame de toleranțe impuse prin tema de proiectare.
(56)
Răspunsul la impuls ha(t) se obține prin aplicarea transformatei Laplace inversă, L-1 lui Ha(s).
(57)
În aceste condiții răspunsul sistemului discret corespunzător aceleași scheme de toleranțe este:
(58)
Aplicând transformata în z răspunsului la impuls a sistemului discret rezultă funcția de transfer în z a acestuia.
(59)
Prin aplicarea transformatei z-inversa (z-1) ambilor termeni ai ecuației (59) se va obține ecuația cu diferențe finite (60) care caracterizează sistemul numeric:
(60)
(61)
(62)
(63)
Implementarea la nivelul hardware-ului a filtrului numeric proiectat impune realizarea diagramei structurale a filtrului numeric de ordin I obținut în urma proiectării. Astfel în figura 3.9 este prezentată diagrama structurală a FN mai sus prezentat.
În continuare se impune a fi analizate funcțiile de transfer, Ha(s), respectiv discrete Hd(z), exprimate în (56) și (58).
Astfel se observă că Ha(s) prezintă un pol pentru s=B, în timp ce Hd(z) prezintă un pol z=eBT. Această constatare exprimă de fapt o proprietate importantă a acestei metode de proiectare și anume faptul că polii simpli pentru filtrul analogic s=pk sunt convertiți în poli simpli ai filtrului numeric, valorile acestora fiind .
În general pornind de la o structură de filtrare analogică dată prin funcția de transfer în s:
(64)
se obține o funcție de transfer a sistemului discret de tipul:
(65)
Conversia ecuațiilor filtrului analogic prototip în FN atrage după sine trecerea polilor FA în poli ai FN și totodată conversia unui FA stabil într-un FN stabil.
Concluzii – Metoda invarianței impulsului
Răspunsul la impuls a filtrului digital, h(nT), este identic cu cel al filtrului analogic, h(t), la momente discrete de timp, t=nT, n=0,1,…
Frecvența de eșantionare afectează răspunsul în frecvență a filtrului proiectat prin această metodă. Astfel se impune lucrul cu frecvențe de eșantionare suficient de ridicate, fe=20fmax, astfel încât răspunsul în frecvență a filtrului numeric să fie cât mai apropiat de cel al filtrului analogic.
În condițiile eșantionării semnalului de prelucrat, spectrul răspunsului la impuls a FN proiectat prin metoda prezentată reprezentat prin H(z) va fi același cu cel al filtrului analogic prototip Ha(s) dar se repetă la multipli întregi ai frecvenței de eșantionare.
Metoda se utilizează în proiectarea FN cu bandă de tranziție îngustă de tip FN-TJ cu nivel redus de aliasing în condițiile utilizării unei frecvențe ridicate de eșantionare dar este nerecomandată în proiectarea FN-TS și FN-OB pentru care este necesară introducerea suplimentară în cadrul lanțului de prelucrare a unui filtru anti-aliasing.
II.4.2.2. Metoda transformatei biliniare
Prezentarea metodei
Metoda transformatei biliniare (TB) este una din cele mai folosite metode pentru proiectarea filtrelor numerice de tip IIR, pornind de la filtrul analogic prototip. Odată proiectat FA pornind de la un set de specificații de frecvență date Transformata biliniară este folosită pentru realizarea trecerii de la planul complexe asociată sistemelor de tip continuu, s, la variabila de tip complex asociată sistemelor de tip discret, z.
Relațiile de legătură între s și z sunt:
(66)
Grafic această relație de legătură între s și z este exprimată în figura 3.10.
Sinteză privind procedura de proiectare a IIR folosind transformata biliniară
Etapele principale ale metodei:
Etapa 1 Stabilirea funcției de transfer a FA, H(s), pe baza specificațiilor de frecvență
Etapa 2 Determinarea pulsației de tăiere a FN, ωd
Etapa 3 Determinarea pulsației de tăiere echivalentă pentru FA, ωa
(67)
Etapa 4 Denormalizarea caracteristicii H(s) prin realizarea substituției
(68)
Etapa 5 Aplicarea transformatei biliniare pentru obținerea lui H(z)
(69)
II.5. Tipuri de filtre analogice prototip
Deoarece în multe cazuri studiul filtrelor numerice se face plecând de la filtrele analogice, se vor prezenta pe scurt principalele tipuri de filtre trece-jos analogice. Astfel pot fi menționate:
Filtrele analogice Butterworth
Filtrele Cebîșev (direct și invers)
Filtrele eliptice
Toate aceste filtre anterior prezentate aproximează o caracteristică de atenuare dreptunghiulară în banda de trecere.
II.5.1. Filtrul Butterworth
Filtrul Butterworth realizează o caracteristică de amplitudine-frecvență monotonă fiind caracterizată prin lipsa ondulațiilor în banda de trecere și în banda de oprire. Relația care caracterizează acest tip de filtru este:
(70)
În relația de mai sus n repreyintă ordinul filtrului, ω t reprezintă pulsația de tăiere la 3dB. Caracteristica amplitudine frecvență a filtrului este dată în figura 3.11.a.
Atenuarea în banda de oprire At asociată FA se calculează cu relația:
(71)
Dependența dintre valorile deviațiilor în banda de trecere δ1, în banda de oprire δ2 și ordinul filtrului analogic este exprimată prin relația:
(72)
Polii funcției de transfer, pk sunt plasați în planul s, pe un cerc de rază ω t. Relația de calcul a valorilor acestora este:
(73)
k=1, 2, …, n
II.5.2. Filtrul Cebîșev
Filtrul Cebîșev este un filtru care admițând ondulații în banda de trecere și utilizând același număr de poli și zerouri ca și filtrul Butterworth poate realiza o caracteristică de frecvență cu o pantă mai abruptă în jurul frecvenței de tăiere, ωt. Relația care exprimă pătratul modulului funcției de transfer a acestui tip de FA este:
(74)
În relația de mai sus n repreyintă ordinul filtrului analogic, Cn reprezintă un polinom Cebîșev de ordin n, iar reprezintă un parametru ce caracterizează riplul FA (ondulațiile în banda de trecere a FA). Polinomul Cn este dat sub formă recurentă:
C1(x)=x
C2(x)=2×2-1 (75)
Cn+1(x)-2xCn-1=0
Riplul filtrului, R, de parametru se calculează cu relația:
(76)
Atenuarea FA în banda de oprire se calculează cu relația:
(77)
Relația de calcul al ordinului FA de tip Cebîșev în conformitate cu valorile toleranțelor în banda de trecere și în banda de oprire este:
(78)
Polinomul Cebîșev se caracterizează prin ondulațiile egale pentru x variind într-un domeniu dat. Prin specificarea lui , caracteristica de frecvență prezintă ondulații egale în banda de trecere și o cădere monotonă în banda de oprire.
Polii FA Cebîșev sunt plasați pe o elipsă coordonatele acestora fiind:
(79)
unde:
(80)
II.5.3. Filtrul eliptic
Filtrul eliptic realizează cu o precizie mai mare frecvența de tăiere decât filtrul Cebîșev admițând totodată ondulații atât în banda de trecere, cât și în banda de oprire. Relația care exprimă pătratul modulului funcției de transfer a acestui tip de FA este:
(81)
În relație Gn este o funcție Cebîșev de tip rațional. Caracteristica filtrului eliptic este prezentată prin comparație cu celelalte tipuri prezentate în figura 3.11.d.
Calculul coeficienților FN-TS, FN-TB, FN-OB de tip IIR
Etapele necesare în stabilirea valorilor coeficienților FN de tip IIR sunt:
Determinarea funcției de transfer în s normalizată, H(s) a filtrului analogic prototip pornind de la specificațiile de frecvență aferente FN de proiectat.
Determinarea frecvențelor critice a FN. Pentru FN-TS există o singură frecvență critică f1 în timp ce pentru FN-TB și FN-OB există un set de două frecvențe critice, ft1 și ft2.
Substituirea variabilei complexe s în funcția de transfer H(s) folosind una din următoarele transformări ce depind de tipul filtrului (FN-TJ, FN-TS, FN-TB, FN-OB)
FN-TJ→FN-TJ (82)
FN-TJ→FN-TS (83)
FN-TJ→FN-TB (84)
FN-TJ→FN-OB (85)
unde , iar .
Aplicarea transformatei biliniare pentru funcția de transfer în s denormalizată H1(s)
(86)
CAPITOLUL III
Realizarea practică a unui filtru numeric de tip IIR cu CLP
III.1. Descrierea schemei bloc sub formă canonică
III.1.1. Descrierea generală a IIR
Filtrele numerice reprezintă o funcție importantă în procesarea numerică a semnalelor (Digital Signal Processing – DSP) și sunt utilizate într-o mare varietate de aplicații cum ar fi: separarea semnalelor, refacerea semnalelor sau modelarea acestora. Cele două clase de filtre numerice sunt FIR (Finite Impulse Response) și IIR (Infinite Impulse Response). Filtrele de tip IIR necesită mai puține resurse hardware decât filtrele FIR și au un răspuns mai rapid. Structurile filtrelor IIR sunt potrIIIite circuitelor automate de control a câștigului (AGC – Automatic Gain Control), algoritmului de implementare Goertzel, sintetizării digitale directe, etc. Datorită prezenței polilor în funcția lor de transfer filtrele cu răspuns infinit la impuls sunt cunoscute ca filtre recursIIIe.
III.1.2. Descrierea funcțională a IIR
Filtrele numerice de ordin n sunt descrise de ecuația următoare:
, (88)
în care:
Xi reprezintă eșantioanele de intrare;
Yn reprezintă eșantioanele semnalului rezultat;
vectorul ai conține coeficienții de multiplicare pe calea directă;
vectorul bi conține coeficienții de multiplicare pe calea de reacție.
De valorile coeficienților ai, bi depinde caracteristica filtrului. Valorile sunt în general valorile rezultate la numărător respectIII numitor în cazul funcției de transfer următoare:
. (89)
Rădăcinile ecuației polinomiale de mai sus se numesc zerouri pentru numărător și poli pentru numitor. În planul Z, filtrul este stabil atunci când polii sunt în totalitate în interiorul cercului unitar sau atunci când coincid cu zero.
Filtrele cu răspuns infinit la impuls pot fi modelate după mai multe forme: direct, în cascadă sau în paralel.
III.1.2.1. Structura formei directe
Această structură se numește forma directă II deoarece este rezultatul direct al primei ecuații. În cazul filtrelor de ordin mai mare această formă poate deveni sensibilă la dimensiunile datelor. Ecuația sub formă de funcție de transfer poate fi rearanjată în secțiuni de filtre de ordinul I sau II aliniate în serie (cascadă) sau în paralel. Rearanjarea coeficienților în cazul formei serie sau cascadă se realizează în unele medii de modelare precum MATLAB. După aceea se pot importa coeficienții ordonați.
III.1.2.2. Structura în cascadă
În cazul implementării în cascadă funcția de transfer a filtrului este rearanjată prin factorizarea filtrelor de ordin I și II. Ecuația următoare descrie un exemplu:
(90)
Fiecare termen produs al ecuației precedente este un filtru de ordin I sau II. Dacă ordinul n al filtrului principal este impar atunci ultimul termen produs este un filtru de ordin I.
III.1.2.3. Structura paralelă
În implementarea paralelă funcția de transfer va fi rearanjată sub forma unei sume de n/2 termeni care reprezintă filtre de ordinul I și II. Ecuația aferentă acestei transformări va fi :
(91)
Fiecare termen sumă din ecuația precedentă este un filtru de ordinul II. Ca și în cazul structurii în cascadă, dacă filtrul inițial este de ordin impar ultimul termen va fi un filtru de ordinul I.
III.2. Programarea în MAX+PLUS II a filtrului
III.2.1. Proiectarea filtrului
Pentru obținerea unui filtru digital de tip IIR de ordinul II am ales utilizarea părții de proiectare grafică a software-ului MAX+PLUS II. Urmărim ca implementarea acestui filtru să se poată efectua pe un circuit de tip FLEX10K70. Pe parcursul modelării blocurilor componente se va urmări procentul pe care fiecare bloc îl ocupă din resursele circuitului. De aceea, după modelarea unui subansamblu de calcul se va efectua o compilare și o simulare. În acest fel se poate urmări îndeaproape funcționalitatea blocurilor proiectate.
Filtrul de ordinul II se va implementa după forma canonică II a filtrelor prezentată în figura 4.4. În această figură se observă prezența blocurilor de adunare, de înmulțire și de normalizare a datelor.
Pentru a realiza un filtru recursIII funcțional este necesar ca în interiorul acestuia datele să fie sub forma unor numere cu virgulă mobilă, numere care au trei câmpuri: semn, mantisă și exponent.
Datele ce urmează a fi prelucrate vor fi sub forma unor numere cu virgulă mobilă care ocupă un număr de 12 biți. Dintre aceștia 12 biți, 8 sunt pentru mantisă (MSB–semnul), iar 4 biți sunt pentru valoarea exponentului.
III.2.2. Obținerea coeficienților
Odată cunoscute caracteristicile filtrului ce urmează a fi implementat se pot calcula coeficienții acestuia. Pentru această etapă se pot utiliza mai multe variante software. O primă variantă o constituie utilizarea software-ului LabView al firmei National Instruments, iar o altă o constituie utilizarea unei megafuncții de compilare a filtrelor furnizată de firma Altera. Extragerea coeficienților din programul LabView se face în urma modelării unui filtru cu caracteristicile dorite. Această funcție permite citirea valorilor coeficienților.
Etapa următoare este transformarea coeficienților din formă zecimală sub formă binară cu virgulă mobilă. Această transformare se face avându-se în vedere o anumită precizie pe care trebuie să o aibă filtrul. Această precizie se oglindește în numărul de biți pe care se scriu coeficienții. Pentru calculul acestora și a erorilor de transformare am utilizat programul Microsoft Excel.
Tabelul următor redă modul de calcul al coeficienților.
Coeficienții calculați cu programul LabView sunt b1=-1,9112, b2=0,9150, a0=0,9565, a1=-1,9131, a2=0,9565. Coeficienții a0 și a2 sunt egali, deci va fi suficient calculul unui singur coeficient. În tabelul de mai sus s-a urmărit determinarea părții zecimale a exponenților deoarece partea întreagă se scrie foarte ușor, ea fiind 0 sau 1. După cum se observă în tabelul precedent dacă se atribuie 10 biți pentru scrierea părții zecimale a coeficienților se obțin erori foarte mici (sub 0.05 %).
Etapa următoare este transformarea coeficienților din zecimal în binar și complementarea față de 2 acolo unde este cazul.
b1= -1,9112 = -1,9332 = -1, 11101001012= 10,0001011011c2=213910E+1
b2= 0,9150 = 0,18732 = 0, 111010100012= 0, 1873c2=187310E+0
a0 = a2 = 0,9565 = 0,9792 = 0, 11110100112= 0, 1111010011c2=97910E+0
a1= -1,9131 = -1,9352 = -1, 11101001112= 10,0001011001c2=213710E+1
Valorile precedente constituie coeficienții filtrului sub formă binară și cu virgulă flotantă. Ultimele valori vor fi scrise în MAX+PLUS II ca valori constante.
În figura III.5 este prezentată schema funcțională realizată în MAX+PLUS II. Se observă prezența blocurilor de adunare, înmulțire și întârziere aflate și în figura 4.4, iar în plus mai sunt un bloc de normalizare a datelor de intrare și niște regiștri de inițializare. Normalizarea datelor la intrarea în filtru este necesară deoarece vom considera că datele sosesc nenormalizate. Acestor date inițiale li se atribuie exponentul de valoare 7, ceea ce înseamnă că se vor lua în calcul toți biții componenți.
Blocurile componente și funcționarea acestora se va prezenta pe larg în cele ce urmează.
III.3. Descrierea blocurilor componente
În figura 4.5, care reprezintă schema principală de proiectare a filtrului, se găsesc următoarele elemente:
pini de intrare: gate, d[7..0] și rst;
pini de ieșire: sign, rezout[6..0] și exout[3..0];
4 regiștri de întârziere LPM_DFF;
5 constante care reprezintă coeficienții filtrului LPM_CONSTANT;
4+4 blocuri de inițializare LPM_LATCH;
2 regiștri set-reset SRFF;
un bloc de normalizare a datelor de intrare NORM8B;
4 blocuri de adunare ADDNORM;
5 blocuri de înmulțire MULTNORM.
Gate este un semnal de tact pentru regiștrii de întârziere, adică acesta comandă momentul în care datele de la intrarea circuitelor LPM_DFF se vor deplasa la ieșire. Este indicat ca acest semnal să aibă o frecvență egală cu frecvența de eșantionare a semnalului, astfel încât filtrul să prelucreze toate eșantioanele provenite de la blocul anterior care în principiu este un DAC (Digital-Analogic Converter).
În figura 4.6 este prezentat un exemplu de funcționare al circuitelor LPM_DFF. Pentru exemplificarea performanțelor de viteză se ia cazul în care la intrarea a două circuite LPM_DFF se află două magistrale ein[3..0] și din[7..0] care reprezintă exponentul respectIII mantisa datelor, iar la ieșire se află eout[3..0] și dout[7..0]. Se observă că aceste circuite au un timp de răspuns de doar 4ns.
Același semnal de comandă gate este utilizat și pentru inițializarea blocurilor de adunare. Acest lucru este necesar deoarece la începutul filtrării sau în momentul resetării filtrului trebuie ca datele rezultante din circuitele de înmulțire să fie nule. Inițializarea blocurilor de adunare se face cu câte patru circuite LPM_LATCH comandate de o logică numerică alcătuită din două circuite SRFF (Set-Reset Flip-Flop). Inițializarea constă în anularea datelor provenite de la blocurile de înmulțire cu coeficienții (a1,b1) și (a2,b2) pe durata unei respectIII a două perioade ale semnalului gate.
În figura 4.7 se prezintă o schemă simplă pentru a exemplifica inițializarea blocurilor de adunare. Pentru comanda acestei operații se folosesc semnalele gate și rst.
Pentru a descrie mai detaliat cum se face inițializarea în figura 4.8 sunt prezentate formele de undă asociate circuitelor de inițializare. În exemplificarea acestor scheme, am ales ca date de intrare din[7..0] și ein[3..0], iar ca date de ieșire dout[7..0] și eout[3..0]. Semnalele de ieșire din regiștrii de comandă SRFF sunt init1 respectIII init2. După cum se observă în figura cu formele de undă, semnalul init1 va fi "0" pe durata primei perioade a semnalului gate, iar init2 va fi "0" pe durata a primelor două perioade a semnalului gate. Semnalul rst va reseta cele două semnale de inițializare init1 și init2.
Spre exemplificare se consideră la intrările celor două circuite LPM_LATCH datele "00110011" respectIII "0011". Aceste două circuite sunt comandate de semnalul de inițializare init2. Datele de ieșire dout[7..0] și eout[3..0] sunt nule pe durata primelor două perioade a semnalului gate. După aceste două perioade datele de la ieșirea circuitelor de inițializare coincid cu datele de la intrare până în momentul în care se resetează circuitul. Același lucru se întâmplă și în cazul semnalului init1, cu diferența că acesta este în "0" o singură perioadă a semnalului gate.
III.3.1. Adunarea datelor
În schema generală a filtrului, blocurile de adunare-normalizare sunt reprezentate sub formă simbolică cu denumirea de "addnorm". Acest simbol este prezentat în figura 4.9. Datele cu care acest bloc lucrează sunt de intrare (da[7..0], ea[3..0], db[7..0], eb[3..0]) și de ieșire (dout[7..0] și eout[3..0]). Magistralele da și db reprezintă mantisele datelor ce urmează a fi adunate, iar ea și eb reprezintă exponenții corespunzători acestor mantise.
Datele de ieșire sunt două magistrale de 8 biți și 4 biți care reprezintă mantisa respectIII exponentul rezultatului adunării. Aceste date sunt normalizate în interiorul simbolului precedent întrucât în componența acestuia intră și un bloc de normalizare a datelor. Acest lucru se evidențiază în figura 4.10.
Blocurile care intră în componența simbolului de adunare-normalizare sunt add8b un bloc de adunare a datelor pe 8 biți și norm8b un bloc de normalizare a datelor pe 8 biți. Simbolul operației de adunare este prezentat în figura 4.11 și vehiculează următoarele date:
dataa[7..0]- mantisa de 8 biți a primului termen al adunării;
ea[3..0] – exponentul pe patru biți a primului termen al adunării;
eb[3..0] – exponentul pe patru biți a celui de-al doilea termen al adunării;
datab[7..0]- mantisa de 8 biți a celui de-al doilea termen al adunării;
rez[7..0]- mantisa de 8 biți a rezultatului;
ea[3..0] – exponentul pe patru biți a rezultatului.
Deoarece se vehiculează date cu virgulă flotantă adunarea acestora trebuie făcută conform standardelor respectIIIe. De aceea schema digitală care execută adunarea datelor este ceva mai complexă (fig. 4.12).
Schema de adunare a datelor este alcătuită din următoarele elemente componente: 4 pini de intrare a datelor, 6 pini de ieșire a datelor, un bloc de comparare a exponenților (compexpgdf3b), două circuite de mutare la dreapta a mantiselor (LPM_CLSHIFT), o funcție de adunare predefinită (LPM_ADD_SUB) și o serie de circuite WIRE pentru redenumirea a datelor. Dintre cele șase magistrale de ieșire numai două sunt necesare operațiilor ulterioare, celelalte patru fiind puse doar pentru testarea circuitelor de comparare a exponenților și de mutare la stânga a mantiselor.
Blocul de comparare a exponenților este necesar deoarece în cazul adunării numerelor cu virgulă mobilă, mantisele trebuiesc ordonate corespunzător valorii exponenților. Deoarece exponenții dețin informații cantitatIIIe despre datele circulate, este absolut necesar ca adunarea propriu-zisă să se facă între mantise care au același exponent. Simbolul blocului de comparare a exponenților este prezentat în figura 4.13.
După cum se observă, ca semnale de intrare acest bloc conține ea[3..0] și eb[3..0], iar ca semnale de ieșire expn[3..0], sft_b[3..0] și sft_a[3..0]. Semnalele de intrare sunt exponenții datelor ce urmează a fi adunate, iar datele de ieșire sunt exponentul final al adunării (expn[3..0]), numărul de pași cu care trebuie mutată la stânga mantisa primului termen (sft_a[3..0]) și numărul de pași cu care trebuie mutată mantisa celui de-al doilea termen (sft_b[3..0]).
Schema detaliată a blocului de comparare a exponenților este prezentată în figura 4.14. Această schemă cuprinde:
o megafuncție de comparare "LPM_COMPARE" care compară exponenții celor două numere și funcție de valoarea rezultatului comandă care dintre aceștia va fi rezultantul;
o funcție de adunare "LPM_ADD_SUB" (dreapta sus) care adună o unitate valorii exponentului final pentru a permite o adunare cu carry a mantiselor;
două funcții de scădere "LPM_ADD_SUB" care efectuează scăderea exponenților între ei astfel încât la ieșire vor avea diferențele dintre cei doi exponenți;
trei multiplexoare de câte patru biți "mux2_4b", unul comandat cu semnalul agb provenit de la comparator care selectează exponentul mai mare care va fi și cel rezultant, celelalte două comandate cu semnalul ageb al comparatorului care comandă care mantisă va fi mutată cu diferența exponenților, cealaltă mantisă primind ca valoare de translare constanta zero.
Semnalele și tranzițiile acestora în interiorul blocului de adunare sunt prezentate în figura 4.15. Din această figură se observă cum între momentul apariției unei date la intrarea blocului de adunare și momentul ieșirii rezultatului nu este decăt o întârziere de cca. 20ns.
În această diagramă semnalele principale care vor fi vehiculate mai departe către blocurile de normalizare sunt rez[7..0] și exout[3..0] care exprimă de fapt mantisa și respectIII exponentul sumei rezultate. În diagramă mai sunt patru semnale de testare a blocului și anume: da[7..0], db[7..0] reprezintă mantisele după operația de mutare la dreapta, iar sa[3..0] și sb[3..0] reprezintă numărul de pași cu care se mută mantisele.
III.3.2. Înmulțirea datelor
Blocurile de înmulțire-normalizare în schema generală a filtrului sunt reprezentate sub formă simbolică cu denumirea de "multnorm". Acest simbol este prezentat în figura 4.16. Datele cu care acest bloc lucrează sunt de intrare (d[7..0], exin[3..0], c[11..0]) și de ieșire (dout[7..0] și exout[3..0]). Magistralele d și exin reprezintă mantisa și exponentul numărului ce trebuie înmulțit cu coeficientul respectIII.
Mantisa respectIII exponentul rezultatului înmulțirii sunt două magistrale de 8 și respectIII 4 biți. Mantisa este normalizată în interiorul simbolului precedent întrucât în componența acestuia intră și un bloc de normalizare a datelor. Acest lucru se evidențiază în figura 4.17.
Blocurile care intră în componența simbolului de înmulțire-normalizare sunt mult8b un bloc de înmulțire a datelor pe 8 biți și norm19b un bloc de normalizare a datelor pe 19 biți. Simbolul operației de înmulțire este prezentat în figura 4.18 și are în componența sa următoarele date:
d[7..0]- mantisa pe 8 biți a numărului ce urmează a fi înmulțit;
exin[3..0] – exponentul pe patru biți a numărului de înmulțit;
res[18..0]- mantisa pe 19 biți a rezultatului;
exout[3..0] – exponentul pe patru biți a rezultatului.
Înmulțirea numerelor în format cu virgulă flotantă este mai facilă decât operația de adunare a acelorași tipuri de date. În acest caz rezultatul se obține adunând exponenții și înmulțind mantisele. Totuși este și un inconvenient care a determinat folosirea datelor în format de virgulă flotantă. Acesta se referă la faptul că numărul de biți al mantisei crește mult și având în vedere faptul că filtrul IIR este unul recursIII după câteva cicluri se depășește lungimea maximă admisibilă. Utilizarea numerelor cu exponent este soluția oportună în acest caz. După obținerea mantisei rezultante este necesară o trunchiere a acesteia, lucru posibil deoarece informația cantitatIIIă cu prIIIire la numărul rezultat este deținută de exponent.
Schema detaliată cu prIIIire la multiplicarea datelor este prezentată în figura 4.19. În această schemă se observă prezența blocului de multiplicare a mantiselor și a megafuncției de adunare a exponenților.
Deoarece înmulțirea se face cu semn, cei mai semnificatIIIi doi biți ai rezultatului vor conține semnul, ceea ce ne obligă la neglijarea unuia dintre ei. În aceeași schemă a înmulțirii exponentul coeficientului este sub forma unei constante de valoare "1". Această constantă se obține prin legarea la masă a primilor trei biți mai semnificatIIIi și aducerea celui mai puțin semnificatIII bit în "1" prin legarea la VCC. Valoarea exponentului coeficientului este "1" deoarece după cum s-a văzut în paragraful III.2.2. toți coeficienții au parte întreagă 1 sau 0.
III.3.2. Normalizarea datelor
În interiorul filtrului blocurile de normare a datelor se găsesc în mai multe locuri sub diferite forme. Prima normalizare se face la intrarea datelor în filtru făcându-se astfel o conversie a datelor din formă binară simplă sub formă de virgulă mobilă. O altă normalizare are loc imediat după operația de adunare. Această normare verifică dacă adunarea a fost cu carry, dacă da atunci mantisa rămâne neschimbată, dar dacă nu a fost cu carry atunci mantisa se mută cu un bit la stânga. O altă normalizare se găsește după blocul de înmulțire a datelor cu coeficienții filtrului. În acest caz are loc o normalizare a unor mantise pe 18 biți.
Simbolul unei operații de normalizare este prezentat în figura 4.20. Acesta are ca date de intrare din[7..0] și exin[3..0], iar ca date de ieșire dout[7..0] și exout[3..0]. Magistralele de intrare reprezintă mantisa respectIII exponentul numărului ce urmează a fi normalizat, iar magistralele de la ieșire reprezintă mantisa și exponentul rezultate.
În cazul normalizării după înmulțire cele două magistrale care reprezintă mantisele sunt pe 19 biți. Cele două tipuri de normalizare sunt asemănătoare până la un anumit punct și de aceea în continuare se va insista pe normalizarea numerelor pe 8 biți.
Schema funcțională a normalizării numerelor pe 8 biți este prezentată în figura 4.21. Blocurile componente sunt: două multiplexoare, două blocuri de complementare cu 2 și un bloc n7b care reprezintă un algoritm de translare la stânga câte poziții este necesar pentru a se obține numere normalizate.
Atunci când se efectuează normalizarea unor numere negatIIIe este nevoie ca înainte și după normalizarea propriu-zisă să se complementeze față de 2 numerele. Acesta este rolul circuitelor simbolizate c7b, de a complementa numerele negatIIIe. Testarea semnului numerelor se face prin intermediul multiplexoarelor care permit trecerea unei anumite magistrale spre blocul de deplasare respectIII spre ieșire. Dacă bitul de semn este "0" atunci înseamnă că datele sunt pozitIIIe și ele vor trece numai prin blocul n7b, dar dacă acest bit este "1" atunci numerele vor fi complementate odată înainte de deplasare și odată după.
Complementarea față de 2 a numerelor se face conform schemei din figura 4.22. În această schemă se pot observa cele două magistrale de intrare respectIII ieșire a datelor, un bloc de inversare bit cu bit a mantisei de intrare și un bloc de adăugare a unei unități numărului negat. Acesta este procedeul standard de obținere a unui complement față de 2.
În figura 4.23 se prezintă modul de lucru al sistemului de complementare a datelor. Complementarea față de 2 se face înaintea și după deplasarea mantiselor deoarece în momentul în care se normalizează numărul trebuie să fie cu semnul plus.
În figura 4.24 se prezintă structura funcției de mutare la stânga a mantisei până în momentul obținerii valorii "1" pe poziția imediat următoare bitului de semn. Această schemă conține un circuit codificator 74148, o funcție de inversare "LPM_INV", un multiplexor de două canale a câte trei biți "mux2_3b", o megafuncție de mutare la stânga "LPM_CLSHIFT", o megafuncție de scădere "LPM_ADD_SUB" și mai multe porți "ȘI" pentru anularea valorii exponentului de ieșire dacă este necesar acest lucru.
Circuitul de decodificare 74148, după cum se vede și în tabelul de mai jos, funcționează în felul următor: dacă EIN este "low" atunci testează fiecare bit de la cel mai semnificatIII către cel mai puțin semnificatIII și în momentul în care găsește un bit în 0 logic la ieșirile A2N, A1N și A0N va reda valoarea în cod binar a poziției bitului respectIII în magistrală.
Multiplexorul de două canale a câte trei biți are rolul de a selecta dacă mantisa va fi mutată la stânga cu un număr de pași egal cu valoarea dată de codificator sau cu valoarea exponentului actual al mantisei. Acest lucru se decide în blocul de scădere din exponent valoarea dată de decodificator. Dacă rezultatul scăderii este pozitIII atunci numărul de biți cu care se va muta mantisa va fi cel dat de codificator. Dacă rezultatul este un număr negatIII, înseamnă că în urma mutării ar rezulta un exponent negatIII, de aceea mantisa va fi mutată până când exponentul este 0. Forțarea exponentului de ieșire în valoarea nulă se face cu cele patru porți "ȘI" aflate înaintea pinului de ieșire a exponentului.
În figura 4.25 sunt prezentate testele asupra circuitului de testare a biților și mutarea mantisei. În figura 4.26 se vor prezenta simulări asupra blocului de normalizare.
Normalizarea numerelor după operația de înmulțire are loc pe 18 biți, ceea ce impune introducerea unor circuite în plus. Pentru blocul de complementare nu sunt necesare modificări prea mari, schimbându-se doar parametrii blocurilor de negare și adunare. Schema de testare a biților mantisei și mutarea acesteia este mai dificilă. Aceasta este exemplificată în figura 4.27.
e
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Circuite Logice Programabile. Filtre Numerice (ID: 149066)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
