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.