Sunteți pe pagina 1din 84

Universitatea Aurel Vlaicudin Arad Facultatea de Inginerie

Conf. dr. ing. Marius M. BLA

ndrumtor pentru dezvoltarea circuitelor inteligente - FPGA


- pentru uzul studenilor -

2011

1. Circuite inteligente
De-a lungul timpului oamenii au dezvoltat numeroasele tehnologii, cu scopul construirii unui mediu favorabil de existen i perpetuare a propriei specii, dar i cu scopul cercetrii i cunoaterii mediului nconjurtor. Toate aceste tehnologii pot fi clasificate n funcie de natura aciunii lor. Cele dou dimensiuni prin care putem defini aceast clasificare sunt gradul de prelucrare a energiei i materiei EM i gradul de prelucrare a informaiei INF. Prin prelucrare nelegem producerea, transmiterea i diferitele manipulri care pot fi aplicate energiei/materiei respectiv informaiei. n Fig. 1.1 este schiat o poziionare a principalelor noastre tehnologii din punctul de vedere al capacitii de prelucrare a energiei/materiei respectiv a informaiei. INF
INFORMATICA ELECTRONICA

OPTICA

MECANICA CHIMIA

EM

Fig. 1.1. Poziionarea tehnologiilor n planul capacitii de manipulare a energiei/materiei i informaiei

Dup cum se observ, singura tehnologie fundamental care permite prelucrarea att a energiei ct i a informaiei la nivele superioare de performan este, cel puin pn astzi, electronica. Interesul nostru este orientat n acest cadru nspre inteligena artificial IA, care este prin excelen o prelucrare a informaiei, de aceea nu vom urmri latura energetic a electronicii. Trebuie totui s menionm c datorit capacitii tehnologiilor moderne de a concentra pe acelai cristal att circuitele de for ct i cele de comand, aplicaiile din domeniul conversiei energiei nglobeaz tot mai mult inteligen. O prim discuie n domeniul IA este tocmai ce nelegem de fapt prin IA! Desigur, n faza actual nu ne putem nc pune problema realizrii cu circuite electronice a tuturor aplicaiile de mare capacitate i nalt performan care au fost realizate cu ajutorul staiilor de lucru i a instrumentelor software specializate: prelucrrile n domeniul limbajelor naturale, nvarea artificial, etc. Ne vom limita la aplicaii mai simple, care totui pot fi incluse n IA, deoarece constau din prelucrri ale cunotinelor tiinifice i tehnologice din diferite domenii de activitate uman: sistemele de tip expert.

Dup cum se tie, primele aplicaii de succes din domeniul IA au fost realizate cu ajutorul calculatoarelor numerice CN, n perioada anilor 60. Dup circa 20 de ani de dezvoltri hardware i mai ales software ale calculatoarelor numerice, aplicaiile IA au cucerit n anii 80 - 90 domeniul microprocesoarelor P i microcontrolerelor C, care sunt n esen calculatoare numerice minimale. Dei foarte avantajoase din punctele de vedere al gabaritului, preului, vitezei i consumului de energie, P i C nu sunt n esen diferite de maina de calcul clasic. Principalul avantaj al acesteia, programabilitatea, care i confer flexibilitate i capacitate de adaptare i nvare, este pltit prin funcionarea n serie, cu cicluri main ncrcate, avnd n vedere necesitatea operaiilor transfer de date, comenzi i adrese prin magistrale, intrri-ieiri, citiri-nscrieri n memorii i registre, operaiile aritmetico-logice, etc. Calculul n paralel compenseaz parial aceste dezavantaje, dar cu preul creterii complexitii i preului. Cercettorii electroniti au cutat n permanen s extind paleta tehnologiilor compatibile cu IA. Rezultate promitoare se anun de exemplu din domeniul circuitelor nanometrice. Totui singura realizare notabil n acest sens, care s-a impus decisiv n industria electronic i are un impact esenial asupra industriei actuale o constituie circuitele digitale de mare complexitate. Aa cum se va vedea n capitolul urmtor, exist dou versiuni principale ale tehnologiei circuitelor integrate de mare complexitate, care permit dezvoltarea aplicaiilor inteligente: ASIC (circuite integrate electronice de mare capacitate cablate) i FPGA (circuite integrate electronice de mare capacitate programabile). Din punctul de vedere al utilizatorilor circuitele FPGA sunt de departe cele mai interesante, deoarece ofer att performane excepionale ct mai ales prin faptul c sunt programabile. Configuraia ajustabil prin tehnologie software de tip FPGA reprezint o mbuntire fundamental fa de principiul CN. Circuitele FPGA sunt programabile n sensul c legturile electrice dintre circuite sunt configurate prin software, dar odat stabilite, aceste legturi rmn stabile, astfel c funciile logice ndeplinite de circuite sunt implementate direct, fr a mai fi nevoie de ciclurile complicate care nsoesc execuia operaiilor numerice n CN. n continuare vom aborda principiile de baz ale tehnologiei FPGA i a dezvoltrii n acest cadru a aplicaiilor cu specific de Inteligen Artificial.

2. Arii de pori programabile


2.1. Introducere n conceptul FPGA
Un circuit FPGA (field programmable gate array) este un circuit integrat destinat a fi configurat de ctre utilizator. Configuraia FPGA este in general specificat prin limbajul HDL (hardware description language), utilizat i n cazul circuitelor ASIC (application specific integrated circuit). Reprezentarea prin scheme electrice este mai rar. FPGA poate fi utilizat la implementarea oricrei funcii logice pe care un circuit ASIC ar putea-o produce. n multe aplicaii circuitele FPGA sunt avantajoase prin preul mai mic dect al circuitelor ASIC i mai ales prin capacitatea de a fi configurate sau modificate chiar de ctre utilizator [1]. Circuitele FPGA conin componente logice programabile, numite blocuri logice i o structur ierarhic de conexiuni reconfigurabile care permite interconectarea blocurilor logice. Ele pot fi asemnate cu plcile de ncercare a prototipurilor de circuite electronice care nu necesit lipituri (breadboards), dar la care interconectarea blocurilor nu se face cablat, cu fire i conectori, ci prin software. Blocurile logice pot fi configurate pentru o multitudine de scopuri, pornind de la realizarea unor pori logice (AND, XOR, etc.) pn la circuite combinaionale complexe. De regul FPGA-urile actuale dispun i de memorii, fie simple circuite basculante bistabile fie blocuri de memorie mai complicate, prin care se pot implementa i circuitele secveniale.

2.1.1. Istoric
Industria FPGA a aprut n mediile implicate n producerea de circuite PROM (programmable read only memory) i a dispozitivelor logice programate PLD (programmable logic devices). PROM-urile i PLD-urile aveau dou opiuni [2]: - opiunea clasic a configurrii de ctre productor, pe loturi mari; - opiunea configurrii de ctre client, chiar la locul aplicaiei (field programming); de fapt primele astfel de arii programabile erau configurate fizic, prin diferite metode de cablare. Co-fondatorii companiei Xilinx, Ross Freeman i Bernard Vonderschmitt, au inventat prima arie de pori programabil n 1985 circuitul XC2064. Circuitul XC2064 avea pori programabile i interconexiuni programabile ntre pori, i prin succesul su comercial a deschis calea unei noi tehnologii i unei piee aferente. Mai precis, circuitul ngloba 64 de blocuri logice configurabile CLB (configurable logic blocks) simple precum i dou tabele de cutare LUT (look-up-tables) cu cte trei intrri. Spre sfritul anilor 80 Marina Militar USA a finanat un experiment propus de Steve Casselman, de realizare a unui computer ce nsuma 600000 de pori reprogramabile. Pn n perioada mijlocului anilor 90 Xilinx a fost unicul productor de FPGA dup care a aprut i o puternic concuren. De exemplu n 1993 firma Actel deinea deja 18% din pia. nce-

pnd cu telecomunicaiile i cu reelele, noi domenii au fost acoperite: bunuri de larg consum, mijloace de transport i aplicaii industriale. O realizare marcant a aprut n 1997 cnd Adrian Thompson a aplicat calculul evolutiv (algoritmi genetici) n FPGA, realiznd primul circuit capabil s recunoasc sunete. Algoritmul lui Thomson implica o matrice de 64 x 64 celule ntr-un cip Xilinx FPGA, care se puteau reconfigura n vederea operaiei de recunoatere a sunetelor.

2.1.2. Principalii productori


Principalii productori de circuite FPGA sunt Xilinx cu 50% i Altera cu 30% din aceast pia [5]. Xilinx furnizeaz software de proiectare gratuit pentru Windows i Linux [6], iar Altera pentru Windows. Software Solaris i Linux poate fi obinut i pe calea ofertelor asociate produselor sau nchiriere [7]. Pentru a favoriza dezvoltarea continu a circuitelor FPGA principalii productori au lansat familiile de cost redus Spartan de la Xilinx i Cyclone de la Altera, extrem de populare n mediile academice. Ali competitori sunt Lattice Semiconductor, Actel, Silicon Blue Technologies, Achronix i QuickLogic.

2.1.3. Dezvoltri recente


Tendinele recente continu dezvoltarea arhitecturilor granulare tradiionale (formate din ansambluri mari de blocuri logice) cu microprocesoare ncorporate i periferice, n vederea realizrii unor cipuri-sistem programabile. Aceast direcie a fost iniiat de Ron Perlof i de Hana Potash de la Burroughs Advanced Systems Group, care nc din 1982 au dezvoltat o arhitectur reconfigurabil de CPU pe un singur cip, numit SB24. Astfel de arhitecturi hibride pot fi gsite n dispozitivele Virtex-II PRO i Virtex-4. Atmel FPSLIC este un alt dispozitiv de acest gen, care include un procesor AVR. O alternativ la utilizarea procesoarelor hardware sunt procesoarele soft care pot fi implementate prin logica FPGA. Cele mai multe FPGA-uri moderne dispun de implementri hardware sau software ale funciilor de nivel nalt: sumatoare, multiplicatoare, decodoare, circuite cu calare pe faz PLL(phase-locked loops) sau pe ntrziere DLL (delaylocked loops) sau funcii matematice precum i de diferite tipuri de memorii. Multe FPGA-uri moderne pot fi reprogramate n timpul funcionrii, ceea ce a dus la ideea calculului reconfigurabil sau a sistemelor reconfigurabile uniti centrale capabile de autoconfigurare dinamic. O astfel de aplicaie este Procesorul Virtual Mitrion, care nu realizeaz o reconfigurare dinamic propriu zis n timp real, dar se poate reconfigura prin comenzi directe din program. Sunt posibilele i reconfigurrile pariale, n care unele pri din circuit continu s lucreze n timp ce altele sunt configurate. Pentru a face posibile reconfigurrile pariale arhitecturile trebuie s permit accesul selectiv la resursele de configurare disponibile. Astfel de arhitecturi reconfigurabile pot fi realizate i n tehnologii hibride, ca i n cazul microprocesorului Stretch S5000 care ofer microprocesoare i arii FPGA pe acelai cip.

2.1.4. Date referitoare la piaa circuitelor FPGA


Numrul de pori

1987: 9.000 de pori, Xilinx 1992: 600.000 de pori, Naval Surface Warfare Department Anii 2000: zece milioane de pori, cu 1000 de pini I/O, la frecvene de 500MHz.

Dimensiunea pieei

1985: primul FPGA comercial, Xilinx 1987: 14 milioane $ ~1993: >385 milioane $ 2005: 1.9 miliarde $ 2010 estimare: 2.75 miliarde $

Aplicaii incluznd FPGA


2005: 80.000 2008:90.000 2010 estimare: 110.000 [3]

Fig. 2.1. Circuitul FPGA Stratix IV GX produs de Altera

Fig. 2.2. Placa Xilinx S6-SP601

2.1.5. O comparaie a FPGA cu alte tehnologii


ASIC este conceptul cel mai apropiat de FPGA. Primele FPGA-uri erau mai lente, mai puin eficiente energetic i n general mai puin funcionale dect echivalentele lor fixe ASIC. n urma creterii volumului produciei i aplicaiilor, a eforturilor de cercetare-dezvoltare i a perfecionrilor tehnologice, performanele FPGA s-au apropiat tot mai mult de cele ASIC. Avantajele include un timp de acces la pia foarte scurt, reprogramarea i depanarea de ctre utilizator i costuri sczute de cercetare, dezvoltare, proiectare i testare (non-recurring engineering costs). O strategie extrem de avantajoas const din dezvoltarea produselor n tehnologie FPGA (rapid prototyping) i realizarea versiunii finale n ASIC. Mai precis, FPGA-urile reprezint modalitatea cea mai sigur de validare a sistemelor complexe, (validri pre-siliciu i post-siliciu) i a dezvoltrilor de tip firmware. n acest fel productorii pot evita costurile asociate testrii directe a prototipurilor, caz n care fiecare greeal de proiectare necesit realizarea unui nou prototip. Un alt concept asemntor este CPLD (complex programmable logic device). Circuitele CPLD au o complexitate mai mic dect a celor FPGA, dar mai mare dect a circuitelor PAL (programmable array logic). Unitatea lor component de baz este macrocelula, care implementeaz funcii logice booleene n forma canonic disjunctiv, precum i alte operaii logice mai specializate. Fa de FPGA, circuitele CPLD au o capacitate mai redus (zeci de mii de pori fa de sute de mii sau milioane). Pe lng acesta, FPGA sunt mult mai flexibile. Se poate afirma c FPGA continu linia de dezvoltare a PAL CPDL nu att prin creterea numrului de arii ct mai ales prin atenia acordat circuitelor de reconfigurare, care sunt de mare complexitate i performan.

2.1.6. Arhitecturi FPGA


Cel mai adesea arhitectura FPGA const dintr-o arie de blocuri logice configurabile CLB, paduri intrare-ieire I/O i canale de rutare. n general toate canalele de rutare sunt de aceeai capacitate (au acelai numr de fire). O implementare FPGA trebuie s dispun de resurse adecvate. n timp ce numrul de CLB-uri i de I/O sunt uor de determinat din proiect, numrul de ci de rutare poate varia considerabil, chiar i n cazul unor proiecte foarte asemntoare din punct de vedere logic. De exemplu, o matrice de comutare (matrix switch sau crossbar switch) necesit mult mai multe rutri dect o arie sistolic, o form particular de arhitectur paralel, organizat ca o reea (pipe network). Cile de rutare neutilizate cresc costul i scad performanele circuitului, fr a aduce nici un beneficiu, productorii de FPGA ncearc s optimizeze numrul lor, astfel nct majoritatea proiectelor s fie posibile n termeni de LUT i I/O. Aceast optimizare poate fi realizat fie prin experimentarea i analizarea unor proiecte semnificative fie aplicnd regula lui Rent: T = t gp unde T este numrul de terminale, g numrul de componente interne, iar t i p constante.

Canal de rutare

Pad I/O

CLB

Fig. 2.3. Structura generic FPGA Un CLB clasic FPGA const dintr-un tabel de cutare cu 4 intrri (4LUT) i un bistabil D (flipflop), conectate ca n figura urmtoare. n ultimii ani a aprut o tendin de trecere nspre 6LUT, cu scopul creterii performanelor [4].

Fig. 2.4. Un CLB tipic Exist patru intrri i o intrare de sincronizare Clock. Ieirea este furnizat de LUT, putnd fi nregistrat sau nenregistrat. Semnalele de sincronizare, precum i alte semnale cu fanout ridicat care sunt specifice fiecrei aplicaii n parte, sunt tratate n mod separat, prin reele de rutare dedicate. Amplasarea terminalelor (pinilor) CLB-ului este ilustrat n figura urmtoare.

Fig. 2.5. Amplasarea terminalelor Fiecare intrare in este accesibil dintr-o latur (jos, stnga, sus i dreapta) iar ieirea out poate fi conectat la cile de rutare att prin canalul din dreapta ct i prin cel de jos. Fiecare pin CLB poate fi conectat la oricare dintre cile de rutare adiacente. n mod similar, un pad I/O poate fi conectat la fiecare dintre traseele canalelor adiacente. Mai precis, dac sub un pad I/O din partea superioar a cip-ului trece un canal orizontal cu W fire, padul poate fi conectat la oricare dintre cele W fire. n general sistemele de rutare FPGA sunt nesegmentate, adic fiecare segment de cablaj este conectabil la un bloc de comutaie prin cel mult un CLB. Cile de conectare mai lungi se obin cu ajutorul blocurilor de comutaie. Totui, pentru realizarea unor interconexiuni de mare vitez unele arhitecturi sunt prevzute i cu ci de rutare care se ntind pe lungimea mai multor blocuri.

CLB

Bloc de conexiune

Canal de rutare

Fig. 2.6. Principiul de rutare FPGA Blocurile de conexiune (switching boxes) apar oriunde un canal vertical se intersecteaz cu unul orizontal. Un fir care intr ntr-un bloc de conexiuni poate fi conectat, prin trei conectoare programabile cu alte trei fire din canalele adiacente. Topologia (modelul spaial) al conectoarelor programabile este topologia planar, bazat pe organizarea traseelor de rutare. Firul numrul 1 dintr-un canal poate fi conectat numai la firul numrul 1 din canalele adiacente, firul numrul 2 poate fi conectat numai la firele numrul 2 i aa mai departe. Funcionarea unui bloc de conexiuni este prezentat n figura urmtoare.

Canal de rutare

Conector programabil

Fig. 2.7. Topologia unui bloc de conexiuni

2.2. Resurse hardware i software


Familiile moderne FPGA extind aceast capacitate de conectare prin realizarea cablat a unor funcii de nalt nivel, crescnd astfel performanele (vitez de lucru crescut, arie de siliciu mai mic, etc.) i scznd efortul de proiectare[8]. Astfel de blocuri pot fi: blocuri generice DSP, multiplicatoare, blocuri PLL i/sau DLL, circuite I/O de mare vitez, memorii, registre de deplasare, numrtoare, etc. Resursele hardware investite n FPGA sunt extrem de diverse, n funcie de productori i de arhitectura aleas. Pe de alt parte, resursele software, de care depind n mare msur i performanele hardware-ului, sunt extrem de specifice, ntr-o continu dezvoltare i evoluie [8].

2.2.1. Resurse hardware A. Blocuri funcionale integrate 1) Memorii: memoriile interne permit creterea vitezei de operare i utilizarea mai eficient a pinilor I/O. Pe lng acesta structura sistemului este mult simplificat. Capacitile de memorie utilizate sunt destul de mari, de exemplu Altera Stratix II conine pn la 9 Mb. Se pot ntlni diferite configuraii. Pentru RAM se ntlnesc variantele single port, simple dual port, true dual port i bidirectional dual port. Se ntlnesc i memorii ROM i registre de deplasare. Pornind de aici se pot implementa i alte structuri, cum ar fi memoriile FIFO (first-in-first-out) sau memorii asociative. 2) PLL/DLL: circuite PLL i DLLs pot fi utilizate pentru compensarea ntrzierii de propagare a semnalului de sincronizare clock de-a lungul circuitului. Alte aplicaii interesante sunt sintetizarea de frecvene prin multiplicare/divizare i condiionarea clock-ului (factor de umplere i defazaj). Circuitele DLL sunt ieftine, consum puin energie i sunt imune la zgomote, n timp ce PLL-urile sunt mai versatile i permit operaii mai complexe cum ar fi implementarea filtrelor acordabile, pe un domeniu de frecvene mai larg. n figura 2.8 se prezint arhitectura Spartan-3 Xilinx avnd patru circuite DCM (digital clock managers) bazate pe blocuri DLL. 3) Circuite aritmetice: unele FPGA-uri dispun de numr mare de blocuri aritmetice simple. De exemplu familia Virtex-5 LX Xilinx include multiplicatoare, prin care se pot realiza operaii de pn la 25 18 bii n complement fa de doi. Blocuri mult mai complexe, DSP-uri, se pot gsi n circuite mai avansate, cum ar fi Stratix II Altera. La acest produs DSP-urile sunt cuprinse ntro structur registru + multiplicator + sumator/scztor (36-bii)/acumulator (52-bii). n arhitectura Stratix II Altera sunt vizibile blocurile PLL, RAM (M-RAM, M-512 i M-4 K) i blocuri DSP (vezi figura 2.9). 4) Transceivere: dispozitive de emisie-recepie (transceiver) pentru diferite standarde (10-Gb Ethernet i10-Gb canal cu fibr optic), ca i protocoale de comunicaie definite de utilizator pot fi uor implementate prin blocuri de codare/decodare i serializare/deserializare a datelor, buffere

de transmisie/recepie i sincronizare. De exemplu, circuitul ORCA ORT82G5 (Lattice) include transceivere cu opt canale, fiecare opernd n domeniul 600 Mb/s - 3.7 Gb/s, cu o interfa duplex de sincronizare cu clock ncorporat i memorare temporar a datelor.

Fig. 2.8. Arhitectura Spartan 3 Xilinx [8]

Fig. 2.9. Arhitectura Stratix II Altera [8]

5) Procesoare integrate: cele mai complexe arhitecturi FPGA ajung s includ i procesoare nsoite de perifericele aferente, n vederea materializrii conceptului System-on-Chip (aa numitele SoC solutions) prin care tot sistemul de calcul este implementat pe un singur cip de Siliciu. De exemplu circuitul Virtex-4 FX (Xilinx) include procesoare RISC (reduced instruction set computer) de tipul IBM PowerPC 405 de 32 de bii, capabile s funcioneze la 450 MHz, cu controlere de acces la memorii RAM, o unitate aritmetic hardware pentru multiplicare/divizare, trei timere diferite, interfa direct pentru reea Ethernet, registre de configurare MAC, o unitate de procesare auxiliar pentru interfaarea resurselor logice FPGA n vederea conectrii la acceleratoare hardware, a introducerii de instruciuni definite de utilizator sau uniti de coprocesor n virgul mobil [8]. Familia Excalibur (Altera) include un procesor RISC standard ARM922T de 32 de bii la frecvena de 200 MHz, 8-kB de memorie cache i de instruciuni, cu periferice programabile, un transciever asincron UART i dou timere. Magistrala este de tip AMBA (advanced microcontroller bus architecture) cu acces la memoriile interne SRAM (static RAM) cu un port i dou porturi. Familia QuickMIPS (QuickLogic) incorporeaz un procesor RISC de 32 de bii de 175 MHz iar familia Atmel FPSLIC combin un AT40K FPGA cu un microcontroler RISC de tip AVR de 8 bii, cu 16 kB 16 SRAM de program i 16 kB 8 SRAM de date. Dintre perifericele AVR se pot meniona interfaa serial industrial de dou fire, dou UART, dou timere/numrtoare de 8 bii i PWM (pulsewidth modulation). Toate aceste FPGA-uri incorporeaz resurse hardware prin interfaare JTAG (Joint Test Action Group), bazat pe standardul IEEE 1149.1 (Standard Test Access Port and Boundary-Scan Architecture) pentru diagnosticare i depanare. Alte dispozitive adopt strategia invers: combinarea microcontrolerelor standard cu circuite FPGA. De exemplu familia de microcontrolere STMicroelectronics PSD incorporeaz un microcontroler rapid 8051 de 8 bii cu multe periferice: un convertor analog-digital de 8 bii cu 4 canale, dou UARTS, 5 ieiri PWM de 8 bii, 3 timere de 16 bii la care se adaug un PLD simplu cu 16 macrocelule.

B. Condiionarea semnalelor intrare/ieire Resurse specifice trebuiesc alocate pinilor I/O pentru ca FPGA-urile s poat fi conectate cu uurin cu alte dispozitive, la tensiuni diferite, fr a fi nevoie de interfee suplimentare. Pinii I/O sunt de obicei grupai n funcie de diferitele standarde: conectare ntre cipuri (chip-to-chip semnale difereniale de joas tensiune sau circuite cuplate prin emitor de tensiune pozitiv), conectare de tip backplane n care mai muli pini se conecteaz n paralel sau interfee pentru memorii. Un exemplu, corespunztor familiei Virtex, este prezentat n fig. 2.10.

Fig. 2.10. Tensiunile de referin intern i extern n cazul blocurilor I/O Virtex

C. Dispozitive speciale 1) Dispozitive programabile o singur dat OTP (One-time-programmable): dispozitivele nevolatile sunt uneori preferate celor volatile, care utilizeaz celule SRAM.
Comand confugurare Citire/scriere Date

Fig. 2.11. Celul SRAM pentru configurare Celulele SRAM sunt cel mai des utilizate (Xilinx, Altera, Atmel) pentru c ofer o mare flexibilitate n vederea reconfigurrii. Dispozitivele OTP nevolatile sunt totui aplicate n anumite situaii n care primeaz avantajele lor: nu au nevoie de resurse externe pentru configurarea la alimentare (pornesc foarte repede), consum foarte redus de putere, rezistene i capaciti de contact foarte mici, imunitate foarte bun la zgomote. n tehnologiile Actel i Quicklogic configurarea se realizeaz prin arderea selectiv a unor micro trasee fuzibile (antifuse devices) realizate fie din oxid-nitrit-oxid ONO fie metalice (tungsten). 2) Dispozitive de putere mic: scderea puterii consumate de ctre circuite este un imperativ puternic, att pentru a mbunti performanele funcionale ale produselor prin creterea eficienei utilizrii energiei (mai ales a bateriilor) ct i prin scderea temperaturilor de funcionare. FPGA sunt de obicei mai puin eficiente la acest capitol din cauza resurselor alocate programrii. Din acest punct de vedere soluiile bazate pe OTP sunt cele mai avantajoase. Ele reuesc s treac din modul de ateptare (idle) n care se consum foarte puin energie (10 A de exemplu) n modul de lucru foarte rapid (sec) i ofer i rezistene mici de comutare.

i circuitele SRAM pot fi eficientizate din punctul de vedere al consumului prin unele msuri constructive cum ar fi: - distribuirea de tranzistoare de diferite mrimi pe suprafaa de siliciu, astfel ca ele s poat fi utilizate n subcircuite de mare sau mic vitez, optimiznd consumul dinamic; - suplimentarea izolrii componentelor, de exemplu straturi subiri suplimentare de oxid; 3) Dispozitive tolerante la radiaie: aplicaiile aerospaiale n care FPGA au fost incluse, Staia Spaial Internaional, Telescopul Spaial Hubble, Mars Pathfinder i altele, ridic probleme speciale de lucru n mediu radioactiv.

Bloc defect

Fig. 2.12. Exemplu de configuraie tolerant la defecte

Pentru a rspunde acestor solicitri au fost dezvoltate familii de FPGA de tip antifuse cu rezisten sporit la radiaie cum ar fi RTSX/RTAX sau Aeroflex Eclipse. Exist i versiuni protejate mpotriva perturbaiilor radio: familiile Atmel AT40KEL040 sau Xilinx QPRO-R Virtex-II. Un alt demers face apel la capacitatea FPGA-urilor SRAM de reconfigurare, prin dezvoltarea de soluii tolerante la defeciuni. Prin operaiuni de diagnosticare a zonelor defecte i nlocuire a lor cu ajutorul reconfigurrii se pot obine circuite de mare fiabilitate (vezi fig. 2.12). 4) Circuite securizate: aplicaiile n care FPGA sunt conectate n reele ridic problema securizrii IP-urilor. Pe de o parte n aplicaiile mai simple pot fi utilizai bii de securizare care previne citirea de ctre utilizator a configuraiilor. n cazul aplicaiilor foarte complexe (multiprocesor, interfee de comunicaie, codecuri, etc.) se adaug un FPGA nonvolatil care s gestioneze accesul la componentele interne.

2.2.2. Resurse software Complexele structuri hardware ale FPGA-urilor nu ar putea fi utilizate fr un ntreg arsenal de instrumente software specifice. Acest domeniu este n plin dezvoltare dar exist deja o ofert bogat de resurse software. A. Nuclee IP Pentru simplificarea proiectrii sistemelor FPGA complexe exist biblioteci de funcii predefinite complexe, n multe cazuri parametrizabile, precum i de circuite care au fost deja testate i optimizate. Aceste elemente sunt de regul protejate ca nuclee de proprietate intelectual (IP cores), fiind vndute fie direct de productorul circuitului fie de firme tere specializate cum ar fi Modelware sau QuickFlex. Pe de alt parte alte circuite predefinite sunt oferite pe gratis de comunitile free and open source, ca produse deschise (open cores) de tipul GPL (general public license) sau BSD (Berkeley software distribution). Astfel de biblioteci acoper largi domenii de aplicaii: comunicaii (de exemplu High-level Data Link Control, PCI-X, Viterbi decoder), multimedia (video codecuri), procesoare de semnal (transformarea fast Fourier, filtre FIR, transporturi (Controller Area Network Bus), etc. B. Procesoare Soft Procesoarele soft au fost aplicate In acest domeniu de Xilinx (PicoBlaze i MicroBlaze) i de Altera (Nios iNios II). PicoBlaze este un microcontroler de 8 bii de capacitate mic dar implementat cu un numr redus de blocuri logice. MicroBlaze corespunde unei arhitecturi RISC de 32 bii cu un set standard de periferice. Procesorul Nios are o funcionare mai complex, cuprinznd chiar i posibilitatea adugrii de instruciuni noi de ctre client (custom logic).

Rezultat

Fig. 2.13. Instruciuni client n cazul procesorului Nios II C. Instrumente software Vnztorii de FPGA au dezvoltat n timp multe instrumente soft originale adresate tuturor activitilor cerute de aplicarea FPGA-urilor. n general aceste produse includ nuclee IP periferice, instrumente pentru configurarea procesoarelor soft, instrumente pentru dezvoltarea de software (editoare, compilatoare, asambloare, editoare de legturi i depanatoare), depanatoare i testoare hardware/software i instrumente software i hardware pentru plcile de dezvoltare. Cteva astfel de produse sunt Embedded Development Kit (EDK) Xilinx, SOPC Builder i Nios II IDE (integrated development environment) Altera, System Designer Atmel i QuickWorks de la Quick Logic. De exemplu Xilinx EDK uureaz integrarea nucleelor IP hard utiliznd tehnologia onchip IBM CoreConnetBus i permite accelerarea algoritmilor prin Fast Simplex Link. Permite de asemenea depanri combinnd dou instrumente specifice: Sw Debugger i ChipScope Pro. Altera IDE include instrumente de dezvoltare (editare, construcie i depanare) pentru Nios II iar SOPC Builder este orientat spre integrarea automat a componentelor sistem IP. O politic de succes n domeniu este adaptarea instrumentelor tradiionale din domeniul ASIC. implementations have been adapted for FPGA. Aceste instrumente sunt focalizate n special pe RTOS (Real Time Operating Systems), depanatoare Hw/Sw i proiectare n C. n ceea ce privete RTOS, unele produse de succes sunt MontaVistaLinux, Mentor Graphics Nucleus i Wind River VxWorks, care sunt compatibile cu procesoarele Xilinx i Altera. Pe lng sistemul de operare n sine toate aceste instrumente includ software de modelare i de dezvoltare, cel mai adesea scris n limbajele VHDL, Verilog, C sau C++. Astfel de produse sunt Seamless FPGA i Catapult C Synthesis de la Mentor Graphics i Active-HDL de la Aldec.

2.3. Proiectarea i programarea FPGA


Definirea comportrii FPGA de ctre utilizator se face fie prin limbaje de tip HDL (hardware description language) fie, ca i n cazul majoritii circuitelor electronice, prin scheme. Avantajul HDL apare n cazul structurilor foarte mari, deoarece ele pot fi definite doar prin specificarea numeric, fr a fi nevoie de desenarea manual a elementelor. Pe de alt parte reprezentarea schematic ofer o vizualizare mult mai bun a proiectului. n continuare, utiliznd un software din categoria EDA (electronic design automation), cum ar fi de exemplu Sistem Generator elaborat de Xilinx, se genereaz o list de conexiuni tehnologic (netlist). Lista de conexiuni este convertit n arhitectura circuitului printr-un proces numit placeand-route prin care se definesc poziiile componentelor i legturile electrice dintre ele. Etapa place-and-route este realizat de obicei cu ajutorul unui software furnizat de ctre compania productoare a FPGA. Utilizatorul valideaz rezultatul obinut prin analiza rspunsurilor n timp, simulri i alte metode de verificare. Odat ce fazele de proiectare i de validare sunt terminate, se genereaz fiierul binar surs de (re)configurare a FPGA, tot cu software-ul productorului. n continuare fiierul surs este prelucrat de software-ul productorului, fiierul rezultat fiind transferat circuitului FPGA prin interfaa serial JTAG. n cursul tuturor acestor faze rezultatele sunt verificate prin simulare. De fapt nsui Xilinx System Generator admite Simulink Matlab ca surs a descrierii funcionrii circuitului proiectat. Cele mai des utilizate HDL-uri sunt VHDL i Verilog, dei n ncercarea de a reduce complexitatea proiectelor, care este mai mult sau mai puin echivalent cu proiectarea n limbaje de asamblare, exist actualmente o tendin de abstractizare, prin introducerea unor limbaje alternative.

2.4. Aplicaii FPGA


Aplicaiile FPGA includ unele domenii eseniale pentru electronica modern: - DSP (digital signal processing) o categorie vast de aplicaii de procesare digital a semnalelor, dintre care cele mai cunoscute sunt: procesarea semnalelor audio i radio, recunoaterea vorbirii, a vocilor i a sunetelor, radar i sonar, procesarea ariilor de senzori, analiz spectral, analiza statistic a semnalelor, telecomunicaii, procesarea semnalelor biomedicale, seismice, etc. - Aplicaii n aviatic, aparatur militar, criptografie i radioastronomie; - Realizarea rapid a prototipurilor ASIC; - Imagistic, etc.;

FPGA se utilizeaz cu bune rezultate n cazul aplicaiilor de calcul de nalt performan, cum ar fi n cazul procesrilor FFT (Fast Fourier Transform), a calculului convoluional i procesrilor paralele, avnd performane superioare microprocesoarelor convenionale. n general circuitele FPGA sunt recomandabile aplicaiilor de tip vertical, care nu sunt obiectul produciei de mas. n cazul produselor de mas este preferabil apelarea la ASIC, FPGA fiind utile doar n faza de realizare i testare a prototipurilor. Se poate afirma c aplicaiile FPGA pot nlocui cu succes orice aplicaie de tip microprocesor sau DSP care nu necesit prelucrri n virgul mobil [8]. Avantajele lor strategice sunt calculul hardware paralel, reconfigurarea i capacitatea de a ngloba cu uurin produse hardware i software eterogene. Uurina de adaptare la orice tip de periferice confer circuitelor FPGA statutul de principal platform de dezvoltare a aplicaiilor SoC (system on chip). n continuare se propune o clasificare a aplicaiilor FPGA.

A. Calculul configurabil Calculul configurabil face apel la conceptul de calculator configurat de utilizator FCCM (full custom computing machine), a crui hardware poate fi reorganizat pentru a fi adaptat la algoritmii i la fluxurile de date prelucrate ntr-un anumit moment. FCCM sunt utilizai pentru algoritmi cu multe calcule aritmetice, cu multe procesri n paralel sau care presupun multiple secvene de operare. Astfel de aplicaii pot fi exemplificate printr-un sistem fuzzy cu implementare FPGA pentru conducerea automat a unui robot mobil [9] sau printr-un un sistem de conducere microprogamabil a proceselor, n care predomin circuitele bistabile, multiplexoarele, numrtoarele i blocurile de memorie [10]. Un astfel de sistem realizeaz n fapt un automat programabil pe un singur cip, cu avantajele care decurg din aceast tehnologie: miniaturizare extrem, fiabilitate, consum energetic redus, etc. Un coprocesor de achiziii i generare de date reconfigurabil, care poate fi conectat la PC prin USB este descris n referina [11]. El poate fi configurat pentru a implementa o serie de instrumente de msur cum ar fi osciloscopul sau analizorul de stri logice. Procesele rapide sunt procesate de FPGA n timp ce vizualizarea i panoul de comand sunt rezidente n PC. National Instruments ofer platforme FPGA care pot fi integrate n mediul LabView pentru aplicaii cum ar fi generatoare de semnal, variatoare de turaie, etc. care depesc n mod clar performanele altor tehnologii.

B. Sisteme reconfigurabile dinamic Reconfigurarea FPGA poate fi obinut prin dou procedee principale: 1) Reconfigurarea prin compilare, care poate fi fcut n afara funcionrii normale, cu scopul de a aduga sau terge componente noi sau pentru depanare.

2) Reconfigurarea dinamic RTR (run-time-reconfiguration), executat n timpul rulrii. Ea poate fi lansat din interiorul aplicaiilor sau prin stimuli externi. La rndul ei RTR poate fi global sau local. RTR se aplic de obicei n cazul folosirii mai multor variante de periferice (mobile/wireless) pentru optimizarea conectrii sau cu scopul reducerii consumului de energie, prin deconectarea circuitelor care nu sunt necesare la un moment dat. Reconfigurri dinamice n timp real cum ar fi de exemplu cele necesare autoadaptrilor sistemelor de conducere sunt de asemenea posibile, dar ele necesit o mare atenie, pentru a evita pericolul unor rspunsuri tranzitorii necontrolate.

C. Prototipare rapid Prototiparea FPGA const din emularea schemelor circuitelor digitale complexe prin dispozitive programabile, n vederea testrii lor. Avantajele acestei abordri sunt evidente: - cost redus i posibilitatea modificrilor/mbuntirilor rapide; - scurtarea ciclului de proiectare datorit utilizrii simulrilor; - posibilitatea migrrii imediate nspre ASIC. Exist i unele inconveniente relativ minore: - viteza de funcionare a prototipurilor FPGA este mai mic dect a circuitelor ASIC. - n aplicaiile complexe sunt necesare mai multe platforme FPGA; conectarea la instrumente de nivel nalt, de exemplu Simulink/Matlab, necesit conversii pretenioase [12]. - unele structuri hardware sunt greu de emulat, de exemplu memoriile de mare capacitate. - compatibilitatea codurilor HDL ntre ASIC i FPGA nu este garantat.

D. Comunicare i interfaare Aplicaiile din domeniul comunicaiilor necesit vitez, consum redus, calitate i adaptabilitate la noi standarde i la protocoale care evolueaz rapid. FPGA-urile aduc n acest domeniu reducerea timpului de acces la pia a produselor i adaptabilitatea rapid fr modificri hardware.

E. Prelucrarea digital a semnalelor Circuitele specializate n prelucrarea digital a semnalelor DSP au unele dezavantaje: memorie i format pentru date fixe, magistrale puine i neperformante, numr redus de uniti aritmetice cum ar fi cele de tip MAC (multiply accumulate), resurse limitate intrare/ieire, etc. n aceast privin FPGA ridic unele probleme de programare, dar ofer n schimb configuraii flexibile, procesri paralele i interfee de calitate. n figura urmtoare este ilustrat deosebirea dintre tehnologia DSP cu un singur MAC i FPGA n domeniul filtrrii numerice.

Fig. 2.14. Implementarea unui filtru FIR (finite impulse response) cu 256 coeficieni printr-un DSP cu o unitate MAC a) respectiv cu un FPGA cu MAC-uri multiple [8] O alt variant de abordare este nglobarea blocurilor DSP n sisteme complexe FPGA. Dintre aplicaiile de prelucrare digital a semnalelor care sunt menionate n literatur [8] putem enumera: - variatoare de turaie de mare precizie pentru motoare asincron de mare turaie; - generatoare PWM trifazate; - filtre active adaptive; - viziune artificial, etc.

3. Limbajul VHDL

3.1. Istoric
VHDL (Very high speed integrated circuits Hardware Description Language) este un limbaj utilizat pentru descrierea sistemelor electronice hardware pornind de la structura lor de blocuri i interconexiunile dintre ele sau de la modul de funcionare. El a devenit cel mai important instrument software din domeniul proiectrii circuitelor electronice digitale pentru c permite descrierea executabil i portabil a proiectelor. Istoria VHDL este legat de Departamentul Aprrii din SUA care a decis n 1980 s lanseze un limbaj unificator n domeniul descrierii circuitelor electronice. n 1985apare prima versiune numit VHDL 7.2, produs de un consoriu Intermetrics, IBM i Texas Instruments. ncepnd din 1986 toate drepturile asupra VHDL au fost transferate ctre IEEE (the Institute of Electrical and Electronics Engineers), care l standardizeaz n 1987 (VHDL IEEE 1076-1987). VHDL permite descrierea unui sistem electronic de la nivelul structural/arhitectural pn la nivelul porilor logice. El permite simularea funcionrii sistemelor precum i specificarea tehnologiilor i detaliilor de fabricaie. Dintre avantajele acestui limbaj se pot enumera [13]: Disponibilitatea public. VHDL a extins n domeniul public un concept provenit din tehnica militar, producnd un efect profund asupra electronicii, declannd o etap de progrese semnificative. Suport pentru toate metodologiile de proiectare (top-down sau bottom-up cu variantele lor) i toate tehnologiile de proiectare (asincrone, sincrone, PLA sau random logic). Independen fa de procesul i tehnologia de implementare fizic.

3.2. Proiectarea top-down a sistemelor digitale


Metodologia top-down este proprie sistemelor cu grad crescut de complexitate. Descrierea unui sistem electronic poate fi fcut la diverse nivele ierarhice. Nivelul inferior corespunde descrierii circuitelor integrate, dup care urmeaz nivelele plcii (pe care sunt mai multe circuite integrate), a modulului (compus din mai multe plci) i a sistemului n ntregul su. n mod tradiional dezvoltarea unui sistem electronic se face de jos in sus (bottom-up), fiecare nou nivel fiind validat prin testare, conform specificaiilor.

Fig. 3.1. Sinteza sistemelor electronice Noiunile de baz din domeniul sintezei sistemelor electronice sunt: - Specificarea: descrierea neambigu i determinist a intrrilor, ieirilor i relaiilor dintre ele; - Implementarea: modul n care se realizeaz fizic legturile dintre intrri i ieiri; - Sinteza: procesul automat prin care se realizeaz o implementare plecnd de la specificaii; - Verificarea: procesul prin care proiectantul se asigur c implementarea este conform cu specificaiile; Prin recurgerea la conceptul de descriere a hardware-ului devine posibil i abordarea de sus n jos (top-down). n cadrul acestei metodologii este posibil dezvoltarea sistemelor chiar dac nu se dispune de implementri ale componentelor sale, opernd n schimb cu descrierile lor funcionale. Aceasta permite proiectanilor o flexibilitate maxim n partiionarea proiectelor i studierea lor prin simulri chiar nainte de fazele de implementare. Se reduce astfel la maximum numrul de cicluri de depanare-mbuntire a prototipurilor. De asemenea se faciliteaz reutilizarea unor pri din proiecte anterioare, care sunt deja validate funcional. Metodologia top-down presupune ca toate nivelele de implementare s fie documentate att structural (netlist) ct i funcional. Limbajul VHDL a fost conceput tocmai n acest sens. n plus, fiecare entitate VHDL trebuie s aib asociat un set de metode de testare (test bench) pe baza cruia s se poat asigura simularea corect a proiectului. Desigur, metodologia top-down nu este folosit exclusiv, abordrile uzuale fiind de fapt mixte, echilibrul dintre dezvoltrile bazate pe descrierile prin specificaii de nivel nalt i cele de la nivel de component standardizat fiind dinamic.

3.3. Elemente de VHDL

3.3.1. Terminologia VHDL


n continuare prezentm elementele de baz ale limbajul HDL prin intermediul primei interfee care a fost realizat, i care i-a pstrat un loc privilegiat n aplicaii. O alt interfa HDL popular mai ales n SUA, Verilog, a fost lansat ulterior. Ea va fi prezentat n seciunea urmtoare. VHDL are o terminologie specific, unii termeni utilizai avnd un coninut care necesit o definire precis. Entitatea (Entity) este blocul de baz dintr-un proiect. Entitile pot fi ierarhizate, cele de nivel nalt (top-level-entity) coninndu-le pe cele de nivel jos (low-level-entity). Arhitectura (Architecture) are rolul de a descrie entitatea, din punct de vedere funcional sau/ i structural. O entitate poate avea mai multe arhitecturi, legtura dintre ele fcndu-se prin instruciuni de configurare. Configuraia (Configuration) este folosit pentru a lega declaraia unei componente de o pereche entitate-arhitectur. O configuraie poate fi considerat ca o list de componente pentru proiect. Pachetul (Package) este o colecie de tipuri de date i subprograme folosite uzual n proiect, utilizat ca un toolbox. Bus este un grup de semnale sau o metod particular de comunicaie. Driver este denumirea unei surse de semnal. Atributul (Attribute) este o dat ataat sau predefinit referitoare la obiectele VHDL, ca de exemplu fan-out-ul unei pori. Generic este un parametru care transmite o informaie despre o entitate, cum ar fi de exemplu timpii de cretere sau de cdere. Proces (Process) este unitatea de baz a execuiei n VHDL. Toate operaiile care se efectueaz ntr-o simulare a unei descrieri VHDL sunt compuse dintr-unul sau mai multe procese.

3.3.1. Cum arat o descriere VHDL


n VHDL o component hardware (ncepnd de la o poart pn la un microprocesor) este reprezentat prin conceptul de entitate, creia i se asociaz o arhitectur. Entitatea are n primul rnd scopul de a defini conexiunile exterioare, denumite porturi. Pe lng definirea numelor porturilor se definesc direcia datelor (IN, AUT, INOUT) i tipul lor (INTEGER, BIT, etc.)

Descrierea arhitecturii poate fi funcional - func (se descrie comportamentul entitii) sau structural struc (se descrie schema electric a entitii). Caracteristic VHDL-ului este posibilitatea utilizrii simultane ,sub aceeai interfa, a dou sau chiar a mai multor descrieri. n cele ce urmeaz se exemplific modul de descriere a unui circuit logic simplu. n prima seciune se definete entitatea exemplu. ENTITY exemplu IS -- declaraia porturilor PORT(a, b, c : IN Bit; f : OUT Bit) ; END exemplu; n continuare se definete comportamentul entitii (descriere funcional). ARCHITECTURE ex_func OF exemplu IS BEGIN F <= (a OR b) AND c AFTER 5 ns ; END ex_func ; Entitatea exemplu conine 4 conexiuni externe, toate de tip binar (bit). Pe lng funcia logic F propriu zis se mai specific i valoarea ntrzierii introdus de circuit, de 5 ns. Reprezentarea grafic a descrierii apare n Fig. 3.2.

a b c Fig. 3.2. Descrierea funcion Varianta structural a aceluiai circuit este urmtoarea. ARCHITECTURE ex_struct OF exemplu IS -- declaraia de componente COMPONENT and_gate PORT (a1, a2 : IN Bit ; a3 : OUT Bit) ; END COMPONENT ; COMPONENT or_gate PORT (o1, o2 : IN Bit ; o3 : OUT Bit) ; END COMPONENT ; -- declaraia de semnal local SIGNAL d : Bit ; f <= (a OR b) AND c f

BEGIN -- descriere structural g1 : or_gate PORT MAP (a, b, d) ; g2 : and_gate PORT MAP (c, d, f) ; END ex_struct ; Dup cum se observ arhitectura ex_struct const dintr-o list de componente definite la rndul lor prin binomul entitate arhitectur. Definirea porii I este prezentat n continuare, cea a porii SAU fiind asemntoare. ENTITY and_gate IS PORT(a1, a2 : IN Bit; a3 : OUT Bit) ; END and_gate; ARCHITECTURE and_gate OF and_gate IS BEGIN a3 <= a1 AND a2 AFTER 2 ns ; END and_gate ;

a b c

g1

d g2 f

Fig. 3.3. Descrierea structural Datele despre componente i modul lor de interconectare sunt coninute ntr-un fiier netlist. Este de observat c dei n electronica clasic modalitatea standardizat de reprezentare a circuitelor era schema, alctuit din simboluri unite prin trasee care marcheaz semnalele, n VHDL este preferat reprezentarea sistemelor prin fiiere de tip netlist, avnd n vedere complexitatea extraordinar a aplicaiilor. n plus, acest mod de modelare a circuitelor faciliteaz simulrile. Reprezentrile schematice nu dispar, dar ele se restrng mai ales la nivelele ierarhice inferioare. n instrumentele software mai noi trecerea de la codul HDL la scheme sau invers se poate face automat, dar nu trebuie s uitm ca direct executabil este codul.

3.4. Exemple aplicaii VHDL

3.4.1. Regulator pentru un rezervor de lichide


Urmtoarea aplicaie prezint implementarea unui regulator al nivelului lichidului dintr-un rezervor [5]. Admisia i evacuarea lichidului sunt comandate prin electroventilele, VIN i VOUT. Pe lng aceasta, regulatorul are i rolul de a regla temperatura lichidului, prin intermediul unui element de nclzire electric H. Dac fie nivelul fie temperatura lichidului ies din domeniile stabilite se va genera un semnal de alarm A. Pentru realizarea scopului propus instalaia are nevoie de cte doi senzori de nivel (jos LLS i sus HLS) i de temperatur (rece TC i cald TH).

HLS Regulator

VIN Rezervor

VOUT

Alarma

A LLS H TC TH

Fig. 3.4. Schema bloc a sistemului de reglare a lichidului din rezervor Etapele dezvoltrii aplicaiei sunt urmtoarele: 1) Descrierea funcionrii regulatorului, n acest caz printr-un tabel de adevr cu patru intrri LH, LL, TH i TC i cu patru ieiri VIN, VOUT, H i A. 2) Identificarea funciilor logice ale fiecrui dintre cele patru ieiri. 3) Minimizarea funciilor logice cu diagrame Veitch-Karnaugh. n continuare, n cazul n care dorim s implementm aceste funcii logice printr-un circuit electronic integrat, mai urmeaz urmtoarele etape: 4) Sinteza circuitelor utiliznd numai pori I-NU (NAND) i inversoare. 5) Combinarea celor patru componente funcionale ntr-un singur circuit. 6) Programarea circuitului n VHDL i implementarea FPGA.

1) Tabelul de adevr
Intrri LH 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 LL 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 TH 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 TC 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 VIN 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 Ieiri VOUT 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 H 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 A 0 0 1 1 0 0 1 1 1 1 1 1 0 0 1 1

Umplere / nclzire oprit Umplere / nclzire pornit Umplere / nclzire pornit / alarm Senzor temperatur defect / alarm Umplere (rezervor gol) / nclzire oprit Umplere (rezervor gol)/nclzire pornit Umplere (gol) / nclzire oprit / alarm Senzor de temperatur defect / alarm Senzor de nivel defect / alarm Senzor de nivel defect / alarm Senzor de nivel defect / alarm Mai muli senzori defeci / alarm Senzor LL defect / nclzire oprit nclzire nclzire oprit / alarm Senzor de temperatur defect / alarm

Schema obinut n final este prezentat n fig. 3.5. 2) Codul VHDL care realizeaz aplicaia ncepe cu declararea bibliotecilor de componente: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; IEEE.STD_LOGIC_UNSIGNED.ALL; --Uncomment the following library declaration if instantiaitng --any Xilinx primitives in this code. --library UNISIM; --useUNISIM.VComponents.all;

Fig. 3.5. Schema electric a sistemului de reglare a lichidului din rezervor ENTITY FSTLogic IS PORT(LH : IN STD_LOGIC; LL : IN STD_LOGIC; TH : IN STD_LOGIC; TC : IN STD_LOGIC; VIN : OUT STD_LOGIC; VOUT : OUT STD_LOGIC; H : OUT STD_LOGIC; A : OUT STD_LOGIC; END FSTLogic;

ARCHITECTURE Behavioral OF FSTLogic IS COMPONENT inv PORT (I : IN STD_LOGIC; O : OUT STD_LOGIC); END COMPONENT ; COMPONENT nand2 PORT (I0: IN STD_LOGIC; I1: IN STD_LOGIC; O: OUT STD_LOGIC; END COMPONENT ; COMPONENT nand3 PORT (I0: IN STD_LOGIC; I1: IN STD_LOGIC; I2: IN STD_LOGIC; O: OUT STD_LOGIC; END COMPONENT ; SIGNAL w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11: STD_LOGIC; BEGIN g1 : inv PORT MAP (I=>LH, O=>w1); g2 : inv PORT MAP (I=>LL, O=>w7); g3 : inv PORT MAP (I=>TH, O=>w3); g4 : inv PORT MAP (I=>TC, O=>w2); g5 : nand2 PORT MAP (I0=>w1, I1=>w2, O=>w4); g6 : nand2 PORT MAP (I0=>w1, I1=>w3, O=>w5); g7 : nand2 PORT MAP (I0=>w4, I1=>w5, O=>VIN); g8 : nand3 PORT MAP (I0=>LL, I1=>w3, I2=>w2, O=>w6); g9 : nand2 PORT MAP (I0=>LL, I1=>w6, O=>VOUT); g10 : nand3 PORT MAP (I0=>LL, I1=>w3, I2=>TC, O=>w8); g11 : nand2 PORT MAP (I0=>w8, I1=>w9, O=>H); g12 : nand3 PORT MAP (I0=>w3, I1=>w1, I2=>TC, O=>w9); g13 : nand2 PORT MAP (I0=>TH, I1=>TH, O=>w10); g14 : nand2 PORT MAP (I0=>LH, I1=>w7, O=>w11); g15 : nand2 PORT MAP (I0=>w10, I1=>w11, O=>A); END Behavioral;

4. Sistemele Spartan 3/3E


4.1. Familia Spartan-3 FPGA
Familia Spartan-3 FPGAs produs de Xilinx are 5 membri i este realizat ntr-o tehnologie de 90 nm care i asigur densiti de la 500.00 pn la 1.000.000 pori. Aceste circuite, cu un pre extrem de sczut, au fost dezvoltate pentru a uura ct mai mult accesul la aplicaiile FPGA. O comparaie ntre cele 8 variante Spartan-3 este prezentat n tabelul urmtor [17]. Tabel 4.1 Pori Celule logice echivalente 1.728 4.320 8.064 17.280 29.962 46.080 62.208 74.880 CLB-uri Rnduri 16 24 32 48 64 80 96 104 Coloa -ne 12 20 28 40 52 64 72 80 CLB Multiplicatoare 4 12 16 24 32 40 96 104 I/O utilizator 124 173 264 391 487 565 633 633 I/O perechi difereniale 56 76 116 175 221 270 300 300

Denumire

DCM

XC3S50A XC3S200A XC3S400A XC3S1000A XC3S1500A XC3S2000A XC3S4000A XC3S5000A

50K 200K 400K 1M 1,5M 2M 4M 5M

192 480 896 1.920 3.328 5.120 3.912 8.320

2 4 4 4 4 4 4 4

Familia Spartan-3 continu linia de succes nceput de Xilinx prin Spartan-IIE aducnd noi mbuntiri ale performanelor simultan cu scderea costului. Pe lng variantele din tabelul de mai sus familia extins mai cuprinde sistemul nevolatil Spartan-3 N i sistemul de mare densitate Spartan-3 DSP. Dintre datele tehnice ale familiei se pot meniona: alimentare de 3,3V cu mod de hibernare pentru reducerea consumului, sistem I/O multistandard cu pn la 502 pini sau 227 perechi difereniale, 640 Mb/s vitez de transfer la intrrile/ieirile difereniale, etc. O ultim categorie de produse Spartan o constituie familia Spartan-3 Automotive XA FPGA cu specificaii orientate nspre aplicaii din domeniul transporturilor. Placa Spartan 3 FPGA este prezentat n fig. 4.1.

Fig. 4.1. Placa Spartan 3 FPGA Elementele sale sunt: 1. 2. 3. 4. 5. 6. 7. 8. Conector VGA (HD-15) Conector de 9 pini (DB-9) Conector de alimentare Extensie A1 Extensie A2 Extensie B1 Port PS2 Display cu 7 segmente LED 9. Comutatoare (8) 10. Butoane (4) 11. LED-uri (8) 12. LED de putere 13. Circuitul Spartan 3 FPGA 14. LED program (indic existena programului 15. Portul JTAG (utilizat pentru programare)

4.2. Familia Spartan-3E FPGA


Familia Spartan 3E FPGA a aprut n 2006. Practic aceste produse au cel mai bun raport calitate/ pre n cadrul tehnologiei de 90 nm. Viteza oferit de Spartan 3E este potrivit pentru aplicaii de band larg, reele, display-uri, televiziune digital, etc. Tabel 4.2 Pori Celule logice echivalente 2.160 5.508 10.476 19.512 33.192 CLB-uri Rnduri 22 34 46 60 76 Coloane 16 26 34 46 58 CLB Multiplicatoare I/O utilizator I/O perechi difereniale 40 68 92 124 156

Denumire

DCM

XC3S100E XC3S250E XC3S500E XC3S1200E XC3S1600E

100K 250K 500K 1,2M 1,6M

240 612 1.164 2.618 3.688

960 2.448 4.656 8.672 14.752

2 4 4 8 8

108 172 232 304 376

Fig. 4.2. Placa Spartan 3E FPGA ncepnd din 2009 familia Spartan s-a completat cu Spartan-6, n tehnologie de 45nm, ca soluie cu costuri sczute pentru aplicaii din domeniul interfeelor inteligente, comunicaii wireless, supraveghere video, transporturi inclusiv avionic, etc.

Fig. 4.3.1. Navigatorul ISE (Project Navigator)

4.3. ISE Design Suite


4.3.1. Desfurarea unui proiect ISE
Firma Xilinx a dezvoltat n timp un pachet software - Xilinx ISE - destinat analizei i sintezei aplicaiilor HDL (CPLD, DSP, FPGA, ASIC). Xilinx ISE este disponibil n mai multe variante i versiuni (ediii). n primele exemplificri, pentru sistemele Spartan 3/3E FPGA utilizm ISE Design Suite 12. Detalii despre pachetele Xilinx ISE se pot gsi pe site-ul firmei. Toate aceste produse sunt oferite i n variante gratuite, iar pentru variantele cu plat se pot obine on-line gratuiti [6]. Lucrul cu ISE este structurat pe proiecte. n cadrul unui proiect se pot realiza elaborarea circuitului, simularea funcionrii sale i implementarea sa precum i documentaia aferent.

Fig. 4.3.2. Zona pentru gestionarea proiectelor (generarea schemei, simularea i implementarea)

Fig. 4.3.3. Fereastra de lucru ISE (vizualizare codurilor, schemelor i documentaiei) Pentru exemplificarea desfurrii unui proiect, s considerm chiar unul dintre exemplele oferite de ISE: un frecvenmetru (proiectul freqm). Descrierea succint a proiectului este disponibil n fiierul readme asociat. Pentru nceput vom exemplifica implementarea n VHDL Schema implic un numrtor BCD i un display cu 7 segmente LED. Msurarea se bazeaz pe compararea frecvenei semnalului de intrare cu frecvena de referin a unui semnal de ceas. Ea ncepe cnd semnalul START este trecut n '1'. Din acest moment numrtorul este activat, numrnd impulsurile de ceas (tact), a cror frecven este evident mai mare dect a semnalului de intrare. Msurarea se ncheie la trecerea n '0' a semnalului START, dup care rezultatul este afiat. Urmtoarea msurtoare se poate porni dup resetare. Circuitul este alctuit din trei blocuri descrise funcional n VHDL. Intrrile frecvenmetrului vor fi: FINPUT (semnalul de intrare), FPATTERN (semnalul de ceas), START (semnalul de comand, activ pe starea HIGH) i RESET (semnalul de reset asincron, activ tot n HIGH). Ieirile vor fi: cele 4 celule de afiare LED cu 7 segmente (LED_D[6:0] cea mai semnificativ cifr zecimal, LED_C[6:0], LED_B[6:0] i LED_A[6:0] - cea mai puin semnificativ cifr zecimal) i FULL (semnalizarea depirii capacitii frecvenmetrului).

Fig. 4.3.4. Fereastra de proprieti ale proiectului naintea intrrii n procesul de analiz i sintez a unui circuit, din fereastra de dialog a proprietilor unui proiect trebuie setate principalele sale caracteristici: - tipul de reprezentare (Top-Level Source Type): HDL, schem, etc. - categoria de produs (Product category): generic, de uz general, pentru vehicule, militar/de nalt fiabilitate, tolerant la radiaii; - familia (Family): Spartan 3/3E i alte variante, Spartan 6 (diferite variante, inclusiv Defence Grade 6Q Low power, varianta cea mai performant, cu specificaie militar, de nalt fiabilitate i de consum redus), Virtex (diferite variante), etc. - tipul de plac (Device), tipul de execuie (Package) i viteza (Speed); - instrumentul de sintez (Synthesis tool): XST Xilinx Synthesis Technology (VHDL/Verilog); - instrumentul de simulare (Simulator): ISim (VHDL/Verilog), Modelsim (diferite variante), etc. - limbajul preferat (Preferred language): VHDL/Verilog i varianta aleas (de exemplu pentru VHDL variantele 93 i 200X) i altele. Este de remarcat compatibilitatea perfect dintre VHDL i Verilog, ambele fiind construite pe baza standardului HDL, ceea ce permite chiar utilizarea lor simultan n cadrul aceluiai proiect (mixed VHDL/Verilog).

Fig. 4.3.5. Reprezentarea schematic a frecvenmetrului (fiierul freqm.sch) Sinteza XST se lanseaz din fereastra urmtoare, reuita acestei faze fiind semnalat grafic (verde) i comunicat prin mesajul Process "Synthesize - XST" completed successfully.

Fig. 4.3.6. Sinteza XST Varianta VHDL a schemei din Fig. 4.3.5 este prezentat n continuare:
--Command: sch2hdl -intstyle ise -family spartan3e -flat -suppress -vhdl C:/Users/ /freqm/freqm.sch --Design Name: freqm, Device: spartan3e library ieee; use ieee.std_logic_1164.ALL; use ieee.numeric_std.ALL; library UNISIM; use UNISIM.Vcomponents.ALL; entity freqm is port ( F_INPUT : in std_logic; F_PATTERN : in std_logic; RESET : in std_logic; START : in std_logic; FULL : out std_logic; LED_A : out std_logic_vector (6 downto 0); LED_B : out std_logic_vector (6 downto 0);

LED_C LED_D end freqm;

: out std_logic_vector (6 downto 0); : out std_logic_vector (6 downto 0));

architecture BEHAVIORAL of freqm is signal BCD_D : std_logic_vector (3 downto 0); signal BCD_H : std_logic_vector (3 downto 0); signal BCD_T : std_logic_vector (3 downto 0); signal BCD_U : std_logic_vector (3 downto 0); signal END_RESET : std_logic; signal GATE : std_logic; component hex2led port ( HEX : in std_logic_vector (3 downto 0); LED : out std_logic_vector (6 downto 0)); end component; component cnt_bcd port ( CLK : in std_logic; ENABLE : in std_logic; RESET : in std_logic; BCD_D : out std_logic_vector (3 downto 0); BCD_H : out std_logic_vector (3 downto 0); BCD_T : out std_logic_vector (3 downto 0); BCD_U : out std_logic_vector (3 downto 0); FULL : out std_logic); end component; component control port ( CLK : in std_logic; RESET : in std_logic; START : in std_logic; END_MEASURE : out std_logic; GATE : out std_logic); end component; begin I1 : hex2led port map (HEX(3 downto 0)=>BCD_T(3 downto 0), LED(6 downto 0)=>LED_D(6 downto 0)); I2 : hex2led port map (HEX(3 downto 0)=>BCD_H(3 downto 0), LED(6 downto 0)=>LED_C(6 downto 0)); I3 : hex2led port map (HEX(3 downto 0)=>BCD_D(3 downto 0), LED(6 downto 0)=>LED_B(6 downto 0)); I4 : hex2led port map (HEX(3 downto 0)=>BCD_U(3 downto 0), LED(6 downto 0)=>LED_A(6 downto 0)); I5 : cnt_bcd port map (CLK=>F_INPUT, ENABLE=>GATE, RESET=>END_RESET, BCD_D(3 downto 0)=>BCD_D(3 downto 0),

BCD_H(3 downto 0)=>BCD_H(3 downto 0), BCD_T(3 downto 0)=>BCD_T(3 downto 0), BCD_U(3 downto 0)=>BCD_U(3 downto 0), FULL=>FULL); I6 : control port map (CLK=>F_PATTERN, RESET=>RESET, START=>START, END_MEASURE=>END_RESET, GATE=>GATE); end BEHAVIORAL;

Simularea funcional a unui proiect se realizeaz prin utilizarea unui test bench a crui ablon (template) este generat automat de ctre ISE prin intermediul instrumentului de simulare ales. n cazul frecvenmetrului fiierul de simulare este freqm_tb.vhd, prezentat n continuare.
LIBRARY ieee; --LIBRARY generics; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; --USE generics.components.ALL; ENTITY testbench IS END testbench; ARCHITECTURE behavior OF testbench IS COMPONENT freqm PORT( F_INPUT : IN std_logic; F_PATTERN : IN std_logic; RESET : IN std_logic; START : IN std_logic; FULL : OUT std_logic; LED_A : OUT std_logic_vector(6 downto 0); LED_B : OUT std_logic_vector(6 downto 0); LED_C : OUT std_logic_vector(6 downto 0); LED_D : OUT std_logic_vector(6 downto 0) ); END COMPONENT; SIGNAL F_INPUT : std_logic; SIGNAL F_PATTERN : std_logic; SIGNAL FULL : std_logic; SIGNAL LED_A : std_logic_vector(6 downto 0); SIGNAL LED_B : std_logic_vector(6 downto 0);

SIGNAL LED_C : std_logic_vector(6 downto 0); SIGNAL LED_D : std_logic_vector(6 downto 0); SIGNAL RESET : std_logic; SIGNAL START : std_logic; BEGIN uut: freqm PORT MAP( F_INPUT => F_INPUT, F_PATTERN => F_PATTERN, FULL => FULL, LED_A => LED_A, LED_B => LED_B, LED_C => LED_C, LED_D => LED_D, RESET => RESET, START => START ); -- *** Test Bench - User Defined Section *** F_INPUT1 : PROCESS BEGIN F_INPUT <= '1'; wait for 25 ns; F_INPUT <= '0'; wait for 25 ns; END PROCESS; F_PATTERN1 : PROCESS BEGIN F_PATTERN <= '1'; wait for 2.640 ns; F_PATTERN <= '0'; wait for 2.640 ns; END PROCESS; RESET1 : PROCESS BEGIN RESET <= '1'; wait for 4.975 us; RESET <= '0'; wait for 60 us; RESET <= '1'; wait for 10 us; RESET <= '0'; wait; END PROCESS; START1 : PROCESS BEGIN START <= '1'; wait for 30.001 us; START <= '0'; wait for 5.0005 us; START <= '1'; wait; END PROCESS; -- *** End Test Bench - User Defined Section *** END;

Dup cum se observ, n seciunea destinat utilizatorilor User Defined Section, acetia au posibilitatea s genereze propriile lor semnale de test, prin definirea unei succesiuni de stri logice ale semnalelor de intrare i a duratelor fiecrei stri. Fiierul de simulare poate fi testat cu diferite instrumente software, cel implicit n ISE fiind ISim, a crui fereastra principal, din care se dirijeaz simularea, este prezentat n fig. 4.3.7.

Fig. 4.3.7. Simulatorul ISim

Dup ce sinteza aplicaiei este validat prin obinerea rezultatelor dorite n etapa de simulare, se poate trece la implementarea aplicaiei pe una dintre plcile de care dispunem. Plcile dispun de sisteme de conectare la PC-ul cu care lucrm, de exemplu kit-ul Spartan-3E Starter este dotat cu un conector JTAG cu terminal USB de tip B. Software-ul implicit prin care proiectul compilat este instalat n memoria PROM a plcii este iMPACT.

Fig. 4.3.8. Fereastra destinat implementrii din Project Navigator

4.3.2. Sinteza i simularea exemplificate pentru un circuit simplu: latch-ul RS


n aceast seciune se exemplific sinteza, simularea i implementarea unui proiect simplu, pe care l numim RSlatch, sintetizat pornind de la schema sa electronic, modelat n VHDL i implementat pe o plac Spartan 3. Se utilizeaz versiunea ISE Design Suite 13.4 [18] care este asemntoare cu versiunea 12.2. Bistabilul RS asincron (latch) este circuitul fundamental de la care ncepe dezvoltarea circuitelor logice secveniale. Intrrile sale de comand sunt Set (memorare 1) i Reset (memorare 0). Ieirile sunt Q i inversa sa Q . Vom considera urmtorul tabel de adevr. S 0 0 1 1 R 0 1 0 1 Qn+1 1 1 0 Qn Qn+1 1 0 1 Qn stare interzis nscriere 1 nscriere 0 stare de memorare

n continuare adoptm pentru intrri i ieiri notaiile implicite din ISE, prezentate n Fig. 4.3.9.

Fig. 4.3.9. Schema bistabilului RS asincron (latch) NAND fiierul RSlatch.sch Un proiect nou se ncepe prin intermediul csuei de dialog a comenzii New Project, din care se precizeaz numele i locaia proiectului, precum i modalitatea aleas pentru sintez: schematic, HDL, EDIF, etc. Modalitatea de editare a proprietilor proiectului este ilustrat n Fig. 4.3.4. Pentru realizarea schemelor dispunem de o fereastr de editare, care cuprinde i o bibliotec de circuite digitale elementare care pot fi amplasate, configurate, interconectate i marcate cu instrumentele prevzute n bara de comenzi din stnga ferestrei (Fig. 4.3.9). Fiierul surs RSlatch.sch trebuie n continuare transformat ntr-un fiier HDL, care poate fi scris n oricare dintre limbajele din familia HDL (VHDL, Verilog, etc.) n funcie de preferinele proiectantului. Desigur, orice aplicaie poate fi direct editat n HDL, caz n care nu mai este necesar aceast etap i se poate pune eventual problema n sens invers: cum putem reprezenta schematic un model de circuit electronic scris dup standardul HDL. Pentru generarea fiierului RSlatch.vhd i a test bech-ului su RSlatch_tb.vhd se utilizeaz fereastra New Source Wizard (fig. 4.3.10) din meniul Design al navigatorului. Dup cum se observ n Fig. 4.3.2 navigatorul dispune de patru meniuri: Start, Design, Files i Libraries.

Fig. 4.3.10. Generarea fiierelor proiectului, n acest caz test bench-ul n varianta VHDL

Fig. 4.3.11. Fereastra Design a proiectului RSlatch n mod Implementation

Fig. 4.3.12. Test bench-ul VHDL - RSlatch_tb.vhd ablonul VHDL al test bench-ului, respectiv fiierul RSlatch _tb.vhd, n care se remarc utilizarea bibliotecilor UNISIM, este generat automat. n seciunea Test bench-User Defined Section ne putem defini semnalele de test dorite. Pentru testarea bistabilului alegem s aplicm succesiv la intrrile XLN_3 i XLN_4 cele patru combinaii de stri care apar n tabelul de adevr, respectiv 0-0, 0-1, 1-0, i n final 1-1. Fiecare stare va dura 100 ns.

Fig. 4.3.13. Fereastra Design a proiectului RSlatch n modul Simulation Simulrile se execut n modul Simulation (Fig. 4.3.13). Simulatorul ISim [19, 20] poate verifica sintaxa fiierului RSlatch_tb.vhd, dup care prin click dreapta pe Simulate Behavioral Model se pot stabili parametrii simulrii, n primul rnd durata i tipurile de semnale de test (Fig. 4.3.14). Pe lng definirea direct a semnalelor de test, utilizatorii pot opta pentru semnalele predefinite din biblioteca ISE, de intrare: start/stop, reset, clock, mode, lap-load, etc. sau de ieire lcd_e, lcd_rs, lcd_rw sau sf_d[7:0] pentru afiajul LCD [19, 20].

Fig. 4.3.14. Setarea parametrilor simulrii

Fig. 4.3.15. Rezultatul simulrii Verificarea funcionrii tabelului de adevr se realizeaz vizual, fr mari dificulti. Dup cum s-a observat n Fig. 4.3.12, definirea celor dou semnale de intrare XLN_3 i XLN_4 se face prin urmtoarea secven de cod VHDL:
-- *** Test Bench - User Defined Section *** tb : PROCESS BEGIN XLN_3 <= 0; XLN_4 <= 0; wait for 100 ns; XLN_3 <= 0; XLN_4 <= 1; wait for 100 ns; XLN_3 <= 1; XLN_4 <= 0; wait for 100 ns; XLN_3 <= 1; XLN_4 <= 1; wait for 100 ns; END PROCESS; -- *** End Test Bench - User Defined Section ***

Cititorul este invitat s imagineze semnale de intrare mai complexe, care s testeze distinct proprietatea de memorare a combinaiei de intrare XLN_3=1 i XLN_4=1.

Fig. 4.3.16. Personalizarea rezultatelor simulrii (wave configuration) Dup cum se observ n Fig. 4.3.15, n care cele patru oscilograme au culori diferite, rezultatele grafice ale simulrilor pot fi personalizate cu uurin: nu numai n ce privete culorile lor, ci i prin ordinea oscilogramelor, introducerea de separatori i de diferite tipuri de cursoare i marcheri, etc. [19, 20].

4.3.3. Implementarea exemplificat prin latch-ul RS


n urma crerii schemei RSlatch.sch i a testrii sale cu succes se pune problema generrii unui fiier netlist care s poat fi implementat n placa FPGA pe care s o poat configura conform schemei. n aceast seciune vom ilustra aceast etap final a implementrii aplicaiei din 4.3.2 utiliznd tehnologia XST [21]. Acest standard se gsete n ISE Design Suite dar i n aplicaia PlanAhead, care este destinat s uureze i s optimizeze gestionarea proiectelor mari ISE [22]. Operaiile care in de aceast etap sunt: - Sinteza: conversia modelului HDL (VHDL sau Verilog) ntr-un netlist. - Prelucrarea fiierului netlist n sensul transformrii sale ntr-o reprezentare fizic a circuitului, cu controlul ntrzierilor, cu adugarea paduri de intrare-ieire i a conexiunilor la alte circuite existente pe plac, etc. i apoi conversia ntr-un bitstream care poate fi ncrcat n memoria plcii FPGA. XST separ informaiile referitoare la design-ul circuitului (un fiier HDL) de cele referitoare la procesare, care se materializeaz prin mai multe fiiere XST de tip script. n continuare se vor exemplifica principalele faze ale implementrii proiectului RSlatch. Vom respecta itinerariul implicit propus de ISE Design Suite (Fig. 4.3.17).

Fig. 4.3.17. Fereastra Design a proiectului RSlatch n timpul procesului de implementare

Fig. 4.3.18. Ilustrarea unor operaii de definire a constrngerilor n domeniul timp O operaie pregtitoare pentru sinteza XST propriu zis este precizare constrngerilor tehnologice impuse de utilizator User Constraints, operaie materializat prin fiierul RSlatch.ucf. Primele constrngeri se refer la temporizri i ntrzieri n timp Timing Constraints. Fiecrui element din componena schemei i poate fi impus o comportare impus n domeniul timpului: timpul de propagare, durata frontului cresctor, durata frontului descresctor, etc. (Fig 4.3.18).

Importana constrngerilor n timp crete o dat cu complexitatea schemelor i cu gradul de precizie cerut de sincronizarea funcionrii lor. Desigur n cazul exemplului nostru RSlatch importana constrngerilor n timp este redus fa de urmtoarele operaii, care privesc alocarea pinilor de conexiune intrare/ieire Package Pins i configurarea suprafeei active ocupate de circuit pe suprafaa FPGA-ului Place and Route. n aplicaii mai complexe, n aceast faz se rezolv i interconexiunile ntre module mai mari de circuit, proiectate direct sau preluate din alte proiecte, precum i conectarea la facilitile disponibile pe placa FPGA utilizat (semnale de clock, elemente de comand i semnalizare, interfee de reea, modem-uri de radiofrecven, etc.)

Fig. 4.3.19. Alocarea pinilor de conectare - Package Pins (Pre-Synthesis i Post-Synthesis)

Fig. 4.3.20. Blocul RSlatch n reprezentare comportamental Operaiile de pn acum au fost realizate cu proiectul reprezentat sub forma sa comportamental (behavior), n care se pot aloca pinii i se pot realiza simulrile funcionale Implementarea pe plac necesit reprezentarea circuitului sub form structural (architecture). Pentru aceasta se genereaz o schem RTL (Register Transfer Level) reprezentat n Fig. 4.3.22, faz comandat manual pornind de la csua de dialog din Fig. 4.3.21 i materializat printr-un fiier .ngr. ISE recomand cu aceast ocazie completare schemei cu unele componente utile din punct de vedere tehnologic, cum ar fi porile buffer la intrri i ieiri. n aceast faz se pot analiza i optimiza performanele circuitului proiectat (Post Synthesis Simulation Model). Realizarea schemei tehnologice pornind de la fiierul RSlatch.ngr, cu respectarea constrngerilor din fiierul RSlatch.ucf, se numete mapare, declanat de comanda map. Dac schema RTL nu a fost realizat anterior, la comanda map ea se execut automat.

Fig. 4.3.21. Cutia de dialog View RTL Schematic

Fig. 4.3.22. Schema RTL Maparea realizeaz alocarea resurselor FPGA cerute de schema RTL, respectiv porile cu logic configurabil CLB i blocurile de intrare/ieire IOB, cu luarea n consideraie a constrngerilor tehnologice. Odat cu maparea se poate face o analiz mai precis a ntrzierilor n timp care sunt introduse pe fiecare dintre traseele logice ale circuitului (Generate Post-Map Static Timing i Analyze Post-Map Static Timing). Dup realizarea maprii se poate trece la etapa de configurare nemijlocit a aplicaiei FPGA: amplasarea n cadrul ariei de pori (precizarea i configurarea CLB-urilor i IOB-urilor utilizate) i rutarea (conectarea) acestora. Amplasarea i rutarea oferite implicit de ISE pot fi modificate de utilizator prin procedurile Manually Place and Route.

Fig. 4.3.23. Etapa Place and Route

Fig. 4.3.24. Alocarea pinilor, amplasarea i rutarea pentru un proiect mai complex Dup terminarea cu succes a plasrii i rutrii se poate definitiva schema electric i se pot face analizele finale ale performanelor aplicaiei: comportarea n timp (de exemplu Analyze PostPlace & Route Static Timing), putere consumat, resursele utilizate, etc., operaii care fac posibile validarea aplicaiei i includerea ei n bibliotecile HDL n vederea constituirii ca element de proprietate intelectual pentru reutilizarea ulterioar n alte aplicaii. Aceste analize pot fi realizate i cu instrumente software asociate cu ISE, cum ar fi PlanAhead.

Fig. 4.3.25. Schema revizuit a circuitului RS latch

Fig. 4.3.26. Configurarea dispozitivului int din PROM File Formatter Faza final este implementarea proiectului prin intermediul fiierului rslatch.bit de tip bitstream, care are rolul de a configura circuitul FPGA conform specificaiilor cuprinse n fiierul generat de faza de amplasare i rutare RSlatch.ncd. Acest fiier este produs de comanda lansat din meniul Generate Programming file. nainte de instalarea sa n memoria EEPROM acest fiier trebuie adaptat la tipul i varianta de execuie a dispozitivului int FPGA (Fig. 4.3.26). Instrumentul software inclus n ISE Design Suite pentru dialogul cu sistemul FPGA int este iMPACT (Fig. 4.3.27). iMPACT este activat din meniul Create PROM File (PROM File Formatter) i are ca produs final fiierul RSlatch.ipf.

Fig. 4.3.27. Crearea fiierului PROM cu iMPACT

Fig. 4.3.28. Traseul proiectului RSlatch pn la etapa final, de implementare pe plac n tabelul urmtor sunt centralizate principalele faze ale dezvoltrii unui proiect (RSlatch) i fiierele asociate. Faza proiectului Sinteza Translaia Maparea Amplasare i rutare Post Place and Route Static Timing Report Generarea bitstream-ului RSlatch.prj RSlatch.bld RSlatch_map.ncd, RSlatch.ngd, RSlatch.pcf RSlatch_map.ncd, RSlatch.ncd, RSlatch.pcf RSlatch.ncd RSlatch.bit, RSlatch.ipf Fiier asociat

Parcurgerea fiecrei faze este documentat prin rapoarte ataate automat proiectului, cuprinse n tabelul Detailed Reports din fereastra ISE Design Suite InfoCenter.

Fig. 4.3.29. Fereastra ISE Design Suite InfoCenter a proiectului RSlatch Din cuprinsul documentelor proiectului RSlatch putem observa (Fig. 4.3.28) de exemplu c nu au fost impuse constrngeri de timp i nu a fost analizat consumul de energie al circuitului, operaii fr de care proiectul poate continua fr riscuri, mai ales n cazul unei aplicaii extrem de simple, care solicit doar o mic parte a resurselor FPGA-ului (vezi Device Utilization Sumary).

4.4. Bibliotecile din componena ISE Design Suite


n aceast seciune vom investiga pe scurt resursele oferite de ISE Design Suite prin bibliotecile aflate n componena sa, precum i alte resurse din categoria IP.

4.5. Exemple n VHDL preluate din literatur


n aceast seciune vom reda mai multe exemple de circuite modelate n VHDL, extrase din lucrarea VHDL Tutorial: Learn by Example de Weijun Zhang, care pot fi accesat pe Internet la adresa http://esd.cs.ucr.edu/labs/tutorial/#gates. Aceste exemple sunt extrase la rndul lor din cartea Embedded System Design de Frank Vahid i Tony Givargis (John Wiley & Sons, 2002). Vom relua pentru nceput cteva circuite simple, urmate de cteva exemple mai complexe.

4.5.1. Driver
Driverul este un circuit care are rolul adaptare din punct de vedere electric: semnalul logic de la intrare este reprodus la ieire identic din punct de vedere logic, dar la ali parametri electrici, de exemplu la putere mai mare dect a circuitelor obinuite, sau adaptat la terminalul de comand al unui dispozitiv electronic de putere. Exemplul este preluat din lucrarea [18].
----------------------------------library ieee; use ieee.std_logic_1164.all; ----------------------------------entity Driver is port( x: in std_logic; F: out std_logic ); end Driver; ----------------------------------architecture behv1 of Driver is begin process(x) begin -- compare to truth table if (x='1') then F <= '1'; else F <= '0'; end if; end process; end behv1; architecture behv2 of Driver is begin F <= x; end behv2; -----------------------------------

Dup declararea intrrii x i a ieirii F se remarc definirea a dou arhitecturi, behv1 i behv2. Prima, mai detaliat, const din descrierea tabelului de adevr a funciei logice. Aceast metod poate fi aplicat n cazul oricrei funcii logice. Varianta a doua este direct, bazat pe identitatea logic a ieirii cu intrarea n cazul driverului. IEEE Standard 1164 definete modul de reprezentare a valorilor logice n VHDL. Tipurile de date sunt simbolizate n std_ulogic (standard unresolved logic) prin nou litere: 'U' neiniializat; starea iniial a tuturor obiectelor din declararea crora lipsete tipul 'X' driver puternic, cu valoare logic necunoscut '0' driver puternic, cu valoare logic zero; utilizat pentru interfaare '1' driver puternic, cu valoare logic unu; utilizat pentru interfaare 'Z' impedan ridicat; utilizat n cazul circuitelor cu trei stri logice 'W' driver slab, cu valoare logic necunoscut; utilizat pentru logica cablat 'L' driver slab, cu valoare logic zero; utilizat pentru logica cablat 'H' driver slab, cu valoare logic unu; utilizat pentru logica cablat '-' indiferent

Fig. 4.5.1. Testarea driverului prin simulare

4.5.2. Poart SAU_EXCUSIV (XOR)


Descrierea altor pori simple se face n acelai mod. Exemplificm numai poarta XOR, care are dou intrri, x i y i o ieire F. Exemplul este preluat din lucrarea [18].
-------------------------------------library ieee; use ieee.std_logic_1164.all; --------------------------------------

entity XOR_ent is port( x: in std_logic; y: in std_logic; F: out std_logic ); end XOR_ent; -------------------------------------architecture behv1 of XOR_ent is begin process(x, y) begin -- compare to truth table if (x/=y) then F <= '1'; else F <= '0'; end if; end process; end behv1; architecture behv2 of XOR_ent is begin F <= x xor y; end behv2; --------------------------------------

Fig. 4.5.2. Testarea porii XOR prin simulare

4.5.3. Circuit combinaional generic


Acest exemplu ne arat cum se scrie un program care ncorporeaz mai multe componente. Pentru simularea funcionrii sale se scrie un cod de tip test bench, care aplic o secven de semnale de intrare (Stimulators) circuitului testat (UUT). Interaciunea dintre ieirea test bench i UUT se poate observa n fereastra de simulare. Exemplul este preluat din lucrarea [18]. Este de remarcat c n variantele noi de software generarea test bench-urilor este automat.
------------------------------------------------------------- A simple example of VHDL Structure Modeling -- we might define two components in two separate files, -- in main file, we use port map statement to instantiate -- the mapping relationship between each components -- and the entire circuit. -----------------------------------------------------------library ieee; use ieee.std_logic_1164.all; entity OR_GATE is port( X: in std_logic; Y: in std_logic; F2: out std_logic ); end OR_GATE; architecture behv of OR_GATE is begin process(X,Y) begin F2 <= X or Y; end process; end behv; -- component #1

-- behavior des.

------------------------------------------------------------library ieee; use ieee.std_logic_1164.all; entity AND_GATE is port( A: in std_logic; B: in std_logic; F1: out std_logic ); end AND_GATE; architecture behv of AND_GATE is begin process(A,B) begin F1 <= A and B; end process; end behv; -- component #2

-- behavior des.

--------------------------------------------------------------

library ieee; use ieee.std_logic_1164.all; use work.all; entity comb_ckt is port( input1: in std_logic; input2: in std_logic; input3: in std_logic; output: out std_logic ); end comb_ckt; architecture struct of comb_ckt is component AND_GATE is port( A: in std_logic; B: in std_logic; F1: out std_logic ); end component; component OR_GATE is port( X: in std_logic; Y: in std_logic; F2: out std_logic ); end component; signal wire: std_logic; begin

-- top level circuit

-- as entity of AND_GATE

-- as entity of OR_GATE

-- signal just like wire

-- use sign "=>" to clarify the pin mapping Gate1: AND_GATE port map (A=>input1, B=>input2, F1=>wire); Gate2: OR_GATE port map (X=>wire, Y=>input3, F2=>output); end struct; ----------------------------------------------------------------

Fig. 4.5.3. Descrierea structurii circuitului combinaional

Codul test bench este urmtorul:


--------------------------------------------------------------------- Test Bench for comb_ckt.vhd -- Testbench is used to ensure the design is working properly -- according to the specification. -- assert statements are used to test the wrong value against -- our desired one. we should test as many cases as possible, -- particularly, we should include upper and lower limits -- of the operations. -------------------------------------------------------------------library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; entity CKT_TB is end CKT_TB; -- empty entity

------------------------------------------------------------------architecture TB of CKT_TB is -- declare the whole circuit(entity of comb_ckt.vhd) as a component component comb_ckt is port( input1: in std_logic; input2: in std_logic; input3: in std_logic; output: out std_logic ); end component; -- declare all I/O ports from unit under test as signals. -- signals are usually declared within architecture signal T_input1, T_input2, T_input3, T_output: std_logic; begin U_UT: comb_ckt port map (T_input1,T_input2,T_input3,T_output); process variable err_cnt: integer := 0; begin -- Test case 1 T_input1 <= '0'; T_input2 <= '0'; T_input3 <= '0'; wait for 10 ns; assert (T_output=((T_input1 or T_input2) and T_input3)) report "Failed Case1!" severity error; if (T_output/=((T_input1 or T_input2) and T_input3)) then err_cnt := err_cnt +1; end if;

-- Test case 2 T_input1 <= '1'; T_input2 <= '1'; T_input3 <= '1'; wait for 10 ns; assert (T_output=((T_input1 or T_input2) and T_input3)) report "Failed Case1!" severity error; if (T_output/=((T_input1 or T_input2) and T_input3)) then err_cnt := err_cnt +1; end if; -- Test case 3 T_input1 <= '1'; T_input2 <= '0'; T_input3 <= '1'; wait for 10 ns; assert (T_output=((T_input1 or T_input2) and T_input3)) report "Failed Case1!" severity error; if (T_output/=((T_input1 or T_input2) and T_input3)) then err_cnt := err_cnt +1; end if; -- Test case 4 T_input1 <= '0'; T_input2 <= '1'; T_input3 <= '0'; wait for 10 ns; assert (T_output=((T_input1 or T_input2) and T_input3)) report "Failed Case1!" severity error; if (T_output/=((T_input1 or T_input2) and T_input3)) then err_cnt := err_cnt +1; end if; -- summary of all the tests to see if any errors if (err_cnt=0) then assert false report "Testbench completed successfully!" severity note; else assert true report "Something wrong, try again pls!" severity error; end if; wait; end process; end TB; ------------------------------------------------------------------configuration CFG_TB of CKT_TB is for TB end for; end CFG_TB; -- stop running

--------------------------------------------------------------------

Fig. 4.5.4. Testarea modelului funcional combinaional

Fig. 4.5.5. Testarea modelului structural combinaional

4.5.4. Multiplexor 4:1


Acest exemplu ne ilustreaz un circuit combinaional tipic, multiplexorul. Exemplul este preluat din lucrarea [18].
-------------------------------------------------- VHDL code for 4:1 multiplexor -- Multiplexor is a device to select different -- inputs to outputs. we use 3 bits vector to -- describe its I/O ports ------------------------------------------------library ieee; use ieee.std_logic_1164.all; -------------------------------------------------

entity Mux is port( I3: I2: I1: I0: S: O: ); end Mux;

in std_logic_vector(2 downto 0); in std_logic_vector(2 downto 0); in std_logic_vector(2 downto 0); in std_logic_vector(2 downto 0); in std_logic_vector(1 downto 0); out std_logic_vector(2 downto 0)

------------------------------------------------architecture behv1 of Mux is begin process(I3,I2,I1,I0,S) begin -- use case statement case S is when "00" => when "01" => when "10" => when "11" => when others => end case; end process; end behv1; architecture behv2 of Mux is begin -- use when.. else O <= I0 when I1 when I2 when I3 when "ZZZ"; statement S="00" else S="01" else S="10" else S="11" else

O O O O O

<= <= <= <= <=

I0; I1; I2; I3; "ZZZ";

end behv2; --------------------------------------------------

Codul test bench este urmtorul:


---------------------------------------------------------------- Test Bench for Multiplexer (ESD figure 2.5) -- four operations are tested in this example. --------------------------------------------------------------library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; entity Mux_TB is end Mux_TB; -- empty entity

--------------------------------------------------------------architecture TB of Mux_TB is -- initialize the declared signals signal T_I3: std_logic_vector(2 downto 0):="000"; signal T_I2: std_logic_vector(2 downto 0):="000"; signal T_I1: std_logic_vector(2 downto 0):="000"; signal T_I0: std_logic_vector(2 downto 0):="000"; signal T_O: std_logic_vector(2 downto 0); signal T_S: std_logic_vector(1 downto 0); component Mux port( I3: I2: I1: I0: S: O: ); end component; begin U_Mux: Mux port map (T_I3, T_I2, T_I1, T_I0, T_S, T_O); process variable err_cnt: integer :=0; begin T_I3 T_I2 T_I1 T_I0 <= <= <= <= "001"; "010"; "101"; "111"; -- I0-I3 are different signals in std_logic_vector(2 downto 0); in std_logic_vector(2 downto 0); in std_logic_vector(2 downto 0); in std_logic_vector(2 downto 0); in std_logic_vector(1 downto 0); out std_logic_vector(2 downto 0)

-- case select eqaul "00" wait for 10 ns; T_S <= "00"; wait for 1 ns; assert (T_O="111") report "Error Case 0" severity error; if (T_O/="111") then err_cnt := err_cnt+1; end if; -- case select equal "01" wait for 10 ns; T_S <= "01"; wait for 1 ns; assert (T_O="101") report "Error Case 1" severity error; if (T_O/="101") then err_cnt := err_cnt+1; end if; -- case select equal "10"

wait for 10 ns; T_S <= "10"; wait for 1 ns; assert (T_O="010") report "Error Case 2" severity error; if (T_O/="010") then err_cnt := err_cnt+1; end if; -- case select equal "11" wait for 10 ns; T_S <= "11"; wait for 1 ns; assert (T_O="001") report "Error Case 3" severity error; if (T_O/="001") then err_cnt := err_cnt+1; end if; -- case equal "11" wait for 10 ns; T_S <= "UU"; -- summary of all the tests if (err_cnt=0) then assert (false) report "Testbench of Mux completed sucessfully!" severity note; else assert (true) report "Something wrong, try again!" severity error; end if; wait; end process; end TB; ---------------------------------------------------------------configuration CFG_TB of Mux_TB is for TB end for; end CFG_TB; -----------------------------------------------------------------

Fig. 4.5.6. Testarea modelului funcional al multiplexorului

Fig. 4.5.7. Modelul structural

Fig. 4.5.8. Testarea modelului structural

4.5.5. Bistabil J-K


Urmtorul bistabil J-K cu reset [18] este descris n primul rnd prin tabelul de adevr dar i prin expresii concurente i descrierea semnalelor.
----------------------------------------------- JK Flip-Flop with reset -- the description of JK Flip-Flop is based -- on functional truth table -- concurrent statement and signal assignment -- are using in this example ---------------------------------------------library ieee; use ieee.std_logic_1164.all; ---------------------------------------------entity JK_FF is port ( clock: J, K: reset: Q, Qbar: ); end JK_FF; in std_logic; in std_logic; in std_logic; out std_logic

----------------------------------------------architecture behv of JK_FF is -- define the useful signals here signal state: std_logic; signal input: std_logic_vector(1 downto 0);

begin -- combine inputs into vector input <= J & K; p: process(clock, reset) is begin if (reset='1') then state <= '0'; elsif (rising_edge(clock)) then -- compare to the truth table case (input) is when "11" => state <= not state; when "10" => state <= '1'; when "01" => state <= '0'; when others => null; end case; end if; end process; -- concurrent statements Q <= state; Qbar <= not state; end behv; -------------------------------------------------

Test bench-ul bistabilului J-K este urmtorul:


---------------------------------------------------------------------- Test Bench for JK flip-flop (ESD 2.3.1) -- we use another process to offer the concurrent clock signal --------------------------------------------------------------------library ieee; use ieee.std_logic_1164.all; entity jkff_TB is end jkff_TB; -- entity declaration

--------------------------------------------------------------------architecture TB of jkff_TB is signal signal signal signal T_J, T_K: std_logic; T_clock: std_logic; T_reset: std_logic; T_Q, T_Qbar: std_logic; in std_logic;

component JK_FF is port ( clock:

J, K: reset: Q, Qbar: ); end component; begin

in std_logic; in std_logic; out std_logic

U_JKFF: JK_FF port map (T_clock, T_J, T_K, T_reset, T_Q, T_Qbar); -- concurrent process to offer clock signal process begin T_clock <= '0'; wait for 5 ns; T_clock <= '1'; wait for 5 ns; end process; process variable err_cnt: integer := 0; begin T_reset <= '1'; wait for 25 ns; T_reset <= '0'; wait for 10 ns; -- case 1 T_J <= '0'; T_K <= '1'; wait for 15 ns; assert (T_Q='0') report "Error1!" severity error; if (T_Q/='0') then err_cnt := err_cnt + 1; end if; -- case 2 wait for 5 ns; T_J <= '1'; T_K <= '0'; wait for 15 ns; assert (T_Q='1') report "Error2!" severity error; if (T_Q/='0') then err_cnt := err_cnt + 1; end if; -- case 3 wait for 5 ns; T_J <= '1'; T_K <= '1'; wait for 15 ns; assert (T_Q='0') report "Error3!" severity error; if (T_Q/='0') then err_cnt := err_cnt + 1; end if;

-- summary of all the tests if (err_cnt=0) then assert false report "Testbench of Adder completed successfully!" severity note; else assert true report "Something wrong, try again" severity error; end if; wait; end process; end TB; -------------------------------------------------------------------configuration CFG_TB of jkff_TB is for TB end for; end CFG_TB; ---------------------------------------------------------------------

Fig. 4.5.9. Testarea modelului funcional al bistabilului K-K Descrierea structural a bistabilului este urmtoarea.
library IEEE,lsi_10k; use use use use IEEE.std_logic_1164.all; IEEE.std_logic_arith.all; IEEE.std_logic_textio.all; lsi_10k.COMPONENTS.all;

package CONV_PACK_JK_FF is -- define attributes attribute ENUM_ENCODING : STRING; end CONV_PACK_JK_FF;

library IEEE,lsi_10k; use use use use IEEE.std_logic_1164.all; IEEE.std_logic_arith.all; IEEE.std_logic_textio.all; lsi_10k.COMPONENTS.all;

use work.CONV_PACK_JK_FF.all; entity JK_FF is port( clock, J, K, reset : in std_logic; end JK_FF; architecture SYN of JK_FF is component FJK2P port( J, K, CP, CD : in std_logic; end component; component IVA port( A : in std_logic; end component; signal n45 : std_logic; begin state_reg : FJK2P port map(J => J, K => K, CP => clock, CD => n45, Q => Q, QN => Qbar); U23 : IVA port map( A => reset, Z => n45); end SYN; Q, QN : out std_logic); Q, Qbar : out std_logic);

Z : out std_logic);

Fig. 4.5.10. Testarea modelului structural al bistabilului K-K

4.5.6. Numrtor binar


Un circuit secvenial tipic, numrtorul binar de n bii este prezentat n continuare [18], n acelai stil ca i circuitele anterioare. n cazul acestui circuit apare un nou concept: generics, necesar n cazul componentelor parametrizate. Parametrizarea este necesar deoarece numrtorul trebuie s aib capacitatea variabil, n. Parametrizarea mai ofer avantajul fundamental al bibliotecilor standardizate, cu modele puse n comun (shared models). n descrierea funcional tranziiile sunt n general sincronizate pe frontul cresctor al semnalului de tact (clock), printr-o combinaie de expresii condiionale (clock'event i clock='1').
----------------------------------------------------- VHDL code for n-bit counter -- this is the behavior description of n-bit counter -- another way can be used is FSM model. ---------------------------------------------------library ieee ; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ---------------------------------------------------entity counter is generic(n: natural :=2); port( clock: in std_logic; clear: in std_logic; count: in std_logic; Q: out std_logic_vector(n-1 downto 0) ); end counter; ---------------------------------------------------architecture behv of counter is signal Pre_Q: std_logic_vector(n-1 downto 0); begin -- behavior describe the counter process(clock, count, clear) begin if clear = '1' then Pre_Q <= Pre_Q - Pre_Q; elsif (clock='1' and clock'event) then if count = '1' then Pre_Q <= Pre_Q + 1; end if; end if; end process; -- concurrent assignment statement Q <= Pre_Q; end behv; -----------------------------------------------------

bench-ul numrtorului este urmtorul.


------------------------------------------------------------------------ Test Bench for counter ----------------------------------------------------------------------library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity counter_TB is end counter_TB; -- entity declaration

----------------------------------------------------------------------architecture TB of counter_TB is component counter port( clock: clear: count: Q: ); end component; signal signal signal signal begin U_counter: counter port map (T_clock, T_clear, T_count, T_Q); process begin T_clock <= wait for 5 T_clock <= wait for 5 end process; process variable err_cnt: integer :=0; begin T_clear <= '1'; T_count <= '1'; wait for 20 ns; T_clear <= '0'; -- start counting T_clock: T_clear: T_count: T_Q: in std_logic; in std_logic; in std_logic; out std_logic_vector(1 downto 0)

std_logic; std_logic; std_logic; std_logic_vector(1 downto 0);

'0'; ns; '1'; ns;

-- clock cycle is 10 ns

-- clear output

-- test case 1 wait for 10 ns; assert (T_Q=1) report "Failed case 1" severity error; if (T_Q/=1) then

err_cnt := err_cnt+1; end if; -- test case 2 wait for 10 ns; assert (T_Q=2) report "Failed case 2" severity error; if (T_Q/=2) then err_cnt := err_cnt+1; end if; -- test case 3 wait for 10 ns; assert (T_Q=3) report "Failed case 3" severity error; if (T_Q/=3) then err_cnt := err_cnt+1; end if; -- test case 4 wait for 10 ns; assert (T_Q=0) report "Failed case 4" severity error; if (T_Q/=0) then err_cnt := err_cnt+1; end if; -- test case 5 wait for 20 ns; T_clear <= '1'; wait for 10 ns; assert (T_Q=0) report "Failed case 5" severity error; if (T_Q/=0) then err_cnt := err_cnt+1; end if; -- summary of all the tests if (err_cnt=0) then assert false report "Testbench of Adder completed successfully!" severity note; else assert true report "Something wrong, try again" severity error; end if; wait; end process; end TB; ---------------------------------------------------------------configuration CFG_TB of counter_TB is for TB end for; end CFG_TB; ----------------------------------------------------------------

Fig. 4.5.11. Testarea modelului funcional al numrtorului Descrierea structural este urmtoarea:
library IEEE,lsi_10k; use use use use IEEE.std_logic_1164.all; IEEE.std_logic_arith.all; IEEE.std_logic_textio.all; lsi_10k.COMPONENTS.all;

package CONV_PACK_counter is -- define attributes attribute ENUM_ENCODING : STRING; end CONV_PACK_counter; library IEEE,lsi_10k; use use use use IEEE.std_logic_1164.all; IEEE.std_logic_arith.all; IEEE.std_logic_textio.all; lsi_10k.COMPONENTS.all;

use work.CONV_PACK_counter.all; entity counter is generic( n : Integer := 2); port( clock, clear, count : in std_logic; downto 0)); end counter; architecture SYN of counter is component IV port( A : in std_logic; end component; component EO Z : out std_logic); Q : out std_logic_vector (1

port( A, B : in std_logic; end component; component ND2 port( A, B : in std_logic; end component;

Z : out std_logic);

Z : out std_logic);

component FD2 port( D, CP, CD : in std_logic; end component;

Q, QN : out std_logic);

signal Q_1_port, Q_0_port, n149, n150, net9, n151, n152, n153 : std_logic; begin Q <= ( Q_1_port, Q_0_port ); U31 : IV port map( A => clear, Z => n150); U32 : EO port map( A => Q_0_port, B => count, Z => n152); U33 : EO port map( A => n149, B => net9, Z => n151); U34 : ND2 port map( A => count, B => Q_0_port, Z => n149); Pre_Q_regx1x : FD2 port map( D => n151, CP => clock, CD => n150, Q => Q_1_port, QN => net9); Pre_Q_regx0x : FD2 port map( D => n152, CP => clock, CD => n150, Q => Q_0_port, QN => n153); end SYN;

Fig. 4.5.12. Schema corespunztoare modelului structural al numrtorului Din exemplele de mai sus se observ utilitatea bibliotecilor de tip share, prin apelarea crora proiectarea noilor circuite este uurat substanial. Biblioteca IEEE.std_logic_1164.all a fost deja prezentat pe scurt n 4.5.1. Iat i alte cteva dintre bibliotecile utilizate frecvent.

IEEE.std_logic_arith.all

Acest standard include definirea unor operaii aritmetice de uz general, cele mai uzuale fiind: - operaiile de schimbare de semn: Abs i -; - operatorii aritmetici: +, -, *, /, rem, mod; - operatori de comparaie: >, <, <=, >=, =, /=; - deplasri i rotaii: SHIFT_LEFT, SHIFT_RIGHT, ROTATE_LEFT, ROTATE_RIGHT, sll, srl, rol, ror; - funcia de redimensionare: RESIZE(v,n) - funcii de conversie: TO_INTEGER, TO_UNSIGNED, TO_SIGNED; - operatori logici: not, and, or, nand, nor, xor, xnor; - funcia de comparare: STD_MATCH; - funcia de translaie special: TO_01. IEEE.std_logic_textio.all; IEEE.std_logic_unsigned.all; lsi_10k.COMPONENTS.all; library IEEE,lsi_10k;

Bibliografie
[1]. [2]. [3]. [4]. [5]. [6]. [7]. http://en.wikipedia.org/wiki/FPGA http://www.eecg.toronto.edu/~vaughn/challenge/fpga_arch.html http://www.eetimes.com/conf/dac/showArticle.jhtml?articleID=164302400 http://www.xilinx.com/bvdocs/whitepapers/wp245.pdf http://seekingalpha.com/article/85478-altera-and-xilinx-report-the-battle-continues Xilinx ISE WebPACK, http://www.xilinx.com/ise/logic_design_prod/webpack.htm Quartus II Web edition software, https://www.altera.com/support/software/download/altera_ design/ quartus_we/dnl-quartus_we.jsp. [8]. J.J. Rodriguez-Andina, M.J. Moure, M.D. Valdes. Features, Design Tools, and Application Domains of FPGAs, IEEE Transactions on Industrial Electronics, vol. 54, nr. 4, august 2007, pag. 1810-1823. [9]. T.H.S. Li, S.J. Chang, Y.X. Chen. Implementation of human-like driving skills by autonomous fuzzy behavior control on an FPGA-based car-like mobile robot, IEEE Trans. Ind. Electron., vol. 50, nr. 5, oct. 2003, pag. 867880. [10]. B.W. Bomar. Implementation of microprogrammed control in FPGAs, IEEE Trans. Ind. Electron., vol. 49, nr. 2, aprilie 2002, pag. 415422. [11]. C. Quintns, M.J. Moure, M.D. Valds, E. Mandado. A virtual instrumentation laboratory based on a reconfigurable coprocessor, IEEE Trans. Instrum. Meas., vol. 55, nr. 2, apr. 2006, pag. 635645. [12]. C. Dufour, S. Abourida, J. Blanger. Real-time simulation of permanent magnet motor drive on FPGA chip for high-bandwidth controller tests and validation, Proc. IEEE ISIE, iul. 2006, pag. 25912596.\ [13]. Gh. Toace, D. Nicula. Circuite integrate digitale. Limbajul de descriere hard VHDL, Teora, Bucureti, 1996. [14]. D. Fritz. Spartan 3 FPGA Tutorial, Oklahoma State University, 2005. [15]. M. Salazar. Design of Control Logic For a Fluid Storage Tank, Project UNM Intelligent Distribuited Multi-Agent Robotics Laboratory, Albuquerque, supervised by D. Zrilic, 2006. [16]. Xilinx. Targeting Spartan-3E Starter Kit - Lab 1: Xilinx Tool Flow Lab. [17]. Xilinx. Spartan 6. [18]. Xilinx. ISE In-Depth Tutorial. 18. Ian. 2012. [19]. Xilinx. ISim In-Depth Tutorial. 18. Ian. 2012. [20]. Xilinx. ISim User Guide. 27. Ian. 2012. [21]. Xilinx. XST User Guide for Virtex-6,Spartan-6, and 7 Series Devices. 18. Ian. 2012. [22]. Xilinx. Quick Front-to-Back Overview Tutorial PlanAhead Design Tool. 16. Ian. 2012. [23]. Weijun Zhang VHDL Tutorial: Learn by Example, http://esd.cs.ucr.edu/labs/tutorial.

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