This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Cuprins
1
Cuprins
1. Obiective şi specificaŃii ................................................................................................. 3
2. Fundamente teoretice. Studiu bibliografic................................................................... 4
y_curent ← y_curent + 1 eroare ← eroare – 1 sfarsit daca pana cand x_curent > x_final Este uşor de verificat că în această descriere a algorimului la începutul şi sfâşitul unei
bucle eroarea se încadrează în următorul interval:
��� � ��� �� � ��
fapt care este încă un indiciu că pe verticală coordonatele punctelor sunt totdeauna calculate
spre cel mai apropiat pixel.
2.4.2. Cercul[9]
Pornim de la � � �� � ��, ecuaŃia cu numere reale a cercului cu centrul în origine care
va fi desenat pe o matrice de puncte discrete unde fiecare pixel are coordonate intregi. Nu
există nici o degradare a gereralităŃii problemei din moment ce punctele astfel determinate
pot fi translatate relativ la oricare alt centru diferit de origine după cum se poate observa în
figura 2.4.2.1.
Proiect de diplomă
18
Figura 2.4.2.1. Translatarea cercului cu centrul în origine
Se vor compara erorile asociate coordonatelor şi � ale punctelor care vor fi desenate.
Deşi se vor desena puncte de forma ! " � �"� , aceste puncte de obiecei nu satisfac cu
exactitate ecuaŃia cercului. Presupunând că " este exact, coordonata � reală a punctului !
este #�� � "�.
Cantitatea $� � �� � %�� reprezintă abaterea punctului ! de la valoarea reală. Dacă
această cantitate este negativă înseamnă că punctul ! se află în interiorul cercului real, iar
dacă respectiva cantitate este pozitivă punctul ! este în exteriorul cercului real. BineînŃeles
dacă este 0 (ceea ce poate să apară foarte rar), punctul ! se află exact pe cerc.
Expresia &"� � �"� � ��& este mai degrabă o măsurătoare a erorii. Valoarea absolută va fi necesară când se ajunge la
compararea a două astfel de erori şi această nouă cantitate ajută la evitarea calculului
rădăcinilor pătrate care necesită mult timp de calcul. Aşadar se va defini variabila ��'� ( în
care va fi memorată valoarea erorii a fiecărui punct desenat. ��'� ( � &"� � �"� � ��& Strategia de desenare presupune începerea cu urmatoarele valori: � � � şi �� � �. În
Aşadar primul punct este desenat exact pe cercul real.
�
* � �*�
+� �+�
�
�
Capitolul 2 - Fundamente teoretice. Studiu bibliografic
19
Cercul va fi desenat în aceeaşi ordine ca şi cea dată de ecuaŃile parametrice ale cercului � ,-.� /� şi � � .01� /� în care / începe la 0 şi creşte. Prin urmare cercul este desenat în
sens contrar acelor de ceas începănd pe axa orizontală pozitivă. Pe zona de început a desenării
coordonatele � cresc sau îşi schimbă valoarea mult mai repede decât coordonatele . Prin
urmare la fiecare iteraŃie se va decide să se incrementeze �, dar va fi nevoie să se testeze când
Ultima echivalenŃă este datoră presupunerii că valoarea � � �" este negativă, adică " este cel puŃin 1.
Aşadar, dacă ��"� � �"� � �� � ��" � ��� � � � �"� @ � atunci valoarea lui trebuie
decrementată pentru desenarea următorului punct ! "2�� �"2��. Realizând această analiză se poate observa utilitatea definirii a încă două noi cantităŃi şi
anume: A5B � � � �" �A5B � ��" � �
Având în vedere faptul că în momentul în care " şi �" îşi schimbă valoarea, diferenŃa
dintre valoarea îniŃială şi cea curentă este de C�, valorile variabilelor A5B şi �A5B se vor
modifica exact cu C�. Aşadar aceste valori sunt totdeauna impare. DA5B începe cu o valoare
negativă � � �� şi creşte către 0. EA5B reŃine valori impare începând cu 1 şi de asemenea
creşte. În timpul procesului de desenare, valoarea eroarii ��'� ( poate fi fie pozitivă, fie
negativă. Aşadar nu este nevoie şi nici nu este folosită valoarea absolută menŃionată anterior.
Conform explicaŃiilor oferite, în cele ce urmează este evidenŃiat în pseudocod algoritmul
de desenare a cercului cu centrul în origine:
x ← r y ← 0 xdif ← 1-2r ydif ← 1 er_raza ← 0 cât timp x≥y repetă
Capitolul 2 - Fundamente teoretice. Studiu bibliografic
21
deseneazăpuncte(x,y) y ← y + 1 er_raza ← er_raza + xdif ydif ← ydif + 2 dacă (2*er_raza+xdif>0) atunci x ← x – 1 er_raza ← er_raza + xdif xdif ← xdif + 2 sfârşit dacă sfârşit repetă
Datorită simetriei cercului este necesar calculul coordonatelor punctelor doar pentru
primele FGH ale cercului. De aici rezultă condiŃia de stop a buclei şi anume � � . Prin
subrutina deseneazăpuncte se profită de avantajele simetriei. La fiecare iteraŃie sunt calculate
coordonatele unui punct, dar afişate prin simtrie 8 puncte conform celor patru axe de simetrie
ale cercului evidenŃiate în figura 2.4.2.2.
Figura 2.4.2.2. Axele de simetrie ale cercului şi cele 8 puncte desenate la o iteraŃie
După cum rezultă din figura 2.4.2.2 subrutina deseneazăpuncte v desena 8 puncte astfel:
Similar algoritmului de desenare a cercului se va pornii de la ecuaŃia cu variabile reale a
elipsei cu centrul în origine şi anume: � � � ���� � � = ��� � ��� � �� �
De asemenea trebuie menŃionat că nu există nici o degradare a gereralităŃii problemei din
moment ce punctele astfel determinate pot fi translatate relativ la oricare alt centru diferit de
origine după cum se poate observa în figura 2.4.3.1.
Figura 2.4.3.1. Translatarea elipsei cu centrul în origine
Se va compara eroarea asociată coordonatelor şi � ale punctelor desenate. Deşi sunt
desenate puncte de forma ! "� �"�, aceste puncte nu satisfac cu exactitate ecuaŃia elipsei.
Pentru a evita folosirea operaŃiei de împărŃire se va folosi cea de-a doua formă a ecuaŃiei
elipsei. ��� � ��� � �� �
Pentru un punct ! "� �"� dat, cantitatea ��"� � ��"� � �� �
reprezintă abaterea punctului ! de la valoarea reală. Dacă această cantitate este negativă,
punctul este în interiorul elipsei reale, iar dacă este pozitivă respectivul punct este în
exteriorul elipsei reale. Când se obŃine o cantitate nulă (ceea ce, ca şi la cerc, se întâmplă
foarte rar) punctul ! este exact pe elipsa reală. Expresia: &��"� � ��"� � �� �&
* � �*�
+� �+�
�
Capitolul 2 - Fundamente teoretice. Studiu bibliografic
23
este o măsură mult mai practică a erorii. Valoarea absolută este necesară când sunt comparate
două astfel de erori. Această valoare va fi reŃinută în variabila ��'�953. ��'�953 "� �"� � &��"� � ��"� � �� �& Algoritmul de desenare a elipsei diferă de cel al cercului prin faptul că elipsa are două
axe de simetrice. Prin urmare la fiecare iteraŃie vor fi desenate 4 puncte. Este necesară
calcularea coordonatelor punctelor doar din primul cadran (aşadar calculul trebuie să acopere
un unghi de 90º - figura 2.4.3.2). În fapt, momentul modificării coordonatelor este determinat
de panta dreptei tangente la elipsă.
Figura 2.4.3.2. Axele de simetrie ale cercului şi cele 4 puncte desenate la o iteraŃie
În primul cadran panta dreptei tangente este totdeauna negativă. Începând pe axa şi
continuând în sens contrar acelor de ceas panta este mare şi negativă ceea ce subliniază
creşterea mult mai rapidă a valorilor coordonatelor verticale decât a celor orizontale. Dar
odată ce tangenta trece prin valoare �� valorile coordonatelor orizontale sevor modifica mult
mai repid decat cele verticale.
Aşadar se vor calcula două seturi de puncte în primul cadran. Primul set începe pe axa
orizontală pozitivă avansând în sens contrar acelor de ceas până când panta tangentei devine ��. Al doilea set de puncte va porni pe axa verticală pozitivă în sensul acelor de ceas şi se va
opri când panta tangentei devine din nou �� (figura 2.4.3.2).
Proiect de diplomă
24
Pentru primul set de puncte � este totdeauna incrementat şi se testează cînd să fie
decrementat . Acest proces este similar cu cel de la desenarea cercului. Pentru al doilea set
de puncte se va incrementa totdeauna şi se va decide când să fie decrementat �.
Decizia de decrementare a lui pentru primul set de puncte se bazează pe compararea
erorii apărute pentru punctele ! " � �� �"� şi ! "� �" � ��. Se va alege fie " � �, fie " ca
noua coordonată pe orizontală având în vedere care dintre cele două erori este mai mică.
Oricare ar fi decizia, trebuie cunoscută fluctuaŃia valorii variabilei ��'�953 la orice
fluctuaŃie a coordonatelor. Valoarea nu trebuie să fie calculată din nou dacă se urmăreşte
modul în care aceasta se schimbă funcŃie de coordonate.
Când această ultimă inegalitate este îndeplinită coordonata va trebui decrementată
pentru afişarea punctului ! "2� � �"2��. Finalizând această analiză se poate observa utilitatea definirii a două noi variabile: A5B � �� � � �"� �A5B � � ��" � �� Având în vedere că şi � se modifică de la iteratie la iteratie cu C� se poate observa că A5B, respectiv �A5B totdeauna se modifică cu C��� , respectiv C� � . Valoarea iniŃială a
variabilei A5B este � � � � �, iar a variabilei �A5B este � . Similar algoritmului pentru
desenarea cercului, în realitate nu este folosită valoarea absolută pentru calculul erorii.
Poate fi analizată panta dreptei tangente la elipsă prin derivarea implicită a ecuaŃei:
Capitolul 2 - Fundamente teoretice. Studiu bibliografic
25
��� � ��� � �� � ��� � � ���I � �
Rezolvând după �J se obŃine
�I � ����� ��� Deşi ar fi de aşteptat ca în mod normal să se reducă fracŃia de mai sus prin împarŃirea atât
a numitorului, cât şi a numărătorului la 2, reiese totuşi că este mai eficient să nu se facă
această reducere.
Acum se poate determina unde să se separe cele două seturi de puncte calculate în primul
cadran. Primul set corespunde porŃiunii în care �I @ ��. Aşa că se va lua în considerare
inegalitatea
����� �� @ ��
şi se vor afişa puncte din primul set până când ��� @ � ��
Pentru a evita realizarea de înmultiri în această inegalitare la fiecare iteraŃie, se profită din
nou de avantajul faptului că la fiecare reactualizare, şi � se modifică cu o unitate. Astfel se
vor defini încă două noi variabile, K/�3 şi �K/�3: K/�3 � ��� �K/�3 � � �
Când se desenează primul set de puncte, valorile iniŃiale ale variabilelor vor fi: K/�3 ���� şi �K/�3 � �. Pentru primul set de puncte descreşte cu 1 la fiecare iteraŃie, astfel că K/�3 are o descreştere corespunzătoare de ���, în timp ce �K/�3 creşte cu � �.
La desenarea celui de-al doilea set de puncte valorile iniŃiale ale variabilelor vor fi: K/�3 � � şi �K/�3 � � ��. Pentru acest set de puncte creşte cu 1 la fiecare iteraŃie, astfel
încât K/�3 are o creştere corespunzătoare de ��� , în timp ce �K/�3 descreşte cu � � de
fiecare dată când � descreşte cu 1.
2.5. Sisteme de reprezentare a culorilor în echipamente video
2.5.1. Sistemul RGB – Red, Green, Blue (roşu, verde, albastru)[17]
Modelul de culoare RGB este un model aditiv de culoare în care cele trei componente
(roşie, verde şi respectiv albastră) sunt suprapuse în diferite moduri pentru a reproduce o
Proiect de diplomă
26
paletă variată de culori. Numele modelului provine de la iniŃialele celor trei componente
aditive primare (figura 2.5.1.1).
Figura 2.5.1.1. Modelul aditiv RGB
Principalele scopuri ale modelului RGB este detectarea, reprezentarea şi afişarea
imaginilor în sisteme electronice dintre care amintim: televizoare, calculatoare; totodată a fost
folosit şi în tehnica fotografică. Chiar dinaintea epocii electronice acest model avea o
fundamentare teoretică solidă bazată pe modul în care omul percepe culorile.
Acest model reprezintă un spaŃiu de culori dependent de echipament: diferite
echipamente detectează sau reproduc o anumită valoare RGB diferit, dat fiind faptul că
elementele culorii şi răspunsul lor la nivele individuale de R, G, B variază de la producător la
producător sau chiar în timp la acelaşi echipament. Aşadar o valoare RGB nu defineşte
aceeaşi culoare la echipamente diferite fără a avea o metodă de gestionare a culorii.
Pentru a forma o culoare cu RGB trei fascicule luminoase colorate (unul roşu, unul verde,
iar ultimul albastru) trebuie să fie suprapuse. Fiecare dintre cele trei fascicule este denumit
componentă a acelei culori, iar fiecare dintre ele poate avea o anumită intensitate, de la total
închis până la total deschis, în respectiva mixtură.
Modelul de culoare RGB este aditiv în sensul că cele trei fascicule sunt însumate
împreună, iar sprectrul lor luminos este însumat pentru a realiza spectrul final al culorii.
Cea mai scăzută intensitate pentru fiecare componentă va reda cea mai închisă culoare
(considerată negru), iar cea mai ridicată intensitate va reda culoarea alb. Calitatea albului
redat depinde de natura surselor primare de lumină, dar dacă sunt echilibrate corect rezultatul
este un alb neutru. Când intensitătile celor trei componente sunt identice dar nu minime sau
maxime se va obŃine o nuanŃă de gri mai deschisă sau mai închisă funcŃie de intensitate.
Capitolul 2 - Fundamente teoretice. Studiu bibliografic
27
Când una dintre componente are intensitatea cea mai puternică, culoarea obŃinută este o
nuanŃă apropiată de componenta respectivă, iar când două dintre cele trei componente au
intensităŃi puternice atunci culoarea obŃinută este o nuanŃă apropiată de una dintre culorile
secundare (culori obŃinute prin combinarea a două componente la intensităŃi maxime).
Modelul RGB în sine nu defineşte ceea ce înseamnă colorimetric roşu, verde, respectiv
albastru şi astfel rezultatele combinărilor nu sunt specificate absolut, ci relativ la culorile
primare. Când componentele primare sunt definite exact atunci modelul devine un spaŃiu
absolut de culoare (de exemplu sRGB sau Adobe RGB).
Alegerea culorilor primare este în stransă legătură cu fiziologia ochiului uman. Culori
primare bune sunt stimuli care maximizează diferenŃa între răspunsul celulelor conice ale
retinei ochiului uman la lumină de lungimi de undă diferite şi prin urmare realizează un
triunghial culorilor mult mai acoperitor (figura 2.3.1.2).
Figura 2.5.1.2. Triunghiul de culoare pentru spaŃiu de culoare sRGB
Cele trei tipuri normale de celule fotoreceptoare ale ochiului (celule conice) răspund cel
mai mult la următoarele lungimi de undă ale luminii: galben, verde, violet. DiferenŃa în
semnalele recepŃionate de la cele trei tipuri de celule permite creierului sa diferenŃieze o largă
gamă de culori distincte, fiind cel mai senzitiv la lumină verde-gălbuie şi la diferenŃe de
nuanŃe în zona verde-portocaliu.
Totuşi utilizarea celor trei culori primare nu este suficientă pentru reproducerea tuturor
culorilor, ci doar a celor aflate în triughiul culorilor (figura 2.5.1.2).
LMNw �PQQQRQQQS 3 � x q � 3� s e s /wy� A l �/w � �eq�A l �e � /w � ��3 � z q � 3� s e s {�6 � /w|} � A l �� � /w � �63� A l �/w t �6
< � � p >L� M� N?
Proiect de diplomă
32
Conversia din HSV în RGB se realizează similar:
o" � ~ oe���e
B � oe� � ~ oe�� 3 � ; s � � K� q � ; s � � B s K� / � ; s � � � � B� s K� �� :� �� �
PQQRQQS ;� /� 3�� A l �o" � � q� /� 3�� A l �o" � � 3� ;� /�� A l �o" � � 3� q� ;�� A l �o" � 6 /� 3� ;�` A l �o" � F ;� 3� q�� A l �o" � G
<
2.6. Algoritmi de prelucrare a imaginii
În ingineria electronică şi în stiinŃa calculatoarelor, procesarea imagnii reprezintă orice
formă de procesare a semnalelor unde intrarea în sistemul de procesare este o imagine (desen,
fotografie, cadru video, etc.), iar ieşirea poate fi reprezentată fie de o imagine, fie de un set de
caracteristici sau paramentri ai imaginii iniŃiale. Tehnologia digitală modernă a făcut posibilă
prelucrarea semnalelor multidimensionale în sisteme de diferite complexităŃi, de la simple
circuite digitale până la calculatoare paralele. Scopurile acestor prelucrări pot fi împărŃite în
trei categorii:
a. Procesarea imaginii pentru îmbunătăŃirea sau modificarea calităŃii acesteia.
b. Procesarea şi analiza imaginii pentru obŃinerea de măsurători asupra acesteia.
c. Procesarea imaginii cu scopul înŃelegerii conŃinutului şi formării unor descrieri de
nivel înalt ale acesteia.
Procesarea imaginilor de orice natură este realizată cu ajutorul filtrelor implementate fie
hardware (circuite dedicate, procesoare de semnal, filtre implementate în hardware
reconfigurabil de tip FPGA), fie software (aplicaŃii de procesare şi/sau editare a imaginilor).
După modul în care sunt tratate imaginile, filtrele implementate pot fi clasificate astfel:
a. Filtre punctuale – filtre aplicate asupra fiecărui punct/pixel în parte; prezintă
următoarele avantaje: viteză mare de calcul (pot fi organizate în structuri de tip
pipeline, practic se ajunge la o paralelizare a calculului), întârzieri minime ale
Capitolul 2 - Fundamente teoretice. Studiu bibliografic
33
semnalului prin sistemul de procesare; principalul dezavantaj este acela că nu pot
implementa decât funcŃii de procesare simple, cum ar fi: controlul luminozităŃii,
contrastului, saturaŃiei, nuanŃei, obŃinerea negativului, etc.
b. Filtre bidimensionale – filtre mult mai complexe implementate pe baza a matrici
de conversie; se pot realiza o multitudine de funcŃii complexe de procesare a
imaginilor, cum ar fi: înceŃoşarea sau netezirea imaginii, detectarea muchiilor
(edge-detect), eliminarea zgomotului, efectul de embossing, omogenizarea
culorilor, etc. Principalul dezavantaj îl constituie efectiv construcŃia lor bazată pe
matrici, prin faptul că aplicarea acestor filtre asupra streamurilor video este mai
dificilă, necesită mult mai multă memorie (au nevoie de un volum iniŃial de date,
practic o porŃiune din cadrul) şi structuri specializate pentru aplicarea funcŃiei de
convoluŃie între matricea de pixeli şi matricea filtrului.
În continuare vor fi prezentate principiile teoretice a unui set de filtre punctuale după cum
va urma: negativul imaginii, ajustarea luminozităŃii, saturaŃiei, respectiv contrastului.
2.6.1. Negativul imaginii
O imagine pozitivă este practic imaginea normală. Imaginea negativă este formată prin
inversarea tonurilor. Din punct de vedere al luminanŃei, suprafeŃele deschise devin închis sşi
invers, iar din punct de vedere al cromaticii, nuanŃele culorilor primare devin nuanŃe ale
culorilor secundare (roşu devine turcoaz, verde devine violet, albastru devine galben).
Algoritmul pentru fiecare pixel din imaginea sursă:
- Se extrag componentele �, :, � ale pixelului.
- Valorile binare ale componentelor �, :, � sunt negate (inversate) obŃinând �J, :J, �J. - Se vor înlocui cu valorile r', g', b' componentele pixelului destinaŃie.
Figura 2.6.1.1. Imagine color si negativul acesteia (A-B); imagine alb-negru şi negativul acesteia (C-D)
Proiect de diplomă
34
Pentru imaginile în tonuri de gri se aplică aceeaşi procedură de mai sus, cu menŃiunea că
în loc de cele trei valori �, : şi � avem una singură – nivelul de gri.
2.6.2. Controlul luminozităŃii imaginii[13]
Luminozitatea este un atribut al percepŃiei vizuale în care o sursă pare a radia sau reflecta
lumină. În alte cuvinte, luminozitatea este percepŃia realizată de luminanŃa obiectului
vizualizat.
Luminozitatea este un termen folosit formal pentru a marca sinonimul din fotometrie,
luminanŃă. După cum a fost definit în Catalogul american de termeni în telecomunicaŃii,
termenul de luminozitate ar trebui folosit doar pentru referinŃe necantitative ale senzaŃilor şi
percepŃilor fiziologice ale luminii. De remarcat faptul că luminanŃa unei surse poate oferi
diferite percepŃii de luminozitate în diferite contexte. În spaŃiul de culo RGB, luminozitatea
poate fi considerată chiar o medie aritmetică a celor trei coordonate (componente) de culoare,
deşi nu toate cele trei componente au efecte similare asupra percepŃiei luminii.
� � L � M � N6
Luminozitatea este de asemenea o componentă a spaŃilor de culoare HSL şi HSV.
O imagine cu luminozitate slabă este o imagine subexpusă, iar o imagine cu luminozitate
exagerată este o imagine spupraexpusă.
Figura 2.6.2.1. Imagine la diferite nivele de luminozitate.
Ajustarea luminozităŃii poate fi aplicată atât imaginilor RGB cât şi imaginilor în tonuri de
gri. Ea presupune deplasarea valorilor fiecărui pixel, cu un delta precizat.
Algoritmul pentru imaginile RGB:
Se determină cele trei valori delta: �� , �: , respectiv �� . Pentru fiecare pixel din
imaginea sursă:
- Se extrag componentele �, :, � ale pixelului.
Capitolul 2 - Fundamente teoretice. Studiu bibliografic
35
- Se calculează �J, :J, �J prin adunarea ��, �:, şi �� la �, :, respectiv �.
- Se vor înlocui cu valorile �J, :J, �J componentele pixelului destinaŃie.
Ca şi în cazul negativizării, pentru imaginile în tonuri de gri este necesară o singură
valoare delta şi se va lucra cu o singură componentă.
2.6.3. Controlul contrastului imaginii[15]
Contrastul este diferenŃa între proprietăŃile vizuale care constituie un obiect (sau
reprezentarea sa într-o imagine) care pot fi distinse de alte obiecte sau fundal. În percepŃia
vizuală a lumii reale, contrastul determină diferenŃă în culoare şi luminozitate a unui obiect
faŃă de alte obiecte aflate în acelaşi câmp vizual. Datorită faptului că sistemul vizual uman
este mai sensibil la contrast decât la luminanŃa absolută, omul poate percepe lumea similar
indiferent de diferenŃele mari de iluminare deŃa lungul zilei sau de la un loc la altul.
Un fenomen demostrat experimental este inhibarea albatrului periferic în condiŃiile în
care lumina albastră este afişată pe un fundal alb, fapt ce are ca rezultat o margine galbenă.
Galbenul este derivat prin inhibarea albastrului pe margini, fapt explicabil în spaŃiul RGB
astfel: alb este format prin combinarea celor trei componente, dar prin inhibarea albastrului
rezultă doar roşu şi verde care prin combinare formează galben.
Există mult posibile definiŃii ale contrastului. Unele includ culoarea, altele nu. Diferitele
definiŃii ale contrastului sunt folosite în diferite situaŃii. Spre exemplu, contrastul luminanŃei
este definit prin următoarea formulă:
�� � ���� � 4�A���� � 945� �/ ��A5�
Logica de la baza acestei formule este că diferenŃe mici de luminanŃă la o luminanŃă
medie mare sunt neglijabile, pe când aceleaşi diferenŃe la o luminanŃă medie slabă contează.
Un alt tip de constrast este contrastul Weber care este definit ca:
�f � � � �W�W
unde � şi �W reprezintă luminanŃele trăsăturilor şi respectiv ale fundalului. Este utilizat în
cazurile în care trăsături mini sunt prezente pe un fundal mare uniform.
Contrastul de tip Michelson este folosit des pentru cadrele în care atât trăsăturile
luminoase cât şi trăsăturile închise sunt echivalente şi ocupă fracŃiuni similare de suprafaŃă.
Acest tip de contrast este definit astfel:
Proiect de diplomă
36
�� � ���� � ��"����� � ��"�� unde �����şi ��"� reprezintă nivelele extreme ale luminanŃei.
Un al patrulea tip de contrast este contrastul RMS. Acesta nu depinde de frevenŃa spaŃială
a conŃinutului sau de distribuŃia spaŃială a contrastului în imagine. Contrastul RMS este definit
ca deviaŃia standard a intensităŃilor pixelilor din imagine:
�^�� � � �� � �� �" � � ����"��
unde intensităŃile �" sunt normalizate la o valoare maximă de 1, � este numărul total de pixeli
din imagine, iar � � reprezintă intensitatea medie a pixelilor din imagine.
Figura 2.6.3.1. Imagine la diferite nivele de contrast.
2.6.4. Controlul saturaŃiei imaginii[14]
În teoria culorilor, saturaŃia, croma şi coloratura sunt în legătura una cu cealaltă, dar
totodată sunt concepte distincte referitoare la intensitatea perpepută a unei culori. Coloratura
este definită ca diferenŃa dintre o culoare şi gri. Croma e definită ca diferenŃa unei culori faŃă
de luminozitatea altei culori se confundă cu alb în condiŃii similare de vizare. SaturaŃia este
practic diferenŃa culorii faŃă de propria sa luminozitate. Aşadar conceptul general este intuitiv,
termenii fiind deseori folosiŃi pentru a definii acelaşi lucru.
Un stimul foarte colorat este intens şi viu, pe când un stimul mai puŃin colorat pare a fi
estompat, mai apropiat de gri. Fără coloratură deloc, o imagine sau o culoare devine un gri
„neutru” (o imagine fără coloratură în nici una dintre culori este denumită o imagine în tonuri
de gri).
Capitolul 2 - Fundamente teoretice. Studiu bibliografic
37
SaturaŃia este una din coordonatele sistemelor de culoare HSL şi HSV. De notat este
faptul că toate calculatoarele în care este implementat acest sistem de culoare folosesc o
aproximare brută pentru a calcula ceea ce se presupune a fi saturaŃia.
SaturaŃia unei culori este determinată de o combinaŃie de intensitate de lumină şi cât de
mult este distribuită de-a lungul sperctrului vizual pe lungimi de undă diferite. Cea mai pură
culoare este obŃinută prin folosirea unei singure lungimi de undă la intensitate mare
asemănător luminii laser. Dacă intensitatea scade, scade şi saturaŃia. Pentru a desatura o
culoare într-un sistem substractiv, se adaugă alb, negru gri sau complementul nuanŃei.
Figura 2.6.4.1. Imagine la diferite nivele de saturaŃie.
2.7. InterfeŃele seriale RS-232 şi PS/2
2.7.1. InterfaŃa serială RS-232[11][18]
În telecomunicaŃii, RS-232 (Recommended Standard 232) este un standard pentru
semnale transmise serial între două echipamente DTE (Data Terminal Equipment – de fel un
modem) şi DCE (Data Circuit-terminating Equipment). Este folosit în mod în mod special
pentru porturile seriale ale calculatoarelor personale.
Detaliile despre formatul caracterelor şi ratei de trasfer sunt controlate de hardware-ul
portului serial, de obicei un singur circuit integrat denumit UART care realizează conversia
din paralel în forma asincronă serialp start-stop. Detaliile despre nivelele de tensiune,
comportamentul la scurt-circuit sunt controlate de un driver de linie care converteşte nivelele
logice ale UART-ului în nivele ale semnalului compatibile RS-232.
Proiect de diplomă
38
În RS-232, datele sunt trimise ca o serie de biŃi în timp. Ambele moduri de transfer,
sincron şi asincron, sunt suportate de standard. În plus faŃă de circuitul de date, stadardul
defineşte o serie de circuite de control pentru a gestiona conexiunea între DCE şi DTE.
Avantajele transmisiei seriale faŃă de transmisia paralelă sunt următoarele:
- Cablurile seriale pot fi mai lungi decât cablurile paralele. Portul serial transmite un
„1” logic în intervalul -3 până la -25V şi „0” logic în intervalul +3 până la 25V, în
vreme ce portul paralel transmite „0” ca 0V şi „1” ca 5V. Prin urmare portul serial
are diferenŃa maximă de semnal de 50V comparativ cu portul paralel la care aceasta
este de maxim 5V. Prin urmare pierderile de semnal sunt o problemă mai mică
pentru cablul serial decât pentru cablul paralel.
- Pentru transmisia serială nu sunt necesare atât de multe fire pentru transmisie
comparativ cu transmisia paralelă. Dacă dispozitivul care trebuie conectat este la
mare distanŃă, 3 fire sunt mai ieftine şi mai uşor de manevrat decât 19 sau 25 de fire.
Totuşi trebuie luat în considerare şi costul interfaŃării de la fiecare capăt.
Porturile seriale pot avea două tipuri de conectori: de tip D25 şi de tip D9. SemnificaŃia
pinilor este prezentată în tabelul 2.7.1.
Tabel ul 2.7.1. Plasarea pinilor portului serial RS-232 pe conectori
Conector D25 Conector D9 Abreviere Nume complet Pin 2 Pin 3 TD Transmit Data Pin 3 Pin 2 RD Receive Data Pin 4 Pin 7 RTS Request To Send Pin 5 Pin 8 CTS Clear To Send Pin 6 Pin 6 DSR Data Set Ready Pin 7 Pin 5 SG Signal Ground Pin 8 Pin 1 CD Carrier Detect Pin 20 Pin 4 DTR Data Terminal Ready Pin 22 Pin 9 RI Ring Indicator
FuncŃiile pinilor sunt prezentate în tabelul următor:
Tabelul 2.7.1.2. SemnificaŃia pinilor portului serial RS-232
Abreviere Nume complet SemnificaŃie TD Transmit Data Ieşirea serială de date (TXD) RD Receive Data Intrarea serială de date (RXD) RTS Request To Send AtenŃionează DCE că UART e gata pentru transfer CTS Clear To Send Indică faptul că DCE este gata pentru transfer DSR Data Set Ready Către UART: DCE e gata de stabilirea unei legături DTR Data Terminal Ready Către DCE: UART e gata de stabilirea unei legaturi RI Ring Indicator Activ când DCE detectează semnal de sonerie de la
PSTN (comunicaŃie pe linie telefonică prin modem).
Capitolul 2 - Fundamente teoretice. Studiu bibliografic
39
Fiecare caracter este încapsulat într-un cadru şi trasferat bit cu bit. Cadrul are o formă
standard fiind constituit din patru portiuni, după cum se observă şi în figura 2.7.1.1:
a. Bit de start – când nu sunt transmise datem, linia este menŃinută în “1” logic; la
începerea trasferului fiecărui caracte linia este trecută în “0” logic.
b. BiŃi de date – standardul suportă transferul de caractere reprezentate pe 6, 7, respectiv
8 biŃi.
c. Bit de paritate – bitul de paritate este calculat la iniŃierea transferului fiecărui
caracter; se poate lucra cu paritate pară sau impară.
d. BiŃi de stop – indică sfârşitul unui cadru şi pot fi 1, 1.5, respectiv 2.
Figura 2.7.1.1. Cadrul unui caracter.
2.7.2. InterfaŃa serială PS/2[1]
InterfaŃa fizică PS/2 (Personal System/2) foloseşte un protocol serial bidirecŃional pentru
a transmite date despre mişcarea (în cazul mouse-ului) sau apăsarea butoanelor (în cazul
tastaturii sau mouseului). Pe de altă parte calculatorul poate trimite un număr de comenzi
pentru configurarea acestor interfete cu utilizatorul.
Poate avea două tipuri de conectori: cu DIN cu 5 pini şi mini-DIN cu 6 pini. Sistemul la
care este conectat un mouse sau o tastatură trebuie să ofere pe doi pini ai interfeŃei o sursă cu
protecŃie la suprasarcină de 5V. InterfaŃa indiferent de conectorul folosit mai prezintă încă doi
pini utili în plus faŃă de cei doi de alimentare: pinul de date şi pinul de ceas, ceilalŃi pini fiind
neutilizaŃi. Liniile de date, respectiv ceas sunt implementate fizic ca linii open-collector.
Magistrala PS/2 este în stare inactivă când când ambele linii (de date şi de ceas) sunt în starea
high. Aceasta este singura stare în care se permite trasferul de date de la tastatură sau mouse
către sistem. Sistemul totdeauna trebuie să genereze semnalul de ceas. Dacă se doreşte
transferul de date de la sistem la echipament, trebuie iniŃial oprită comunicaŃia în sens invers
prin setarea semnalului de ceas la nivel jos (low). Apoi gazda va seta şi linia de date la nivel
jos. Acestă stare reprezintă starea de cerere de transfer.
01234567 DDDDDDDD
Bit START Biti
STOP
Bit PARITATE
1 1 t 0
Proiect de diplomă
40
Datele sunt transmise similar standardului RS-232. Fiecare octet trimis este încapsulat
într-un cadru format din: un bit de start, 8 biŃi de date (octetul respectiv), un bit de paritate (se
foloseste doar paritate pară), un bit de stop şi un bit de înştiinŃare, ack (apare doar în transferul
de la gazdă către dispozitiv).
Figura 2.7.2.1. ComunicaŃia dispozitiv-gazdă (SR –bit start, P – bit paritate, ST – bit stop).
Mouse-ul sau tastura trimite un bit pe linia de date când semnalul de ceas este high, iar
gazda citeşte când semnalul de ceas este low.
FrecvenŃa de ceas este de 10 până la 16.7 KHz. Gazda poate să oprească transferul în
orice moment prin setarea semnalului de ceas în starea low pentru un minim de 100 µs. Dacă
gazda opreşte comunicaŃia înainte ca dispozitivul să transmită un cadru complet, respectivul
dispozitiv trebuie sa anuleze transferul şi să retransmită în momentul în care gazda elibereaza
linia. Dacă totuşi gazda opreşte comunicaŃia în perioada în care semnalul de ceas este low,
dispozitivul nu mai trebuie sp retransmită respectivul cadru. Pe de altă parte, dacă trebuie
retransmis respectivul cadru şi între timp mai apare un eveniment, acest ultim eveniment va fi
memorat în bufferul dispozitivului. Atât tastatura, cât şi mouse-ul pe PS/2 sunt prevăzute cu
un buffer de 16 biŃi pentru această situaŃie. În caz că apar alte evenimente când bufferul este
plin, acestea vor fi ignorate. Mouse-ul memorează doar cel mai recent cadru pentru transfer.
Figura 2.7.2.2. ComunicaŃia gazdă-dispozitiv.
a – timpul scurs până la începerea generării semnalelor de ceas.
b – timpul necesar pentru transmiterea datelor.
După cum se observă din formele de undă după transmiterea datelor de la gazdă la
dispozitiv este recepŃionat imediat bitul ack.
Capitolul 2 - Fundamente teoretice. Studiu bibliografic
41
2.8. Protocolul de transfer între mouse şi sistem[1]
Mouse-ul PS/2 standard suportă următoarele întrări: deplasare pe axa x (stânga-dreapta),
deplasare pe axa y (sus-jos), stările butoanele standard (stanga, dreapta, mijloc). Mouse-ul
citeşte aceste intrări la o anumită frecvenŃă şi reactualizează contorii şi indicatorii
corespunzători. Există multe alte dispozitive PS/2 care au intrări adiŃionale şi pot trimite
datele diferit decât în modul standard.
Când mouse-ul detectează deplasare, acesta incrementează sau decrementează
numărătoarele corespunzător cu deplasarea detectată. Acestea sunt valori de 9 biŃi în
complement faŃă de 2 şi fiecare are asignat un indicator de depăşire. Parametrul care
determină cantitatea prin care sunt incrementate sau decrementate numărătoarele este
rezoluŃia. RezoluŃia standard este de 4 numărări per milimetru şi gazda poate să o modifice
folosind comanda de setare a rezoluŃiei.
AdiŃional mai există un paramentru care nu afectează modificarea valorii numărătoarelor,
ci valoare raportată sistemului. Acest parametru se numeşte scalare. Standard mouse-ul are o
scalare de 1:1 care nu are nici un efect asupra valorii, dar gazda poate seta o scalare de 2:1
printr-o comandă specifică. Dacă scalarea este setată la 2:1, mouse-ul va raporta valoarea
conform următorului tabel:
Tabel ul 2.8.1. Valori raportate de mouse în cazul unei scalări de 2:1
Valoare numărător Valoare raportată 0 0 1 1 2 1 3 3 4 6 5 9
n>5 2n
Mouse-ul PS/2 standard trimite informaŃia de deplasare şi de stare a butoanelor într-un
pachet de 3 octeti după cum este evidenŃiat în figura 2.8.1.
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Octet 1 Depăşire Y
Depăşire X
Semn Y
Semn X
“1” Buton Mijloc
Buton Dreapta
Buton Stanga
Octet 2 Deplasare X Octet 3 Deplasare Y
Figura 2.8.1. Pachetul trimis de un mouse PS/2 standard.
Proiect de diplomă
42
InformaŃia de deplasare este reprezentată pe 9 biŃi în complement faŃă de 2, astfel cel mai
semnificativ bit apare ca un bit de semn în octetul 1. Numărătoarele sunt actualizate cand
mouse-ul citeşte intrările şi determină că a fost realizată o deplasare. Valorile acestora
reprezintă cantitatea deplasării care s-a realizat de la ultima citire. Valoarea exprimată de
numărătoarele de deplasare se încadrează între -255 şi 255. Dacă valoarea este depăşită, bitul
indicator de depăşire va fi activat. Numărătoarele sunt resetate după fiecare transfer complet,
dar şi la primirea comenzii de retrimitere de la gazdă.
Mouse-ul PS/2 standard poate opera în patru moduri:
- Reset – mod în care intră automat la pornire sau la primirea comezii de resetare; după
intrarea în acest mod mouse-ul realizează un autotest BAT (Basic Assurance Test) şi
setează: rata de eşantionare 100 per secunda, rezoluŃia 4 per mm, scalarea 1:1 şi
dezactivează trimiterea de date. Apoi trimite rezultatul testului către gazdă. În
următorul pas mouse-ul trimite codul identificator. După trimiterea codului mouse-ul
intră în modul stream.
- Stream – modul implicit în care lucrează mouse-ul după ce s-a terminat de executat
rutina iniŃială de reset.
- Remote – mod util în anumite situaŃii; se intră în acest mod prin trimiterea către
mouse a comenzii de setare mod remote şi se iese prin trimiterea comenzii de setare
mod stream; în acest mo mouse-ul citeşte intrările şi reactualizează numărătoarele şi
indicatorii la rata de eşantionare curentă, dar nu trimite automat pachete de date când
este detectată deplasare. În schimb gazda trebuie să citească datele folosind comanda
de citire date. După recepŃionarea respectivei comenzi, mouse-ul trimite un singur
pachet şi resetează numărătoarele şi indicatorii.
- Wrap – modul este util doar pentru testarea conexiunii intre gazdă şi mouse; se intră
în acest mod prin trimiterea comenzii de setare mod wrap şi se iese prin trimiterea fie
a comenzii de resetare, fie a comenzii de resetare mod wrap. Dacă este primită
comanda de resetare, mouse-ul se va reiniŃializa, iar dacă este primită comanda de
resetare mod wrap, mouse-ul va intra în modul anterior. În acest mod, care este un
mod de tip ecou, fiecare octet trimis de gazdă este retrimis inapoi de mouse, chiar
dacă respectivul octet reprezintă o comandă validă mouse-ul nu va răspunde la ea.
Există doar cele două excepŃii menŃionate anterior.
O extensie populară a mouse-ul PS/2 standard este mouse-ul Microsoft Intellimouse.
Acesta include suport pentru un număr de 5 butoane şi 3 axe de deplasare (stânga-dreapta,
Capitolul 2 - Fundamente teoretice. Studiu bibliografic
43
sus-jos, rotiŃa de derulare). Aceste caracteristici adăugate necesită împreună cu cele standard
un pachet de 4 octeŃi. Având în vedere că gazdele PS/2 standard nu pot să recunoască acest
format de pachet, acest tip de mouse a fost realizat astfel încât să opereze ca un mouse
standard în cazul în care gazda nu confirmă recunoaşterea tipului de mouse. Astfel acest
mouse poate fi utilizat pe sisteme care nu recunosc respectivele funcŃii ca un mouse normal.
După etapa de resetare mouse-ul Intellimouse operează ca un mouse standard. Pentru a
intra în modul scrolling wheel gazda trebuie să trimită următoarea secvenŃă către mouse:
Reglarea luminozităŃii ecranului LCD şi poziŃionarea imaginii watermark (imagine
suprapusă peste interfaŃa grafică afişată pe LCD) sunt realizate printr-o interfaŃă grafică de tip
OSD (on-screen display) controlată prin intermediul butoanelor prezente pe placa de
dezvoltare Nexys2.
Tabelul 3.4.1. Descrierea intrărilor şi ieşirilor blocului BUT_INT
Nume Tip DirecŃie SemnificaŃie
Clock Std_logic Intrare Semnalul de ceas Reset Std_logic Intrare Semnalul de reset asincron Buttons Std_logic_vector Intrări Semnale conectate la intrările
pentru butoane Sel Std_logic_vector Ieşire Semnalele indică evenimentul de
„apăsare buton” apărut.
Pentru a contracara efectele stărilor tranzitorii care apar la apăsarea unui buton am
implementat un modul debouncer care elimină aceste stări. Totodată pentru a elimina apariŃia
stărilor neconcludente la apăsarea a două sau mai multe butoane simultan am recurs la
prioritizarea evenimentelor (figura 3.4.1). Astfel dacă apare evenimentul „buton apăsat”
(definit prin stare intrării în „1” logic) la butonul cu prioritatea cea mai mare, atunci stările
celorlalte butoane sunt neglijate, iar ieşirea va primi valoarea corespunzătoare. În cazul în care
nu apare nici un eveniment de acest tip, pinii ieşirii vor fi setaŃi în „0” logic.
Capitolul 3 - Analiza, proiectarea şi implementarea hardware a aplicaŃiei pentru FPGA
53
Figura 3.4.1. Schema sintetizată a modulului de citire a stării butoanelor.
Principiul de funcŃionare a unui modul debouncer pentru o intrare cu stări tranzitorii este
următorul: este citită starea intrării, iar, dacă intrarea este validă (în acest caz, „buton apăsat”,
adică „1” logic), această valoare a intrării este trimisă către ieşire; apoi se aşteaptă o perioadă
de timp (în cazul de faŃă am ales 20 ms), după care ieşirea este resetată şi se realizează o nouă
citire. În cazul apariŃiei semnalului reset activ, procesul este reluat, contorul fiind reiniŃializat.
Tabelul 3.4.2. Descrierea intrărilor şi ieşirilor blocului DEBOUNCER
Nume Tip DirecŃie SemnificaŃie
Clock Std_logic Intrare Semnalul de ceas Reset Std_logic Intrare Semnalul de reset asincron B Std_logic Intrare Semnal conectat la intrarea
butonulul. Bev Std_logic Ieşire Semnalul de stare a butonului fără
perioade transzitorii.
3.5. Proiectarea şi implementarea memoriei video
Conform premiselor de proiectare stabilite, am implementat memoria video utilizând cele
20 de blocuri BRAM. Având în vedere faptul că modulul LCD suportă date de culoare
definite pe 18 biŃi am ales să configurez blocurile BRAM ca memorii 1024x(16+2) biŃi prin
instanŃierea RAMB16_S18_S18, folosind şi biŃii de paritate pe post de biŃi de date.
A rezultat un total de 360 KbiŃi pentru a reprezenta o imagine de 160 x 128 pixeli. Aşadar
fiecare bloc de memorie va avea 1024 de locaŃii a câte 18 biŃi ceea ce presupune o magistrală
de 10 biŃi pentru adresarea unui bloc pentru fiecare port al BRAM-ului. Fiindcă folosesc toate
cele 20 de blocuri de memori am nevoie de încă 5 linii de magistrală pentru a realiza
adresarea completă (�� � �� � ��).
Activarea unui anumit bloc de memorie este realizată pentru fiecare port cu ajutorul unui
demultiplexor 1:20, iar preluarea datelor de la un bloc de memorie este realizată cu ajutorul
unui multiplexor 20:1 de magistrale de 18 biŃi. Toate cele trei blocuri menŃionate au ca intrări
de selecŃie cele 5 linii adiŃionale ale magistralelor de adresare.
Proiect de diplomă
54
Tabelul 3.5.1. Descrierea intrărilor şi ieşirilor blocului VIDEO_MEM
Nume Tip DirecŃie SemnificaŃie
Clk_a Std_logic Intrare Semnalul de ceas după care se face scrierea pe portul A.
En_a Std_logic Intrare Semnalul de activare a scrierii pe portul A.
Adr_a Std_logic_vector Intrare Adresa de memorie la care este realizată scrierea pe portul A
Di_a Std_logic_vector Ieşire Datele scrise. Clk_b Std_logic Intrare Semnalul de ceas după care se
face citirea pe portul B. En_b Std_logic Intrare Semnalul de activare a citirii pe
portul A. Adr_b Std_logic_vector Intrare Adresa de memorie la care este
realizată citirea pe portul A Do_b Std_logic_vector Ieşire Datele citite.
Astfel implementată, memoria video include următoarele blocuri (figura 3.5.1) :
- Cele 20 de blocuri de memorie BRAM fiecare organizate sub forma a 1024x18biŃi.
- Două demultiplexoare pentru activarea blocurilor corespunzătoare pentru scriere,
respectiv citire.
- Un multiplexor (de magistrale, adică o serie de multiplexoare de acelaşi tip cu
intrările de selecŃie comune) pentru selecŃia datelor la ieşire (operaŃia de citire).
Figura 3.5.1. Schema bloc a memoriei video implementate.
DMUX 1:20
DMUX 1:20
MUX 18 x 20:1
BRAM
0
BRAM 1
BRAM 2
BRAM 19
10 10
20 20 5 5
18
360 18
A / "� A��*U"�U�15
A / +��
A�*"�"U�
15
SCRIERE CITIRE
18
5
18
��� ���
Capitolul 3 - Analiza, proiectarea şi implementarea hardware a aplicaŃiei pentru FPGA
55
3.6. Proiectarea şi implementarea controlerului LCD-ului
3.6.1. Sincronizarea
LCD-ul folosit are nevoie de un singur semnal de sincronizare de tip data-enable.
Modulul de sincronizare, sync_ctrl, are la bază două numărătoare, unul pentru orizontală,
desemnat de semnalul hc, iar celălalt pentru verticală, desemnat de semnalul vc.
În momentul în care valorile celor două semnale sunt mai mici decât valorile care
determină rezoluŃia ecranului (480 pixeli pe orizontală, respectiv 272 pixeli pe verticală),
semnalul de sincronizare de este activat. Similar modulului de sincronizare pentru un ecran cu
tub catodic cu interfaŃă VGA, există atât pe orizontală, cât şi pe verticală o perioadă de
aşteptare (perioadă de blank) în care nu sunt transmise date de culoare către LCD, iar
semnalul de sincronizare este dezactivat.
Tabelul 3.6.1.1. Descrierea intrărilor şi ieşirilor blocului SYNC_CTRL
Nume Tip DirecŃie SemnificaŃie Clock Std_logic Intrare Ceasul de pixel 25 MHz. Reset Std_logic Intrare Semnalul de reset asincron. De Std_logic Ieşire Semnalul de sincronizare a
afişării pe LCD. Ho Std_logic_vector Ieşiri Contorul poziŃiei curente pe
orizontală. Vo Std_logic_vector Ieşiri Contorul poziŃiei curente pe
verticală.
Acest modulul lucreză sincron cu ceasul de pixel de 25 MHz furnizat de generatorul de
semnale de ceas. La fiecare front crescător al ceasului contorul pe orizontală este incrementat.
Dacă acest contor atinge valoarea 599 (adică s-a realizat desenarea unei linii şi s-a aşteptat
perioada de blank pe orizontală), el va fi resetat la valoare 0 şi va fi incrementat contorul pe
verticală trecând la o nouă linie. Similar în momentul în care contorul pe verticală atinge
valoare maximă specificat, 522, acesta va fi resetat reluând întregul proces.
Am realizat modulul astfel încât să furnizeze la ieşire şi valorile celor două contoare,
fiind necesare în modulele de generare a interfeŃei şi de accesare a memoriei (figura 3.6.1.1).
Proiect de diplomă
56
Figura 3.6.1.1. Modulul de generare a semnalului de sincronizare.
3.6.2. Preluarea datelor din memoria video
Pentru a prelua imaginea generată în memoria BRAM am realizat un modul de acces
direct la memorie (modul DMA). Acest modul va genera funcŃie de valoarea contorilor
generaŃi de modulul de sincronizare adresa corespunzătoare şi va activa citirea din memorie
(figura 3.6.2.1).
Figura 3.6.2.1. Modulul DMA.
Generarea adresei este realizată în doi paşi: generez coordonatele de afişare � �� în
interiorul chenarului, apoi generez adresa de memorie corespuzătoare acestor coordonate.
Pentru a realiza dublarea pixelilor am generat adresa funcŃie de jumătatea valorii
coordonatelor.
Tabelul 3.6.2.1. Descrierea intrărilor şi ieşirilor blocului DMA_INT
Nume Tip DirecŃie SemnificaŃie Clock Std_logic Intrare Ceasul de pixel 25 MHz. Reset Std_logic Intrare Semnalul de reset asincron. H Std_logic_vector Intrări Contorul poziŃiei curente pe
orizontală. V Std_logic_vector Intrări Contorul poziŃiei curente pe
verticală. Addr Std_logic_vector Ieşiri Adresa de memorie generată. Enable Std_logic Ieşiri Semnalul de activare a citirii.
Capitolul 3 - Analiza, proiectarea şi implementarea hardware a aplicaŃiei pentru FPGA
57
Adresa unei locaŃii de memorie este generată corform formulei: A� � � � ��� �
Valoarea ��� reprezintă numărul de pixeli ai unei linii a imaginii (în acest caz 160).
Pentru a evita folosirea operaŃiei de înmulŃire care presupune apariŃia întârzierilor de calcul,
am rescris valoare ��� sub forma unei sume de puteri ale lui 2 şi anume: ��� � �e� � ��j� 6� � �� � ��
Prin urmare formula de calcul a adresei a devinit: A� � � � �� � � � �� � � � � k� � � � G� �
OperaŃile de deplasare la stânga se traduc în limbajul VHDL ca simple concatenări la
dreapta ale valorii lui y repezentată ca vector de biŃi cu un vector de biŃi „0” de lungime 7,
respectiv 5. Astfel generarea adresei este realizată prin operaŃii simple ale căror rezultate apar
în perioada unui singur semnal de ceas. De precizat faptul că şi acest modul lucrează sincron
Pentru a preîntâmpina întârzierile datorate parcurgerii pipeline-ului de procesare al
filtrelor punctuale, am recurs la generarea în avans a adreselor. Astfel generarea adreselor
începe cu 5 semnale de ceas înainte de fi preluate datele de către modulul de generare a
interfeŃei grafice. Valoarea respectivă am stabilit-o empiric prin verificări succesive ale
rezultatului.
3.6.3. Generarea interfeŃei grafice
Modulul de generare a interfeŃei grafice lucrează sincron cu ceasul de pixel şi generează
nuanŃei de culori funcŃie de valorile contorilor primite de la modulul de sincronizare.
Pictogramele afişate sunt preluate din constante de tip matrice de biŃi. Matricile de biŃi au
număr de coloane multiplu de 4 pentru a fi reprezentate restrâns în hexazecimal. Constantele
de tip matrice implementează practic memorii de tip ROM (read-only memory) în interiorul
circuitului FPGA.
Proiect de diplomă
58
Tabelul 3.6.3.1. Descrierea intrărilor şi ieşirilor blocului GRAFIC_INT
Nume Tip DirecŃie SemnificaŃie
Clock Std_logic Intrare Ceasul de pixel 25 MHz. Reset Std_logic Intrare Semnalul de reset asincron. H Std_logic_vector Intrări Contorul poziŃiei curente pe
orizontală. V Std_logic_vector Intrări Contorul poziŃiei curente pe
verticală. Ri, Gi, Bi Std_logic_vector Intrări Culoarea citită din memorie. Rc, Gc, Bc Std_logic_vector Intrări Culoarea curentă de desenare. Bv Std_logic_vector Intrări Nivelul de luminozitate al
imaginii. Cv Std_logic_vector Intrări Nivelul contrastului imaginii. Sv Std_logic_vector Intrări Nivelul saturaŃiei imaginii. Ro, Go, Bo Std_logic_vector Ieşiri Culoarea generată la ieşire.
În momentul parcurgerii unei zone determinate de o pictogramă, valoarea „1” logic
regăsită în matrice la poziŃia corespuzătoare va determina afişarea unui pixel de o anumită
culoare; în cazul în care bitul este „0” pixelul respectiv va fi negru. Pentru a diminua
dimensiunea ROM-urilor sintetizate în FPGA am recurs la dublarea dimensiunii de afişare a
pictogramelor (figura 3.6.3.1).
Figura 3.6.3.1. InterfaŃa grafică generată pe ecranu LCD.
3.6.4. InterfaŃa grafică OSD de control a LCD-ului
Pentru vizualizarea şi modificarea valorii intensităŃii luminii de fundal a LCD-ului am
realizat o interfaŃă grafică de tip OSD (on-screen display) care, la apăsarea unui buton al
plăcii Nexys2, apare suprapusă peste interfaŃa grafică actuală (figura 3.6.4.1).
AdiŃional acestor funcŃii am realizat în acest modul şi afişarea unei imagini de tip
watermark, adică o imagine suprapusă totdeauna interfeŃei grafice.
Capitolul 3 - Analiza, proiectarea şi implementarea hardware a aplicaŃiei pentru FPGA
59
Modulul este constituit din 4 procese şi două submodule. Submodulele sunt implementări
de memorii ROM similare celor pentru pictogramele folosite în generarea interfeŃei grafice.
Memoria ROM semnatura conŃine imaginea monocrom a numelui, iar memoria upit_pic
conŃine sigla universităŃii reprezentată printr-o imagine monocrom.
Primul proces interpretează semnalele primite de la modulul de citire a stării butoanelor.
Corespunzător valorii acestor semnale sunt setate opŃiunea curentă, reprezentată prin semnalul
opt, respectiv direcŃia de modificare a parametrilor (incrementare sau decrementare)
reprezentată prin semnalul dir (figura 3.6.4.2).
Figura 3.6.4.2. Organigrama de funcŃionare a primului proces.
Al doilea proces realizează setarea parametrului indicat de semnalul opt şi testarea
atingerii limitelor inferioară şi superioară. De precizat faptul că atât poziŃia interfeŃei OSD
(semnalele ox, oy), cât şi poziŃia imaginii watermark (semnalele pic_x, pic_y) pot fi
modificate.
Figura 3.6.4.1. InterfaŃa OSD şi watermark-ul.
Proiect de diplomă
60
Al treilea proces generează efectiv interfaŃa OSD în momentul în care este activă şi
imaginea watermark. InterfaŃa OSD este constituită din două zone: meniul care afişează
valorile curente ale parametrilor şi a cărui poziŃii poate fi modificată şi zona de afişare a
numelui şi prenumelui. Imaginea watermark am generat-o prin setarea culorii pixelilor activi
(locaŃia din matrice este „1” logic) cu valoarea negată a culorii pixelilor corespuzători ai
interfeŃei grafice furnizate de modulul grafic_int, practic afişarea negativului imaginii de
fundal.
InterfaŃa OSD este afişată pe ecran atât timp cât este apăsat un buton, apoi dispărând după
5 secunde de la eliberarea butonului. Temporizarea este realizată de al patrulea pronces prin
care am implementat un numărător cu resetare. În momentul în care un buton este apăsat,
numărătorul este resetat şi semnalul de activare a afişării interfeŃei OSD este activat. La
eliberarea butonului, numărătorul devine activ. În momentul atingerii limitei, numărătorul
rămâne blocat, iar interfaŃa OSD este dezactivată prin setarea semnalului de activare în „0”
logic (figura 3.6.4.3).
Figura 3.6.4.3. Organigrama de funcŃionare a ultimului proces.
Capitolul 3 - Analiza, proiectarea şi implementarea hardware a aplicaŃiei pentru FPGA
61
Tabelul 3.6.4.1. Descrierea intrărilor şi ieşirilor blocului LCD_OSD
Nume Tip DirecŃie SemnificaŃie
Clock Std_logic Intrare Ceasul de pixel 25 MHz. C20 Std_logic Intrare Ceasulde 20 Hz pentru procesul
de interpretare a evenimentelor butoanelor.
Reset Std_logic Intrare Semnalul de reset asincron. H Std_logic_vector Intrări Contorul poziŃiei curente pe
orizontală. V Std_logic_vector Intrări Contorul poziŃiei curente pe
verticală. Ri, Gi, Bi Std_logic_vector Intrări Culoarea generată de modulul de
grafic_int. Ro, Go, Bo Std_logic_vector Ieşiri Culoarea generată la ieşire. V_l Std_logic_vector Ieşiri Nivelul luminozitate al LCD-ului.
3.6.5. Generarea semnalului PWM pentru controlul luminozităŃii LCD-ului
LCD-ul utilizat suportă controlul intensităŃii luminii de fundal printr-un singur pin de
intrare prin generarea unui semnal modulat în lăŃime de puls (PWM – pulse width
modulation).
Tabelul 3.6.5.1. Descrierea intrărilor şi ieşirilor blocului LIGHT_CTRL
Nume Tip DirecŃie SemnificaŃie Clock Std_logic Intrare Ceasul de pixel 25 MHz. Reset Std_logic Intrare Semnalul de reset asincron. Load Std_logic_vector Intrări Nivelul luminozităŃii LCD-ului. Pwm_out Std_logic Intrări Semnalul PWM generat.
Am implementat un modul de generare a semnalului PWM care are la bază un numărător
desemnat de semnalul cnt şi primul proces din interiorul modulului. Al doilea proces
realizează generarea efectivă a impulsurilor PWM corform următoarei logici: dacă valoarea
contorului este mai mică decât valoarea parametrului de intrare, atunci semnalul PWM va fi
setat în „1” logic; în caz contrar, acesta va fi setat în „0” logic (figura 3.6.6.1).
Modulul implementat lucrează sincron cu ceasul de 64KHz. Aşadar fiecare porŃiune de
semnal PWM se repetă cu frecvenŃa de 1KHz dat fiind faptul că sunt generate 64 de nivele de
luminozitate.
Proiect de diplomă
62
Figura 3.6.5.1. Schema sintetizată a circuitului.
3.7. Modulul de modificare a parametrilor în funcŃie de evenimentele
mouse-ului
Evenimentele mouse-ului (apăsare butoane, deplasare pe axa x, deplasare pe axa y) sunt
preluate de la modulul de control al mouse-ului oferit de firma producătoare a plăcii Nexys2
împreună cu modulul de control al interfeŃei PS/2.
Tabelul 3.6.7.1. Descrierea intrărilor şi ieşirilor blocului INTERPRETOR_MOUSE
Nume Tip DirecŃie SemnificaŃie Clock Std_logic Intrare Ceasul de pixel 25 MHz. Reset Std_logic Intrare Semnalul de reset asincron. Mx, My Std_logic_vector Intrări Coordonatele cursorului mouse. M_lmr Std_logic_vector Intrări Stările butoanelor mouse-ului. Tp Std_logic_vector Ieşiri Tipul primitivei grafice alese. X0, Y0 Std_logic_vector Ieşiri Coordonatele primului punct setat X1, Y1 Std_logic_vector Ieşiri Coordonatele celui de-al doilea
punct setat. Rz Std_logic_vector Ieşiri Raza calculată – distanŃa între
cele două puncte. Rv, Gv, Bv Std_logic_vector Ieşiri Componentele culorii de desenare
setate. Vb Std_logic_vector Ieşiri Nivelul de luminozitate a
imaginii. Vc Std_logic_vector Ieşiri Nivelul contrastului imaginii. Vs Std_logic_vector Ieşiri Nivelul saturaŃiei imaginii.
Date fiind necesităŃile aplicaŃiei pentru microsistem am modificat modulul de control al
mouse-ului, eliminând atât intrările, cât şi secvenŃele de instrucŃiuni necesare pentru setarea
Capitolul 3 - Analiza, proiectarea şi implementarea hardware a aplicaŃiei pentru FPGA
63
rezoluŃiei, scalării, poziŃiei curente a cursorului şi a ariei maxime în care poate fi deplasat
cursorul, setând aria maximă încă de la iniŃializare ca fiind aria ecranului LCD, 480x272
pixeli.
Modulul de modificare a parametrilor funcŃie de evenimentele mouse-ului este utilizat în
momentul în care aplicaŃia funcŃionează în modul de sine stătător, adică atunci când
microsistemul nu este conectat la PC. Acest modul are două funcŃii: pe de o parte
interpretarea evenimentelor mouse-ului care apar, iar pe de altă parte, setarea parametrilor
(practic a ieşirilor) funcŃie de aceste eveniment, dar şi iniŃializarea lor în momentul pornirii
microsistemul sau în momentul în care apare un semnal reset activ (figura 3.7.1).
Figura. 3.7.1. Modulul de interpretare a evenimentelor mouse-ului.
FuncŃie de poziŃia cursorului şi starea butoanelor mouse-ului preluate de la modulul de
control al mouse-ului se decide parametrul care va fi modificat şi cuantumul acestei
actualizări. Am definit în interfaŃa grafică suprafeŃe active indicate pe ecran sub forma unor
pictograme sau a unor bări de derulare.
Există două evenimente ale mouse-ului tratate în momentul în care cursorul se află pe una
dintre aceste suprafeŃe active: dacă s-a apăsat butonul din stânga al mouse-ului („click
stânga”), respectiv dacă s-a apăsat butonul din dreapta al mouse-ului („click dreapta”). Ca şi
în cazul preluării stării butoanelor de pe placa Nexys2, am optat la prioritizarea
evenimentelor. Aşadar, am ales ca eveniment prioritar „click stânga”.
Proiect de diplomă
64
Pentru evenimentul „click stânga”, în cazul în care apare în momentul în care cursorul se
află pe una dintre pictograme biŃii variabilei care indică primitiva grafică vor fi setaŃi
corespunzător selecŃiei făcute.
3.8. Selectorul modului de funcŃionare
Sistemul hardware va avea două moduri de funcŃionare: de sine stătător, respectiv
conectat la calculator. Practic funcŃionalitatea de bază nu se schimbă, doar sursa comenzilor.
Dat fiind faptul că intrările de comenzi sunt identice pentru ambele moduri de funcŃionare, am
implementat selectorul folosind o serie de multiplexoare 2:1, obŃinând un multiplexor de
magistrale.
Tabelul 3.6.8.1. Descrierea intrărilor şi ieşirilor blocului MUX_MOD
Std_logic_vector Ieşiri Componentele culorii de desenare setate.
Vbm0, Vbm1, Vb Std_logic_vector Ieşiri Nivelul de luminozitate a imaginii.
Vcm0,Vcm1, Vc Std_logic_vector Ieşiri Nivelul contrastului imaginii. Vsm0, Vsm1, Vs Std_logic_vector Ieşiri Nivelul saturaŃiei imaginii.
Intrarea de selecŃie comună pentru toate multiplexoarele implementate este concatată la
un comutator al plăcii Nexys2 (figura 3.8.1).
Capitolul 3 - Analiza, proiectarea şi implementarea hardware a aplicaŃiei pentru FPGA
65
Figura 3.8.1. SelecŃia modului de lucru.
3.9. Generarea primitivelor grafice
În modulul de generare a primitivelor grafice am realizat implementarea algoritmilor
propuşi de Josh Bressenham sub forma unui automat cu stări finite. În fiecare stare a FSM-
ului sunt realizate secvenŃe de operaŃii corespunzătoare etapelor algoritmilor.
Implementarea acestui automat cu stări finite a pornit de la premisa că o primitivă grafică
mai complexă poate fi generată dintr-o mulŃime de primitive grafice mai simple. Aşadar am
considerat următoarele:
- Linia, cercul şi elipsa sunt mulŃimi de puncte.
- Dreptunghiul este format din 4 linii.
- Cercul colorat şi elipsa colorată sunt mulŃimi de linii.
Fiecare algoritm l-am implementat sub forma unor succesiuni de stări de tipul:
iniŃializare, calcul, aşteptare, desenare. Stările de aşteptare apar în cazul generării elipselor
datorită înmulŃirilor care apar în calculul de iniŃializare şi care necesită întârzieri ale
procesului de generare (figura 3.9.1).
Interpretor comenzi
de la PC
Interpretor evenimente mouse
Comutator
Selector Mod de lucru
N x MUX2:1
Proiect de diplomă
66
Figura 3.9.1. Diagrama de stări a automatului care descrie algoritmii de generare a primitivelor grafice.
Datorită faptului că linia este folosită şi pentru generarea altor primitive grafice, am
împărŃit starea de iniŃializare în două: în prima stare de iniŃializare se asignează valorile celor
două puncte car definesc capetele liniei, iar în cea de-a doua stare sunt calculate valorile
iniŃiale ale variabilelor necesare în procesul de generare. Astfel algoritmul de generare a liniei
este reprezentat de 3 stări: line_init0_st, line_init1_st şi line_calc_st. În ultima stare
Capitolul 3 - Analiza, proiectarea şi implementarea hardware a aplicaŃiei pentru FPGA
67
menŃionată sunt calculate coordonatele următorului punct şi este decisă continuarea sau nu a
algoritmului.
Generarea dreptunghiului este reprezentată de două stări: drept_init_st, drept_calc_st. În
starea de iniŃializare este setat contorul numărului de linii rămase de generat. În starea
drept_calc_st este realizată iniŃializarea capetelor liniei curente.
Generarea dreptunghiului plin este reprezentată de două stări: bara_init_st şi
bara_calc_st. În prima stare sunt iniŃializate punctele care definesc aria de desenare. În a doua
stare este realizată parcurgerea ariei respective.
Tabelul 3.9.1. Descrierea intrărilor şi ieşirilor blocului PRIMITIVE_GRAFICE
Nume Tip DirecŃie SemnificaŃie Clock Std_logic Intrare Ceasul de pixel 25 MHz. Reset Std_logic Intrare Semnalul de reset asincron. X0, Y0 Std_logic_vector Intrări Coordonatele primului punct. X1, Y1 Std_logic_vector Intrări Coordonatele celui de-al doilea
Starea de aşteptare în care nu se execută operaŃii şi se testează valoarea intrării tp pentru luarea deciziei de trecere în altă stare corespunzătoare.
pixel_init_st PI 00001 IniŃializarea coordonatelor punctului.
bara_init_st BI 10011 IniŃializarea coordonatelor punctelor ce definesc aria.
bara_draw_st BC 10100 Generarea dreptunghiului colorat.
Capitolul 3 - Analiza, proiectarea şi implementarea hardware a aplicaŃiei pentru FPGA
69
3.10. Procesarea imaginii în timp real
Modulul de procesare a imaginii l-am implementat sub forma unui pipeline de trei filtre
punctuale (figura 3.10.1). După încărcarea pipeline-ului (după primele trei semnale de ceas)
modulul va procesa în paralel informaŃia de culoare a trei pixeli.
Figura 3.10.1. Pipeline-ul de procesare a semnalului RGB.
Filtrele punctuale le-am implementat în submodule cu o structură similară: sunt realizate
preluarile datelor de intrare şi calculele iniŃiale, apoi modificarea proporŃională cu parametru
de intrare (operaŃie de înmulŃire), finalizând cu prelucrarea datelor obŃinute în urma înmulŃirii
şi transmiterea lor la ieşire către blocul următor.
Tabelul 3.10.1. Descrierea intrărilor şi ieşirilor blocului EFECTE
Nume Tip DirecŃie SemnificaŃie
Clock Std_logic Intrare Ceasul de pixel 25 MHz. Reset Std_logic Intrare Semnalul de reset asincron. Bv Std_logic_vector Intrări Nivelul de luminozitate al
a pixelului. (Ro, Go, Bo) Std_logic_vector Ieşiri Componentele culorii procesate a
pixelului.
Fiecare filtru este descris secvenŃial printr-un proces. În proces datele parcurg trei faze
până la obŃinerea rezultatelor finale. La primirea valorilor componentelor cromatice pentru
fiecare pixel şi a valorii parametrului filtrului, aceste date sunt pregătite pentru procesare
(calculul diferenŃelor cromatice fată de componentele cromatice ale culorilor de referinŃă,
normalizarea valorii parametrului). Apoi datele sunt procesate (calcularea noilor valori
Control luminozitate
Control contrast
Control saturaŃie
Nivel luminozitate
Nivel contrast
Nivel saturaŃie
18
l� K�"�� 18 18 18
Proiect de diplomă
70
proporŃional cu valoarea parametrului). În final datele sunt readuse în intervalul de bază [0,
63] (figura 3.10.2).
Figura 3.10.2. Logica generală de procesare a fiecarui filtru.
După cum am menŃionat, filtrele presupun modificarea valorilor celor trei componente
ale culorii reprezentate pe 18 biŃi. Pentru a diminua numărul de multiplicatoare utilizate per
filtru am concatenat informaŃia de culoare cu spaŃieri formate din biŃi de „0” realizând
înmulŃirea simultan pentru cele valori ale componentelor de culoare.
drgb := db & "00000" & dg & "00000" & dr;
p := drgb * c;
Astfel am redus utilizarea în sinteză a multiplicatoarelor de la 6, la 2 per submodul,
totodată reducând şi timpul de procesare fiindcă după cum am mai menŃionat fiecare operaŃie
de înmulŃire presupune o întârziere întârziere cu 4 semnale de ceas a datelor de ieşire obŃinute.
Folosind o implementare de tip pipeline şi gruparea operaŃilor de înmulŃire am obŃinut o
întârziere totală a datelor prin structura de procesare de 6 semnale de ceas (figura 3.10.2).
Figura 3.10.2. Reducerea timpului de procesare prin structuri de tip pipeline.
Timp procesare secvenŃială
DI DO
DI DO
DI DO
DI DI
DI
DO
DO
DO
Timp procesare pipeline
FILTRU PUNCTUAL
Pregătirea datelor pentru
procesare
Procesarea funcŃie de parametru
Readucerea valorilor în
domeniul de bază
Faza 1 Faza 2 Faza 3
RGB intrare
RGB ieşire
Capitolul 3 - Analiza, proiectarea şi implementarea hardware a aplicaŃiei pentru FPGA
71
3.11. Controlul interfeŃei RS-232 - comunicaŃia cu PC-ul
Modulul de comunicaŃie UART RS-232 este oferit gratuit de firma producătoare Digilent
a plăcii Nexys2. Modulul oferă o comunicaŃie bidirecŃională pe portul serial RS-232 al plăcii,
cât şi posibilitatea setării vitezei de tranfer şi al parităŃii utilizate. De interes sunt semnalele de
ieşire dbout şi rda necesare preluării datelor primite pe portul serial (figura 3.11.1).
Figura 3.11.1. Modulul de comunicaŃie RS-232.
Comenzile primite de la aplicaŃia software sunt reprezentate sub forma unor şiruri de
octeŃi. Pentru interpretarea comenzilor am implementat modulul interpretor_comenzi. În
momentul recepŃiei unui octet (semnalul rda activ), modulul verifică validitatea acestuia: în
cazul în care este primul octet din comandă se verifică dacă acesta reprezintă o comandă
validă conform tabelului 3.11.2. Dacă acesta reprezintă o comandă se aşteaptă primirea
parametrilor, în caz contrar fiind neglijat.
La primirea fiecărui parametru este actualizată ieşirea corespunzătoare. În cazul
comenzilor de desenare, tipul primitivei alese este actualizat după primirea tuturor
parametrilor pentru că setarea tipului presupune totodată şi activarea desenării acesteia.
În cazul recepŃionării unui număr incorect de parametri şi neefectuării comezii, modulul
are implementată o logică de reset asincron pentru revenirea la starea iniŃială a contorilor
interni.
Proiect de diplomă
72
Tabelul 3.6.11.1. Descrierea intrărilor şi ieşirilor blocului INTERPRETOR_MOUSE
Nume Tip DirecŃie SemnificaŃie
Clock Std_logic Intrare Ceasul de pixel 25 MHz. Reset Std_logic Intrare Semnalul de reset asincron. D_in Std_logic_vector Intrări Datele recepŃionate. D_stb Std_logic Intrări Indicator date recepŃionate. rdSig Std_logic Ieşire Necesare iniŃierii citirii, respectiv
scrierii pe portul RS-232 wrSig Std_logic Ieşire Tp Std_logic_vector Ieşiri Tipul primitivei grafice alese. X0, Y0 Std_logic_vector Ieşiri Coordonatele primului punct setat X1, Y1 Std_logic_vector Ieşiri Coordonatele celui de-al doilea
punct setat. Rz Std_logic_vector Ieşiri Raza calculată – distanŃa între
cele două puncte. Rv, Gv, Bv Std_logic_vector Ieşiri Componentele culorii de desenare
setate. Vb Std_logic_vector Ieşiri Nivelul de luminozitate a
imaginii. Vc Std_logic_vector Ieşiri Nivelul contrastului imaginii. Vs Std_logic_vector Ieşiri Nivelul saturaŃiei imaginii.
Tabelul 3.11.2. Codificarea comenzilor transmise pe portul serial.
Metoda radiobuttons_handler reprezintă metoda apelată în momentul apariŃiei unui
eveniment de tip „bifare”. Apelarea respectivei metode este datorată includerii ei ca metodă
de tratare a evenimentului în momentul iniŃializării butoanelor.
this.rb[i].CheckedChanged += new System.EventHandler( this. radiobuttons_handler);
Această metodă va actualiza variabila de tip byte pri_sel care desenează tipul primitivei
grafice alese funcŃie de componenta corespuzătoare bifată şi va reactualiza starea
componentelor de tip textbox care indică valorile coordonatelor prin apelarea metodei
ActualizareTextBoxValori. Această metodă dezactivează textbox-urile care indică
coordonatele celui de-al doilea punct în cazul în care primitiva grafică seletată este „Punct”,
adică în cazul în care pri_sel=0.
Capitolul 4 - Analiza, proiectarea şi implementarea aplicaŃiei software pentru PC
79
Următoarea zonă implementată din cadrul interfeŃei grafice a fost zona de desenare care
este reprezentată de o componentă de tipul picturebox, denumit desen. Această componentă
are asignate două metode de tratare a evenimentelor, una pentru tratarea evenimentului de
„click pe suprafaŃă”, ClickSuprafata, iar a doua pentru tratarea evenimentului de „desenare”,
Desenare.
Metoda ClickSuprafata determină dacă a fost apasat buton din stanga al mouse-ului.
Dacă da, în cazul în care primitiva grafică aleasă este diferită de „Punct”, iar primul punct a
fost setat, va seta cel de-al doilea punct, va apela metoda corespunzătoare desenării primitivei
respective, metoda pentru trimiterea comenzii către modulul hardware (TrimiteComanda) şi
metoda de reactualizare a picturebox-ului (desen.Refresh); în cazul în care primul punct nu a
fost setat, va seta coordonatele primului punct. Dacă pri_sel=0, adică primitiva aleasă este
„Punct”, va seta primul punct şi va apela metodele pentru desenarea punctului, trimiterea
comenzii şi reactualizarea picturebox-ului. Setarea coordonatelor punctelor presupune
totodată şi actualizarea conŃinutului textbox-urilor indicatoare. Logica acestei metode am
descris-o în următoarea organigramă (figura 4.5.2).
Figura 4.5.2. Organigrama metodei ClickSuprafata.
Metoda Desenare este apelată automat fie la redesenarea întregii ferestre (eveniment care
este realizat în cazul mutării sau aducerii în prim-plan a ferestrei), fie la apelarea în program a
metodei de reactualizare a conŃinutului componentei de tip picturebox, desen.Refresh. Acestă
Proiect de diplomă
80
metodă realizează desenarea imaginii salvate în matricea de pixeli, fiecare pixel fiind dublat
atât pe orizontală cât şi pe verticală.
Zona pentru indicatorii coordonatelor celor doua puncte este practic formată din
componente de tip label pentru afişarea semnificaŃiei valorilor şi componente de tip textbox
pentru afişarea valorilor în sine (figura 4.5.3). După cum am menŃionat, acestea sunt
modificate prin apelarea metodei ClickSuprafata. Am ales ca după iniŃializare să afişeze
literele „F”, „P”, „G” şi respectiv „A” doar din motive estetice fără a avea o semnificaŃie în
program. La prima setare a pixelului, textbox-urile vor fi actualizate afişând coordonatele
pixelului.
Figura 4.5.3. Zona indicatorilor.
Zona pentru modificarea parametrilor pentru componentele cromatice, luminozitate,
contrast şi saturaŃie este formată din 6 componente de tip trackbar, două componente textbox
şi un picturebox (figura 4.5.4).
Valoarea fiecărui trackbar determină valoarea unuia dintre parametri enumeraŃi. Astfel
am ales lungimea maximă a trackbar-urilor 63 de pixeli care coincide cu valoarea maximă pe
care o poate avea fiecare parametru.
Componentele textbox ca şi în cazul zonei indicatorilor de coordonate au rolul de a afişa
valorile parametrilor setaŃi, cea superioară afişând valorile componentelor cromatice, iar cea
inferioară afişând valorile parametrilor pentru filtrele punctuale.
Figura 4.5.4. Zona de modificare a parametrilor.
Cu ajutorul primelor trei componente de tip trackbar se poate modifica nuanŃa culorii de
desenare. Culoarea de fundal a fiecărei componente este corelată cu valoarea acesteia.
Toate componentele trackbar au asignată o metodă de tratare a evenimentului de
„derulare”, altfel spus a evenimentului de modificare valoare, denumită trackbar_handler. În
Capitolul 4 - Analiza, proiectarea şi implementarea aplicaŃiei software pentru PC
81
momentul în care valoarea unui trackbar desemnată prin poziŃia bării de derulare este
modificată, această metodă este apelată automat. Metoda verifică originea apelantului funcŃie
de care apelează în continuare metoda de trimitere a comenzii către microsistem, iar apoi
apelează metoda ActualizareCuloare.
În metoda ActualizareCuloare am implementat reactualizarea culorii de fundal a
trackbar-urilor funcŃie de valoarea curentă a acestora, reactualizarea celor două componente
textbox care indică valorile curente şi a culorii curente afişate în picturebox. Dat fiind faptul
că în momentul iniŃializării trackbar-urilor pentru modificarea parametrilor cromatici (R, G,
B) este nevoie de o actualizare a culorilor de fundal, am adaugat un parametru de tip obiect
numit sender metodei. În cazul în care acest parametru este null însemnă că funcŃia a fost
apelată la pornirea aplicaŃie în procesul de iniŃializare şi va actualiza toate componentele
menŃionate (culori de fundal, textul afişat, culoare picturebox). Dacă parametrul este diferit de
null, fie va actualiza culorile şi textbox-ul superior în cazul în care sender este unul dintre
primele 3 trackbar-uri, fie textbox-ul inferior în caz contrat. Logica acestei metode este
descrisă în următoarea organigramă (figura 4.5.5).
Figura 4.5.5. Organigrama metodei ActualizareCulori.
Totodată cele şase trackbar-uri au asignată încă o metodă de tratate a evenimentului de
„click dreapta” numită resetarevalori. Această metodă readuce valoarea trackbar-ului la
Proiect de diplomă
82
valoare iniŃială şi anume 31 şi apelează metoda TrimiteComanda pentru a actualiza parametri
şi în microsistem.
Valorile următoarelor trei componente de tip trackbar desemnează valorile parametrilor
filtrelor punctuale. Acestea au asignat încă o metodă pentru tratarea evenimentului de „buton
mouse ridicat”. Altfel spus în momentul în care valoarea trackbar-ului este fixată şi butonul
mouse-ului eliberat este apelată metoda redesenare. Metoda respectiva apelează metoda de
reactualizare a imaginii afişate. Astfel am eliminat reactualizarea excesivă a imaginii la orice
modificare a valorilor trackbar-urilor respective.
Ca şi în cazul butoanelor de tip radiobutton, trackbar-urile sunt instanŃiate ca obiecte ale
clasei Interfata şi iniŃializate în metoda Form1.Load pentru a evita generarea automată de cod
suplimentar şi pentru a simplifica adăugarea metodelor de tratare a evenimentelor.
Ultima zonă a interfeŃei grafice este reprezentată de o componentă combobox pentru
afişarea şi selectarea porturilor seriale RS-232 disponibile pe calculator. Eticheta alăturată
indică doar semnificaŃia textului afişat în combobox. Comboboxul este populat la pornirea
aplicaŃiei cu numele porturilor seriale RS-232 detectate pe calculator prin apelarea metodei
DetectarePorturiSeriale.
Metoda DetectarePorturiSeriale apelează funcŃia GetPortNames care returnează un
vector de siruri de caractere. Dacă lungimea acestui vector este 0 atunci însemnă că pe
sistemul PC nu există porturi seriale RS-232 şi comboboxul va fi dezactivat. În caz contrar,
comboboxul este populat cu numele porturilor returnate. Datorită acestei funcŃii de detectare a
porturilor seriale este necesară folosirea cel putin a Framework-ul .NET 2.0. Framework-uri
anterioare nu suportă această funcŃie.
Figura 4.5.6. InterfaŃa grafică a aplicaŃiei software pentru PC.
Capitolul 4 - Analiza, proiectarea şi implementarea aplicaŃiei software pentru PC
83
4.6. Implementarea clasei pentru simularea unui buffer video
Imaginea desenată trebuie păstrată într-o memorie pentru a fi redesenată la apelarea
automată sau manuală a funcŃiei de reactualizare a componentei picturebox.
Am ales implementarea acestei memorii sub forma unei matrici de obiecte de tipul
culoare (Color) pe care am inglobat-o în clasa MatriceCulori. Pentru a putea accesa valorile
acestei matrici am implementat metode de tip seter şi geter.
private Color[,] matrice;
Metodele de tip seter actualizează valoarea unui element al matricii. Am implementat
două metode seter, una cu parametru de tip culoare, iar cealaltă cu trei parametrii de tip byte
reprezentând componentele cromatice ale unei culori.
Metodele de tip geter returnează valoarea unui element al matricii. Metoda geter
implementată returnează un obiect de tip culoare corespunzător elementului adresat al
matricii.
4.7. Implementarea clasei şi metodelor pentru gesenarea primitivelor
grafice
În privinŃa implementării metodelor de desenare a primitivelor grafice am ales o abordare
similară celei aplicate pentru microsistemul cu FPGA. Prin urmare coordonarele punctelor
care determină primitiva grafică şi culoarea de desenare nu sunt trimise ca parametri la
apelarea metodei de desenare, ci le setez inaintea acestei apelări.
Prin urmare clasa PrimitiveGrafice care include toate metodele de desenare a primitivelor
grafice, include totodată şi valorile punctelor şi culorii care determină desenarea, dar şi
metodele seter şi geter corespunzătoare. În momentul apelării unei metode de desenare, aceste
valori sunt preluate din variabilele interne ale clasei.
Metodele de desenare a primitivelor grafice le-am implementat pe baza algoritmilor lui
Josh Bresenham. Pentru desenarea punctului am apelat la desenarea unui pătrat de 2x2 pixeli
pentru a realiza dublarea pixelilor, această desenare realizându-se în momentul apelării
funcŃiei de reactualizare a picturebox-ului.
Pentru a desena o figură trebuie realizaŃi următorii paşi de apelare: se setează valorile
coordonatelor punctelor prin apelarea metodelor seter corespunzătoare (SetX0, SetX1, SetY0,
Proiect de diplomă
84
SetY1), se setează culoarea de desenare prin apelarea metodei seter SetColor şi se apelează
metoda de desenare corespunzătoare primitivei grafice dorite.
Desenare presupune în fapt generarea coordonatelor fiecărui punct care defineşte figura,
modificarea elementului de tip culoare din matricea de culori determinat de aceste coordonate
şi în final reactualizarea imaginii din componenta picturebox desen.
Conform algoritmului, generarea coodonatelor punctelor liniei (metoda linie) se reduce la
calculul în primele două octane în sens trigonometric prin iniŃializarea variabilele stepx şi
stepy cu direcŃiile de înaintare a coordonatelor pe orizontală, respectiv verticală funcŃie de
semnul diferenŃelor coordonatelor capetelor pe orizontală, respectiv pe verticală. Decizia
apartenenŃei la unul dintre cele două octane se ia funcŃie de modulul diferenŃelor ()A), respectiv )A�)). Eroarea cumulată este reprezentată de variabila eroare care este actualizată la
fiecare iteraŃie.
Pentru generarea dreptunghiului, am implementat o metodă simplă care presupune două
parcurgeri, una pe orizontală, iar cealaltă pe verticală desenând simultan două linii.
În cazul cercului (metoda cerc), generarea coordonatelor punctelor se reduce la calculul
în primul octan. La fiecare iteraŃie sunt generate 8 puncte ale cercului datorită celor patru axe
de simetrie prin apelarea metodei punctecerc pentru cerc sau a metodei punctedisc pentru
disc. Definim prin disc un cerc cu suprafaŃa interioară de aceeaşi culoare cu marginea.
Eroarea acumulată este păstrată în variabila er_raza, iar variabilele xdif, ydif păstrează
valorile calculate conform algoritmului. Pentru a selecta între desenarea unui cerc sau a unui
disc se apelează metoda cerc cu parametrul boolean plin setat fals pentru cerc, respectiv true
pentru disc.
Pentru generarea elipsei (metoda elipsa), am ales implementarea unei versiuni optimizate
a algoritmului lui Josh Bressenham care generează coodonatele punctelor printr-o singură
trecere[3]. La fiecare iteraŃie sunt generate 4 puncte conform celor 2 axe de simetrie. Astfel se
reduce complexitatea algoritmului la jumătate din valoarea iniŃială. Această versiune a
algoritmului are totuşi un deficit, cazul în care coordonatele pe axa verticală ale celor două
puncte care definesc elipsa sunt egale trebuie tratat separat (caz în care este generată o linie
centrată pe verticală faŃă de centrul elipsei). Ca şi în cazul cercului, parametrul plin al metodei
de generare a elipsei determină desenarea unei elipse coloarate în interior sau nu.
Generarea dreptunghiului umplut (metoda dreptunghiplin) presupune întreaga parcurgere
a ariei definite de cele două puncte. Este cea mai lentă metodă, având practic o complexitate a
algoritmului de ¡ ���.
Capitolul 4 - Analiza, proiectarea şi implementarea aplicaŃiei software pentru PC
85
4.8. Implementarea clasei şi metodelor pentru filtrele punctuale
Filtrele punctuale le-am implementat ca metode în cadrul clasei Efecte. Aceste metode
primesc ca paramentri culoarea de intrare ca obiect de tip Color şi valoarea care defineşte
nivelul de aplicare a efectului respectiv asupra culorii şi returnează un obiect de tip Color care
reprezintă culoarea modificată a pixelului.
Metodele sunt apelate consecutiv în cadrul metodei de desenare a imaginii din clasa
Interfata care conŃine un obiect de tip Efecte.
4.9. Implementarea comunicaŃiei seriale
Transferul datelor pe porturile RS-232 l-am realizat prin intermediul clasei SerialPort.
Pentru a putea folosi obiecte de tip serialport acestea trebuiesc iniŃializate cu infomaŃiile
despre numele portului serial care va fi utilizat, viteza de comunicaŃie (în acest caz, 9600 bps),
tipul parităŃii folosite (paritate impară) şi numărul de biŃi de stop (1 bit). În cazul în care există
porturi seriale în sistem, la iniŃializarea aplicaŃiei, prin apelarea metodei
DetectarePorturiSeriale, numele portului va fi iniŃializat cu valoarea primului element al
listei. Trimiterea unui şir de octeŃi după instanŃierea şi iniŃializarea obiectului de tip serialport
presupune următoarele: verificarea dacă portul este deschis; în cazul în care este deschis,
acesta va fi închis şi redeschis pentru noul transfer, în caz contrar va fi doar deschis; aceste
operaŃii sunt realizate prin apelarea metodelor SerialPort.IsOpen, SerialPort.Open,
SerialPort.Close; după deschiderea portului se realizeaza transferul efectiv prin apelarea
metodei SerialPort.Write. Această metodă are două forme de apelare: cu un singur parametru
de tip şir de caractere şi va trimite întregul şir de caractere pe portul serial, iar a doua cu trei
parametri, un vector de octeŃi, indexul octetului de început şi numărul de octeŃi care vor fi
trimişi. După trimiterea datelor portul trebuie închis prin apelarea metodei SerialPort.Close.
În cadrul acestei aplicaŃii am implementat metoda TrimiteComanda care este apelată de
metodele de tratare a evenimentelor corespunzătoare şi care realizează următoarele funcŃii:
verifică dacă au fost detectate porturi seriale pe sistem; dacă exită încearcă trimiterea octetului
care defineşte comanda urmat de un număr de octeŃi pe post de parametri; dacă deşi există
port serial pe sistem dar nu este reuşită transmisia va fi apelată afişarea unei ferestre de mesaj
de eroare. Codificarea comenzilor şi numărul de parametri trimişi şi semnificaŃia lor sunt
Proiect de diplomă
86
prezentate în tabelul 3.11.1, unde R, G, B reprezintă componentele culorii, �� ��� şi �� ��� coordonatele punctelor, iar L, C, S reprezintă nivelul de luminozitate, contrast, respectiv
saturaŃie al imaginii.
Capitolul 5 - Testare şi validare
87
5. Testare şi validare
5.1. Testarea modulelor VHDL implementate
5.1.1. Tehnici de testare folosite
Pentru testarea modulelor implementate în VHDL am folosit următoarele tipuri de testări:
a. Testarea funcŃională, numită şi testarea cutiei negre - presupune că se folosesc numai
cunoştinŃe despre natura programului, despre proprietăŃile datelor de intrare şi
proprietăŃile sau criteriile datelor de ieşire. Un test este o mulŃime de eşantioane: ¢ � > �K���7 � �K��?. Eşantioanele trebuie să verifice ca fiecare modul este realizat
corect şi complet.
b. Testarea structurală - presupune analizarea structurii modulului, iar eşantioanele
sunt concepute astfel încât să testeze toate parŃile modulului.
c. Testarea de integrare - presupune testarea respectivului modul în cadrul unui proiect
de test.
Testele pe care le-am realizat sunt fie sub forma unor simulări pe baza unor date de
intrare, fie sub forma de proiecte de test. Alegerea uneia dintre cele două opŃiuni a depins de o
comparaŃie ipotetică a complexităŃii fiecăreia, dar şi de cantitatea de informaŃii obŃinută în
urma celor două tipuri de teste asupra corectitudinii şi validităŃii implementărilor modulelor
testate. Empiric s-au dovedit a fi mult mai utile simulările modulelor decât testarea de
integrare a acestora.
5.1.2. Simulări ale modulelor implementate
Am ales simularea modulelor reprezentative şi ale căror valori de ieşire pot fi imediat
validate după cum urmează:
? �K" L�( ? Corespunde
cerintelor
Proiect de diplomă
88
1. Modulul de verificare a stării butoanelor – citire_butoane
Figure 5.1.2.3. Simularea diferitelor evenimente de apăsare a butoanelor.
După cum se poate observa din simulare la apăsarea mai multor butoane simultan (de
exemplu d=”1010” sau d=”0111”) ieşirea va indicat evenimentul butonului prioritar
(s=”101”, respective s=”100”).
2. Modulul de interpretare a comenzilor – interpretor_comenzi
Figura 5.1.2.2. Simularea primirii comezii de desenare a unui punct la coordonatele (42, 59).
La recepŃionarea completă a comenzii, modulul va trimite căttre ieşirile corespuzătoare
valorile primite ale parametrilor şi, în cazul comenzilor de desenare, codul primitivei alese.
Ieşirea pentr codul primitivei este ultima ieşire actualizată pentru că determină iniŃializarea
algoritmului de desenare implementat (practic trecerea automatului din stara de aşteptare în
starea de iniŃializare).
Capitolul 5 - Testare şi validare
89
3. Modulul de interpretate a evenimentelor mouse – interpretor_mouse
Figura 5.1.2.3. Simularea intepretării evenimentelor mouse.
După cum se poate observa din simulare, funcŃie de poziŃia cursorului şi stările
butoanelor mouse-ului sunt actualizate ieşirile corespunzătoare modulului.
4. Modulul de generare a primitivelor grafice – primitive_grafice
Figura 5.1.2.4.a. Simularea generării unei linii între punctele de coordonate (20,10), (1, 3).
Simularea confirmă modul de generare a liniei implementat. Automatul trece ]n starea de
iniŃializare a punctelor care determină linia (pst=3), apoi în starea de iniŃializare a celorlalte
variabile neceare (pst=4), urmând generarea liniei punct cu punct prin desenarea punctului
curent (pst=2), continuată de calculul coodonatelor următorului punct (pst=5).
Proiect de diplomă
90
Figura 5.1.2.4.b. Simularea generării unui cerc cu centrul în punctul de coordonate (5, 5) şi raza 4.
Capitolul 5 - Testare şi validare
91
5. Modulul DMA pentru citirea memoriei – dma_int
Figura 5.1.2.5. Simularea adresării memoriei la diferite valori ale contorilor pentru orizontală şi verticală.
În simulare se poate observa generarea adresei locaŃiei de memorie corespuzătoare
valorilor contoarelor pentru orizontală, resectiv verticală.
6. Modulul de generare a semnalului PWM – light_ctrl
Figura 5.1.2.6. Simularea generării unui semnal PWM.
Semnalul PWM este generat în 64 de tacturi ale semnalului de ceas de la intrare în care
lungimea blocului de biŃi „1” logic este aceeaşi cu valoarea parametrului load.
7. Modulul de reglare a luminozităŃii imaginii – lum_ctrl
Figura 5.1.2.7. Simularea reglării luminozităŃii.
Proiect de diplomă
92
8. Modulul de reglare a constrastului imaginii – con_ctrl
Figura 5.1.2.8. Simularea reglării contratului.
Modului de reglare a saturaŃiei imaginii – sat_ctrl
Figura 5.1.2.9. Simularea reglării saturaŃiei.
5.2. Testarea aplicaŃiei software pentru PC
5.2.1. Planul de testare
Pentru a realiza testarea aplicaŃiei software am conceput un plan de testare ai cărui paşi i-
am urmărit şi executat atât de-a lungul procesului de implementare, cât şi după realizarea
implementării, moment în care am reluat toŃi paşii.
Etapele planului de testare conceput sunt următoarele:
1. Verificare bunei funcŃionări a interfeŃei grafice – a presupus testarea fiecărei
componente active de interfaŃă; prin componentă activă a se înŃelege o componentă
ale cărei evenimente au ataşate metode de tratare a evenimentelor respective.
Capitolul 5 - Testare şi validare
93
2. Compararea vizuală a rezultatelor fiecărei metode de gesenare a unei primitive
grafice – această etapă presupune adăugarea la aplicaŃia curentă a unei modalităŃi de a
suprapune fie rezultatul generat pe baza ecuaŃiilor matematice generale ale fiecărei
primitive, fie rezultatul generat de funcŃii predefinite ale framework-ului .NET 2.0
deasupra rezultatului generat de algoritmii implementaŃi pentru efectuarea unei
comparaŃii vizuale.
3. Utilizarea unor aplicaŃii de simulare şi monitorizare a porturilor seriale RS-232
pentru verificarea transferului corect al comenzilor – pentru a realiza această testare
am folosit variantele demonstrative ale următoarelor programe: Eltima Virtual Serial
Port Driver şi Eltima Serial Port Monitor. Primul software activează două porturi
seriale virtuale conectate în buclă, iar cel de-al doilea software monitorizează un port
serial fizic sau virtual.
5.2.2. Rezultate ale testării
Primul pas de testare l-am aplicat încă de la finalul etapei de implementare a interfeŃei
grafice. Am realizat metodele de tratare a evenimentelor astfel încât să returneze atenŃionări
sub forma unor fereste de masaj în cazul în care a fost tratat evenimentul respectiv (figura
5.2.2.1). Aceste atenŃionări au fost dezactivate după realizarea testării prin comentarea codului
de apelare.
Figura 5.2.2.1. Semnalizarea apariŃiei evenimentului de „buton apăsat”.
Proiect de diplomă
94
Al doilea pas al testării l-am aplicat după implementarea fiecărei primitive în parte. Am
adăgat metodei de reactualizare a imaginii afişate desenarea ultimei primitive cu ajutorul
funcŃiei corespuzătoare oferite de framework-ul .NET (figura 5.2.2.2).
Figura 5.2.2.2. Compararea rezultatului generat de algoritm cu rezultatul obŃinut cu ajutorul funcŃiilor oferite de
framework; în acest caz, elipsa colorată albastru comparată cu elipsa verde.
Monitorizarea comuniŃiei seriale pentru realizarea ultimei etape de testare presupune
activarea unei perechi de porturi virtuale, monitorizarea unuia dintre cele două porturi şi
transferul de comenzi pe cel de-al doilea port. Rezultatele obŃinute în urma testelor validează
transmiterea corectă a comenzilor de către aplicaŃie (figurile 5.2.2.3 a, b, respectiv c).
Capitolul 5 - Testare şi validare
95
Figura 5.2.2.3.a. Verificarea transferului pentru comanda de desenare punct.
Figura 5.2.2.3.a. Verificarea transferului pentru comanda de desenare linie.
Proiect de diplomă
96
Figura 5.2.2.3.a. Verificarea transferului pentru comanda de desenare cerc colorat.
Capitolul 6 - Concluzii
97
6. Concluzii
6.1. Probleme întâmpinate şi soluŃionarea lor
Placa de dezvoltare Digilent Nexys2 are la bază un circuit intergrat VLSI FPGA Xilinx
Spartan3E FG500 care, după cum am prezentat anterior, este relativ limitat din punct de
vedere al resurselor oferite. Reamintim faptul că în interiorul cipului sunt implementate fizic
20 de module de multiplicare şi 20 de module de memorie BRAM dual-port care pot fi
configurate şi conectate conform necesităŃilor sistemului implementat.
Probleme privind resursele folosite au apărut încă din etapa de proiectare a structurii
hardware în momentul în care, conform matematicii care stă la baza filtrelor punctuale, era
nevoie de realizarea a 21 de operaŃii de înmulŃire în care operanzii pot fi diferiŃi de puteri ale
lui 2 (în cazul în care un operand este o putere a lui 2, operaŃia de înmulŃire este sintetizată
sub forma unei operaŃii de deplasare). Pe de altă parte erau necesare încă 3 operaŃii de
înmulŃire în cadrul etapelor de iniŃializare a algoritmului de generare a elipsei şi o operaŃie de
înmulŃire în cadrul modulului de acces direct la memorie pentru calculul adresei de memorie
funcŃie de coordonatele punctului. Aşadar numărul aparent de multiplicatoare necesare se
ridica la 25 depăşind resursele disponibile.
Pentru a reduce numărul de multiplicatoare folosite am recurs la următoarele optimizări:
- Pentru calculul adresei de memorie în cadrul modulului de acces direct la memorie
am recurs la rescrierea formulei într-o formă echivalentă care implică doar operaŃii
de deplasare şi adunare. Practic s-a rezumat la scrierea constantei 160 ca sumă de
- În cazul calculului luminanŃei necesar pentru aplicarea filtrului de saturaŃie, am
folosit o formulă aproximativă de calcul pentru a reduce din nou calculul la operaŃii
de deplasare, adunare şi scădere. E � �`�aa V L � �`Gjk V M � �`��F V N £ £ �`�GL � �`e�GM � �`��GN � � �`�GL � � � �`�G � �`��G�M � �`��GN � � L ¤ �� � M � M ¤ �� � M ¤ 6� � N ¤ 6�
Proiect de diplomă
98
- Pentru fiecare filtru în parte am redus numărul de multiplicatoare folosite prin
reorganizarea ordinii în care sunt realizate calculele şi prin gruparea mai multor
operaŃii de înmulŃire care aveau un operand comun (valoarea parametrului).
drgb := db & "00000" & dg & "00000" & dr;
p := drgb * c;
Astfel s-a redus numărul de multiplicatori folosiŃi la 9.
O a doua problemă constatată în etapa de testare a structurii hardware a fost apariŃia
întârzierilor în afişarea imaginii rezultate în urma procesării. Întârzierile erau datorate
operaŃilor de înmulŃire care duraumai mult de o perioadă de ceas. Pentru a contracara acest
efect am recurs la citirea în avans a memoriei cu un număr de pixeli egal cu numărul de
întârzieri ale semnalelor RGB.
6.2. Realizări şi direcŃii de dezvoltare
În urma implementării realizate am reuşit pe de o parte să acopăr obiectivele temei de
proiectare, iar pe de altă structura hardware obŃinută în urma sintetizării s-a încadrat în
numărul de resurse disponibile pe placa de dezvoltare Nexys2.
Tabelul 6.2.1. Rezultate în urma sintetizării circuitelor descrise privind resursele folosite.
Tip resursă Număr total
utilizate Număr total disponibile
Procent de utilizare
Slice-uri 3093 4656 66% Bistabili ai slice-ului 1165 9312 12% LUT-uri de 4 intrări 5806 9312 62% Blocuri IO conectaete
Totodată am obŃinut o structură hardware de procesare a semnalului video care poate
lucra până la frecvenŃe de ceas de aproximativ 32 MHz conform rezultatelor sintezei
circuitelor descrise (tabelul 6.2.2), astfel acoperind şi frecvenŃa ceasului de pixel de 25 MHz.
Capitolul 6 - Concluzii
99
Tabelul 6.2.2. Rezultate în urma sintetizării circuitelor descrise privind viteza maximă de lucru.
Perioada minimă 30.530 ns FrecvenŃa maximă de lucru 32.755 MHz Timpul minim de sosire a intrărilor inaintea semnalului de ceas 25.292 ns Timpul maxim de reŃinere a ieşirilor după apariŃia semnalului de ceas 27.502 ns Întârzierea maximă prin circuitele combinaŃionale 12.447 ns
Din punct de vedere al direcŃilor de dezvoltare, proiectul de faŃă poate fi adaptat pentru
plăci de dezvoltare cu module FPGA mai performate şi cu mult mai multe resurse disponibile
atât pe placa de dezvoltare, cât şi în interiorul cipului. De exemplu, se poate folosi o placă de
dezvoltarea cu FPGA Virtex2 şi posibilitatea conectării de module externe de memorie DDR,
astfel acoperind necesităŃile de resurse pentru dimensiuni mari ale imaginii şi chiar adăugând
posibilitatea folosirii tehnicii de paginare a memoriei video.
O altă direcŃie de dezvoltare poate presupune folosirea modulului de procesare a imaginii
în proiecte de procesare video în timp real. Astfel având o sursă de decodare a semnalului
video, filtrele punctuale implementate pot fi aplicate cu succes înainte de a afişa sau a