You are on page 1of 75

POLITECHNIKA WROCAWSKA

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.1. Cel pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2. Teza pracy

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3. Zakres pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4. Zaoenia projektowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2. Problemy sprztowego przetwarzania obrazw w FPGA

. . . . . . . . .

2.1. Akwizycja sygnau wideo . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.2. Nadajnik i odbiornik HDMI . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.3. Filtracja medianowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13


2.4. Sprztowa realizacja filtracji medianowej . . . . . . . . . . . . . . . . . . . . 16
3. Projekt sprztowej realizacji filtracji medianowej MX2dMedian . . . . . 22
3.1. Skrzyowanie rnych domen czasowych . . . . . . . . . . . . . . . . . . . . 22
3.2. Przetwarzanie strumienia danych obrazu . . . . . . . . . . . . . . . . . . . . 26
3.3. Implementacja rdzenia filtru medianowego . . . . . . . . . . . . . . . . . . . 28
3.4. Architektura rdzenia filtru medianowego . . . . . . . . . . . . . . . . . . . . 32
3.5. Blok pamici linii obrazu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.6. Procesor pikseli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.7. Parametryzacja filtru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.8. Jednostka wyjciowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.9. Opnienia sygnaw synchronizacji pionowej i poziomej . . . . . . . . . . . 44
3.10. Budowa wewntrzna procesora pikseli . . . . . . . . . . . . . . . . . . . . . 45
3.10.1. Rejestr danych i rejestr indeksw . . . . . . . . . . . . . . . . . . . . 45
3.10.2. Bloki komparatorw . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.10.3. Blok Sumy Bitowej . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.11. Moliwoci rozbudowy rdzenia filtru . . . . . . . . . . . . . . . . . . . . . . 48
4. Wyniki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.1. Weryfikacja poprawnoci dziaania projektu MX2dMedian . . . . . . . . . . 50
4.1.1. Algorytm dziaania programu symulacyjnego . . . . . . . . . . . . . 51
4.1.2. Wczytywanie i zapis obrazu . . . . . . . . . . . . . . . . . . . . . . . 52
4.1.3. Procesy symulacji nadajnika i odbiornika HDMI . . . . . . . . . . . 55
4.1.4. Proces zegara systemowego . . . . . . . . . . . . . . . . . . . . . . . 57
4.2. Weryfikacja poprawnoci dziaania moduu FIFO . . . . . . . . . . . . . . . 58
3

4.3. Weryfikacja poprawnoci dziaania rdzenia filtru . . . . . . . . . . . . . . . 59


4.4. Implementacja i weryfikacja sprztowa . . . . . . . . . . . . . . . . . . . . . 61
4.5. Ilo wykorzystanych zasobw FPGA . . . . . . . . . . . . . . . . . . . . . . 61
Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
A. Modu MMXS3DSP-AV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
B. Lista sygnaw interfejsu DVI . . . . . . . . . . . . . . . . . . . . . . . . . . 68
C. Plik UCF stworzony na potrzeby projektu MX2dMedian . . . . . . . . . 69
Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Spis tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Spis rysunkw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Owiadczenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

ROZDZIA 1

Wstp

Niniejsza praca jest splotem dwch dziedzin zainteresowa, obejmujcych tematyk


przetwarzania obrazw w czasie rzeczywistym i projektowania architektur ukadw
programowalnych.
Z systemem przetwarzania sygnaw w czasie rzeczywistym mamy do
czynienia wtedy, gdy dokonuje si w nim oblicze wspbienie z procesem
zewntrznym. Oznacza to, e dla okrelonego standardu wizyjnego w trakcie procesu
obliczeniowego nie nastpuje utrata danych pikselowych ani podanej informacji
obrazowej [2]. Dla wspczesnych standardw stumieni wideo, podczas przetwarzania
obrazw w czasie rzeczywistym istnieje potrzeba obsuenia stosunkowo duego
strumienia danych. Jako przykad moe posuy format HDTV o rozdzielczoci
1920 x 1080 i czstotliwoci odwieania 30Hz. Dla takich parametrw czstotliwo
propagacji piksela w systemie obliczeniowym musi wynosi minimum 74MHz.
Oznacza to, e system przetwarzania musi generowa punkty wynikowe z t wanie
czstotliwoci lub wiksz. Jedn z popularnie stosowanych operacji podczas
przetwarzania obrazw jest splot dyskretny. W jego skad, przy zaoeniu maski
3 x 3, wchodzi 18 operacji: 9 mnoe, 8 dodawa i jedno dzielenie [2]. Dla strumienia
danych HDTV operacja splotu dyskretnego z najmniejsz mask (3 x 3) wymaga
wic wykonania ponad miliarda operacji na sekund, przy czym splot stanowi zwykle
jedynie fragment kompleksowych algorytmw przetwarzania obrazw.
Czsto okazuje si, e wydajno procesorw generalnego przeznaczenia
i procesorw DSP jest zbyt maa, by sprosta realizacji algorytmw przetwarzania
obrazw w czasie rzeczywistym. Wynika to z faktu, i procesory posiadaj
sekwencyjny model wykonywania algorytmw, co oznacza, e instrukcje s
szeregowane w czasie i wykonywane na uniwersalnych zasobach procesora (takich
jak np. ALU - Arithmetic Logic Unit i MAC - Multiplier-Accumulator). Taki styl
oblicze nazywa si przetwarzaniem w czasie. By sprosta wysokim wymaganiom
czasowym, konieczne okazuje si zrwnoleglenie oblicze i wykonywanie wielu
procesw obliczeniowych jednoczenie - przetwarzanie w przestrzeni. Polega ono
na takim zaprojektowaniu cieki strumienia danych, aby trafiaa ona na kolejne
elementy obliczeniowe. To podejcie wymaga utworzenia dedykowanych struktur
sprztowych. Przykadami takich struktur s np. ukady ASIC, zaprojektowane
5

do realizacji cile okrelonego zadania lub procesory z wbudowanymi jednostkami


do realizacji liniowych i nieliniowych operacji kontekstowych, takich jak filtracja.
Elastyczno tych ukadw jest jednak niewielka. Szerokie pole zastosowa
w przetwarzaniu obrazw znalazy ukady FPGA. Ich mocn stron jest
sprztowa realizacja algorytmw, czyli moliwo zrwnoleglenia oblicze oraz dua
elestyczno, polegajca na moliwoci zmiany architektury wewntrznej poprzez
rekunfiguracj ukadu.

1.1. Cel pracy


Celem pracy jest projekt oraz implementacja systemu MX2dMedian, realizujcego
filtracj strumienia wideo w wybranym ukadzie FPGA rodziny Spartan-3A DSP dla
strumienia wejciowego o rozdzielczoci obrazu 1280 x 1024 i czstotliwoci 60Hz.
Opis architektury projektu powinien by wykonany w jzyku opisu sprztu VHDL.
Zaoeniem projektu jest wsppraca z interfejsami nadajnika i odbiornika HDMI.

1.2. Teza pracy


Uycie ukadu FPGA do implementacji algorytmw przetwarzania obrazw w
czasie rzeczywistym zapewnia du moc obliczeniow, wynikajc z moliwoci
zrwnoleglenia oblicze oraz elastyczno w postaci dowolnej, szybkiej modyfikacji
algorytmu dziki moliwoci rekonfiguracji FPGA.

1.3. Zakres pracy


Zakres pracy obejmuje:
analiza problemw cyfrowej transmisji strumienia wideo oraz sprztowych
algorytmw filtracji medianowej,
opracowanie obsugi interfejsw komunikacyjnych wystpujcych w projekcie,
opisanie wybranego algorytmu filtru medianowego w jzyku VHDL
i zsyntezowanie go do wybranego ukadu FPGA rodziny Spartan-3A DSP,
weryfikacja

poprawnoci

dziaania

algorytmu

filtracji

rodowisku

symulacyjnym ModelSim,
ocena i analiza efektywnoci automatycznej implementacji projektu przez
narzdzia rodowiska projektowego ISE.
6

1.4. Zaoenia projektowe


Wobec algorytmu filtracji zostay postawione nastpujce zaoenia:
format obrazu wejciowego i wyjciowego: RGB lub YCrCb,
przetwarzanie obrazw o maksymalnych parametrach zgodnych ze standardem
SXGA @ 60Hz1 ,
filtracja w czasie rzeczywistym (generowanie jednej prbki obrazu wyjciowego
w jednym cylku zegarowym),
moliwoc wyboru trzech rozmiarw okna filtru 3x3, 5x5 oraz 7x7.
Dziaanie filtru medianowego, opartego na powyszych zaoeniach naley
zweryfikowa, w zwizku z czym niezbdne jest przygotowanie aplikacji testujcej
o nastpujcych wymaganiach:
generowany sygna wejciowy obrazu zgodny z sygnaem wystpujcym
w odbiorniku HDMI umieszczonym na pycie MMXS3DSP-AV (dodatek A),
otrzymywany sygna wyjciowy obrazu zgodny z sygnaem wystpujcym
w nadajniku HDMI umieszczonym na pycie MMXS3DSP-AV,
symulacja w warunkach czasowych zgodnych z panujcymi w module
MMXS3DSP-AV.

Parametry standardu SXGA: 1280 x 1024 @ 60 Hz

ROZDZIA 2

Problemy sprztowego przetwarzania obrazw


w FPGA

2.1. Akwizycja sygnau wideo


Akwizycja

obrazu

jest

procesem

przetwarzania

informacji

otaczajcym nas wiecie lub nie-elektronicznej reprezentacji obrazu


(fotografie, plany, mapy, dokumenty papierowe) na posta cyfrow,
dogodn do obrbki1
Najbardziej rozpowszechnionym sposobem reprezentacji obrazw cyfrowych,
pozyskiwanych

ze

wiata

zewntrznego

jest

zastosowanie

rastra

(siatki)

kwadratowego (rys.2.1). W procesie tym, zwanym dyskretyzacj, otrzymuje


si macierz dwuwymiarow R:
R = Nhor Nver

(2.1)

gdzie: R - rozdzielczo obrazu


Nhor - ilo punktw w linii obrazu
Nver - ilo linii obrazu
Parametry obrazu maj cile okrelony zwizek z jego rozmiarem, a co za
tym idzie, wpywaj na czas jesgo przetwarzania. Zgodnie z wzorem (2.1) liniowy
wzrost rozdzielczoci powoduje kwadratowy wzrost objtoci obrazu. Tak wic
wybr rozdzielczoci obrazu jest kompromisem pomidzy jakoci odwzorowania
(zachowaniem szczegw obrazu), a jego rozmiarem.
Pojedynczy element macierzy zwany jest pikselem. Kady piksel moe
przyjmowa jeden spord okrelonej liczby stanw. Jednym z modeli zapisu obrazu
kolorowego jest format RGB 2 , w ktrym kady piksel opisuj skadowe zoone
z trzech kolorw: czerwonego, zielonego i niebieskiego. Poprzez zmieszanie ich w
1

Tadeusiewicz R., Korochoda P.: Komputerowa analiza i przetwarzanie obrazw, Wydawnictwo Fundacji

Postpu Telekomunikacji, Krakw 1997, s.14


2
Z jzyka angielskiego: R-red, G-green, B-blue.

Rysunek 2.1. Siatka typowego obrazu cyfrowego. [3]

ustalonych proporcjach uzyskiwany jest dowolny kolor. Do zapisu obrazw cyfrowych


uywany jest rwnie model YCbCr 3 .

2.2. Nadajnik i odbiornik HDMI


Na pycie MMXS3DSP-AV umieszczono odbiornik oraz nadajnik HDMI/DVI,
ktre s konwerterami tych sygnaw na posta rwnoleg, wygodn do
komunikacji z FPGA. Do akwizycji sygnau wideo moe wie by wykorzystane
dowolne urzdzenie posiadajce interfejs DVI lub HDMI. W niniejszym rozdziale
umieszczono podstawowe informacje zwizane z wymienionymi interfejsami oraz
ukadami odbiornika i nadajnika.

INTERFEJS DVI

Interfejs DVI4 zosta opracowany w celu zapewnienia szybkiego, cyfrowego


poczenia do przesyu obrazw. Tabela 2.1 przedstawia stosowane standardy
wykorzystywane do cyfrowego przesyu sygnau wizyjnego w interfejsie DVI.
3
4

Y-luminancja, Cb, Cr-skadowe chrominancji.


Digital Visual Interface

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

Tabela 2.1. Standardy przesyu sygnau wizyjnego [16].

Specyfikacja DVI wykorzystuje do szeciu kanaw, linii rnicowych do przesyu


danych w formie nieskompresowanej 8-bitowej (rys.2.2). Jego warstw elektryczn
tworz pary linii rnicowych zgodne ze stardardem T.M.D.S. [16]. Wykaz linii
interfejsu DVI przedstawia zacznik B.

Rysunek 2.2. Poczenie T.M.D.S.

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

High Definition Multimedia Interface

10

ponadto przesyanie dwku (8 kanaw audio) oraz danych obrazu w formie 10 bitowej.

Rysunek 2.3. Konwerter sygnau HDMI/DVI, DVI/HDMI [20]

ODBIORNIK HDMI AD9383

Rysunek 2.4 przedstawia wewntrzn budow odbiornika HDMI AD9398


firmy Analog Devices. Z lewej strony przedstawiono wejcia sygnaw HDMI,
kompatybilne ze standardem DVI. Zasada dziaania ukadu polega na konwersji tego
sygnau na posta rwnoleg (24 - bitow) do postaci RGB lub YCbCr, w ktrej
kady z trzech kanaw (R, G, B lub Y, Cb, Cr) przesyany jest na 8 bitach. Rys.
2.5 przedstawia ukad tych kanaw w interfejsie odbiornika. W niniejszej pracy do
transmisji danych wykorzystano dwa spod wymienionych standardw: RGB oraz
4:4:4 YCbCr. Ukad posiada rwnie linie synchronizacji poziomej VSYNC, pionowej
HSYNC. Generuje rwnie sygna zegarowy DATACK dla interfejsu rwnolegego
oraz sygna DE sygnalizujcy gotowo na transmisj. Konwersja odbywa si w bloku
HDMI RECEIVER, natomiast w bloku COLOR SPACE CONVERTER realizowana
jest ewentualna zmiana formatu przesyanych danych na posta RGB lub YCbCr,
zgodnie z ustawieniem w rejestrach konfiguracyjnych ukadu. Poniej bloku COLOR
SPACE CONVERTER widoczne s wyprowadzenia sygnaw audio. Zagadnienie to
jednak wykracza poza temetyk tej pracy, tak samo jak realizacja szyfrowania danych
w bloku DHCP. Ukad nadrzdny (procesor lub FPGA) maj moliwo konfiguracji
rejestrw ukadu poprzez interfejs I 2 C (linie SCL, SDA).
11

Rysunek 2.4. Schemat blokowy odbiornika HDMI AD9398 [14].

Rysunek 2.5. Kanay RGB oraz YCbCr, wystpujce w interfejsie rwnolegym ukadu AD9398
[14].

12

NADAJNIK HDMI AD9889B

Nadajnik HDMI AD9889B realizuje konwersj sygnau wizyjnego, przesyanego


interfejsem rwnolegym, identycznym jak w opisanym wyej odbiorniku na standard
HDMI. Na schemacie blokowym (rys.2.6) wyrni mona blok wejciowy sygnau
VIDEO DATA CAPTURE, blok konwersji kolorw COLOR SPACE CONVERSION
oraz blok nadajnika HDMI Tx CORE.

Rysunek 2.6. Schemat blokowy nadajnika HDMI AD9889B [15].

2.3. Filtracja medianowa


Filtracja medianowa jest nieliniow, kontekstow metod filtracji, bardzo
powszechnie wykorzystywan jako element wstpnego przetwarzania obrazw
ze wzgldu na swoje interesujce waciwoci. Filtr medianowy potrafi
13

Rysunek 2.7. Usuwanie zakce filtrem medianowym [3].

Rysunek 2.8. Wpyw filtru medianowego na krawdzie obiektu [3].

zredukowa szum wysokoczstotliwociowy oraz impulsowe zakcenia


bez rozmywania ostrych krawdzi obrazu (rys.2.7, rys.2.8). Podczas filtracji
obrazu mamy do czynienia z filtracj dwuwymiarow.
Median (median) nazywana jest liczba, ktra w szeregu uporzdkowanym
znajduje si dokadnie w poowie tego szeregu. W algorytmie filtracji medianowej
dwuwymiarowej okno o rozmiarze (K K), gdzie K = 2N + 1, posiadajce
liczb elementw rwn TAP 6 jest przesuwane wzdu sygnau, a rodkowy punkt
okna zamieniany jest na median wszystkich punktw okna. Ide dziaania jest
zaoenie, e mediana wszystkich punktw okna bdzie najlepszym wyborem dla
punktu centralnego. Niech Wi,j bdzie oknem, ktrego centralnym punktem jest
punkt o wsprzdnych (i, j), wtedy:
yi,j = median {Wi,j }

(2.2)

Operacj wykonywan przez filtr medianowy jest sortowanie elementw okna,


przedstawienie ich w uporzdkowany sposb (np. rosnco) i wybr rodkowego
6

TAP - liczba elementw okna. Dla filtracji dwuwymiarowej: T AP = K 2

14

elementu jako wyniku filtracji. Na rys. 2.9 przedstawiono may wycinek (3 x 3)


pewnego obrazu, ktry posuy jako okno w przykadzie ilustrujcym dziaanie filtru
medianowego. W tabeli 2.2 zapisano wartoci pikseli okna rozdzielajc kanay R, G
i B.

Rysunek 2.9. Przykadowe okno 3 x 3.

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

Tabela 2.2. Wartoci kanaw R, G i B dla okna z rys.2.9

Naley dokona sortowania elementw kanau R w kolejnoci rosncej:


R = {134, 152, 156, 171, 178, 178, 179, 182, 189}

(2.3)

Wynikiem, czyli median, bdzie rodkowy (pity) element w uporzdkowanym


cigu, czyli punkt o wartoci 178. To samo sortowanie naley powtrzy dla kolejnych
kanaw:
G = {76, 89, 91, 104, 115, 135, 157, 165, 199}

(2.4)

B = {62, 82, 82, 83, 100, 108, 119, 134, 142}

(2.5)

W wyniku powyszych operacji otrzymywany jest nowy punkt wynikowy


(tab.2.3), ktry w otoczeniu punktw okna przedstawiono na rys.2.10.
Po wykonaniu filtracji dla danego okna nastpuje jego przesunicie w prawo
(rys.2.11).

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

Tabela 2.3. Wartoci kanaw R, G i B dla okna z rys.2.9 po filtracji medianowej.

Rysunek 2.10. Wynik filtracji medianowej.

Wspczesne struktury filtrw medianowych mona podzieli na dwa typy:


1. Filtry, w ktrych elementy okna przechowywane s w kolejnoci przybycia oraz
2. Filtry, w ktrych elementy okna przechowywane s wedug rzdu, np. rosnco.
W filtrach z pierwszej grupy moliwe jest zastosowanie przetwarzania potokowego
dowolnej gbokoci oraz zrwnoleglenia algorytmu, przez co czas oblicze moe by
znacznie krtszy ni w architekturach drugiej grupy. Filtry z drugiej grupy mona
zrealizowa z wykorzystaniem znacznie mniejszej iloci zasobw logicznych.
Ze wzgldu na krytyczne wymogi czasowe, w niniejszej pracy skoncentrowano si
na filtrach pierwszej grupy, w ktrych elementy przechowywane wedug kolejnoci
przybycia.

2.4. Sprztowa realizacja filtracji medianowej


Struktura sprztowej implementacji filtru medianowego, prezentowana w niniejszej
pracy, bazuje na algorytmie zaproponowanym w [3] z modyfikacjami na podstawie
wiedzy zawartej w [4].
Dane wejciowe pobierane s bajt po bajcie od lewej strony obrazu do prawej,
poczwszy od grnej linii obrazu kolejno w d. Architektura filtracji medianowej
z oknem 3 x 3, przedstawiona na rysunku 2.12, skada si z linii opniajcych,
dziki ktrym zapewniony jest dostp do otoczenia danego punktu w jednej jednostce
16

Rysunek 2.11. Okno o rozmiarach 3 x 3 podczas filtracji.

czasu. Kolejne punkty obrazu umieszczane s w rejestrach7 i przechowywane w nich


wedug kolejnoci przybycia, tak e kolejne przychodzce nowe punkty wypychaj
z rejestrw najstarsze. Blok komparatorw odpowiedzialny jest za porwnywanie
kadej wartoci rejestrw z kad, by nastpnie w bloku RAM/ROM zapisa wagi
kadego z punktw i obliczy, zawarto ktrego rejestru ma by przekazana przez
multiplekser na wyjcie filtru.
W wyniku realizacji bloku komparatorw, w ktrych zawartoci rejestrw s
porwnywane kada z kad otrzymanoby zbyt rozbudowan struktur algorytmu,
zajmujc niepotrzebnie bardzo duo zasobw. Mona j zmodyfikowa, jak
zaproponowano w [5]. W tym rozwizaniu, zamiast bloku RAM/ROM, kady
z rejestrw danych posiada przypisany do niego rejestr wag, natomiast zawartoci
rejestrw s porwnywane jedynie z nowymi punktami, wchodzcymi w danym
cylku zegarowym do rejestrw, a wynik porwnania zapisywany jest do rejestrw
wag.
Dla wyjanienia zasady dziaania powyej opisanego algorytmu posuy
rysunek2.13, w ktrym dla uproszczenia zaprezentowano architektur dla filtracji
sygnaw jednowymiarowych dla okna picioelementowego TAP = 5. Analogicznie
algorytm ten jest przenaszalny na sygnay dwuwymiarowe, jakimi s obrazy.
W rejestrach D[3...0] oraz DN przechowywane s wartoci kolejnych prbek
sygnau. Nowa prbka trafia do rejestru DN, by w kolejnym cyklu zosta przesunit
do D[0], pniej do D[1] itd. Kady rejestr D posiada odpowiadajcy mu rejestr C
7

Na przechowanie wartoci wszystkich punktw dla okna 3 x 3 potrzebnych jest 9 rejestrw, analogicznie

dla wikszych oklien K x K, gdzie K = 2N + 1 potrzeba K 2 rejestrw.

17

Rysunek 2.12. Sprztowa realizacja filtracji medianowej zaprezentowana w [3].

18

oraz CR. Zawartoci rejestrw D, C oraz CR s przesuwane w lewo z kadym cyklem


zegarowym.
Kada nowa prbka zapisana do rejestru DN jest porwnywana z prbkami
ju obecnymi w rejestrach D[3...0]. Zawartoci rejestrw C, przechowujce wynik
porwnania s wwczas uaktualniane na podstawie porwnania dokonanego
w blokach komparatorw. Jeli nowa prbka jest wiksza lub rwna istniejcej
w danym rejestrze, wwczas wynik porwnania bdzie logiczn 1, w przeciwnym
wypadku bdzie logicznym 0.
Kady rejestr CR[1...3] oraz rejestr CN posiada szeroko rwn TAP. Do
rejestru CN trafia inwersja zoenia wszystkich bitw wynikw porwnania. Bdzie
w nim zatem zapisana informacja, w ktrym rejestrze D[0...3] zawarto bya wiksza
od zawartoci rejestru DN, w postaci jedynki logicznej na odpowiednim miejscu. Po
dokonaniu sumy bitw (jedynek logicznych) otrzymamy warto indeksu dla prbki
w rejestrze DN.
Zawartoci rejestrw CR[1...3] propagowane s wedug zalenoci 2.6, rys.2.14.
CR[k] = {CR[k 1](T AP 2 : 0), C[k]}

(2.6)

gdzie (:) oznacza wybr bitw, {} oznacza skadanie bitw


TAP - ilo prbek okna.

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

Warto par. RANK

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).

Rysunek 2.13. Architektura rdzenia filtru medianowego wedug [5].

20

Rysunek 2.14. Przykad operacji filtru medianowego [5].

potrzeba uzyskiwania wyniku filtracji w kadym cyklu zegarowym. Kolejkowanie


gbokoci N dla okna K x K polega wic na wczytaniu w jednym cylku zegarowym
t = t0 iloci punktw rwnych K oraz na zwracania w tym samym cylku wyniku dla
danych wczytanych w cyklu t = t0 N . W ten sposb dane wyjciowe generowane
s w kadym takcie zegarowym z opnieniem rwnym gbokoci kolejkowania.

21

ROZDZIA 3

Projekt sprztowej realizacji filtracji medianowej


MX2dMedian

Prezentowany w tym rozdziale, opracowany w ramach pracy projekt MX2dMedian


realizuje sprztow filtracj medianow sygnau wizyjnego. Zaprezentowany
algorytm zosta zaimplementowany oraz zsyntezowany do wybranego ukadu FPGA,
rodziny Spartan-3A DSP. Projekt zakada prac w czasie rzeczywistym z wszystkimi
rozdzielczociami sygnaw HDTV, nie przekraczajcymi rozdzielczoci SXGA (1280
x 1024 @ 60Hz). rdem sygnau o wymienionych parametrach jest ukad AD9398 odbiornik, konwertujcy sygna HDMI na posta rwnoleg, wygodn do przesania
sygnau do FPGA. Rol nadajnika HDMI peni ukad AD9889B, odbierajcy sygna
z FPGA i konwertujcy go na posta HDMI. Wykorzystanie uniwersalnych sygnaw
wejciowych i wyjciowych HDMI lub DVI oznacza, e rdem oraz odbiornikiem
sygnau musz by odpowiednie urzdzenia posiadajce interfejs HDMI lub DVI.
Ukad FPGA taktowany jest z zewntrznego generatora sygnau zegarowego.
Generator ten jest rdem dla sygnau system clock w projekcie. Jego czstotliwo
wynoi 100MHz. Ukady nadajnika i odbiornika HDMI taktowane s inn
czstotliwoci zwan w dalszej czci pracy pixel clock, ktra zmienia si w
zalenoci od parametrw obrazu. Maksymalna czstotliwo pixel clock wynosi nie
wicej ni 80MHz dla sygnau 1280 x 1024 @ 60Hz.
Rysunek 3.1 przedstawia ukad FPGA w otoczeniu nadajnika i odbiornika
HDMI. W dalszej czci rozdziau przedstawiono opis projektu zaimplementowanego
wewntrz struktury FPGA oraz aplikacj symulujc interfejsy ukadw nadajnika
i odbiornika HDMI, umoliwiajc testowanie algorytmu w zadanych warunkach,
speniajcych wymogi czasowe zgodne z rzeczywistymi.

3.1. Skrzyowanie rnych domen czasowych


Sygna wejciowy jest przesyany do FPGA przez magistral rwnoleg,
o szerokoci 24 bitw1 . Odbiornik HDMI przesya t magistral po jednym bajcie
nieskompresowanych kanaw RGB lub YCbCr w kadym cyklu zegarowym. Oprcz
1

Szczegowy opis interfejsu zamieszczony jest w rozdziale 2.2

22

Rysunek 3.1. Ukad FPGA w otoczeniu ukadw nadajnika i odbiornika HDMI.

tego generuje sygnay synchronizacji pionowej oraz poziomej, ktre s niezbdne


przy wykrywaniu koca linii oraz koca obrazu. Odbiornik HDMI pracuje z wasnym
rdem taktujcym interfejs pixel clock, zalenym od parametrw transmitowanego
sygnau. Struktura FPGA taktowana jest przez sygna system clock. Sygna z
odbiornika HDMI jest wic przekazywany do ukadu FGPA, pracujcego z inn
czstotliwoci a nastpnie, po przetworzeniu zostaje wysyany do nadajnika HDMI,
ktry rwnie taktowany jest z czstotliwoci pixel clock (rys.3.2).
W projekcie zastosowano kolejk FIFO, ktra poredniczy w przekazywaniu
danych pomidzy ukadami pracujcymi w rnych domenach czasowych.
Wykorzystano rdzeni IP dostpny w rodowisku projektowym ISE, za pomoc
ktrego wygenerowano modu kolejki FIFO o odpowiednich parametrach2 . Rysunek
3.3 przedstawia blok FIFO z widocznymi sygnaami wejciowymi oraz wyjciowymi.
Podczas parametryzacji moduu zostay wybrane tylko niezbdne sygnay sterujce,
ktre wystarczaj do kontroli przepywu danych.
Parametr

Warto

Jednostka

Szeroko danych we/wy

27

bity

Gboko kolejki

64

bajty

Niezalene wejcia sygnaw zegarowych

Tabela 3.1. Wybrane parametry FIFO

Wygenerowany modu FIFO zosta umieszczony w projekcie zarwno do


2

FIFO Generator v3.4, Xilinx ISE v10.1

23

Rysunek 3.2. Skrzyowanie rnych domen czasowych w FPGA.

synchronizacji danych wejciowych, jak i wyjciowych, tak jak przedstawiono na


rys.3.2.
Poniewa struktura FPGA taktowana jest zegarem o wikszej czstotliwoci
od odbiornika HDMI 3 , zapis do kolejki FIFO jest dozwolony nieprzerwanie,
natomiast odczyt (oprnianie) nastpuje wwczas, gdy kolejka prawie si napeni,
tzn. pozostanie w niej jeszcze tylko jedno miejsce wolne do zapisu. Stan ten
zasygnalizuje sygna wyjciowy FIFO_ALMOST_FULL. Wtedy zezwolony jest
odczyt danych z kolejki, ktry nastpuje do momentu, w ktrym kolejka bdzie
prawie pusta (sygna FIFO_ALMOST_EMPTY ). Kontrola kolejki zrealizowana
zostaa na automacie stanu, ktry zosta opisany w jzyku VHDL. Deklaracja
jednostki zostaa przedstawiona na rys.3.4, a schemat dziaania na rys.3.5.

Obsug kolejki wyjciowej zrealizowano analogicznie, z rnic polegajc na


tym, e nieprzerwanie trwa odczyt danych z kolejki.
3

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).

Rysunek 3.4. Instancja bloku kontroli kolejk FIFO, Control_Logic.

25

Rysunek 3.5. Automat stanu sterujcy prac kolejki FIFO.

3.2. Przetwarzanie strumienia danych obrazu


Projekt MX2dMedian umoliwia filtracj obrazu w postaci RGB oraz YCbCr.
W kadej z nich filtracji podlega bezporednio kady z kanaw. Instancj moduu
przetwarzania przedstawiono na rys.3.6, natomiast rysunek 3.7 przedstawia blokowo
przepyw strumienia danych podczas algorytmu filtracji RGB. Kady z kanaw, po
rozdzieleniu posiada swj wasny blok filtracji, ktry jest identyczn struktur dla
kadego kanau. Dla danych YCbCr filtracja przebiega analogicznie.

RED_IN, GREEN_IN, BLUE_IN

Omiobitowe wejcia danych. Zapis pojedynczego piksela obrazu nastpuje poprzez


rwnolege wczytanie kadego z kanaw RGB lub YCbCr. Kanay YCbCr
rozmieszczone s zgodnie z rys.2.5.

D_OUT

Dwudziestoczterobitowe wyjcie danych. Kanay RGB lub YCbCr s rozmieszczone


na porcie w sposb przedstawiony w tabeli 3.3.
26

Nazwa portu

Szeroko

Kierunek

Opis

red_in

We

Wejcie danych, kana R lub Cr

green_in

We

Wejcie danych, kana G lub Y

blue_in

We

Wejcie danych, kana B lub Cb

d_out

24

Wy

Wyjcie danych RGB lub YCbCr

vsync

We

Wejcie linii synchronizaci pionowej

vsync_out

Wy

Opnione wyjcie linii synchronizacji pionowej

hsync

We

Wejcie linii synchronizaci poziomej

hsync_out

Wy

Opnione wyjcie linii synchronizacji poziomej

WINDOW_WIDTH

We

Parametr generyczny definiujcy szer. okna

rank

We

Wybr indeksu danej wyjciowej

clk

We

Wejcie zegarowe

ce

We

Zezwolenie na sygna zegarowy

reset

We

Reset synchroniczny

Tabela 3.2. Wyprowadzenia instancji przetwarzania strumienia danych obrazu Dataflow

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

Tabela 3.3. Rozmieszczenie kanaw na porcie wyjciowym D_OUT.

27

Rysunek 3.6. Instancja bloku przetwarzania strumienia danych obrazu Dataflow.

VSYNC, VSYNC_OUT, HSYNC, HSYNC_OUT, FIELD_IN, DE_OUT,


WINDOW_WIDTH, RANK

Opis w rozdziale 3.3

CLK, CE, RESET

Opis w rozdziale 3.3

3.3. Implementacja rdzenia filtru medianowego


Omawiany w tym punkcie rdze filtru medianowego stanowi gwn, najwaniejsz
cz projektu. Filtr skada si z pamici obrazu (wewntrznych linii opniajcych,
opartych na pamici BlockRAM) oraz odpowiednio ze sob poczonych jednostek
procesorw pikseli i jednostki wyjciowej, odpowiedzialnej za przekazanie na wyjcie
filtru odpowiednio wybranej danej.
Wejcia i wyjcia filtru przedstawiono na rys.3.8 i opisano w tabeli 3.4.
28

Rysunek 3.7. Przetwarzanie strumienia danych obrazu RGB.

Nazwa portu

Szeroko

Kierunek

Opis

d_in

We

Wejcie danych

d_out

Wy

Wyjcie danych

vsync

We

Wejcie linii synchronizaci pionowej

vsync_out

Wy

Opnione wyjcie linii synch. pionowej

hsync

We

Wejcie linii synchronizaci poziomej

hsync_out

Wy

Opnione wyjcie linii synch. poziomej

WINDOW_WIDTH

We

Par. generyczny definiujacy szer. okna

rank

We

Wybr indeksu danej wyjciowej

clk

We

Wejcie zegarowe

ce

We

Zezwolenie na sygna zegarowy

reset

We

Reset synchroniczny

Tabela 3.4. Wyprowadzenia instancji rdzenia filtru.

29

Rysunek 3.8. Instancja rdzenia filtru medianowego

DIN, DOUT

Omiobitowe wejcie i wyjcie danych w formatach std_logic_vector. Dane


wyjciowe s generowane z kadym cyklem zegarowym. Ze wzgldu na zastosowanie
przetwarzania potokowego, dane wyjciowe pojawiaj si z opnieniem 4 cykli
zegarowych wzgldem danych wyjciowych.

VSYNC, VSYNC_OUT, HSYNC, HSYNC_OUT

Linie synchronizacji pionowej i poziomej wymagane do odpowiedniego sterowania


przepywem danych obrazu. Ze wzgldu na zastosowanie przetwarzania potokowego,
linie VSYNC_OUT oraz HSYNC_OUT s opnione o 4 cykle zegarowe wzgldem
linii wejciowych VSYNC i HSYNC.

WINDOW_WIDTH

Parametr generyczny typu integer, umoliwiajcy parametryzacj filtru. Moe


przyjmowa tylko dozwolone wartoci (tab.3.5), ktre determinuj szeroko okna
filtracji danych.
30

Warto

Rozmiar okna filtru

WINDOW_WIDTH = 3

3x3

WINDOW_WIDTH = 5

5x5

WINDOW_WIDTH = 7

7x7

Tabela 3.5. Dozwolone wartoci parametru generycznego WINDOW_WIDTH.

RANK

Parametr typu integer, ktry moe przyjmowa wartoci od 0 do 48. Okrela


indeks danej, ktra z okna filtracji ma by przekazana na port wyjciowy. W celu
otrzymania filtracji medianowej, parametr ten musi wskazywa na rodkowy4
element okna (tab.3.6). Parametr RANK przekazywany jest w gb struktury filtru
do komponentu jednostki wyjciowej (szczegowy opis w rozdziale 3.8.
Okno

Ilo pikseli w oknie

Warto par. rank

25

12

49

24

Tabela 3.6. Wartoci parametru rank dla filtracji medianowej.

CLK

Wejcie sygnau zegarowego dla wszystkich elementw w strukturze filtru.

CE

Zezwolenie na sygna zegarowy. Jeli CE przyjmuje warto 0, praca rdzenia filtru


zostaje wstrzymana.

RESET

Synchroniczny reset, zerujcy wszystkie wewntrzne rejestry w strukturze rdzenia


filtru.
4

Prezentowana struktura filtru pozwala na zastosowanie jej dla filtracji maksymalnej i minimalnej

poprzez zmian wartoci parametru rank

31

3.4. Architektura rdzenia filtru medianowego


Dla uproszczenia, w tym rozdziale skoncentrowano si na opisie
elementw sparametryzowanych dla okna 3 x 3. Dla wikszych okien (5 x 5
oraz 7 x 7) zasada dziaania i rozmieszczenie elemetw s analogiczne, co dokadnie
omwiono podczas opisywania procesu parametryzacji i zagadnie z nim zwizanych
w rozdziale 3.7.

Rysunek 3.9. Struktura rdzenia filtru dla okna 3 x 3.

Budowa wewntrzna rdzenia filtru bazuje na zaoeniach przedstawionych


w rozdz.2.4. Rysunek 3.9 ilustruje przepyw danych wewntrz struktury filtru.
Dane wejciowe D_IN zapisywane s w Bloku Pamici Linii Obrazu, nastpnie
przesyane do matrycy procesorw pikseli P0...8, ktrej ukad odpowiada strukturze
zaproponowanej w rozdz.2.4, rys.2.12. Budowa pojedynczego procesora pikseli
zostaa oparta o wiedz przedstawion w rozd.2.4, rys.2.13 i dokadnie opisana
32

w kolejnym razdziale (3.6). Konieczne s rwnie trzy bloki P9..10, bdce


uproszczonymi wersjami procesorw pikseli, posiadajce jedynie rejestry danych. Ich
zamieszczenie jest konieczne ze wzgldu na zastosowanie przetwarzania potokowego,
ktre omwiono szczegowo w dalszej czci pracy. Zadaniem Jednostki Wyjciowej
jest zwrcenie wyniku (D_OUT), bdcego zawartoci odpowiedniego rejestru
procesorw P3...10 5 , wybieran na podstawie porwnania dokonanego w procesorach
P0...8.

3.5. Blok pamici linii obrazu


Uproszczon budow Bloku Pamici Linii Obrazu z rys.3.9 przedstawiono na
rys.3.10. Skada si on z kontrolera pamici Circle Control oraz kilku jednostek
pamici linii obrazu.

Rysunek 3.10. Blok pamici linii obrazw.

Zgodnie z zaoeniamu projektowymi, maksymalna szeroko przetwarzanego


5

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

Generowana ilo pamici Block RAM

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).

Jednostka sterujca zapisem do pamici Circle Control (rys.3.11) generuje adresy,


pod ktre wykonywany jest zapis przychodzcych danych obrazu oraz adresy,
spod ktrych nastpuje odczyt danych i przesanie ich do macierzy procesorw
pikseli. Po wykryciu sygnau synchronizacji poziomej VSYNC, bdcej znakiem
rozpoczcia nowej ramki obrazu, zaczyna zapenia lini 0 danymi wejciowymi.
Kade pojawienie si sygnau synchronizacji pionowej HSYNC jest znakiem do
rozpoczcia zapisu nastpnej linii w kolejnoci przedstawionej na rys.3.12.

Rysunek 3.11. Instancja kontrolera zapisu i odczytu pamici Circle_Conrtol.

34

Nazwa portu

Szeroko

Kierunek

Opis

r_vs

We

Wejcie linii synchronizacji pionowej

addra

11

Wy

Wyjcie adresowe dla portu a

addrb

11

Wy

Wyjcie adresowe dla portu b

line_en

WINDOW_WIDTH

Wy

Wyjcie zezwolenia na zapis danej linii

clk

We

Wejcie zegarowe

ce

We

Zezwolenie na sygna zegarowy

reset

We

Reset synchroniczny

Tabela 3.8. Wyprowadzenia instancji Circle_Control

R_VS

Wejcie linii synchronizacji pionowej. Po wykryciu impulsu na tym wejciu, kontroler


koczy zapis aktualnej linii i zaczyna umieszcza dane wejciowe w linii nastpnej
(rys.3.12) poprzez zmian ustawienia bitw portu wyjciowego LINE_EN.
ADDRA, ADDRB

Wyjcia adresowe kontrolera dla portu a oraz b pamici obrazu.


LINE_EN

Port wyjciowy o definiowanej szerokoci WINDOW_WIDTH. Steruje wyborem


linii pamici poprzez ustawienie na odpowiednim miejscu jedynki logicznej. Port
ten pracuje w kodzie 1 z WINDOW_WIDTH, co oznacza, e w danym momencie
tylko jeden bit portu jest aktywny.
CLK, CE, RESET

Jak w 3.3.

Rysunek 3.12. Zapis kolejnych linii obrazu.

35

Pojedyncza linia pamici zostaa zaprojektowana w oparciu o generator rdzeni


IP, dostpny w rodowisku projektowym ISE 6 . Jest to dwuportowa pami, oparta
na komrkach Block RAM dostpnych w strukturze FPGA (rys.3.13). Oznacza to,
e w jednym cyklu zegarowym moe by jednoczenie dokonany odczyt i zapis do
pamici. Zostaa ona skonfigurowana w taki sposb, e zapis moliwy jest jedynie
przez jej port a, natomiast odczyt przez port b.

Rysunek 3.13. Rdze IP pamici pojedynczej linii obrazu Line RAM (wejcia, wyjcia
zaznaczone kolorem szarym nie zostay wykorzystane w projekcie)

DINA, DOUTB

Wejcie i wyjcie danych pamici. Omawiana pami dwuportowa zostaa


skonfigurowana w sposb umoliwiajcy wpis danych przez port a, natomiast odczyt
przez port b
6

Block Memory Generator v.2.7, Xilinx ISE v10.1

36

Nazwa portu

Szeroko

Kierunek

Opis

addra

11

We

Wejcie adresowe portu a

dina

We

Wyjcie danych portu a

wea

We

Zezwolenie na zapis portu a

clka

We

Wejcie zegarowe portu a

addrb

11

We

Wejcie adresowe portu b

doutb

Wy

Wyjcie danych portu b

clkb

We

Wejcie zegarowe portu a

Tabela 3.9. Wyprowadzenia instancji pamici Line RAM

ADDRA, ADDRB

Wyjcia adresowe pamici dla portu a oraz b pamici obrazu.

WEA

Ustawienie tego wejcia w stan jedynki logicznej umoliwia zapis danej do portu a
pod dany adres.

CLKA, CLKB

Wejcia sygnau zegarowego dla portu a i portu b. W projekcie obydwa wejcia s


taktowane tym samym sygnaem zegarowym.

3.6. Procesor pikseli


Sercem w strukturze filtru z rys.3.9 jest macierz procesorw pikseli. Do nich
trafiaj dane z bloku pamici linii obrazu i w nich dokonywana jest najwaniejsza
operacja filtracji - sortowanie poprzez obliczanie indeksu kadego bajtu. Rysunek
3.14 przedstawia wewntrzn budow pojedynczej komrki procesora pikseli dla
okna o rozmiarach 3 x 3. Dla wikszych rozmiarw okien odpowiednie elementy
struktralne ulegaj powieleniu, co dokadnie opisano w rozdziale 3.7. Struktur
procesora opisano kadc nacisk na kodowanie w stylu RTL, ktry zosta szczegowo
opisany w [1].
Procesor skada si z nastpujcych elementw7 :
7

Dokadny opis elementw widocznych na rys.3.9 zamieszczono w rozdziale 3.10.

37

Rysunek 3.14. Pojedyncza komrka procesora pikseli dla okna 3 x 3.

38

Data_Register - DR - rejestr przechowujcy wczytan warto danej


wejciowej,
Line_Comparator (<) - LC - synchroniczny komparator,
Compare_Register - CR - rejsetr przechowujcy wynik z komparatorw,
Bit_Sum - BS - jednostka realizujca sum bitw.
Rozpatrzmy przepyw danych w pojedynczej komrce procesora P0 z rys.3.9.
Cao zostaa podzielona na kroki, odpowiadajce przetwarzaniu danych w
kolejnych cyklach zegara systemowego, system clock.
Krok 1 - Wczytaj i porwnaj

Zatrzanicie danych wejciowych D_IN w rejestrze DR oraz wykonanie porwnania


danej wejciowej D_IN z danymi linii 08 , linii 1 i linii 2 w trzech komparatorach
LC.
Krok 2 - Zapisz indeksy

Wpisanie wyniku porwnania do rejestru CR wedug wzoru 3.1.


cr_in[k] = not(P [k].cmp_out(n))

(3.1)

dla procesora P[n], gdzie: k - kolejne bity wektora (od 0 do 8)


n - kolejne indeksy procesora obrazu (od 0 do 2)
cr_in - wejcie Compare_Register
cmp_out - wyjcie komparatorw
Zgodnie z powyszym wzorem bajt w procesorze P0, wczytany w poprzednim
kroku, zosta porwnany z wczytanym bajtem kadego procesora P1-P8. Rejestr CR
przechowuje wyniki tego porwnania. Jeli bajt w P0 by mniejszy od bajtu w P[n],
wwczas bit n rejestru CR bdzie mia warto 0, natomiast warto 1 przyjmie, gdy
bajt ten by wikszy lub rwny. W ten sposb po zakoczeniu kroku 2 wiadomo jak
wag ma wczytana w poprzednim kroku dana (operacja ta zostaa rwnie opisana
w rozdz.2.4.).
Dla procesorw umieszczonych wewntrz struktury macierzy P3...8 sposb
poczenia rejestrw CR jest inny ni dla procesorw umieszczonych w pierwszej
kolumnie. Poczenie linii obliczane jest ze wzoru 2.6 zamieszczonego w rozdz.2.4.
8

Linia 0 jest te lini wejciow D_IN dlatego wynik tego porwnania zawsze bdzie rwny 1.

39

Krok 3 - Konwertuj indeksy

Sumowanie jedynek zapisanych w rejestrze CR w asynchronicznej jednostce BS


w celu przeksztacenia wag na posta numeryczn. Nastpnie wpisanie danych do
jednostki wyjciowej Output_unit.

Krok 4 - Demultipleksuj wynik

Porwnianie wag danych zapisanych we wszystkich procesorach (P0 - P8) oraz


przekazanie przez demultiplekser na wyjcie tej danej, ktrej waga jest rwna
parametrowi RANK.

Przedstawiony powyej algorytm wymaga czterech cykli zegarowych od momentu


otrzymania danej wejciowej do mementu zwrcenia wyniku. Fakt, e wszystkie
wewntrzne elementy s synchroniczne, umoliwi zastosowanie potokowego
przetwarzania danych (rys.3.15). W ten sposb dane wyjciowe generowane s
w kadym cyklu zegarowym, lecz z opnieniem 4 cylki. Opnienie wynikajce
z zastosowania przetwarzania potokowego determinuje zastosowanie procesorw P9P11. S uproszczonymi wersjami procesora pikseli, posiadajcymi jedynie rejestr
DR. Umieszczono je w strukturze z koniecznoci opnienia danych przesyanych do
jednostki wyjciowej.

Rysunek 3.15. Przetwarzanie potokowe zastosowane w rdzeniu filtru medianowego.

40

3.7. Parametryzacja filtru


Jzyk opisu sprztu VHDL umoliwia kodowanie w taki sposb, by w zalenoci
od odpowiednich parametrw lub warunkw generowane byy dane zasoby.
W rozdziale 3.6 przedstawiono opis rdzenia filtru projektu MX2dMedian
sparametryzowanego dla okna 3 x 3. Dla wikszych rozmiarw okien potrzeba
wicej zasobw wewntrzych, by pomieci wiksz ilo linii obrazu, elementw
okna, itd. W tabeli 3.10 i 3.11 przedstawiono ilo wykorzystanych zasobw
w rdzeniu filtru oraz w pojedynczej komrce procesora, ktrych ilo jest
obliczana i generowana automatycznie w zalenoci od parametru generycznego
WINDOW_WIDTH .
Nazwa elementu

Okno 3x3

Okno 5x5

Okno 7x7

Line RAM

Circle Control

Processor

25

49

Processor (tylko rejestr D)

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

Bit Sum All

Tabela 3.11. Liczba elementw strukturalnych pojedynczego procesora pikseli w zalenoci od


rozmiarw okna.

Parametr

generyczny

WINDOW_WIDTH

podawany

jest

podczas

tzw. parametryzacji komponentu. W projekcie MX2dMedian naley poda


warto parametru w specjalnie wyszczeglnionej sekcji przedstawionym na list.3.1.
Listing 3.1. Sekcja parametryzacji rdzenia filtru.
1
2 USER PARAMETRIZE SECTION
3 USE THIS SETTINGS TO PARAMETRIZE FILTER CORE

41

4
5
6 CHOOSE WINDOW WIDTH
7

constant WINDOW_WIDTH : i n t e g e r range 3 to 7 := 3 ; window 3 x3

c o n s t a n t WINDOW_WIDTH : i n t e g e r range 3 t o 7 := 5 ; window 5 x5

c o n s t a n t WINDOW_WIDTH : i n t e g e r range 3 t o 7 := 7 ; window 7 x7

10
11

constant MEDIAN : i n t e g e r range 0 to 48 := (WINDOW_WIDTH 2 ) / 2 ;

12

constant MINIMUM : i n t e g e r range 0 to 48 := 0 ;

13

constant MAXIMUM : i n t e g e r range 0 to 48 := WINDOW_WIDTH1;

14
15 CHOOSE FILTER RANK
16

constant RANK : i n t e g e r range 0 to 48 := MEDIAN; median f i l t e r

17

c o n s t a n t RANK : i n t e g e r range 0 t o 48 := MINIMUM; minimum f i l t e r

18

c o n s t a n t RANK : i n t e g e r range 0 t o 48 := MAXIMUM; maximum f i l t e r

19
20
21 END OF USER PARAMETRIZE SECTION
22

W liniach 7-9 umieszczono wybr rozmiarw okna. W zalenoci od potrzeb,


naley wybra jeden z trzech moliwych rozmiarw okien: 3 x 3, 5 x 5, 7 x 7. Lnie
11-13 definiuj odpowiednie wartoci parametru RANK dla wybranego rozmiaru
okna, zgodnie z opisem zamieszczonym w tabeli 2.4, rozdz.2.4. Nastpnie, w liniach
16-18 dokonywany jest wybr filtracji: medianowej, minimalnej, maksymalnej. W
pracy skoncentrowano si na przedstawieniu zastosowania projektu MX2dMedian
do filtracji medianowej, ale zmieniajc jedynie warto parametru RANK z filtru
medianowego otrzyma mona filtr maksymalny lub minimalny bez zmiany
struktury filtru.

3.8. Jednostka wyjciowa


Jednostka wyjciowa skada si z bloku komparatorw oraz demultipleksera. Do
wej BS_IN podczone s wyjcia indeksw z kaego z procesorw w strukturze
filtru, natomiast do wej D_IN wyjcia rejestrw danych kadego procesora.
Zadaniem jednostki wyjciowej jest porwna wartoci indeksw na wejciach BS_IN
z wartoci parametru RANK. Jeli wejcie indeksowe BS_IN[n] bdzie rwne
paramertowi RANK, bdzie to oznaczao, e w procesorze P[n] znajduje si dana,
ktr naley zwrci na wyjcie D_OUT. Wewntrzny demultiplekser przekae wic
na wyjcie D_OUT dan z portu D_IN[n].
42

Jednostka wyjciowa Output_Unit jest parametryzowana przez parametr


definiujcy szeroko okna filtru WINDOW_WIDTH. Dla okna 3 x 3 bdzie
posiadaa 9 wej BS_IN oraz 9 wej D_IN, analogicznie dla okna o rozmiarach
N x N ilo tych wej wynosi bdze N 2 .

Rysunek 3.16. Instancja jednostki wyjciowej filtru Output_Unit.

BS_IN

Wejcia indeksowe o szerokoci 7 bitw. Ilo portw BS_IN jest zalena od


parametru WINDOW_WIDTH i wynosi WINDOW_WIDTH2 . Kade z wej
posiada swj komparator, w ktrym jest porwnywane z parametrem RANK.
D_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

Wybr indeksu danej wyjciowej

WINDOW_WIDTH

We

Wejcie parametryzujce

clk

We

Wejcie zegarowe

reset

Wy

Synchroniczny reset

ce

We

Zezwolenie na sygna zegarowy

Tabela 3.12. Wyprowadzenia instancji jednostki wyjciowej Output_Unit.

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.

3.9. Opnienia sygnaw synchronizacji pionowej


i poziomej
Sygnay synchronizacji pionowej VSYNC i poziomej HSYNC s potrzebne
w cyfrowym formacie przesyu obrazu do zaznaczenia momentu koca linii i koca
44

ramki obrazu. W rdzeniu filtru zastosowano przetwarzanie potokowe o gbokoci


kolejki rwnej 4. Oznacza to, e czas propagacji pojedyczego piksela przez rdze
filtru wynosi 4 cylke zegarowe. Samo przekazanie sygnaw synchronizacji z wejcia
filtru na wyjcie skutkowaoby rozbienoci miedzy nimi, a sygnaem danych o 4
cykle zegarowe. By tego unikn zastosowano opnienie sygnaw synchronizacji
poprzez zostosowanie czterech przerzutnikw synchronicznych wpitych szeregowo
w kad z lini synchronizacji.

3.10. Budowa wewntrzna procesora pikseli


W tym rozdziale zamieszczono opis elementarnych jednostek (rys.3.14) wchodzcych
w budow procesora pikseli.

3.10.1. Rejestr danych i rejestr indeksw


Jednostka Data Register po odpowiedniej parametryzacji jest stosowana jako rejestr
danych DR i rejestr indeksw CR. S to synchroniczne rejestry rnice si midzy
sob jedynie szerokoci. Parament generyczny WIDTH definiuje szeroko danego
rejestru, ktra dla rejestru DR wynosi 8 bitw, natomiast dla rejestru CR wynosi
WINDOW_WIDTH2 bitw. Szeroko ta wynika z iloci bitw z komparatorw do
zapamitania. Jest ona kwadratem szerokoci okna.

Rysunek 3.17. Instancja jednostki Data Register penicej rol DR i CR.

D_IN

Parametryzowane wejcie rejestru o szerokoci okrelonej parametrem WIDTH. Wpis


do rejestru odbywa si przy narastajcym zboczu zegarowym oraz wysokim stanie
linii CE.
45

Nazwa portu

Szeroko

Kierunek

Opis

d_in

WIDTH

We

Wejcie danych

d_out

WIDTH

Wy

Wyjcie danych

WIDTH

We

Parametr generyczny definiujcy szeroko

clk

We

Wejcie zegarowe

ce

We

Zezwolenie na sygna zegarowy

reset

We

Reset synchroniczny

Tabela 3.13. Wyprowadzenia instancji Data_Register.

D_OUT

Parametryzowane wyjcie rejestru o szerokoci okrelonej parametrem WIDTH.

CLK, CE, RESET

Jak w 3.3.

3.10.2. Bloki komparatorw


Element Comparator jest to synchroniczna jednostka, porwnujca dwa bajty
wejciowe i zwracajce wynik porwnania w nastpnym cylku zegarowym.

Rysunek 3.18. Instancja jednostki Comparator LC.

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

Zezwolenie na sygna zegarowy

reset

We

Reset synchroniczny

Tabela 3.14. Wyprowadzenia jednostki Comparator.

D_IN, LINE_DIN

Omiobitowe wejcia komparatora. Porwnanie wartoci tych dwch wej nastpuje


w trybie unsigned, co oznacza, e porwnywane wejcia traktowane s jak liczby
bez znaku. Porwnanie nastpuje przy narastajcym zboczu sygnau zegarowego
i wysokim stanie linii CE.
CMP_OUT

Jednobitowe wyjcie komparatora, przyjmujce stan jedynki logicznej, gdy


LIN E_DIN < D_IN i zera logicznego, gdy LIN E_DIN D_IN
CLK, CE, RESET

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

Parametryzowany port wejciowy o szerokoci bdcej kwadratem szerokoci okna


filtru, WINDOW_WIDTH2 .
47

Rysunek 3.19. Instancja Bit Sum All - BS.

Nazwa portu

Szeroko

Kierunek

Opis

d_in

WINDOW_WIDTH2

We

Wejcie danych

d_out

Wy

Wyjcie danych

WINDOW_WIDTH

We

Par. generyczny, szer. okna filtru

Tabela 3.15. Wyprowadzenia instancji Bit Sum All.

D_OUT

Siedmiobitowe wyjcie, bdce sum jedynek wystpujcych na porcie wejciowym.

WINDOW_WIDTH

Paramert generyczny, szeroko okna filtru, w ktrym montowana jest jednostka


Bit_Sum.

3.11. Moliwoci rozbudowy rdzenia filtru


Zaprezentowana architektura filtracji w projekcie MX2dMedian otwiera drzwi do
dalszej rozbudowy i udoskonalenia algorytmu. Jedn z moliwoci modyfikacji,
ktra skutkowaaby zmniejszeniem zasobw potrzebnych do implementacji w FPGA
moga by by filtracja tylko jednego kanau: luminancji Y. Skadowa ta byaby
obliczana na podstawie danych wejciowych RGB, nastpnie trafiaaby do rdzenia
filtru. Ten jednak nie zwracaby wartoci, tylko indeks danej wynikowej w oknie
filtracji. Wybrieranie indeksu odbywaoby si na podstawie sortowania kanau
Y, a pene skadowe barwy RGB przechowywane byyby w pamici. Wynik
filtracji byby dan wyjciow pamici o indeksie (adresie) wskazanym przez modu
filtracji Y.
W celu uzyskania tak dziaajcego filtru, w projekcie MX2dMedian naleaoby
48

zmodyfikowa jednostk wyjciow Output Unit, doda pami do przechowywania


danych RGB, czekajcych na wynik filtracji oraz stworzy now jednostk sterujc.
Dla strumienia wejciowego YCbCr to rozwizanie skutkowaoby jeszcze
wikszym uproszczeniem struktury, poniewa sygna luminancji Y nie musiaby
by obliczany. Dokonywaa by si filtracja kanau Y, natomiast pena informacja
o obrazie (kanay YCbCr) przechowywana byaby w pamici, a nastpnie,
analogicznie z tym co opisano dla filtracji RGB, przekazywana na wyjcie filtru.

49

ROZDZIA 4

Wyniki

4.1. Weryfikacja poprawnoci dziaania projektu


MX2dMedian
Zaprezentowany w poprzednim rozdziale algorytm podczas procesu projektowania
by na bieco weryfikowany. Aplikacja weryfikujca poprawno dziaania filtru
medianowego oraz poszczeglnych elementw projektu MX2dMedian powstawaa
wraz z nim i jako jego nieodczna cz. Takie podejcie zapewnio bardzo wczesne
wykrywanie bdw zwizanych z nieprawidociami dziaania algorytmu.
Aplikacja weryfikujca zostaa napisana w jzyku VHDL i uruchomiona
w rodowisku Mentor Graphics ModelSim XE III 6.3c. Pooono nacisk na
zgodno interfejsw z rzeczywistymi ukadami HDMI Analog Devices, ktre
zostay opisane w rozdziale 2.2. Z wykorzystaniem waciwociwoci jzyka VHDL
udao si przenie do programu symulacjynego zalenoci czasowe pomidzy
poszczeglnymi sygnaami, dziki czemu uzyskano symulacj dziaania algorytmu
w czasie rzeczywistym. Sygnaem wejciowym i wyjciowym jest obraz zapisany w
postaci mapy bitowej w formacie ASCII PPM. Jest on odczytywany przez proces
symulacji odbiornika HDMI i przekazywany do procesu symulacyjnego projektu
MX2dMedian, a nastpnie odbierany przez symulator nadajnika HDMI po czym
zapisywany na dysku twardym komputera (rys.4.1).
Listing 4.1. Deklaracja komponentu rodowiska symulacjynego.
1 COMPONENT MX2dMedian
2

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

Rysunek 4.1. Schematyczne przedstawienie poczenia projektu MX2dMedian z aplikacj


symulacyjn.

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

T_D : OUT s t d _ l o g i c _ v e c t o r ( 2 3 downto 0 ) ) ;

25 END COMPONENT;

Na listingu 4.1 przedstawiono wszystkie wejcia i wyjcia aplikacji symulacyjnej.


W linii 3 umieszczono reset, ktry odpowiada resetowi zamontowanemu na pycie
MMXS3DSP-AV w postaci przycisku monostabilnego. Stanem aktywnym jest zero
logiczne, co odpowiada naciniciu przycisku na pycie. W linii 6 deklaracja wejcia
sygnau zegarowego, natomiast deklaracj interfejsu odbiornika HDMI umieszczono
w liniach 10-16, a nadajnika HDMI w liniach 20-24.
4.1.1. Algorytm dziaania programu symulacyjnego
Architektur algorytmu symulacyjnego tworz nastpujce instrukcje wspbiene:
51

1. Wczytywanie obrazu z dysku (list. 4.3),


2. Zapisywanie obrazu na dysk (list. 4.4),
3. Symulacja odbiornika HDMI wraz sygnaami sterujcymi (list. 4.5),
4. Symulacja nadajnika HDMI (list. 4.6),
5. Proces zegara systemowego (list. 4.7),
6. Instancja komponentu projektu MX2dMedian (list. 4.1).
Instrukcje (1) oraz (2) uruchamiane s jednorazowo. Instrukcja (1) na pocztku
symulacji, natomiast (2) na kocu. W (3) zamieszczono gwny proces symulacji
odbiornika HDMI oraz sygnay ni sterujce. Jego dziaanie mona przedstawi w
kilku krokach:
1. Inicjalizacja tablic w pamici RAM dla obrazu wejciowego i obrazu
wyjciowego.
2. Wczytanie obrazu z dysku komputera do tablicy (1).
3. Globalny reset FPGA.
4. Symulacja nadajnika HDMI - przesanie obrazu.
5. Zapisanie tablicy z obrazem wyjciowym - wynikiem symulacji (2) - na dysk
komputera.
Wspbienie do powyej przedstawionego algorytmu dziaa proces symulacji
odbiornika (4), ktry przechwytuje dane wyjciowe projektu MX2dMedian i zapisuje
je w tablicy przeznaczonej dla obrazu wynikowego.
4.1.2. Wczytywanie i zapis obrazu
Odczyt obrazu z pliku i jego zapis zrealizowano bazujc na bibliotece std.TextIO.
Przygotowano obraz testowy w formacie PPM. W formacie tym warto kanaw
RGB kadego piksela zapisana jest w postaci znakw ASCII, dziki czemu moliwy
jest odczyt za pomoc funkcji readline oraz read i zapis za pomoc funkcji writeline
oraz write, dostpnych w bibliotece std.TextIO. Na listingu 4.2 przedstawiono
inicjalizacj tablicy, do ktrej po uruchomieniu symulacji zostanie wczytany obraz
wejciowy input_img_mem (linia 8) oraz tablicy do przechowywania wynikw
filtracji output_img_mem (linia 9). Tablice posiadaj rozmiar, ktry obliczany jest
52

na podstawie zadeklarowanych staych WIDTH i HEIGHT - szerokoci i wysokoci


obrazu testowego w pikselach.
Listing 4.2. Sygnay i zmienne wykorzystane do obsugi odczytu i zapisu obrazu.
1 S i m u l a t i o n s i g n a l s and c o n s t a n t s

constant WIDTH : i n t e g e r := 1 2 8 0 ; 1280

constant HEIGHT : i n t e g e r := 1 0 0 ; 1024

constant IMG_RES : i n t e g e r := WIDTHHEIGHT;

5
6 S i m u l a t i o n Image memory

type RAM i s array ( 0 to IMG_RES31) of i n t e g e r range 0 to 2 5 5 ;

s i g n a l input_img_mem : RAM;

s i g n a l output_img_mem : RAM;

10

FILE input_img : TEXT open read_mode IS " images /img . ppm" ;

11

FILE output_img : TEXT open write_mode IS " images /img_out . ppm" ;

Listing 4.3 przedstawia proces wczytania obrazu testowego do uprzednio


zadeklarowanej tablicy. Jest on uruchamiany tylko raz, na pocztku symulacji. Plik
PPM rozpoczyna si nagwkiem, ktrego odczyt i analiza jest zbdna dla potrzeb
symulacji. W liniach 13-18 nagwek jest zczytywany i ignorowany. Nastpnie,
w liniach 20-28 umieszczono ptl odczytujc po kolei kad lini obrazu, ktra
dziaa a do znaku koca pliku.
Zapis wynikowego pliku symulacji na dysk (list.4.4) przebiega analogicznie
i wykonywany jest jako ostatni proces symulacji. Zachowany zostaje plik wynikowy
w formacie PPM.
Listing 4.3. Proces inicjalizacji pamici rodowiska symulacyjnego przez wczytanie do niej
obrazu do filtracji.
1

This p r o c e s s can be run o n l y once .

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

Load t e s t image i n t o memory

13

for i in 1 to 4 loop

14

r e a d l i n e ( input_img , row ) ;

15

while ( row LENGTH /= 0 ) loop


r e a d ( row , blank ) ;

16

end loop ;

17
18

end loop ;

19

i := 0 ;

20

while ( not (ENDFILE( input_img ) ) ) loop

21

r e a d l i n e ( input_img , row ) ;

22

while ( row LENGTH /= 0 ) loop

23

r e a d ( row , data ) ;

24

r e a d ( row , blank ) ;

25

input_img_mem ( i ) <= data ;

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 ;

Listing 4.4. Proces zapisu obrazu na dysk z pamici rodowiska symulacyjnego.


1

This p r o c e s s can be run o n l y once .

I t s a v e s t o t h e f i l e image data , t h a t were r e c i e v e d and s t o r e d i n


memory

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

while i < (IMG_RES81)3 loop

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 ;

4.1.3. Procesy symulacji nadajnika i odbiornika HDMI


W procesie symulacji odbiornika HDMI (list.4.5) zawarto sygnay sterujce
symulacj. Algorytm ten wykonywany jest sekwencyjnie. Na pocztku wystpuje
globalny reset (linia 4, 12). W trakcie jego trwania wymuszany jest proces zapisu
obrazu testowego do zadeklarowanej tablicy (linie 7-9). Nastpnie rozpoczyna
si symulacja dziaania odbiornika HDMI. W podwjnie zagniedonej ptli
for odczytywane s bajt po bajcie wartoci kanaw RGB i przekazywane na
odpowiednie porty. Po zakoczeniu dziaania pli for zostaje wymuszony zapis
danych tablicy wyjciowej (linie 42-44). Sygnay na portach generowane przez
proces odbiornika HDMI s wczytywane przez wspbienie dziaajcy proces
filtracji w projekcie MX2dMedian. Dane wyjciowe (obraz po filtracji) s na bieco
odbierane przez proces symulacji nadajnika HDMI (list.4.6) i zapisywane do tablicy
wyjciowej.
Listing 4.5. Proces symulacji odbiornika HDMI wraz z instrukcjami sterujcymi

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

Load t e s t image i n t o memory

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

Transmit image t o FPGA

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

R_RED <= c o n v _ s t d _ l o g i c _ v e c t o r ( input_img_mem ( i ) , 8 ) ;

31

R_GREEN <= c o n v _ s t d _ l o g i c _ v e c t o r ( input_img_mem ( i +1) , 8 ) ;

32

R_BLUE <= c o n v _ s t d _ l o g i c _ v e c t o r ( input_img_mem ( i +2) , 8 ) ;

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

wait f or 4586 ps ; r e c i e v e r works on 80MHz

39

end loop ;

A l l b y t e s o f t h e image from memory t r a n s m i t t e r d

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 ;

Listing 4.6. Proces symulacji nadajnika HDMI


1
2

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

r_img : process (T_CLK) t _ c l k

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 hs ync _de te ct e d = 1 then

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

output_img_mem ( i +1) <= c o n v _ i n t e g e r (T_D( 1 5 downto 8 ) ) ;

11

output_img_mem ( i +2) <= c o n v _ i n t e g e r (T_D( 7 downto 0 ) ) ;

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 ;

4.1.4. Proces zegara systemowego


Ukad FPGA na pycie MMXS3DSP-AV taktowany jest z generatora kwarcowego,
dostarczajcego prostoktny sygna zegarowy o czstotliwoci 100MHz. Na listingu
4.7 przedstawiono przeniesienie tych wasnoci uadu taktujcego do rodowiska
symulacyjnego. Stworzono proces, ktry generuje sygna zegarowy, system clock,
taktujcy struktur FPGA.
Listing 4.7. Proces generujcy sygna zegarowy
1

CLK_100MHz_process : process

begin

CLK_100MHz <= 0 ;

57

wait f or 5 ns ;

CLK_100MHz <= 1 ;

wait f or 5 ns ;

end process ;

4.2. Weryfikacja poprawnoci dziaania moduu FIFO


Przetestowano dziaanie algorytmu z trzema rnymi czstotliwociami sygnau pixel
clock (20, 60 oraz 80MHz) przy jednej czstotliwoci system clock rwnej 100MHz.
Operacja ta miaa na celu weryfikacj poprawnoci przejcia strumienia danych
z domeny czasowej odbiornika HDMI do domeny system clock. Na rysunku 4.2 i 4.3
przedstawiono okno rodowiska symulacyjnego ModelSim podczas testw FIFO w
warunkach:
pixel clock = 80MHz,
system clock = 100MHz.

Rysunek 4.2. Okno programu ModelSim podczas testw FIFO. Widoczna rnica
w czstotliwoci sygnaw zegarowych oraz moment wstrzymania odczytu kolejki.

R_DATACK (rys.4.2) jest sygnaem pixel clock o czstotliwoci 80MHz, ktrym


jest taktowany strumie danych wejciowych R_RED, R_BLUE, R_GREEN.
Zegar systemowy system clock, ktrym jest CLK_100MHz taktuje dane wyjciowe
kolejki FIFO, czyli RED_FOUT, GREEN_FOUT, BLUE_FOUT. Kiedy kolejka
FIFO ulegnie zapenieniu, wstrzymywany jest odczyt danych wyjciowych oraz
sygna FILTER_EN przyjmuje stan zera logicznego. Wymusza to wstrzymanie
pracy rdzenia filtru. Na rysunku 4.3 przedstawiono wikszy obszar czasowy
symulacji, na ktrym jest widoczne s trzy cykle wstrzymywania odczytu FIFO
i rdzenia filtru w celu uzupenienia kolejki.
58

Rysunek 4.3. Okno programu ModelSim podczas testw FIFO. Widoczne trzy cykle
zapeniania i odczytu kolejki zaznaczono numerami 1-3.

4.3. Weryfikacja poprawnoci dziaania rdzenia filtru


Do weryfikacji poprawnoci dziaania algorytmu filtracji MX2dMedian posuy
obraz testowy, wczytywany do rodowiska symulacyjnego ModelSim. Zgodnie
z zaoeniem projektowym, maksymalna rozdzielczo testowanego obrazu wynosi
1280 x 1024. Wczytanie tak obszernego pliku do rodowiska symulacyjnego okazao
si niemoliwe, dlatego testy przeprowadzono na wycinku obrazu. Poniewa podczas
filtracji okno filtru jest przesuwane horyzontalnie po testowanym obrazie (rozdz.
2.3, rys.2.11) do poprawnego przetestowania algorytmu niezbdne musiao by
zachowanie szerokoci obrazu rwnej wartoci maksymalnej (1280), natomiast
rozmiar obrazu mona byo zmniejszy, zmiejszajc wysoko obrazu. W zwizku
z tym, jako obraz testowy posuy wycinek o rozdzielczoci 1280 x 100 (rys. 4.4).
Na obraz testowy zosta sztucznie naniesiony szum typu salt and pepper.
Przeprowadzono symulacj dla 3 rnych rozmiarw okien:
3 x 3, rys.4.5,
5 x 5, rys.4.6,
7 x 7, rys.4.7.
Brak szumu na obrazach wyjciowych (rys.4.8) potwierdza poprawno
implementacji filtru w projekcie MX2dMedian. Na rysunku 4.8 przedstawiono
zblienie czci obrazw. Po filtracji oknem 3 x 3 (rys.4.8-B) znika wikszo szumu
typu salt and pepper z obrazu testowego, co jest zachowaniem poprawnym, poniewa
naniesiony szum by szumem jednopikselowym. Filtracja oknem 5 x 5 (rys.4.8-C)
jeszcze dokadniej usuwa niedokadnoci obrazu, co wida w miejscach przy granicy
kolorw biaego i zielonego, w ktrych poprzedni filtr zostawi ciemne punkty.
59

Rysunek 4.4. Obraz testowy z szumem typu salt and pepper.

Rysunek 4.5. Obraz testowy poddany filtracji z oknem 3 x 3.

Rysunek 4.6. Obraz testowy poddany filtracji z oknem 5 x 5.

Rysunek 4.7. Obraz testowy poddany filtracji z oknem 7 x 7.

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

4.4. Implementacja i weryfikacja sprztowa


Poczenia sygnaw wejcia/wyjcia z portami FPGA oraz podanie informacji do
narzdzia implementujcego odnonie wymogw czasowych sygnaw umieszczane
s w pliku UCF. Na listingu C.1 w dodatku C przedstawiono plik UCF stworzony
na potrzeby projektu MX2dMedian. W liniach 2, 8 i 69 zapisano specyfikacj
czstotliwoci sygnaw zegarowych za pomoc sowa kluczowego PERIOD. Podanie
czstotliwoci zegarowych jest konieczne do wykonania analiz czasowych przez
narzdzie PAR (Place and Route). Wyprowadzenia odbiornika HDMI zdefiniowano
w liniach 9-38 natomiast nadajnika w liniach 43-72 za pomoc sowa LOC.
Na rysunku 4.9, ktry jest fragmentem raportu narzdzia PAR, przedstawiono
analiz czasow sygnaw zegarowych wystpujcych w projekcie dla rdzenia filtru
z oknem 5 x 5. Maksymalny okres zegara systemowego, ktry mona zastosowa,
wynis 9.777ns. Oznacza to, e praca z czstotliwoci 100MHz (okres 10ns) jest
osigalna. Dla implementacji z oknem 3 x 3 uzyskano lepsze warunki czasowe.
Maksymalna wartoci okresu zegara systemowego zostaa jednak przekroczona dla
implementacji z oknem 7 x 7. Narzdzie PAR obliczyo, e opnienie generowane
przez logik i cieki wewntrz struktury FPGA wynosi 11.7ns. Wynika to z duo
bardziej rozbudowanej struktury filtru w porwnaniu do poprzednich implementacji
i oznacza, e zastosowanie zegara systemowego o czstotliwoci 100MHz jest
niemoliwe. Zmodyfikowano wic plik UCF, poprzez zmniejszenie czstotliwoci
zegara systemowego do 85MHz, dla ktrego implementacja wykonaa si poprawnie.

Rysunek 4.9. Fragment analizy czasowej wykonanej przez narzdzie PAR dla filtracji z oknem
5 x 5.

4.5. Ilo wykorzystanych zasobw FPGA


Tabela 4.1 przedstawia wykorzystanie zasobw ukadu XC3SD1800A, FPGA firmy
Xilinx rodziny Spartan-3A DSP po przeprowadzeniu implementacji. W zalenoci
od rozmiaru okna filtru, otrzymano rny stopie zajtoci zasobw ukadu.
61

Nazwa

Zasoby

zasobu

dostpne

Okno 3x3

Okno 5x5

Okno 7x7

Slice Flip Flop

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

Zasoby wykorzystane [%]

Tabela 4.1. Wykaz zajtoci ukadu FPGA dla 3 rozmiarw okien.

Podejrzenie, ktre jednostki architektury projektu MX2dMedian wygenetoway


najwicej zasobw, jest poliwe dziki programowi Floorplanner w rodowisku
projektowym ISE. Rysunek 4.11 przedstawia zajto zasobw FPGA dla
najbardziej ekstremalnej implementacji filtru z oknem 7 x 7. Poszczeglne jednostki
zostay zaznaczone kolorami wg. rys.4.10.

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

Rysunek 4.11. Okno programu Floorplanner, rozmieszczenie wykorzystanych zasobw


wewntrz FPGA dla implementacji projektu MX2dMedian z oknem 7 x 7.

63

Podsumowanie

W ramach niniejszej pracy powsta projekt MX2dMedian, system filtracji


medianowej sygnau wizyjnego w czasie rzeczywistym dla moduu MMXS3DSPAV (dodatek A), oparty na ukadzie FPGA firmy Xilinx, rodziny Startan3A-DSP
oraz ukadach firmy Analog Devices, penicych rol nadajnika i odbiornika sygnau
wizyjnego wysokiej rozdzielczoci HDMI/DVI.
Projekt speni zaoone we wstpie cele. Udao si zrealizowa filtracj
medianow dla obrazw o maksymalnej rozdzielczoci 1280 x 1024 i czstotliwoci
60Hz. Filtr posiada moliwo wyboru trzech okien filtracji. Weryfikacja algorytmu
nastrczaa pewnych problemw wynikajcych z duych rozmiarw obrazu
wejciowego i wyjciowego, w wyniku czego skoncentrowano si na poziomych
wycinkach obrazw. Podejcie to skutecznie zmniejszyo czas symulacji przy
zachowaniu tej samej wiarygodnoci algorytmu weryfikujcego.
Przed przystpieniem do implementacji algorytmu konieczne byo zapoznanie
si z wystpujcymi obecnie standardami akwizycji i przesyu cyfrowych sygnaw
wideo i poznanie wicych si z nimi problemw. Pozyskan wiedz na ten temat
umieszczeono w rozdz.2. Postanowiono skoncentrowa si w pracy nad obsug
interfejsw dostpnych na rynku ukadw HDMI/DVI. Za wzr ich poczenia z
FPGA posuya pyta MMXS3DSP-AV. Projekt algorytmu filtracji przystosowano
do implementacji w FPGA rodziny Spartan-3A DSP umieszczonym na tej pycie
w otoczeniu nadajnika i odbiornika HDMI. Zapoznano si rwnie ze sposobami
implementacji filtrw medianowych w ukadach programowalnych.
Projekt MX2dMedian stworzono jako gotowy komponent, ktry w przyszoci
moe zosta wykorzystany do implementacji w FPGA na pycie MMXS3DSPAV. Architektur opisano w jzyku VHDL kadc nacisk na kodowanie w stylu
RTL z dodatkiem komponentw wygenerowanych za pomc generatora rdzeni
IP, dostpnego w rodowisku projektowym. Powstay projekt opisano w rozdz.3.
Filtr generuje jeden piksel (zoony z trzech skadowych RGB lub YCbCr)
obrazu wynikowego w jednym cyklu zegara systemowego. Pierwszym z powodw
uzyskania tak zadowalajcych wynikw byo zastosowanie macierzy procesorw
pikseli, w ktrych byy obliczane rwnolegle indeksy punktw okna danego obrazu.
Drugim powodem byo zastosowanie przetwarzania potokowego w procesorach
pikseli. Mimo faktu, i czas potrzebny od wczytania nowych pikseli okna do
obliczenia punktu wynikowego wynis 4 cykle zegara systemowego, podzielenie
64

oblicze na kroki oraz umieszczenie ich w kolejce przetwarzania potokowego


pozwolio na jednoczesn prac kadego z komponentw procesora pikseli i generacj
jednego punktu wynikowego w kadym cylku zegarowym. W celu zapewnienia
rdzeniowi filtru dostpu do odpowiednich pikseli obrazu w danym czasie konieczne
byo zapamitywanie kilku linii przetwarzanego obrazu w pamici. Do tego celu
posuono si pamici BlockRam dostpn wewntrz struktury FPGA, ktr
skonfigurowano jako pami dwuportow, poniewa konieczny okaza si odczyt
i zapis do pamici w jednym cyklu zegarowym.
Podczas projektowania napotkano na problem krzyowania si rnych domen
zegarowych. Czstotliwo piksel clock, z jak pracoway nadajnik i odbiornik
HDMI bya mniejsza od czstotliwoci zegara systemowego system clock, w
dodatku czstotliwo pixel clock moga si zmienia w zalenoci od rozdzielczoci
przesyanego obrazu. Do taktowania rdzenia filtru zastosowano niezaleny sygna
zegarowy o czstotliwoci 100MHz, natomiast przejcie strumienia danych midzy
domenami o innych czstotliwociach zrealizowano poprzez wykorzystania moduw
FIFO.
Przeprowadzono weryfikacj projektu MX2dMedian zarwno pod wzgldem
poprawnoci dziaania algorytmu (rozdz.4.1), jak i poprawnoci implementacji w
wybranym FPGA (rozdz.4.4). Dla implementacji z oknami 3 x 3 i 5 x 5 potwierdzono
moliwo taktowania struktury FPGA za pomoc sygnau systemowego (system
clock) o czstotliwoci 100MHz. Okazao si jednak, e dla filtracji z oknem
7 x 7 wystpuje tak due opnienie sygnau systemowego, e niemoliwe byoby
taktowanie FPGA sygnaem o tak wysokiej czstotliwoci. Zewntrzne ukady
HDMI pracuj z czstotliwoci pixel clock nie wiksz od 80MHz. Wymaganiem
naoonym przez zastosowane wejciowe i wyjciowe koleki FIFO jest, by system
clock by zawsze wikszy od pixel clock. Zmniejszono wic czstotliwo zegara
systemowego do 85MHz. Modyfikacja ta, nie spowodowaa wymuszenia zmian w
architekturze projektu.
Drog rozwoju projektu jest praca nad modyfikacj algorytmu kadc
nacisk na zmniejszenie zajtoci zasobw FPGA, udoskonalenia architektury
poszczeglnych komponentw filtru tak, by uyta logika generowaa mniejsze
opnienia wewntrzych sygnaw. Moliwe jest rwnie wykorzystanie manualnego
rozmieszczania poszczeglnych elementw w strukturze FPGA w celu polepszenia
parametrw czasowych projektu.
Projekt wsppracuje z sygnaami wizyjnymi RGB i 4:4:4 YCbCr przesyanymi
interfejsem rwnolegym o maksymalnej czstotliwoci taktowania 80MHz. By
65

algorytm sta si badrziej elastyczny, naleaoby rozpatrzy obsug pozostaych


formatw przesyu sygnau dostpnych przez ukady nadajnika i odbiornika HDMI,
takich jak 4:2:2 YCbCr lub transmisja DDR. W projekcie zastosowano kolejk
FIFO w celu poradzenia sobie z problemem skrzyowania domen zegarowych.
Zaproponowano bardzo proste rozwizanie sterowania kolejk. Jest to te punktem
wyjciowym do ulepszenia i rozbudowy algorytmu sterowania FIFO, np. poprzez
wykorzystanie procesora monitorujcego zajto kolejki i bardziej efektywne jej
sterowanie.

66

DODATEK A

Modu MMXS3DSP-AV

Modu MMXS3DSP-AV zosta opracowany w firmie Microtech International S.A..


Jednostk obliczeniow jest FPGA Spartan-3A DSP XC3SD1800A-4CS484LI. Na
pycie umieszczono midzy innymi odbiornik HDMI AD9398KSTZ-100 i nadajnik
HDMI AD9889BBBSTZ-80.

Rysunek A.1. Pyta MXS3DSP-AV opracowana w firmie Microtech International S.A.

67

DODATEK B

Lista sygnaw interfejsu DVI

rdo: [16].

68

DODATEK C

Plik UCF stworzony na potrzeby projektu


MX2dMedian

Listing C.1. Plik UCF definiujcy poczenia sygnaw z wyprowadzeniami FPGA.


1

NET "CLK_100MHz" LOC = " F10 " | IOSTANDARD = LVTTL;

NET "CLK_100MHz" PERIOD = 1 0 . 0 ns HIGH 50%;

3
4

NET "RESET_N" LOC = " C1 " | IOSTANDARD = LVTTL | PULLUP;

5
6 #######################################################
7 ##

HDMI R e c i e v e r

8 #######################################################
9

NET "R_RED[ 0 ] " LOC = " AB19 " | IOSTANDARD = LVTTL;

10

NET "R_RED[ 1 ] " LOC = " AB18 " | IOSTANDARD = LVTTL;

11

NET "R_RED[ 2 ] " LOC = " AB17 " | IOSTANDARD = LVTTL;

12

NET "R_RED[ 3 ] " LOC = "AA19" | IOSTANDARD = LVTTL;

13

NET "R_RED[ 4 ] " LOC = " Y18 " | IOSTANDARD = LVTTL;

14

NET "R_RED[ 5 ] " LOC = "AA15" | IOSTANDARD = LVTTL;

15

NET "R_RED[ 6 ] " LOC = " Y15 " | IOSTANDARD = LVTTL;

16

NET "R_RED[ 7 ] " LOC = " V16 " | IOSTANDARD = LVTTL;

17

NET "R_GREEN[ 0 ] " LOC = "AA10" | IOSTANDARD = LVTTL;

18

NET "R_GREEN[ 1 ] " LOC = " AB10 " | IOSTANDARD = LVTTL;

19

NET "R_GREEN[ 2 ] " LOC = " AB14 " | IOSTANDARD = LVTTL;

20

NET "R_GREEN[ 3 ] " LOC = " Y13 " | IOSTANDARD = LVTTL;

21

NET "R_GREEN[ 4 ] " LOC = " Y16 " | IOSTANDARD = LVTTL;

22

NET "R_GREEN[ 5 ] " LOC = " U15 " | IOSTANDARD = LVTTL;

23

NET "R_GREEN[ 6 ] " LOC = " Y17 " | IOSTANDARD = LVTTL;

24

NET "R_GREEN[ 7 ] " LOC = " U16 " | IOSTANDARD = LVTTL;

25

NET "R_BLUE[ 0 ] " LOC = "AB5" | IOSTANDARD = LVTTL;

26

NET "R_BLUE[ 1 ] " LOC = "AB6" | IOSTANDARD = LVTTL;

27

NET "R_BLUE[ 2 ] " LOC = "V8" | IOSTANDARD = LVTTL;

28

NET "R_BLUE[ 3 ] " LOC = "U8" | IOSTANDARD = LVTTL;

29

NET "R_BLUE[ 4 ] " LOC = "W8" | IOSTANDARD = LVTTL;

30

NET "R_BLUE[ 5 ] " LOC = "Y8" | IOSTANDARD = LVTTL;

31

NET "R_BLUE[ 6 ] " LOC = "V7" | IOSTANDARD = LVTTL;

69

32

NET "R_BLUE[ 7 ] " LOC = "AA8" | IOSTANDARD = LVTTL;

33
34

NET "R_HSOUT" LOC = "AA14" | IOSTANDARD = LVTTL;

35

NET "R_FIELD" LOC = " Y19 " | IOSTANDARD = LVTTL;

36
37

NET "R_DATACK" LOC = " AB12 " | IOSTANDARD = LVTTL;

38

NET "R_DATACK" PERIOD = 1 2 . 5 ns HIGH 50%;

39
40 #######################################################
41 ##

HDMI T r a n s m i t t e r

42 #######################################################
43

NET "T_D[ 0 ] " LOC = " R19 " | IOSTANDARD = LVTTL;

44

NET "T_D[ 1 ] " LOC = " N21 " | IOSTANDARD = LVTTL;

45

NET "T_D[ 2 ] " LOC = " P16 " | IOSTANDARD = LVTTL;

46

NET "T_D[ 3 ] " LOC = " N17 " | IOSTANDARD = LVTTL;

47

NET "T_D[ 4 ] " LOC = " N22 " | IOSTANDARD = LVTTL;

48

NET "T_D[ 5 ] " LOC = "M17" | IOSTANDARD = LVTTL;

49

NET "T_D[ 6 ] " LOC = "M22" | IOSTANDARD = LVTTL;

50

NET "T_D[ 7 ] " LOC = " R22 " | IOSTANDARD = LVTTL;

51

NET "T_D[ 8 ] " LOC = "M20" | IOSTANDARD = LVTTL;

52

NET "T_D[ 9 ] " LOC = " U18 " | IOSTANDARD = LVTTL;

53

NET "T_D[ 1 0 ] " LOC = " N18 " | IOSTANDARD = LVTTL;

54

NET "T_D[ 1 1 ] " LOC = " T18 " | IOSTANDARD = LVTTL;

55

NET "T_D[ 1 2 ] " LOC = " T22 " | IOSTANDARD = LVTTL;

56

NET "T_D[ 1 3 ] " LOC = " R20 " | IOSTANDARD = LVTTL;

57

NET "T_D[ 1 4 ] " LOC = " P22 " | IOSTANDARD = LVTTL;

58

NET "T_D[ 1 5 ] " LOC = " N20 " | IOSTANDARD = LVTTL;

59

NET "T_D[ 1 6 ] " LOC = " P19 " | IOSTANDARD = LVTTL;

60

NET "T_D[ 1 7 ] " LOC = " T20 " | IOSTANDARD = LVTTL;

61

NET "T_D[ 1 8 ] " LOC = " V20 " | IOSTANDARD = LVTTL;

62

NET "T_D[ 1 9 ] " LOC = " U20 " | IOSTANDARD = LVTTL;

63

NET "T_D[ 2 0 ] " LOC = "W22" | IOSTANDARD = LVTTL;

64

NET "T_D[ 2 1 ] " LOC = " Y21 " | IOSTANDARD = LVTTL;

65

NET "T_D[ 2 2 ] " LOC = " U19 " | IOSTANDARD = LVTTL;

66

NET "T_D[ 2 3 ] " LOC = " T17 " | IOSTANDARD = LVTTL;

67
68

NET "T_CLK" LOC = " AB13 " | IOSTANDARD = LVTTL;

69

NET "T_CLK" PERIOD = 1 2 . 5 ns HIGH 50%;

70
71

NET "T_HSYNC" LOC = "AA20" | IOSTANDARD = LVTTL;

72

NET "T_VSYNC" LOC = " AB20 " | IOSTANDARD = LVTTL;

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

[17] http://groups.google.com/group/comp.lang.vhdl, Frequently Asked Questions


And Answers (Part 1) General, 2009.03.07
[18] http://www.doulos.com/knowhow/vhdl_designers_guide/,
Engineers Guide to VHDL, 2006.11.11
[19] http://hdmi.pl/, 2009.07.06
[20] http://sklep.rms.pl, 2009.08.10
[21] http://pl.wikipedia.org/wiki/Portable_anymap, 2009.09.10
[22] http://www.zsk.ict.pwr.wroc.pl/zsk_ftp/fpga/, 2009.08.28

72

Hardware

Spis tabel

2.1. Standardy przesyu sygnau wizyjnego [16]. . . . . . . . . . . . . . . . 10


2.2. Wartoci kanaw R, G i B dla okna z rys.2.9 . . . . . . . . . . . . . 15
2.3. Wartoci kanaw R, G i B dla okna z rys.2.9 po filtracji medianowej. 16
2.4. Waciwoci filtru w zalenoci od parametru RANK (TAP - liczba
elementw okna). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.1. Wybrane parametry FIFO . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2. Wyprowadzenia instancji przetwarzania strumienia danych obrazu
Dataflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3. Rozmieszczenie kanaw na porcie wyjciowym D_OUT. . . . . . . . 27
3.4. Wyprowadzenia instancji rdzenia filtru. . . . . . . . . . . . . . . . . . 29
3.5. Dozwolone wartoci parametru generycznego WINDOW_WIDTH. . . 31
3.6. Wartoci parametru rank dla filtracji medianowej. . . . . . . . . . . . 31
3.7. Ilo generowanej pamici obrazu dla rnych rozmiarw okna (dla
jednego kanau: R, G, B lub Y). . . . . . . . . . . . . . . . . . . . . . 34
3.8. Wyprowadzenia instancji Circle_Control . . . . . . . . . . . . . . . . 35
3.9. Wyprowadzenia instancji pamici Line RAM . . . . . . . . . . . . . . 37
3.10. Liczba elementw strukturalnych rdzenia filtru w zalenoci
rozmiarw okna. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.11. Liczba elementw strukturalnych pojedynczego procesora pikseli w
zalenoci od rozmiarw okna. . . . . . . . . . . . . . . . . . . . . . . 41
3.12. Wyprowadzenia instancji jednostki wyjciowej Output_Unit. . . . . . 44
3.13. Wyprowadzenia instancji Data_Register. . . . . . . . . . . . . . . . . 46
3.14. Wyprowadzenia jednostki Comparator. . . . . . . . . . . . . . . . . . 47
3.15. Wyprowadzenia instancji Bit Sum All. . . . . . . . . . . . . . . . . . 48
4.1. Wykaz zajtoci ukadu FPGA dla 3 rozmiarw okien. . . . . . . . . 62

73

Spis rysunkw

2.1. Siatka typowego obrazu cyfrowego. [3] . . . . . . . . . . . . . . . . .

2.2. Poczenie T.M.D.S. . . . . . . . . . . . . . . . . . . . . . . . . . . . 10


2.3. Konwerter sygnau HDMI/DVI, DVI/HDMI [20] . . . . . . . . . . . . 11
2.4. Schemat blokowy odbiornika HDMI AD9398 [14]. . . . . . . . . . . . 12
2.5. Kanay RGB oraz YCbCr, wystpujce w interfejsie rwnolegym
ukadu AD9398 [14]. . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6. Schemat blokowy nadajnika HDMI AD9889B [15]. . . . . . . . . . . . 13
2.7. Usuwanie zakce filtrem medianowym [3]. . . . . . . . . . . . . . . 14
2.8. Wpyw filtru medianowego na krawdzie obiektu [3]. . . . . . . . . . . 14
2.9. Przykadowe okno 3 x 3. . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.10. Wynik filtracji medianowej. . . . . . . . . . . . . . . . . . . . . . . . 16
2.11. Okno o rozmiarach 3 x 3 podczas filtracji. . . . . . . . . . . . . . . . 17
2.12. Sprztowa realizacja filtracji medianowej zaprezentowana w [3]. . . . . 18
2.13. Architektura rdzenia filtru medianowego wedug [5]. . . . . . . . . . . 20
2.14. Przykad operacji filtru medianowego [5]. . . . . . . . . . . . . . . . . 21
3.1. Ukad FPGA w otoczeniu ukadw nadajnika i odbiornika HDMI. . . 23
3.2. Skrzyowanie rnych domen czasowych w FPGA. . . . . . . . . . . . 24
3.3. Rdze IP moduu FIFO (wejcia, wyjcia zaznaczone kolorem szarym
nie zostay wykorzystane w projekcie). . . . . . . . . . . . . . . . . . 25
3.4. Instancja bloku kontroli kolejk FIFO, Control_Logic. . . . . . . . . 25
3.5. Automat stanu sterujcy prac kolejki FIFO. . . . . . . . . . . . . . . 26
3.6. Instancja bloku przetwarzania strumienia danych obrazu Dataflow. . . 28
3.7. Przetwarzanie strumienia danych obrazu RGB. . . . . . . . . . . . . . 29
3.8. Instancja rdzenia filtru medianowego . . . . . . . . . . . . . . . . . . 30
3.9. Struktura rdzenia filtru dla okna 3 x 3. . . . . . . . . . . . . . . . . . 32
3.10. Blok pamici linii obrazw. . . . . . . . . . . . . . . . . . . . . . . . . 33
3.11. Instancja kontrolera zapisu i odczytu pamici Circle_Conrtol. . . . . 34
3.12. Zapis kolejnych linii obrazu. . . . . . . . . . . . . . . . . . . . . . . . 35
3.13. Rdze IP pamici pojedynczej linii obrazu Line RAM (wejcia,
wyjcia zaznaczone kolorem szarym nie zostay wykorzystane w
projekcie) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.14. Pojedyncza komrka procesora pikseli dla okna 3 x 3. . . . . . . . . . 38
74

3.15. Przetwarzanie potokowe zastosowane w rdzeniu filtru medianowego. . 40


3.16. Instancja jednostki wyjciowej filtru Output_Unit. . . . . . . . . . . 43
3.17. Instancja jednostki Data Register penicej rol DR i CR. . . . . . . 45
3.18. Instancja jednostki Comparator LC.

. . . . . . . . . . . . . . . . . . 46

3.19. Instancja Bit Sum All - BS. . . . . . . . . . . . . . . . . . . . . . . . 48


4.1. Schematyczne przedstawienie poczenia projektu MX2dMedian
z aplikacj symulacyjn. . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2. Okno programu ModelSim podczas testw FIFO. Widoczna rnica
w czstotliwoci sygnaw zegarowych oraz moment wstrzymania
odczytu kolejki. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.3. Okno programu ModelSim podczas testw FIFO. Widoczne trzy cykle
zapeniania i odczytu kolejki zaznaczono numerami 1-3. . . . . . . . . 59
4.4. Obraz testowy z szumem typu salt and pepper. . . . . . . . . . . . . 60
4.5. Obraz testowy poddany filtracji z oknem 3 x 3. . . . . . . . . . . . . 60
4.6. Obraz testowy poddany filtracji z oknem 5 x 5. . . . . . . . . . . . . 60
4.7. Obraz testowy poddany filtracji z oknem 7 x 7. . . . . . . . . . . . . 60
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

4.9. Fragment analizy czasowej wykonanej przez narzdzie PAR dla


filtracji z oknem 5 x 5. . . . . . . . . . . . . . . . . . . . . . . . . . . 61
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
4.11. Okno

programu

Floorplanner,

rozmieszczenie

wykorzystanych

zasobw wewntrz FPGA dla implementacji projektu MX2dMedian


z oknem 7 x 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
A.1. Pyta MXS3DSP-AV opracowana w firmie Microtech International S.A. 67

75

You might also like