Układy cyfrowe (UCYF) – projekt

Transkrypt

Układy cyfrowe (UCYF) – projekt
autorzy:
Lachowski Damian 4T1
Lachowski Łukasz 4T1
prowadzący:
dr inż. Paweł Tomaszewicz
27 styczeo 2010
Układy cyfrowe (UCYF) – projekt
Dokumentacja końcowa projektu
Temat: Zbiór Mandelbrota.
1. Informacje ogóle.
Fraktal (łac. fractus – złamany, cząstkowy) pojęcie to definiuje się jako zbiór, który:
- ma nietrywialną strukturę w każdej skali,
-struktura ta nie daje się łatwo opisad w języku tradycyjnej geometrii euklidesowej,
-jest samo-podobny, jeśli nie w sensie dokładnym, to przybliżonym lub stochastycznym,
-jego wymiar Hausdorffa jest większy niż jego wymiar topologiczny ,
-ma względnie prostą definicję rekurencyjną,
-ma naturalny ("poszarpany", "kłębiasty" itp.) wygląd.
W znaczeniu potocznym oznacza zwykle obiekt samo-podobny (oznacza to, że dowolnie
mały jego kawałek, odpowiednio powiększony, przypomina do złudzenia cały zbiór lub jego
znaczną częśd.) albo "nieskooczenie subtelny" (ukazujący subtelne detale nawet w
wielokrotnym powiększeniu)
Po raz pierwszy pojęcie fraktala zostało użyte przez Benoit Mandelbrota w latach 70-tych XX
wieku. Brzeg zbioru Mandelbrota ( żuczka Mandelbrota) będącego podzbiorem płaszczyzny
zespolonej jest jednym ze sławniejszych fraktali. Zbiór tworzą te punkty p ϵ C dla których
ciąg opisany równaniem rekurencyjnym :
𝑧0 = 0
𝑧𝑛+1 = 𝑧𝑛2 + p
nie dąży do nieskooczoności:
lim𝑛→∞ 𝑧𝑛 ≠ 0
Obraz przedstawia najsłynniejszy zbiór fraktali. Zbiór Mandelbrota (powyżej) i pokrewne od
niego zbiory Julii (poniżej).
2. Opis algorytmu tworzącego zbiór Mandelbrota
Wyobraźmy sobie, że każdy punkt pewnego obszaru płaszczyzny zespolonej zostaje poddany
iteracji za pomocą przekształcenia 𝑧𝑛+1 = 𝑧𝑛2 + 𝑧0 . Należy oczekiwad zachowania dwojakiego
rodzaju:
- iterowany punkt będzie pozostawał w ograniczonym obszarze; taki punkt nazwiemy
więźniem;
- iterowany punkt będzie oddalał się od punktu zerowego płaszczyzny zespolonej; taki punkt
nazwiemy uciekinierem
Wystarczy więc zakwalifikowad punkt do zbioru więźniów bądź uciekinierów, by otrzymad
odpowiedni wykres. Zgodnie z twierdzeniem Mandelbrota uciekinierem jest taki punkt,
którego odległośd od punktu zerowego płaszczyzny zespolonej przekroczy 2. Trudniej
natomiast oszacowad zbiór więźniów, albowiem nie możemy byd pewni, że punkt poddany n
iteracjom po iteracji o indeksie n+1 nie ucieknie poza zamknięty obszar o promieniu 2.
Dlatego konstruowany przez nas wykres zbioru Mandelbrota będzie przybliżeniem zbioru
rzeczywistego z dokładnością do wykonanej iteracji.
Iterację będziemy kontynuowad do chwili przekroczenia przez punkt odległości 2 od punktu
początkowego płaszczyzny zespolonej. Gdy punkt okaże się więźniem iteracje trwałyby w
nieskooczonośd, dlatego zabezpieczamy się przed taka możliwością i określamy maksymalną
liczbę iteracji do wykonania. Liczba ta określa potrzebną ilośd kolorów do uzyskania
czytelnego zbioru Mandelbrota.
Interesuje nas jedynie fragment płaszczyzny zespolonej dlatego przyjmujemy prostokąt o
rozmiarze 2x1,5. W związku z tym musimy wyskalowad obszar ekranu do zadanego
prostokąta.
Reasumując nasz algorytm będzie przechodził po kolejnych pikselach ekranu( którym
odpowiadają odpowiednio przeskalowane punkty płaszczyzny zespolonej) i poddawał go
iteracji za pomocą przekształcenia 𝑧𝑛+1= 𝑧2𝑛 + 𝑧0 , do momentu aż przestanie byd więźniem.
Numer iteracji w której punkt stał się uciekinierem określa kolor jakim zostaje pomalowany
odpowiadający mu piksel.
3. Cel projektu.
Początkowo zadaniem projektu była implementacja zbioru Mandelbrota w układzie
programowalnym FPGA (płytka Altera UP2). Układ miał byd odpowiedzialny za rysowanie
zbioru Mandelbrota na ekranie podpiętego do płytki UP2 monitora. Dodatkowo układ miał
zapewnid obsługę myszy, której zadaniem było powiększanie lub pomniejszanie, w zależności
od naciśniętego klawisza myszki, zaznaczonego kursorem fragmentu zbioru.
W trakcie pracy nad projektem okazało się że do realizacji tego zadania potrzebne będą
liczby zmiennoprzecinkowe. Niestety układy FPGA nie pozwalają na efektywne
wykorzystanie tego typu liczb, w związku z czym musieliśmy odejśd od początkowych założeo
projektu i obrad nową strategię. Obecnie projekt składa się z dwóch części: części
programowej i części sprzętowej. Częśd programowa jest odpowiedzialna za obliczanie i
rysowanie zbioru Mandelbrota na ekranie komputera, jak również zapisu tego obrazu do
pliku tekstowego i wysłaniu go przez złącze USB do płytki Altera UP2. Częśd sprzętowa zaś
odpowiedzialna jest za odebranie danych ze złącza USB, ich interpretację a następnie
wyświetlenie na ekranie podpiętego do płytki monitora.
4. Problemy z pierwotną realizacją projektu.
Układy typu FPGA są układami dla których operacje zmiennoprzecinkowe są trudne w
realizacji. Język VHDL nie posiada standardowych bibliotek do obsługi operacji na tego typu
liczbach. Jednak udało nam się odszukad bibliotekę napisaną na rzecz języka VHDL, która
obsługuje operacje na liczbach z przecinkiem. Biblioteka ta została niestety napisana przez
środowisko ludzi korzystających z języka VHDL, nie zaś przez ludzi odpowiedzialnych za
rozwój tegoż języka. W związku z czym na licznych forach odradzano korzystanie z tejże
biblioteki, gdyż może ona zachowywad się w sposób nie przewidziany. Ponadto brak
dostępnej dokumentacji sprawił że zrezygnowaliśmy z tego podejścia.
Kolejną próbą rozwiązania tego problemu był koncepcja zamknięcia całości w jednej
architekturze. Jednak po głębszej analizie języka VHDL i ta koncepcja okazała się drogą do
nikąd. Początkowo wydawało nam się że wystarczy napisad proces liczący odpowiednie
iteracje równania 𝑧𝑛+1 = 𝑧𝑛2 + 𝑧0 , i na tej podstawie określeniu numeru i koloru piksela do
odmalowania. Rozwiązanie to jednak w dalszym stopniu sprowadzało się do przesyłania
sygnałów którymi nie mogły byd zwykłe wektory logiczne.
Ostatnim pomysłem na rozwiązanie projektu był pomysł przemnażania liczby
zmiennoprzecinkowej przez odpowiednio dużą wartośd całkowitą, a dokładnie przez
odpowiednią potęgę liczby 2. Sprowadzad miało się to do przesunięcia przecinka liczby o tyle
miejsc alby stracid częśd ułamkową. Zobrazuje to prostym przykładem… z przeprowadzonych
przez nas symulacji komputerowych i zliczeniu wszystkich możliwych wartości liczb
zmiennoprzecinkowych biorących udział w tworzeniu zbioru Mandelbrota okazało się że
liczbą o największej ilości cyfr po przecinku była liczba rzędu 10−7 co daje nam 7 cyfr po
przecinku. Załóżmy że taką liczbą mogła byd liczba 1,3256921. Aby taką liczbę zamienid na
całkowitą należy przemnożyd ją przez liczbę 230 . W początkowej fazie okazało się że
założenie to zdało by egzamin, niestety po wprowadzeniu tego typu poprawki do symulacji
komputerowej okazało się że nic nie powstaje na ekranie. Dopiero przy około kilkudziesiątym
powiększeniu środka malowanego ekranu naszym oczom ukazał się „żuczek” Madelbrota.
Niestety operacja powiększania ekranu była operacją odwrotną do mnożenia liczby
1,3256921 przez 230 . Na tej podstawie wysnuliśmy tezę że zbiór Mandelbrota jest zbiorem
którego fraktalny charakter ukazuje się dla liczb zmiennoprzecinkowych. Po dokładniejszej
analizie samej istoty zbioru Mandelbrota okazało się że maluje się on w zakresie wartości od
-2 do 2 we współrzędnych X-owych i od -1,5 do 1,5 we współrzędnych Y-owych. Aby taki
obraz wyświetlid na ekranie monitora o rozdzielczości 640 na 480 pikseli należy przerzutowad
każdy piksel na odpowiednią wartośd z układu współrzędnych. Po prostych obliczeniach
matematycznych okazało się że jednemu pikselowi na ekranie odpowiada krok 0,00625 na
układzie współrzędnych. Co w ostateczności sprowadziło nas do pierwotnego problemu.
Reasumując projekt wykraczał poza ramy materiału przedmiotu UCYF i nie było możliwości
jego realizacji na dostępnej płytce Altera UP2.
Po przedstawieniu powyższych problemów prowadzącemu została zmieniona koncepcja
realizacji projektu. Obecnie częśd odpowiedzialna za skomplikowane operacje matematyczne
realizowana jest w aplikacji komputerowej.
5. Cześd programowa projektu.
Częśd programowa składa się z aplikacji napisanej w języku C++. Jest to okienkowa aplikacja
która po uruchomieniu rysuje w oknie zbiór Mandelbrota (rys. 1). Po naciśnięciu
odpowiedniego klawisza myszki zbiór jest powiększany albo pomniejszany. Aplikacja
ponadto generuje odpowiedni plik tekstowy, w którym zapisany jest każdy piksel z ekranu w
postaci trójki cyfr. Przykładowy wygląd pliku i zrzut ekranu działającej aplikacji zamieszczony
jest poniżej:
Rys. 1 Zrzut z ekranu przedstawiający uruchomioną aplikację i zbiór Mandelbrota
Rys. 2 Fragment wydruku z pliku „wyjscie.txt”
W pliku zapisane jest ciąg cyfr z czego każda kolejna trójka odpowiada konkretnemu
kolorowi. W związku z faktem że płytka Altera UP2 udostępnia jedynie 8 kolorów, rysowany
na ekranie monitora podpiętego do płytki, zbiór nie będzie wyglądał zupełnie tak jak na rys.
1. Ilośd kolorów została zmniejszona do 4. Pozwoli to na namalowanie same żuczka.
Wektory 3-bitowe oznaczające kolory:
 "110" – kolor żółty
 "100" – kolor czerwony
 "011"– kolor jasnoniebieski
 "001" – kolor niebieski
6. Cześd sprzętowa projektu.
Rys. 3 Sposób podłączenia układu
Rys. 4 Schemat połączeo
a) Moduł USB
Odpowiedzialny jest za odbiór danych przesłanych z komputera. Nasłuchuje czy na wejściu
pojawiły się jakieś dane i pobiera po 1 bajcie danych.
Automat realizujący operacje odbioru danych:
Wydruk z symulacji:
Jak widad na symulacji odbieranie danych uzależnione jest od sygnału „start” – startującego
działanie automatu, oraz od sygnału „rxf”, dla którego w stanie niskim dane sa dostępne w
FIFO i mogą byd odczytane.
b) Moduł pośredniczący między USB a VGA
Pobiera dane przesyłane do kontrolera USB, odpowiednio je interpretując tj. wektory 8bitowe zamienia na pojedyncze bity:
 00110000 – w kodzie ASCII odpowiada cyfrze 0
 00110001 – w kodzie ASCII odpowiada cyfrze 1
Następnie zapisuje je w pamięci i podaje na kontroler VGA.
Wydruk symulacji:
c) Moduł VGA
Odpowiedzialny jest za wyświetlanie danych na ekranie monitora podpiętego do płytki.
Steruje impulsami synchronizacji poziomej i pionowej i ustawia kolory odpowiednich pikseli.
W pierwszej fazie projektowej moduł współpracował z wewnętrzną pamięcią, w której
zapisany był napis „UCYF” i ramka. Po wgraniu projektu na płytkę Altera UP2 na ekranie
monitora faktycznie pokazał się napis łącznie z ramką, a zatem układ działa prawidłowo.
Obecnie zamiast pamięci do modułu VGA podpięty jest moduł pośredniczący między USB a
tymże modułem i sam kontroler wyświetla dane pobrane i odpowiednio przerobione przez
moduł pośredniczący.
7. Podsumowanie
Projekt nie został w pełni zrealizowany. Nie udało się odpowiednio zsynchronizowad
sygnałów tak aby dane pobrane przez moduł USB zostały wyświetlone na ekranie monitora.
Poszczególne elementy projektu jednak działają prawidłowo co potwierdzają zamieszczone
wydruki symulacji.