Sunteți pe pagina 1din 17

UNIVERSITATEA TEHNIC GH.

ASACHI IASI FACULTATEA DE ELECTRONIC TELECOMUNICAII I TEHNOLOGIA INFORMAIEI

PROIECT LA DISCIPLINA APLICAII ALE MICROCONTROLERELOR I PROCESOARELOR DE SEMNAL

2013

TEMA PROIECTULUI

PERIFERICUL DE UZ GENERAL INTRARE/IESIRE (GENERAL PURPOSE INPUT/OUTPUT) GPIO

Introducere Spartan-3E Starter Kit Board Spartan-3E Starter Kit(Fig.1) este o plac de dezvoltare cu soluie complet oferind proiectanilor acces instant la capabilitile familiei Spartan 3E.

Fig.1 Xilinx Spartan-3E Starter Kit Board Placa Spartan 3E evideniaz caracteristicile unice ale familiei FPGA(structur fizic reconfigurabil) Spartan 3E i asigur o plac de dezvoltare convenabil pentru aplicaii de procesare integrate(embedded). Kit-ul complete include: placa, sursa de alimentare , soft-ul de evaluare, CD(note, data sheets,etc.) i un cablu USB. Circuitele FPGA Xilinx conin un tablou bidimensional de celule programabile, numite blocuri logice configurabile sau CLB (Configurable Logic Block), conectate prin canale de rutare orizontale i verticale. Un circuit FPGA (Field Programmable Gate Array) este alctuit dintr-un numr din ce n ce mai mare de celule logice de baz numite blocuri logice configurabile. Aceste celule logice sunt distribuite pe toat suprafaa chipului. Fiecare celul este nconjurat de interconexiuni programabile, iar ansamblul acestor interconexiuni poart numele de matrice de conexiuni programabile. Tot ansamblul de celule i interconexiuni se afl ntr-un inel format din blocurile de intrare/ieire. Un circuit FPGA const dintr-o reea bidimensional de blocuri logice. Fiecare bloc logic poate fi programat pentru implementarea oricrei funcii logice a intrrilor sale. De aceea, blocurile astea sunt numite blocuri logice configurabile (Configurable Logic Block CLB). Aceste resurse conin segmente de interconectare de diferite lungimi. Interconexiunile conin comutatoare programabile cu rolul de conectarea blocurilor logice la segmentele de interconectare, sau un segment de interconectare la altul. Exist i celule de I/E la periferia reelei, care pot fi programate ca intrri sau ieiri sau ca o mbinare de intrare i ieire. Familiile FPGA sunt: Spartan-3E/3A/AN(procesor MicroBlaze) Spartan-3A DSP(procesor MicroBlaze)

Spartan-6(procesor MicroBlaze) Virtex-4 FX(procesoare MicroBlaze i PowerPC) i LX/SX(procesor MicroBlaze) Virtex-5 FXT(procesor MicroBlaze i PowerPC) i LX/LXT/SXT(processor MicroBlaze) Virtex-6 LX/T, SXT, CXT(procesor MicroBlaze) Virtex-7 i Kintex-7(procesor MicroBlaze) Componente principale ale plcii Xilinx Spartan-3E prezentat n Fig.1 sunt: 1. Circuit FPGA XC3S500E din familia Spartan-3E, capsul de tip FBGA cu 320 de pini, pn la 232 de I/O pini-user, numrul de celule logice: peste 10,000; 2. Memoria PROM de tip Flash de capacitate 4 Mbii produs de firma Xilinx; 3. Memorie Micron (MT46V32M16) DDR SDRAM de 512 Mbit (32M x 16), interfaa de date de 16 bii; 4. Memoria PROM paralel NOR Flash (Intel StrataFlash) de 128 Mbit (16Mbyte); 5. Memoria STMicroelectronics M25P16 SPI serial Flash de 16 Mbit; 6. Jumperul JP1 ce permite configurarea FPGA-ului cu date provenind din memoria PROM sau dintr-o alt surs extern; 7. Port VGA pe 3-bii, 8 culori i 2 bii de ieire sincronizare pe H i V; 8. Port serial RS-232, 9 pini, conector mam DB9; 9. Circuit aferent de adaptare de nivele pentru portul serial RS232; 10. Port PS-2 ce permite conectarea de mouse sau tastatur standard PS-2 la placa de dezvoltare; 11. Afiaj LCD pe 2 linii de 16 caractere; 12. Butoane pentru introducere date, 4 buci; 13. Comutatoare pentru introducere date, 4 buci; 14. LED-uri pentru vizualizarea strilor de ieiri, 8 buci; 15. Surs de semnal de tact de 50MHz de tip oscilator cu cuar; 16. Conector SMA pentru surs suplimentar de semnal de tact; 17. Jumperi J30, permit selectarea modului de configurare a circuitului FPGA; 18. Buton de resetare, care permite reconfigurarea forat a circuitului FPGA. Const n ncrcarea fiierului de configurare din memoria PROM i are loc la punerea sub tensiune a plcii; 19. LED indicator de configurare reuit a circuitului FPGA; 20. Conector de extensie de 40 de pini, ce permite conectarea altor plci periferice sau altor circuite externe; 21. Trei conectori de extensii de cte 6 pini (J1,J2 i J4); 22. Port JTAG de descrcare sau depanare compatibil cu cablu JTAG3; 23. Conector RJ-45 de Standard Microsystems LAN83C185 10/100 Ethernet pentru Network Ethernet; 24. LED indicator prezen tensiune de alimentare; 25. Regulator de tensiune de 3,3V; 26. Regulator de tensiune de 2,5V; 27. Regulator de tensiune de 1,2 V 28. Conector pentru surs de alimentare +5V.

Crearea unui Proiect n Xilinx EDK


Pentru crearea unui proiect n mediul Xilinx Platform Studio(XPS) din cadrul pachetului Embedded Development Kit , cea mai simpl metod este folosirea wizard-ului Base System Builder. Deschidem XPS din Start > All Programs > Xilinx ISE Design Suite 13.2 > EDK > Xilinx Platform Studio. Lsa-i implicit Base System Builder wizard (recommended) -> OK i va porni

expertul(Fig.2)

Fig.2 Punei calea directorului c:\ xup\ embedded\ labs , creai un nou fiier i selectai-l, apsai Open i dai Save(Fig.3). Selectai opiunea PLB System -> OK. n cadrul ferestrei de selectare a plcii de dezvoltare (Board selection)(Fig.3) se las opiunea selectat implicit I would like to create a system for the following development board. La opiunea Board vendor se selecteaz Xilinx, la opiunea Board name se selecteaz Spartan-3E Starter Board, iar la Board revision opiunea "D"

Fig.3

n urmtoarea fereastr lsai selectat opiunea implicit de sistem uniprocesor(Single-Procesor system), conform Fig.4a. Folosirea sistemelor cu mai multe procesoare va fi descris ntr-un capitol ulterior. Fereastra de configurare a procesorului (Fig. 4b) permite selectarea frecvenei ceasului de referin, alegerea tipului de procesor (n cazul Spartan-3E singura opiune disponibil este MicroBlaze),selectarea frecvenei ceasului de sistem i a dimensiunii memoriei locale (BRAM) utilizate. De asemenea, n cazul procesorului MicroBlaze, se poate opta pentru adugarea unei uniti de calcul n virgul mobil (Floating Point Unit - FPU). Majoritatea programelor prezentate ulterior vor rula pe sisteme configurate cu opiunile implicite din aceast fereastr.

n continuarea vom selecta perifericele ce vor fi adugate automat la sistem. Configurarea unor parametri ai perifericului se realizeaz printr-un click pe numele acestuia(Fig.5a i Fig.5b).

Fig.4a

Fig.4b

Fig.5a Alegerea perifericelor(LED-uri)

Fig.5b Alegerea perifericelor(butoane) Dac s-au selectat ca periferice memorii externe (DDR, Flash etc.) se poate selecta n urmtoarea fereastr opiunea ca acestea s fie accesate printr-o memorie de tip cache. Ca aplicaii software, implicit se genereaz dou aplicaii de test, pentru memorie i periferice, cu ajutorul crora se poate valida funcionarea corect a hardware-ului. Pentru folosirea terminalului XMD (recomandat) la parametrul Standard IO selectai opiunea mdm_0, conform Fig.6. Ultima fereastr din cadrul wizard-ului Base System Builder(BSB) prezint un sumar al sistemului creat, incluznd o list a componentelor sistemului i adreselor lor, precum i o list a fiierelor generate n cadrul proiectului. n final apsm pe butonul Finish, ceea ce va determina finalizarea generrii proiectului.

Fig.6 Configurarea aplicaiilor Perifericul de uz general I/O(GPIO) Perifericul de uz general I/O este un pin generic pe un chip al crui comportament (inclusiv dac este un pin de intrare sau ieire) poate fi controlat(programat) de ctre utilizator la momentul rulrii. Un port GPIO este un grup de pini GPIO(de obicei 8 pini I/O) aranjate ntr-un grup, i tratate ca un singur port. GPIO sunt utilizate n: - cipuri cu deficit de pini: IC,SoC,integrate i harware personalizate, dispozitive logice programabile(ex. FPGA) - cipuri multifuncionale: manageri de putere, codec-uri audio, plci video; - aplicaii integrate(ex. Arduino, Paspberry Pi,etc.) utilizeaz intesiv perifericul GPIO pentru citirea de la diferii senzori de mediu(infrarou, video, orientare pe 3 axe, acceleraie), i pentru scrierea la ieire la motoarele de current continuu(prin PWM), audio, ecrane LCD, sau led-uri de stare. n continuare vom prezenta schema complet(Fig.7) a plcii Startan-3E Starter Kit i ne vom ocupa de perifericele de uz general de I/O: - GPIO pentru ntreruptoare(DIP-uri sau switch-uri).; - GPIO pentru pushbutoane; - GPIO pentru LED-uri.

Fig.7 Design complet


Perifericul de uz general pentru intrri i ieiri (General Purpose Input/Output - GPIO) permite accesul la pinii de intrare-iesire ai circuitului FPGA prin intermediul magistralei PLB. Folosind acest periferic se pot defini grupuri de pini de lungime maxim de 32 de bii care s poat fi citii sau scrii prin intermediul software-ului. Acest periferic poate fi folosit la comanda LED-urilor, respectiv citirea strii butoanelor sau a switch-urilor. n afar de comanda acestor periferice simple, modulul ofer posibilitatea simulrii din software a unor protocoale complexe, prin accesul direct la pini pe care l ofer. Perifericul GPIO se poate configura ca avnd unul sau dou canale. Fiecare canal poate avea de la 1 la 32 de bii, numrul i direcia (pin de intrare sau ieire) fiind configurabile individual pe canal, respectiv bit. De asemenea, se pot configura valorile la reset pentru fiecare bit din ambele canale. O alt facilitate oferit de acest periferic este capacitatea de a genera ntreruperi la schimbrile valorilor de intrare ale pinilor. Structura intern a perifericului GPIO este prezentat n Fig.8. Pentru a folosi portul ca intrare se vor seta toi biii din registrul GPIO TRI n 1 pentru a seta buffer-ul tri-state n starea de nalt impedan, iar valorile pinilor se vor regsi n registrul READ REG IN.

n cazul folosirii portului ca unul de ieire biii din registrul GPIO TRI se vor seta n valoarea 0, permind scrierea datelor din registrul GPIO DATA ctre pini. Ca o consecin, dac portul este setat ca unul de ieire, datele din READ REG IN vor coincide cu GPIO DATA.

Fig.8 Structura intern a GPIO Structurarea regitrilor


Perifericul prezint 4 regitri ctre exterior, prezentai i n Tab.1, cte doi pentru fiecare canal. Regitrii interni GPIO_DATA i READ_REG_IN sunt accesai din exterior ca un singur registru, citirea fcndu-se din READ_REG_IN, iar scrierea n GPIO_DATA. Mrimea porturilor este de maxim 32 de bii, adic de 4 octei. Spaiul de adresare este aliniat la 1 octet, motiv pentru care regitrii succesivi ai perifericului sunt aliniai la multipli de 4 octei. n cazul configurrii perifericului ca avnd un singur canal, citirea regitrilor GPIO_DATA1 i GPIO_TRI1 va avea ntotdeauna ca rezultat valoarea 0.
Nume registru GPIO_DATA GPIO_TRI GPIO_DATA1 GPIO_TRI1 Tab.1 Maparea regitrilor GPIO n spaiul de adrese Descrierea Adres Valoarea de la canalul 1 Adres de baz + 0x00 Registrul tri-state aferent canalului 1 Valoarea de la canalul 2 Registrul tri-state aferent canalului 2 Adres de baz + 0x04 Adres de baz + 0x08 Adres de baz + 0x0C Tip Acces Scriere/ Citire Scriere/ Citire Scriere/ Citire Scriere/ Citire

LED-urile discrete

Placa Spartan-3E FPGA Starter Kit are opt LED-uri individuale de suprafa situat deasupra ntreruptoarelor glisante aa cum se arat n Fig.9. LED-urile sunt etichetate de la LED7 la LED0. LED7 este cel mai din stanga LED, LED0 cel mai din dreapta LED.

Fig.9 Opt Led-uri discrete

Fiecare LED are o parte conectat la sol i cealalt parte conectat la un pin de pe dispozitivul Spartan-3E prin intermediul unui rezistor de 390 limitat n curent. Pentru a aprinde fiecare LED individual, conduce semnalul de comand asociat FPGA n HIGH. Tab.2 impune restriciile UCF pentru cele patru comutatoare de tip pushbutoane, inclusiv pini de atribuire I/O, pini I / O standard folosii, panta de rspuns la ieire, i unitatea de ieire n curent.

Tab.2 Restriciile UFC ale celor 8 LED-uri discrete Un exemplu minimal de sistem care folosete perifericul GPIO pentru a comanda ledurile de pe placa de dezvoltare este prezentat n Fig.10. Acest sistem conine un microprocesor cu memoria aferent, iar comunicarea dintre procesor i perifericul GPIO (LEDs 8Bit) este realizat prin intermediul magistralei PLB

Fig.10 Structura unui sistem cu GPIO ntreruptoare glisante Placa Spartan-3E are patru ntreruptoare( Fig.11). Ele sunt situate n colul din dreapta jos al plcii i sunt etichetate de la SW3 pn la SW0. SW3 este switch-ul cel mai din stnga, i SW0 este switch-ul cel mai din dreapta.

Fig.11

Pentru logic HIGH: cnd este n poziia ON sau SUS, un ntreruptor conecteaz pinul programabilului la 3,3V. Pentru logic LOW: cnd este n poziia OFF sau JOS, un ntreruptor conecteaz pinul programabilului la mpmntare. De obicei ntreruptoarele expun circa 2ms de salt mecanic i nu exist nici un circuit activ de coborre, dei astfel de cicuit ar putea fi uor adugat la proiectarea FPGA programat pe plac.

Tab.3 prezint restriciile UCF pentru cele patru comutatoare glisante, inclusiv pin-ul de atribuire I/O i pin-ul I / O standard folosit.Rezistorul PULLUP nu este necesar, dar se definete valoarea de intrare atunci cnd comutatorul este n mijlocul unei tranziii.
NET NET NET NET "SW<0>" "SW<1>" "SW<2>" "SW<3>" LOC LOC LOC LOC = = = = "L13" "L14" "H18" "N17" | | | | IOSTANDARD IOSTANDARD IOSTANDARD IOSTANDARD = = = = LVTTL LVTTL LVTTL LVTTL | | | | PULLUP PULLUP PULLUP PULLUP ; ; ; ;

Tab.3 Restriciile UFC pentru ntreruptoare glisante

Pushbutoane(PSB) Placa Spartan-3E FPGA Starter Kit are patru momente de contact cu ntreruptoare cu buton(Fig.12). Butoanele sunt localizate n colul din stnga jos al plcii i sunt etichetate BTN_NORD, BTN_EST, BTN_SUD i BTN_VEST. Pinii programabilului care se leag la PushButoane apar n paranteze( Fig.12), i fiierele UFC asociate(Tab.4).

Fig.12 Patru PushButoane n jurul butonului rotativ

Apsarea unui buton conecteaz pinul FPGA asociat la 3.3V, aa cum se arat n Fig.13. Utilizai un rezistor intern pull-down n cadrul pinului FPGA pentru a genera un LOW logic atunci cnd butonul nu este apsat. Tab.4 arat cum s specificai un rezistor pull-down n cadrul UCF. Nu exist nici un circuit activ de coborre pe buton.

Tab.4 prezint restriciile UCF pentru cele patru pushbutoane, inclusiv pinul de atribuire I/O

i pinul de I/O standard folosit i definete rezistenele pull-down pentru fiecare intrare.

Comutatorul rotativ de tip pushbuton

Comutator rotativ buton este situat n centrul celor patru de push-butoane individuale, aa cum se arat n Fig.12. Comutatorul produce trei ieiri. Cele dou rotaii de ieire sunt ROT_A i ROT_B. Centrul comutator push-buton este ROT_CENTER. Comutator rotativ de tip pushbuton integreaz dou funcii diferite. Arborele comutator se rotete i furnizeaz valorile ori de cte ori arborele se rsucete. Arborele poate fi, de asemenea, apsat, comportndu-se ca un comutator push-buton. Apsarea butonului de pe comutatorul rotativ push-buton conecteaz pinul FPGA asociat la 3.3V, aa cum se arat n Fig.14. Utilizai un rezistor pull-down intern n cadrul pinul FPGA pentru a genera un nivel logic LOW. Tab.4 arat cum s specificai un rezistor pulldown n cadrul UCF. Nu exist nici un circuit activ de coborre pe buton.

Butonul rotativ

n principal, butonul rotativ se comporta mai mult ca o cam, conectat la axul central. Rotirea arborelui apoi opereaz dou switch-uri push-buton, ca n Fig.15.n funcie de direcia n care arborele este rotit, unul din comutatoarele se deschide n faa celuilalt. De asemenea, dup cum rotaia continu, un comutator se nchide naintea celuilalt. Cu toate acestea, atunci cnd arborele este n staionare, numit poziia de declanare, ambele switch-uri sunt nchise.

Fig.15 Structura intern nchiderea unui comutator se conecteaza la sol, genernd o logic LOW. Atunci cnd ntreruptorul este deschis, un pull-up rezistor n cadrul pinului FPGA trage semnalul la un logic HIGH. Folosirea butonului rotativ cu GPIO
Butonul rotativ codific micarea circular folosind dou semnale A i B generate de dou butoane. Aceste dou butoane, din construcia intern prezentat n Fig.15, sunt acionate de rotirea unui disc descentrat. Micarea de rotire cu un pas, ntr-un sens sau altul, genereaz o succesiune specific de stri ale semnalelor A i B prezentate n Fig.15b. La nceputul rotirii cu un pas, depinznd de sensul micrii, unul din butoane va fi n poziie deschis naintea celuilalt. De asemenea, la sfritul efecturii pasului, primul buton se va nchide naintea celui de-al doilea.

Fig.15b Succesiunea de stri rotative la dreapta a butonului Pentru folosirea butonului rotativ se vor urma paii descrii la Instanierea perifericului, setnd numrul de bii necesari la 2. Tab.5 prezint restriciile UCF pentru cele patru comutatoare de tip pushbuton,

inclusiv pinul de atribuire I/O i pinul de I/O standard folosit i definete o rezisten pulldown pentru fiecare intrare.
NET "ROT_A" NET "ROT_B" NET "ROT_CENTER" LOC = "K18" | IOSTANDARD = LVTTL | PULLUP ; LOC = "G18" | IOSTANDARD = LVTTL | PULLUP ; LOC = "V16" | IOSTANDARD = LVTTL | PULLDOWN ;

Tab.5 Restriciile UCF pentru comutatorul rotativ de tip pushbuton

Utilizarea ntreruperilor Pentru a facilita lucrul cu ntreruperile, perifericul GPIO conine hardware dedicat care detecteaz orice modificare la oricare dintre pinii afereni unui canal. Configuraia implicit perifericului nu ofer aceast funcionalitate, ea trebuind s fie setat manual de ctre utilizator. Aceasta se realizeaz din System Assembly View printr-un dublu click pe numele perifericului GPIO, apoi bifarea opiunii GPIO Supports Interrupts n tab-ul User, meniul Common din fereastra nou deschis. Regitrii care controleaz funcionarea n ntreruperi a GPIO sunt prezentai n Tab. 6. Tab.6: Maparea regitrilor de ntreruperi GPIO n spaiul de adrese.

n modul Toggle on Write (TOW), scrierea unui bit de 1 produce bascularea valorii bitului de pe poziia corespunztoare din registru, realizndu-se practic o operaie de sau-exclusiv pe bii ntre cuvntul stocat n registru i cuvntul scris. De exemplu, dac un registru conine valoarea 0110 n binar i este scris n mod TOW cu valoarea 0011, rezultatul va fi 0101 (ultimii doi bii i schimb valoarea). Registrul GIER ofer activarea/dezactivarea primar a ieirii de ntrerupere a perifericului. Activarea se face prin setarea n 1 a bitului 31(MSB) a GIER (valoare 0 pentru dezactivare). Activarea ntreruperilor pentru fiecare canal este realizat cu ajutorul registrului IER, prin setarea n 1 a bitului 0 (LSB) pentru canalul 1, respectiv a bitului 1 pentru canalul 2. Dezactivarea se realizeaz prin setarea n 0 a biilor corespunztori. ntreruperile de la pinii de intrare ai GPIO sunt semnalizate prin intermediul registrului ISR. Valoarea 1 nscris pe poziia 0 (LSB), respectiv 1 din registru semnaleaz o ntrerupere primit pe canalul 1, respectiv 2. Aceti bii pot fi resetai n modul TOW. Pentru o astfel de funcionare n ntreruperi, este necesar realizarea unei conexiuni n tab-ul System Assembly View -> Ports ntre portul IP2INTC_Irpt al perifericului i portul Interrupt al procesorului MicroBlaze. Instanierea perifericului Perifericul GPIO se poate instania utiliznd Base System Builder sau, dup generarea sistemului, el poate fi instaniat din tab-ul IP Catalog, opiunea General Purpose IO-> General Purpose IO. Dup instaniere: 1.) n tab-ul System Assembly View -> Bus Interfaces conectai portul SPLB al perifericului la magistrala standard a sistemului mb_plb.

2.) n tab-ul System Assembly View -> Bus Interfaces dai dublu click pe numele perifericului. n fereastra nou deschis n tab-ul User, meniul Channel 1 setai numrul de bii corespunztori aplicaiei la opiunea GPIO Data Channel Width. 3.) n tab-ul System Assembly View -> Addresses specificai mrimea i locaia spaiului de adrese n care se va mapa acest periferic sau apsai butonul Generate Addresses i ele vor fi configurate automat. 4.) n tab-ul System Assembly View -> Ports specificai semnalele GPIO_IO_I n cazul folosirii perifericului pentru intrri, respectiv GPIO_IO_O n cazul folosirii perifericului pentru ieiri ca fiind semnale externe. 5.) n Tab.5 Project deschidei fiierul UCF (dublu click pe data/system.ucf ) i adugai constrngerile care mapeaz semnalele externe la pinii FPGA-ului. Mai jos sunt prezentate constrngerile necesare pentru folosirea butonului rotativ.

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