Sunteți pe pagina 1din 20

Universitatea Tehnic din Cluj-Napoca Facultatea de Automatic i Calculatoare Catedra de Calculatoare

STRUCTURA SISTEMELOR DE CALCUL

Tema proiectului:
Comunicaie ntre calculator i placa Spartan-3E prin interfaa serial

Studeni: Boleac Andrei, Ciuperc Sergiu Grupa: 30232 Indrumator proiect: Dr. Baruch Zoltan Francisc Data:14.05.2012

Cuprins
1. 2. Rezumat .....................................................................................................................................2 Introducere.................................................................................................................................2 2.1. 2.2. 2.3. 2.4. 3. 4. Obiective.............................................................................................................................2 RS232, Descriere general....................................................................................................3 Configuratia pinilor standardului RS232 pe placa Spartan 3E ..................................................3 Modul de realizare a comunicatiei seriale..............................................................................4

Fundamentare teoretica ..............................................................................................................5 Proiectare i implementare ..........................................................................................................6 4.1. 4.2. 4.3. Arhitectura sistemului ..........................................................................................................7 Aplicaia software .............................................................................................................. 13 Instruciuni de utilizarea a aplicaiei software ...................................................................... 14

5. 6. 7.

Rezultate experimentale ............................................................................................................ 17 Concluzii ................................................................................................................................... 19 Bibliografie ............................................................................................................................... 19

1. Rezumat
Proiectul de implementat vizeaz modul de comunicatie serial ntre calculator i placa Spartan 3E, care este folosit n activitaile de laborator la materia Structura Sistemelor de Calcul. La nceput am definit comenzile care vor fi implementate pentru a exemplifica modul de comunicare serial. Comenzile de baz snt afiarea unui mesaj pe LCD-ul de pe plac la o comand a aplicaiei master de pe calculator, preluarea starii comutatoarelor de pe plac i afiarea configuraiei acestora la terminalul aplicaiei de control, afiarea unui caracter pe LEDuri dup transmiterea unei comenzi potrivite. S-a folosit modulul de comunicare asincron recepie-transmisie de la productorul plcii, Digilent Inc..

2. Introducere
Comunicaia serial ntre calculator i diferite periferice este folosit pe scar larg pentru transferul serial de date ntre acestea. Comunicaia serialp se realizeazp de cele mai multe ori prin standarde stabilite de organizaii de profil de nivel internaional. Un standard foarte bine cunoscut i mult utilizat n domeniul interfa rii seriale ntre calculator i diverse periferice este RS232. Tocmai folosind acest standard, ne-am propus s realizm comunicaia serial ntre calculator i placa Spartan 3E prin interfaa serial.

2.1.

Obiective

Obiectivul de baz al proiectului este exemplificarea modului de comunicatie ntre calculator i placa Spartan 3E prin interfaa serial. Pentru atingerea acestuia a trebuit sa identificm un set finit de comenzi capabile sa scoat n eviden principalele aspecte ale comunicrii seriale ntre un calculator i un periferic, i anume viteza de transmisie, modul de parsare a datelor ntre dispozitivul master i cel slave, i eventuale erori de transmisie care ar putea interveni i care trebuiesc corectate pentru a preveni transferul de date eronate ntre cele doua dispozitive vizate. Comenzile identificate i propuse spre implementare au fost: Transmiterea unui mesaj la plac prin intermediul aplicaiei control de pe calculator Preluarea datelor referitor la starea curenta a comutatoarelor de pe plac i afisarea configuratie acestora la terminalul aplicaiei de control Afiarea unui caracter in mod similar celui pentru LCD Scrierea unui mesaj n memorie i afisarea ulterioara a acestuia pe LCD-ul de pe placa Dintre comenzile propuse, primele trei au fost implementate cu succes.

2.2.

RS232, Descriere general

Standardul RS232 este un standard definit pentru interfaarea serial intre calculator i diverse perferice. Acum cteva decenii n urm era un standard des folosit n transferuri seriale de date. In etapa actual au fost dezvoltate standarde noi de transmisie, RS232 regasindu-i aplicaie din ce n ce mai puin. De obicei standardul presupune o comunicaie full-duplex, ceea ce inseamn ca masterul poate transmite i recepiona informaie in acelasi timp. Transmisia i recepia se realizeaz pe ci de date separate. Acest standard definete caracteristicile electrice i de timp ale semnalelor vehiculate ntre dispozitivele implicate n transmisie. Standardul nu definete modul de codificare a semnalelor, rata de transmisie a datelor pe secund.

2.3. Configuratia pinilor standardului RS232 pe placa Spartan 3E


Implementarea standardului pe placa Spartan3E include doi conectori de baza: DTE (data terminal equipment) i DCE (data circuit equipment). Fiecare conector conine nou pini. DTE este conectorul DB9 Male, iar DCE este conectorul DB9 Female.

Figura 1 Conectorul DCE

Numar ul Pinului 1 2 3 4 5 6 7 8 9

Nume DCD RD TD DTR GND DSR RTS CTS RI

Directie IN IN OUT OUT IN OUT IN IN

Descriere Transport de date detectate Receptie date Transmisie date Terminalul de date gata pentru transmisie Ground Indica setarea datelor pentru transmisie Semnalul care initiaza cererea de transmisie Conectorul DCE gata pentru receptie Indicator de alarmare

Table 1. Pinii Conectorului DCE

Pentru a putea folosi unul dintre conectorii sus descrii pentru a incarca pe plac programul de control al datelor si modulul referinta RS232 trebuie declarate in fiierul UCF urmatoarele constrngeri specific pinilor conectorului DTE NET "RS232_DTE_RXD" LOC = "U8" | IOSTANDARD = LVTTL ; NET "RS232_DTE_TXD" LOC = "M13" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = SLOW i respectiv conectorului DCE: NET "RS232_DCE_RXD" LOC = "R7" | IOSTANDARD = LVTTL ; NET "RS232_DCE_TXD" LOC = "M14" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = SLOW

2.4.

Modul de realizare a comunicatiei seriale

Pentru realizarea comunicrii ntre calculator i placa Spartan 3E ne vom folosi dupa cum am mentionat deja de implementarea standardului serial RS232 pe plac i pe calculator. In plus vom folosi un modul de UART de la producatorul plcii, Digilent Inc.. Modulul UART este folosit pe post de component intermediar intre plac i calculator. Acest modul se comport ca un tampon de date. Modulul include un transmitor i un receptor. Transmitatorul este n general un registru de deplasare, care ncarc datele paralel i le deplaseaz bit cu bit, la o rat definit de transmisie. Receptorul este constituit dintr-un registru n care se deplaseaza datele bit cu bit i apoi se reconstituie intr-un tampon de date intermediar. Transmisia unui pachet de date incepe cu un bit de start, care este 0, urmat de biii de date care pot fi in numar de 6, 7, 8, un bit de paritate opional i n final un bit de stop care este 1. Bitul opional de paritate este folosit pentru detecia erorilor n procesul de transmisie. Numarul biilor de stop poate fi 1, 1.5 sau 2.

Figura 2. Exemplu: Transmiterea octetului 0x55 (01010101 n binar)

In funcie de numrul de date, setate pentru a fi recepionate i transmise, se stabilesc parametrii precum snt baud rate, numrul de biti de start, numarul de bii de stop, numrul de biti de paritate. Modulul de UART de la digilent incorporeaz in sine de fiecare parte a transmisiei cte un tampon pentru recepie/transmisie i unul pentru deplasarea datelor recent achiziionate.
4

Programul nostru de control de la calculator seteaz toi parametrii sus mentionai pentru UART inainte de a iniia cererea de conectare la portul serial. Atunci cnd pe portul serial se scriu date din programul master de control acestea snt preluate serial de modulul de UART si la nevoie snt prelucrate de placa.

3. Fundamentare teoretica
In faza iniial a dezvoltrii proiectului dat a trebuit sa ne documentam despre particularitile implement rii protocolului de comunicare serial pe placa Spartan 3E i integrarea acestuia cu standardul de interfatare serial RS232. Documentarea am facut-o dintrun laborator de pe site-ul firmei producatoare de soft, pentru programarea unei game variate de plci printre care se regseste i Spartan 3E, Xilinx. In lucrarea vizat, la fel se abordeaz comunicarea prin interfaa serial ntre calculator i placa Spartan 3E. La nceput se detaliaz configuraia conectorilor ce particip la realizarea comunicaiei seriale de pe plac i semnalele de control nglobate in acetia. In faza urmtoare se intocmete o diagram generic a modului de interfaare. Interfatarea presupune definirea a doua componente mari: modulul de UART i un protocol de interaciune intre PC si modulul de UART, Wishbone protocol. Noi am urmat arihitectura generic de interfatare prezentat in laborator, doar c am folosit un alt protocol oferit de o librarie din cadrul frameworkului de dezvoltare .net. Acesta ofer implementarea unui pachet pentru operaiile de transfer de date prin intermediul portului serial. Ca modul UART, cum am menionat deja, am folosit cel de la producatorul placii, Digilent Inc. Iniial ne-am propus sa-l implementam noi, dupa un exemplu de prototipizare dintr-o carte de profil gasit pe internet editata de Pong P. Chu, dar dup ce am studiat modulul deja existent am identificat aceleai concepte de proiectare detaliate in cartea sus mentionata. Plus la aceasta am facut un test al acestui modul crend un proiect si testnd comunicaia cu placa prin Hyperterminal. In cartea lui Pong P.Chu am avut posibilitatea sa vedem abordarea proiectrii modulului UART n trei variante posibile. Primul mod presupunea dezvoltarea unei componente care s nglobeze att partea de receptiie/trasnmisie ct i partea de control intr-un tot intreg. Se preta controlul fluxului de date prin intermediul unui set de indicatori. Indicatorii aveau ca scop semnalizarea prezenei unui set de date de recepionat sau de transmis, sau lipsa n tamponul de date a datelor n cazul cnd se face un acces la locaia acestuia. Este o variant mai simpla, dar care nu asigura protecie impotriva efectului de suprascriere a datelor i eronarea transmisiei acestora. Varianta cea mai potrivit, care este similar cu abordarea modulului de
5

UART de la Digilent Inc. folosit, este modelul format din doua componente interconectate prin semnale de control. Componenta FIFO din aceasta implementare asigur evitarea fenomenului de suprascriere a datelor. Partea de control i recepie/transmisie a datelor este monitorizat de o entitate separat.

4. Proiectare i implementare
Pentru realizarea proiectului s-au utilizat dou implementari software diferite: una n VHDL, ce va rula pe placa Spartan-3E i una n C#, ce va rula pe calculator. Din aceast cauz este nevoie s fim ateni la configurarea parametrilor de rulare a interfeei seriale.

Ca s verificm i s testm datele trimise i primite prin interfaa serial, am decis sa implementm un decodificator. Decodificatorul va identifica un cteva operaii, n funcie de codul primit de la calculator. Cele mai simple operaii sunt: afiare cod caracter pe LED-uri, afiare text LCD i citire stare comutatoare.

Figura 3. Schema Logica

4.1.

Arhitectura sistemului

Pentru realizarea implemntrii hardware, trebuie sa fim ateni att la semnalele de control , ct i la semnalele interne. Dup cum se poate observa n Schema bloc a UART-ului din figur, componenta UART conine 2 logici, logica de transmisie i logica de recepie.

Figura 4. Schema Bloc, componenta UART

Petru a seta parametrii de rulare, care s fie identici cu cei setai pe calculator, este novie sa definim n interiorul modulului UART o constant, care reprezint divizorul de ceas. Valoare acestei constante se afl in felul urmtor: Ceasul interior moduluilui UART trebuie sa transmit de 16 ori mai lent decat semnalul de ceas original transmis catre el. Noi dorim sa transmitem 9600 bps, iar ceasul FPGA are 50MHz De aici: Baud rate 16 = 9600 16 = 153600 Clock division ratio = 50 000 000 / 153600= 325.52 Clock divisor (divizorul de ceas) = 325.52 / 2 163

Proiectul are 4 module VHDL: DataCntrl, Rs232RefComp, lcd_ctrl i decFSM. n Rs232RefComp se afl arhitectura principala a UART-ului, reprezentnd componenta arhitectural principal a proiectului nostru. Aceast component se ocup de transmiterea i recepia serial a datelor. Intrrile principale sunt: CLK ceasul placii Spartan 3E DBIN registrul de 8 bii care reprezint datele pe care vrem sa le transmitem RXD bitul care este citit cand se primesc datele seriale Ieirile principale sunt: DBOUT registrul de 8 bii, actualizat de fiecare data
cnd s-a terminat citirea unui octet. RDA indicatorul valabilitii datelor primate

Figura 5.Modulul UART

TXD bitul curent transmis cand sunt transmise datele seriale TBE indic finalizarea transmiterii datelor Restul ieirilor sunt indicatori de eroare sau stare.

Cea mai important parte a funcionalitii modului este exemplificat prin 3 maini de stare: una controleaz datele primite, una controleaz datele transmise, iar ultima contoleaz valoarea indicatorului TBE.

Automatul de trasmitere se activeaz atunci cand pe registrul de intrare apar date care trebuiesc transmise. n starea sttTransfer sunt setai indicatorii,
indicnd starea de transfer, urmnd ca n starea sttShift s fie deplasat registrul tampon, tranmiindu-se bit cu bit.

Figura 6. FSM transmitere date

Indicatorul TBE este de tip inout, ceea ce indic faptul c acest semnal poate fi setat i din exteriorul componentei

Figura 7. FSM control valoare TBE

Dup cum se observ in Figura 8, trecerea din starea strIdle n starea de recepie date are loc la trecerea semnalului RXD n 0 logic n starile strEighDelay i strGetData are loc recepia datelor i salvarea bit cu bit n registrul tampon de receptie. Dup primirea celor 8 bii de date se trece in starea strCheckStop, verificndu-se bitul de stop

Figura 8. FSM recepie date

decFSM este componenta implement de noi pentru decodificarea datelor primite de la calculator. Aces t modul este doar o simpl main de stare, care are 2 faze: 1decodificarea semnalului, 2-efectuarea comenzii.

Figura 9. Modulul decFSM

Semnalul dbOut reprezin registrul cu date primite de la calculator, n prim faz aceste date sunt considerate un cod, reprezentnd aciunea care se va realiza la primirea urmtorului octet de date stOut este un semnal de ieire, reprezentnd starea curent a automatului

Astfel, dac valoarea(in Hexazecimal) semnalului dbOut este 77, respectiv codul ASCII al caracterului w, atunci automatul va trece in

Figura 10. FSM decFSM

starea afisLcd dac dbOut este 72, atunci se va trece in starea cnd se transmit datele de pe comutatoare daca dbOut este 6C, atuci se va trece in starea cand se asteapt urmatorul caracter, codul ASCII al cruia va fi afiat pe LED-uri

Componenta lcd_ctrl, realizeaz afiarea unui mesaj de 8 caractere pe ecranul LCD al placii Spartan3E

Semnalul folosit de noi este vectorul lcd, n care, in functie de starea semnalului stOut(decFSM), se vor afla un ir de 8 coduri ASCII ale anumitor caractere.

Figura 11 Modulul lcd_ctrl

10

Data_CNTRL este modulul top al proiectului. n acest modul au loc maparea semnalelor de intrare/ieire pe componentele interne enumerate mai sus.

De asemenea observm semnalele de intrare/ieire ale compoenentelor de pe plac

Figura 12. Modulul DataCntrl

11

stare

lcd2

dbOutSig
SW dataToSend

Figura 13. Schema Bloc 12

4.2.

Aplicaia software

Aplicaia software care ruleaz pe calculator este programat n limbaj C#, folosind IDE-ul MS Visual Studio i conine 4 funcii: 1. Setarea i deschiderea portului COM, care trebuie s coincid cu cele abordate n implementarea hardware:
comport.BaudRate = 9600; comport.DataBits = 8; comport.StopBits = (StopBits)Enum.Parse (typeof(StopBits),"One"); comport.PortName = portBox.Text; comport.Open();

2. Trimiterea codului de afiare mesaj pe LCD


/** * Functia de afisare pe LCD * */ private void afisareLCD() { comport.Write("w"); int dat = comport.ReadByte(); string s = Convert.ToString(dat); logBox.AppendText("S-a afisat pe LCD\n"); }

3. Trimiterea codului i pe urm a caracterului care va fi afiat pe LED-uri


/** * Functia de afisare pe LED-uri * */ private void afsisareLED() { comport.Write("l"); int dat = comport.ReadByte(); comport.Write(dateTxt.Text); dat = comport.ReadByte(); logBox.AppendText("S-a afisat pe LED: " + dateTxt.Text + "\n"); }

13

4. Trimiterea codului, urmat de atpterea i citirea strii comutatoarelor


/** * Functia de citire date SW * */ private void citireSW() { comport.Write("r"); int c1= comport.ReadByte(); comport.Write("r"); int ccc = comport.ReadByte(); string s = Convert.ToString(ccc); dateTxt.Text = s; logBox.AppendText("S-a citit de pe SW: " + s + "\n");

4.3.

Instruciuni de utilizarea a aplicaiei software

Pas1:
In mediul de lucru Xilinx se face click-dublu pe Generate Programing File din panelul de implementare a partii vhdl a aplicatiei. Dup generarea cu success a fisierului .bit se face click pe Configure Device(care va porni utilitarul iMPACT folosit pentru configurarea placii). Dac va fi configurat cu succes atunci toate LED-urile vor fi pornite(Figura 14).

Figura 14. Imediat dup configurarea plcii

14

Pas2:
Dupa ce a fost configurata cu success placa si sa realizat conexiunea prin adaptorul serial intre placa si calculator, se ruleaza aplicatia de control de pe calculator. Mai intii de toate utilizatorul trebuie sa verifice lista porturilor seriale disponibile la moment(Figura 15a). In interfata utilizator care este afisata odata cu rularea cu success a aplicatiei utilizatorul trebuie sa introduca numele portului serial pentru a realiza o conexiune seriala cu placa (Figura 15b).

Figura 15a. Verificarea Porutlui

Figura 15b. Interfata Utilizator la pornirea aplicatiei

Daca portul introdus este corect se afieaza panoul cu comenzile disponibile i un log, n care sint afiate mesaje despre modul i starea aplicaiei de comunicare(Figura 16),alftel se ramne la panoul actual al aplicatiei.

Figura 16. Conectare cu succes

15

Pas3:
Dupa realizarea conexiunii cu success utilizatorul poate trimite comenzi plcii. Daca este selectata optiunea Afisare LCD din lista de optiuni disponibila i se apas butonul execut, se va afia un mesaj LCD placii(Figura 17) i n log-ul interfeei.

Figura 17. Afisare mesaj LCD

Daca este selectata comanda de citire comutatoare atunci se vor prelua starile comutatoarelor 3-0 de pe placa si valoarea lor concatenata cu patru zerouri va fi afisata in cimpul text si suprafata log din interfata.

Figura 18. Citire stare comutatoare

16

Daca este selectata optiunea Afisare Led atunci utilizatorul poate introduce un character in cimpul text din interfata i valoarea acestuia va fi afisata pe LED-urile de pe plac (Figura 19).

Figura 19. Afiare codul ASCII x

5. Rezultate experimentale
Pentru descrierea fizica a modulelor de UART si modulul de decodificare a comenzilor am folosit limbajul de descriere hardware VHDL si mediul de dezvoltare XILINX ISE 13.4. Aplicatia terminal de pe calculator a fost implementata folosind frameworkul de dezvoltare .net 2 care are inglobat in el o librrie cu implementarea claselor responsabile de comunicarea cu alte periferice pe portul serial. Limbajul folosit pentru implementarea aplicatiilor folosind acest framework este C#. Aplicaia a fost implementata pe un laptop cu sistem de operare Windows 7, dar poate rula si pe alte versiuni de Windows cu conditia ca acestea sa aiba instalat SDK pentru frameworkul .net 2. Noi am folosit varianta de framework integrate in mediul de dezvoltare Visual Studio 2010 de la Microsoft, de aceea nu a trebuie sa adaugam dependene de librarii la proiect, acestea fiind continute de mediul de dezvoltare. In urma sintetizrii proiectul hardware in mediul de dezvoltare Xilinx am putut extrage date referitor la resursele consumate de proiect, si anume numar de bistabile, numar de blocuri logice. Aceste date pot fi analizate din tabelul de la figura 4. Ele au fost colectate din sumarul modelului (Design summary), parte componenta a mediului de dezvoltare Xilinx ISE 13.4.

Logic Utilization
Total number slice registers Number used as flip flops Number used as Latches

Used 159 148 11


17

Available 9312

Utilization 1%

Number of 4 inputs LUTs Number of occupied slices Number of slices containing only related logic Number of slices containing unrelated logic Total number of 4 input LUTs Number used as logic Number used as route-thru Number used as Shift registers Number of bonded IOBs

264 194 194 0 319 263 53 1 24 4 8 2 3.32

9312 4656 194 194 9312

2% 4% 100% 0% 3%

232

10%

IOB Flip Flops


IOB Latches Number of BUFGMUXs Average Fanout of Non-Clocks Nets

24

8%

Table 2. Raport Implementare

Dupa ce am generat fisierul .bit si am reusit conexiunea seriala la placa am incercat sa testam comunicarea.Comanda de afisare pe LCD-ul de pe placa se efectua correct. Am avut problem cu citirea datelor de pe portul serial in mediul Visual Studio. Cnd incercam s citim datele de pe port primeam o eroare, c dou fire de executie incearca sa acceseze aceleasi date concomitent. Problema consta in faptul c incercam s citim i sa afim datele in aceeai istructiune, nelund in calcul c citirea de pe portul serial are loc intr-un fir de execuie separat si prelucrarea datelor preluate de pe port in alt fir de executie. A trebuie doar sa citim datele de pe port, s le convertim intr-o form usor de conceput si sa le afisam la terminalul aplicatiei de control. Astfel problema cu sincronizarea a disparut. Am observant ceva problem la inceput in modul de functionare a modulului de UART care se comporta instabil.Initial am crezut ca e ceva legat de mediul de dezvoltare Visual Studio si de bibliotecile folosite din framework ,dar dupa ce am testat programul cu Hyperterminalul din Windows am observat ca tentativa de a trimite un character si de a face echo nu se efectua correct pentru primele 7-8 scrieri pe portul serial. Nu am depistat care era motivul acestui comportament eronat, ns pn la urm problema de genul nu au mai persistat.

18

6. Concluzii
In urma implementrii proiectului obiectivele propuse au fost atinse. Am reuit s implementm comenzile de baza propuse pentru a exemplifica modul de comunicaie prin interfaa serial ntre calculator i placa Spartan3E. Proiectul ofer utilizatorilor o interfa grafic prietenoas, usor de conceput. Utilizatorul are nevoie doar de cteva instruciuni de utilizare pentru a puatea usor s trimit comenzi la placa, n scopul stabiliri unei comunicri. Proiectul ar putea fi usor de integrat in aplicaii de monitorizare a diferitor procese automatizate, prin extinderea setului de comenzi si a datelor vehiculate ntre cele dou prti implicate in comunicare. Un exemplu ar fi msurarea valorilor unui indicator fizic si afiarea la intervale temporizate pe afisajul LCD, in vederea evalurii modului de variatie a masurii sus vizate. Proiectul ar putea fi extins prin implementarea unui protocol de transfer al datelor intre calculator i plac printr-o descriere hardware si respective o implementare folosind resursele fizice disponibile pe plac i interfatarea acestuia cu modulul de UART existent i librriile din SDK .net pentru comunicaia serial.

7. Bibliografie
[1] Chu P.P.,FPGA prototyping by VHDL examples
[2] Spartan 3E Starter Kit Board User Guide pg.33-36,http://www.xilinx.com [3] Devarapalli, Vallabh Srikanth, Serial RS232, ISE 10.1 and Xilinx Simulator on the Digilent Spartan3E board

19