Studenci: Tomasz Biały, Grzegorz Chmielewski, Michał Stasiuk, Prowadzący: dr inż. Paweł Tomaszewicz Projekt z UCYF Dokumentacja końcowa Temat: Sprzętowa realizacja gry Arkanoid 1. Informacje ogólne: Gra składa się z następujących modułów: 1. Nadrzędny moduł kontrolera VGA. 2. Moduł kontrolera paletki. 3. Moduł kontrolera ruchu piłeczki i wykrywania kolizji z klockami. 4. Pamięć ROM dla paletki. 5. Pamięć ROM dla piłeczki. 6. Pomocniczy moduł dzielnika zegara. 7. Pakiet stałych i komponentów. UWAGA: Na schematach modułów: niebieskie linie- porty typu in, fioletowe porty typu out, ziolone porty typu inout. 2. Moduł kontrolera VGA: v ga clk_f ster[1..0] hsy nc v sy nc rgb[2..0] Wejście: Clk_f zegar systemowy Ster[1..0] - sterowanie Wyjście: Hsync impuls synchronizacji poziomej Vsync impuls synchronizacji pionowej Rgb[2..0] - sygnały kolorów przekazyane do 1/5
VGA Moduł kontrolera VGA wyświetla na ekranie monitora plansze z obramowaniem, licznik 3 żyć w postaci 3 piłeczek, paletkę (czytajac z ROM u paletki), piłeczkę (czytając z ROM u piłeczki). W projekcie wybrano rozdzielczość obrazu 640x480. Częstotliwośc odświerzania: 60 Hz. Jednostka taktowana jest zegarem oscylatora kwarcowego równym 25.175 MHz. Do napisania tego modułu wykorzystaliśmy sterownik VGA opisany w [1] na str. 163 oraz korzystaliśmy ze strony internetowej [6]. Illustration 1: Symulacja sterownika VGA 3. Moduł obsługi paletki modul_paletki nast_plansza koniec_gry clock_pal ster[1..0] restart ster_pom[1..0] rusz ruszaj przesuniecie[31..0] : nast_plansza sygnał flaga informujący o zmianie planszy : ster_pom[1..0] pomocniczy sygnał sterowania 2/5
koniec_gry sygnał flaga informujący o zakończeniu gry Clock_pal zegar paletki (zdzielnikowany zegar systemowy) Ster[1..0] sygnały sterujące Rusz sygnał pozwalający piłce poruszac się leżąc na paletce (sytuacja na początku gry lub po restarcie) Ruszaj sygnał zwalniający piłkę z paletki Przesuniecie współrzędna położenia (pozioma) lewego krańca paletki Restart sygnał restartu 4. Moduł obsługi piłeczki i wykrywania kolizji z klockami modul_pileczki clock_pil rusz ruszaj ster_pom[1..0] przesuniecie[31..0] nast_plansza licz_zy c[1..0] koniec_gry restart wart_poz[31..0] wart_pion[31..0] wiersz0[7..0] wiersz1[7..0] wiersz2[7..0] wiersz3[7..0] wiersz4[7..0] wiersz5[7..0] wiersz6[7..0] wiersz7[7..0] wiersz8[7..0] kierunek_pion kierunek_poz Clock_pil zegar piłeczki (zdzielnikowany zegar systemowy) Rusz - sygnał pozwalający piłce poruszac się leżąc na paletce (sytuacja na początku gry lub po restarcie) Ruszaj - sygnał zwalniający piłkę z paletki nast_plansza sygnał flaga informujący o zmnianie planszy licz_zyc[1..0] licznik żyć koniec_gry sygnał flaga informujący o zakończeniu gry Restart sygnał restartu ster_pom[1..0] sygnał pomocniczy sterowania wart_poz[31..0] współrzędna pozioma piłki Przesunięcie[31..0] współrzędna położenia wart_pion[31..0] współrzędna pionowa piłki 3/5
(pozioma) lewego krańca paletki Wierszi[7..0], gdzie i należy do <0;8> - rejestry informjące o stanie planszy; każdy rejestr to wiersz klocków (0 wiersz na górze planszy, 8 wiersz na dole planszy), 1 w rejestrze oznacza, że klocek nie został zbity, 0 klocek zbito. kierunek_pion zwrot wektora poruszania się piłki w pionie (0 dół, 1 - góra) kierunek_poz zwrot wektora poruszania się piłki w poziomie (1 lewo, 0 - prawo) W tym module działa zaimplementowany jest też automat gry. 5. Moduł dzielnika zegara dzielnik Param eter Value Type g 2 Signed Integer h 3 Signed Integer clock setup wy nik 3 Clock zegar systemowy Setup sygnał startowy Wynik zegar po zdzielnikowaniu Dzielnik zegara wykorzystywany jest do zmniejszenia zegara systemowego odpowiednio do potrzeb taktowania poruszania się piłki (50 000 razy mniejszy = 503,5 Hz) lub paletki (30 000 razy mniejszy = 839,2 Hz).. 6. Moduł ROM piłki rom_pilka wy sokosc[3..0] data[0..29] 4 Wysokość - wysokość piłki Data opis każdego piksela w linii (każdy piksel opisują 3 bity) Pamięć ROM piłki służy do nadania piłce okrągłych kształtów. Przechowuje ona sekwencje bitów 4/5
odpowiadające konkretnym kolorom w rejestrze kolorów. 7. Moduł ROM paletki rom_paletka wy sokosc[4..0] data[0..299] 5 Wyokość wysokość paletki Data - opis każdego piksela w linii (każdy piksel opisują 3 bity) Pamięć ROM paletki służy do wymodelowania kształtów paletki. Przechowuje ona sekwencje bitów odpowiadające konkretnym kolorom w rejestrze kolorów. Pisząc pamięci ROM nie korzystaliśmy z MegaWizarda, lecz pisaliśmy je samodzielnie korzystając z pozycji [1], s. 168. 8. Podsumowanie W ostatecznj wersji projektu udało nam się uruchomić wszystkie opisane moduły, a więc moduł kontrolera VGA, moduł obsługi paletki, piłeczki i detekcji kolizji pilki z klockami, wykorzystując przy tym pomocnicze moduły dzielnika zegara oraz pamięci ROM dla paletki i piłeczki. Projekt wygląda następująco: wyświetlane są plansza i jej obramowanie, licznik żyć, paletka i piłeczka. Zwolnienie piłeczki z paletki nastepuje po jednoczesnym naciśnięciu przycisków sterowania, następnie tymi przyciskami steruje się paletką. Stworzyliśmy 5 różnych plansz. Nie wykorzystaliśmy pamięci RAM, jak to było opisane w specyfikacji wstępnej, zastosowaliśmy zamiast tego układ 9 niezależnych rejestrów. Projekt zajmuje 2136 komórek logicznych. Kompilacja trwa ok. 1 min 40 sec. 9. Bibliografia [1] Projektowanie układów cyfrowych z wykorzystaniem języka VHDL Zwoliński Mark [2] Układy FPGA w przykładach Sterownik monitora VGA s.163 Majewski, Zbysiński [3] Synteza układów cyfrowych Łuba Tadeusz [4] VHDL język opisu i projektowania układów cyfrowych Włodzimierz Wrona [5] Rapid Prototyping of Digital Systems James O. Hamblen, Michael D. Furman [6] http://www.tinyvga.com/vga-timing/640x480@60hz 5/5