Professional Documents
Culture Documents
WYDZIA ELEKTRONIKI
KIERUNEK: Elektronika i Telekomunikacja (EiT)
SPECJALNO: Aparatura Elektroniczna (EAE)
PRACA DYPLOMOWA
MAGISTERSKA
Sprztowa implementacja
wybranych algorytmw
przetwarzania obrazw
w niskobudetowych FPGA
Implementation of selected image
processing algorithms in low cost
FPGA devices
AUTOR: Krzysztof Maicher
PROWADZCY PRAC:
Dr in. Jarosaw Sugier, W4/I6
OCENA PRACY:
WROCAW 2009
Sowa kluczowe
FPGA, Spartan DSP, Filtr Medianowy, HDMI
Spis treci
1. Wstp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
ROZDZIA 1
Wstp
poprawnoci
dziaania
algorytmu
filtracji
rodowisku
symulacyjnym ModelSim,
ocena i analiza efektywnoci automatycznej implementacji projektu przez
narzdzia rodowiska projektowego ISE.
6
ROZDZIA 2
obrazu
jest
procesem
przetwarzania
informacji
ze
wiata
zewntrznego
jest
zastosowanie
rastra
(siatki)
(2.1)
Tadeusiewicz R., Korochoda P.: Komputerowa analiza i przetwarzanie obrazw, Wydawnictwo Fundacji
INTERFEJS DVI
Nazwa
Rozdzielczo
VGA
640 x 480
SVGA
800 x 600
XGA
1024 x 786
SXGA
1280 x 1024
UXGA
1600 x 1200
HDTV
1920 x 1080
QXGA
2048 x 1536
INTERFEJS HDMI
Interfejs HDMI 5 zosta wprowadzony na rynek jako nastpca DVI i jest z nim
kompatybilny, co oznacza, e mona obydwie technologie czy ze sob, mimo
rnicy wtyczek, za pomoc pasywnego konwertera (rys.2.3). HDMI umoliwia
5
10
ponadto przesyanie dwku (8 kanaw audio) oraz danych obrazu w formie 10 bitowej.
Rysunek 2.5. Kanay RGB oraz YCbCr, wystpujce w interfejsie rwnolegym ukadu AD9398
[14].
12
(2.2)
14
178
171
156
89
91
104
83
82
82
178
134
179
115
76
135
108
62
100
182
189
152
199
157
165
142
134
119
(2.3)
(2.4)
(2.5)
15
178
171
156
89
91
104
83
82
82
178
178
179
115
115
135
108
100
100
182
189
152
199
157
165
142
134
119
Na przechowanie wartoci wszystkich punktw dla okna 3 x 3 potrzebnych jest 9 rejestrw, analogicznie
17
18
(2.6)
W ten sposb realizowane jest sortowanie. Indeks danej prbki, bdcy wynikiem
sumowania bitowego zawartoci resestru CR, jest jego numerem w sortowaniu
rosncym. Dla najmniejszej prbki bdzie to warto 1, natomiast dla najwikszej 5.
Kolejn operacj jest porwnanie indeksw z parametrem RANK. Wybr jego
wartoci ma kluczowe znaczenie. W celu otrzymania filtracji medianowej parametr
ten musi by rwny indeksowi rodkowego elementu okna. W prezentowanym
przykadzie jest to warto 2. Jeli RANK przyjmie inn warto, wwczas
otrzymany zostanie filtr o waciwociach filtru minimalnego lub maksymalnego
(tab.2.4)
Wynik porwnania parametru RANK z indeksami prbek trafia do enkodera
jeden-z-piciu. W ten sposb na jego wyjciu otrzymany zostaje numer rejestru
D, ktrego zawarto ma by przekazana przez demultiplekser (niewidoczny na
rysunku) na wyjcie filtru.
Udoskonalenie powyej przedstawionej architektury polega na zmodyfikowaniu
jej tak, by moliwa bya realizacja przetwarzania potokowego. Metody osignicia
tego zostay opisane w [4]. Celem wprowadzenia przetwarzania potokowego jest
19
Otrzymany Filtr
RAN K = 0
Filtr Minimalny
RAN K = (T AP 1)/2
Filtr Medianowy
RAN K = T AP 1
Filtr Maksymalny
Tabela 2.4. Waciwoci filtru w zalenoci od parametru RANK (TAP - liczba elementw
okna).
20
21
ROZDZIA 3
22
Warto
Jednostka
27
bity
Gboko kolejki
64
bajty
23
Dla formatu SXGA sygna zegarowy HDMI jest tylko nimimalnie mniejszy od sygnau zegarowego
FPGA.
24
Rysunek 3.3. Rdze IP moduu FIFO (wejcia, wyjcia zaznaczone kolorem szarym nie zostay
wykorzystane w projekcie).
25
D_OUT
Nazwa portu
Szeroko
Kierunek
Opis
red_in
We
green_in
We
blue_in
We
d_out
24
Wy
vsync
We
vsync_out
Wy
hsync
We
hsync_out
Wy
WINDOW_WIDTH
We
rank
We
clk
We
Wejcie zegarowe
ce
We
reset
We
Reset synchroniczny
Zakres D_OUT
Kana
D_OUT(23:16)
R lub Cr
D_OUT(15:8)
G lub Y
D_OUT(7:0)
B lub Cb
27
Nazwa portu
Szeroko
Kierunek
Opis
d_in
We
Wejcie danych
d_out
Wy
Wyjcie danych
vsync
We
vsync_out
Wy
hsync
We
hsync_out
Wy
WINDOW_WIDTH
We
rank
We
clk
We
Wejcie zegarowe
ce
We
reset
We
Reset synchroniczny
29
DIN, DOUT
WINDOW_WIDTH
Warto
WINDOW_WIDTH = 3
3x3
WINDOW_WIDTH = 5
5x5
WINDOW_WIDTH = 7
7x7
RANK
25
12
49
24
CLK
CE
RESET
Prezentowana struktura filtru pozwala na zastosowanie jej dla filtracji maksymalnej i minimalnej
31
Gdyby w strukturze filtru nie zastosowano przetwarzania potokowego, wwczas byyby to rejestry
P0...8.
33
obrazu wynosi 1280 pikseli. Z tego powodu, kada linia pamici obrazu ma
pojemno 1280 bajtw. Jeli przetwarzany obraz posiada mniejsz rozdzielczo,
linia obrazu nie jest zapisywana do koca.
Liczba linii pamici obrazu determinowana jest wielkoci okna filtracji. Dla
okna o rozmiarach 3 x 3 tworzone s 3 linie obrazu. Analogicznie dla okna N x N
generowanych jest N linii obrazu.
Tabela 3.7 przedstawia ilo wykorzystanych zasobw Block RAM przez rdze
filtru w zalenoci od rozmiarw okna filtraji.
Okno
3x3
3840 Bajtw
5x5
6400 Bajtw
7x7
8960 Bajtw
Tabela 3.7. Ilo generowanej pamici obrazu dla rnych rozmiarw okna (dla jednego kanau:
R, G, B lub Y).
34
Nazwa portu
Szeroko
Kierunek
Opis
r_vs
We
addra
11
Wy
addrb
11
Wy
line_en
WINDOW_WIDTH
Wy
clk
We
Wejcie zegarowe
ce
We
reset
We
Reset synchroniczny
R_VS
Jak w 3.3.
35
Rysunek 3.13. Rdze IP pamici pojedynczej linii obrazu Line RAM (wejcia, wyjcia
zaznaczone kolorem szarym nie zostay wykorzystane w projekcie)
DINA, DOUTB
36
Nazwa portu
Szeroko
Kierunek
Opis
addra
11
We
dina
We
wea
We
clka
We
addrb
11
We
doutb
Wy
clkb
We
ADDRA, ADDRB
WEA
Ustawienie tego wejcia w stan jedynki logicznej umoliwia zapis danej do portu a
pod dany adres.
CLKA, CLKB
37
38
(3.1)
Linia 0 jest te lini wejciow D_IN dlatego wynik tego porwnania zawsze bdzie rwny 1.
39
40
Okno 3x3
Okno 5x5
Okno 7x7
Line RAM
Circle Control
Processor
25
49
Output Unit
Tabela 3.10. Liczba elementw strukturalnych rdzenia filtru w zalenoci rozmiarw okna.
Nazwa elementu
Okno 3x3
Okno 5x5
Okno 7x7
Data Register
Line Comparator
Compare Register
Parametr
generyczny
WINDOW_WIDTH
podawany
jest
podczas
41
4
5
6 CHOOSE WINDOW WIDTH
7
10
11
12
13
14
15 CHOOSE FILTER RANK
16
17
18
19
20
21 END OF USER PARAMETRIZE SECTION
22
BS_IN
Wejcia danych o szerokoci 8 bitw. Ilo portw D_IN jest zalena od parametru
WINDOW_WIDTH i wynosi WINDOW_WIDTH2 . Porty D_IN stanowi wejcia
demultipleksera i w kadym cylku zegarowym jedno z nich przekierowane zostaje na
wyjcie.
43
Nazwa portu
Szeroko
Kierunek
Opis
bs_in
We
Wejcie indeksowe
d_in
We
Wyjcie danych
d_out
Wy
Wyjcie danych
rank
We
WINDOW_WIDTH
We
Wejcie parametryzujce
clk
We
Wejcie zegarowe
reset
Wy
Synchroniczny reset
ce
We
D_OUT
Wyjcie danych o szerokoci 8 bitw, bdce wyjciem wyniku filtracji. Jest wyjciem
wewntrznego demultipleksera.
RANK
Wejcie typu integer, ktre moe przyjmowa wartoci z zakresu 0 - 48. RANK
jest drugim wejciem kadego z komparatorw wej BS_IN. Odpowiednie dobranie
parametru RANK determinuje zachowanie filtru jako medianowego, minimalnego
lub maksymalnego (rozdzia 3.3.)
WINDOW_WIDTH
Parametr generyczny, szeroko okna filtracji. Definiuje ilo portw BS_IN i D_IN,
ilo wewntrznych komparatorw oraz szeroko demultipleksera zwracajcego
wynik.
CLK, CE, RESET
Jak w 3.3.
D_IN
Nazwa portu
Szeroko
Kierunek
Opis
d_in
WIDTH
We
Wejcie danych
d_out
WIDTH
Wy
Wyjcie danych
WIDTH
We
clk
We
Wejcie zegarowe
ce
We
reset
We
Reset synchroniczny
D_OUT
Jak w 3.3.
46
Nazwa portu
Szeroko
Kierunek
Opis
d_in
We
Wejcie danych
line_din
We
Wejcie danych
cmp_out
Wy
Wynik porwnania
clk
We
Wejcie zegarowe
ce
We
reset
We
Reset synchroniczny
D_IN, LINE_DIN
Jak w 3.3.
3.10.3. Blok Sumy Bitowej
Wejciem bloku Bit Sum All jest parametryzowanej szerokoci port. Dla
maksymalnej szerokoci okna filtru jego szeroko wynosi 49. Wyjciem jednostki
jest liczba odpowiadajca sumie wszystkich jedynek, ktre pojawiy si na porcie
wejciowym. Maksymalny wynik, czyli 48 otrzymany zostanie, gdy jednostka
zostanie sparametryzowana dla szerokoci okna wynoszcej 7 oraz na wejciu pojawi
si same jedynki. Liczb t mona zapisa na 7 bitach, std szeroko portu
wyjciowego.
D_IN
Nazwa portu
Szeroko
Kierunek
Opis
d_in
WINDOW_WIDTH2
We
Wejcie danych
d_out
Wy
Wyjcie danych
WINDOW_WIDTH
We
D_OUT
WINDOW_WIDTH
49
ROZDZIA 4
Wyniki
PORT(
RESET_N : IN s t d _ l o g i c ;
4
5 E x t e r n a l 100MHz Clock Generator
6
CLK_100MHz : IN s t d _ l o g i c ;
7
8 HDMI R e c e i v e r
9 S i g n a l s a r e c o m p a t i b i l e w i t h Analog D e v i c e s HDMI R e c i e v e r : AD9398
10
R_RED : IN s t d _ l o g i c _ v e c t o r ( 7 downto 0 ) ;
11
R_GREEN : IN s t d _ l o g i c _ v e c t o r ( 7 downto 0 ) ;
50
12
R_BLUE : IN s t d _ l o g i c _ v e c t o r ( 7 downto 0 ) ;
13
R_DATACK : IN s t d _ l o g i c ;
14
R_HSOUT : IN s t d _ l o g i c ;
15
R_VSOUT : IN s t d _ l o g i c ;
16
R_FIELD : IN s t d _ l o g i c ;
17
18 HDMI T r a n s m i t t e r
19 S i g n a l s a r e c o m p a t i b i l e w i t h Analog D e v i c e s HDMI T r a n m i t t e r : AD9889B
20
T_CLK : OUT s t d _ l o g i c ;
21
T_VSYNC : OUT s t d _ l o g i c ;
22
T_HSYNC : OUT s t d _ l o g i c ;
23
T_DE : OUT s t d _ l o g i c ;
24
25 END COMPONENT;
5
6 S i m u l a t i o n Image memory
s i g n a l input_img_mem : RAM;
s i g n a l output_img_mem : RAM;
10
11
I t i n i t i a l i z e s t h e input_img_mem by l o a d i n g image f i l e
load_img : process ( l o a d _ i m g _ t r i g g e r )
variable row : l i n e ;
variable data : i n t e g e r ;
variable blank : c h a r a c t e r ;
variable i : i n t e g e r ; c ou nt v a r i a b l e
begin
9
10
i f l o a d _ i m g _ t r i g g e r = 1 then
i f o p e n _ i n i t = 0 then
run o n l y once
53
11
o p e n _ i n i t <= 1 ;
12
13
for i in 1 to 4 loop
14
r e a d l i n e ( input_img , row ) ;
15
16
end loop ;
17
18
end loop ;
19
i := 0 ;
20
21
r e a d l i n e ( input_img , row ) ;
22
23
r e a d ( row , data ) ;
24
r e a d ( row , blank ) ;
25
26
i := i + 1 ;
end loop ;
27
end loop ;
28
29
30
31
end o f l o a d i n g image
end i f ;
end i f ;
end process load_img ;
save_img : process ( s a v e _ i m g _ t r i g g e r )
variable row : l i n e ;
variable data : i n t e g e r ;
variable blank : c h a r a c t e r :=
variable i : i n t e g e r := 0 ; c ou nt v a r i a b l e
8
9
10
11
12
begin
i f s a v e _ i m g _ t r i g g e r = 1 then
i f c l o s e _ i n i t = 0 then
run o n l y once
c l o s e _ i n i t <= 1 ;
13
Image Header
14
blank := P ;
15
w r i t e ( row , blank ) ;
16
blank := 3 ;
17
w r i t e ( row , blank ) ;
54
18
w r i t e l i n e ( output_img , row ) ;
19
data := WIDTH;
20
w r i t e ( row , data ) ;
21
blank :=
22
w r i t e ( row , blank ) ;
23
data := HEIGHT;
24
w r i t e ( row , data ) ;
25
w r i t e l i n e ( output_img , row ) ;
26
data := 2 5 5 ;
27
w r i t e ( row , data ) ;
28
w r i t e l i n e ( output_img , row ) ;
29
for y in 0 to 23 loop
30
31
data := output_img_mem ( i ) ;
32
w r i t e ( row , data ) ;
33
w r i t e ( row , blank ) ;
34
i := i + 1 ;
35
end loop ;
36
w r i t e l i n e ( output_img , row ) ;
37
38
39
40
end loop ;
end i f ;
end i f ;
end process save_img ;
55
c o n t r o l : process
variable i : i n t e g e r := 0 ; c ou nt v a r i a b l e
begin
RESET_N <= 0 ;
5
6
l o a d _ i m g _ t r i g g e r <= 1 ;
wait f or 5 ns ;
l o a d _ i m g _ t r i g g e r <= 0 ;
10
11
R e l e a s e r e s e t
12
wait f or 200 ns ;
13
RESET_N <= 1 ;
14
15
16
HDMI r e c i e v e r s i m u l a t i o n
17
i := 0 ;
18
f o r y in 0 to HEIGHT1 loop
19
20
21
22
f o r x in 0 to WIDTH1 loop
i f x = 0 then
R_VSOUT <= 1 ;
i f y = 0 then
R_HSOUT <= 1 ;
23
24
25
end i f ;
else
26
R_VSOUT <= 0 ;
27
R_HSOUT <= 0 ;
28
end i f ;
29
30
31
32
33
i := i + 3 ;
34
wait f or 1 ns ;
35
R_DATACK <= 1 ;
36
wait f or 4586 ps ;
37
R_DATACK <= 0 ;
38
39
end loop ;
40
end loop ;
41
Save r e c i e v e d image d a t a t o f i l e
42
s a v e _ i m g _ t r i g g e r <= 1 ;
56
43
wait f or 5 ns ;
44
s a v e _ i m g _ t r i g g e r <= 0 ;
45
46
47
wait ; w i l l w a i t f o r e v e r
end process c o n t r o l ;
R e c i e v e image p r o c e s s
S i m u l a t e s t h e HDMI T r a n s m i t t e r
variable i , j : i n t e g e r := 0 ; c ou nt v a r i a b l e
begin
i f r i s i n g _ e d g e (T_CLK) then
output_img_mem ( i ) <= c o n v _ i n t e g e r (T_D( 2 3 downto 1 6 ) ) ;
9
10
11
12
i := i + 3 ;
13
i f (T_VSYNC = 1 ) then
14
i := j WIDTH 3 ;
15
j := j + 1 ;
end i f ;
16
end i f ;
17
18
19
end i f ;
end process r_img ;
CLK_100MHz_process : process
begin
CLK_100MHz <= 0 ;
57
wait f or 5 ns ;
CLK_100MHz <= 1 ;
wait f or 5 ns ;
end process ;
Rysunek 4.2. Okno programu ModelSim podczas testw FIFO. Widoczna rnica
w czstotliwoci sygnaw zegarowych oraz moment wstrzymania odczytu kolejki.
Rysunek 4.3. Okno programu ModelSim podczas testw FIFO. Widoczne trzy cykle
zapeniania i odczytu kolejki zaznaczono numerami 1-3.
Rysunek 4.8. Zblienie obrazw z rys.4.4 - 4.8: (A) obraz testowy, (B) obraz testowy po filtracji
z oknem 3 x 3, (C) 5 x 5, (D) 7 x 7.
60
Rysunek 4.9. Fragment analizy czasowej wykonanej przez narzdzie PAR dla filtracji z oknem
5 x 5.
Nazwa
Zasoby
zasobu
dostpne
Okno 3x3
Okno 5x5
Okno 7x7
33,280
29
LUTs
33,280
22
71
Slice
16,640
34
99
IOB
309
18
18
18
24
12
12
12
12
12
12
84
13
20
27
BUFGMUX
DCM
RAMB16BWER
Rysunek 4.10. Opis kolorw uytych na rys.4.11: (1) Jednostki Comparator, (2) Data Register DR, (3) Jednostki Bit Sum All, (4) Line RAM, Line RAM Ctrl, (5) FIFO, Ctrol Logic,
(6) Output Unit
62
63
Podsumowanie
66
DODATEK A
Modu MMXS3DSP-AV
67
DODATEK B
rdo: [16].
68
DODATEK C
3
4
5
6 #######################################################
7 ##
HDMI R e c i e v e r
8 #######################################################
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
69
32
33
34
35
36
37
38
39
40 #######################################################
41 ##
HDMI T r a n s m i t t e r
42 #######################################################
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
70
Bibliografia
[1] Chu P.: RTL hardware design using VHDL, John Wiley & Sons, 2006.
[2] Gorgo M.: Architektury rekonfigurowalne do przetwarzania i analizy obrazu
oraz dekodowania sygnau wideo, Uczelniane wydawnictwo naukowo dydaktyczne, Krakw 2007.
[3] Tadeusiewicz R., Korochoda P.: Komputerowa analiza i przetwarzanie obrazw,
Wydawnictwo Fundacji Postpu Telekomunikacji, Krakw 1997.
[4] Chakrabarti C.: High sample rate array architectures for median filters,
Department of Electrical Engeneering Center for Solid State Electronics
Research.
[5] Gabor S.: Two-Dimensional Rank Order Filter, XAPP953 (v1.1) September 21,
2006.
[6] Majewski J., Zbysiski P.: Ukady FPGA w przykadach, Wydawnictwo BTC,
Warszawa 2007.
[7] Malina W., Ablameyko S., Pawlak W.: Podstawy cyfrowego przetwarzania
obrazw, Akademicka Oficyna Wydawnicza EXIT, Warszawa 2002.
[8] Ashenden P. J.: The VHDL Cookbook, First Edition, Dept. Computer Science
University of Adelaide South Australia, 1990
[9] Xilinx, Inc., Xilinx DS610 Spartan-3A DSP FPGA Family, Data Sheet.
[10] Xilinx, Inc., Xilinx Constraints Guide, v.10.1
[11] Xilinx, Inc., Xilinx UG112 Device Package User Guide.
[12] Xilinx, Inc., Xilinx UG331 Spartan-3 Generation FPGA User Guide.
[13] Xilinx, Inc., Xilinx UG332 Spartan-3 Generation Configuration User Guide.
[14] Analog Devices, Inc., AD9381 HDMIT M Display Interface Data Sheet (Rev. 0).
[15] Analog Devices, Inc., Analog Devices, Inc., AD9389B High Performance
HDMI/DVI Transmitter Data Sheet (Rev.0).
[16] Digital Display Working Group, Digital Visual Interface DVI, rev.1.0
02.07.1999
71
72
Hardware
Spis tabel
73
Spis rysunkw
. . . . . . . . . . . . . . . . . . 46
. . . . . . . . . . . . 60
programu
Floorplanner,
rozmieszczenie
wykorzystanych
75