Dokumentacja projektu w pdf
Transkrypt
Dokumentacja projektu w pdf
Układy cyfrowe - dokumentacja projektu Gra „River Ride” autorzy: Piotr Kąkol, Kamil Koza 1. Cel projektu Celem projektu jest realizacja stworzonej przez firmę Acitivision bardzo popularnej w czasach Atari gry „River Ride” przy wykorzystaniu układu programowalnego FPGA. W realizacji gry zastosowany jest układ z rodziny Flex10K, znajdujący się na płytce edukacyjnej UP2. 2.Opis gry Celem gry jest jak najdłuższe poruszanie się samolotem nad zbiornikiem wodnym (teren oznaczony kolorem niebieskim). Gracz nie może poruszać się nad lądem (teren oznaczony jako zielony). Przelot na zieloną częścią planszy skutkuje zakończeniem gry. Samolot porusza się po planszy ruchem jednostajnym w lewo i prawo, natomiast przeszkody ruchem jednostajnym o różnych poziomach prędkości – np. statek porusza się wolniej, niż helikopter. Aby uniknąć zderzenia należy w odpowiedni sposób posługiwać się przyciskami znajdującymi się na płytce UP2. Jednoczesne naciśnięcie dwóch przycisków sterowania powoduje oddanie strzału. Jeśli pocisk trafi w przeszkodę, ulega ona zniszczeniu (pocisk znika z planszy, a przeszkoda zostaje przesunięta na górną krawędź ekranu). Zderzenie samolotu z przeszkodą powoduje zakończenie gry i wyświetlenie na ekranie stosownego komunikatu (biały wykrzyknik). Restart/wznowienie gry następuje po naciśnięciu przycisku reset. Rysunek przedstawia przykładowy zrzut ekranu gry. 3. Opis działania Projekt jest zrealizowany z użyciem płytki UP2 z układem Flex10k. Projekt składa się z trzech modułów – graficznego (opisanego w pliku vga.vhd), obliczeniowego odpowiadającego za logikę gry (brain.vhd) oraz ruch samolotu i przeszkód, a także modułu odpowiedzialnego za generowanie sygnałów zegara o różnych częstotliwościach dla różnych elementów gry (divider.vhd). Kod projektu składa się z następujących modułów/plików: − river_ride.vhd – główny plik gry. Opisuje wejścia układu programowalnego (zegar, przyciski) oraz wyjścia (na monitor vga). Łączy ze sobą moduły gry i opisuje zależności między nimi. − brain.vhd – odpowiada za obliczenia związane z położeniem samolotu, w przyszłości zostanie uzupełniony o elementy dotyczące logiki gry − vga.vhd – na podstawie odbieranych danych (dotyczących położenia samolotu, przeszkód, ukształtowania brzegu rzeki) oblicza wartości sygnałów rgb oraz synchronizacyjnych. W nim zawarte są instrukcje dotyczące zasad powstawania obrazu na ekranie. − divider.vhd – zmniejsza częstotliwość zegara, pozwalając na ustawienie prędkości ruchu samolotu − river_ride_parameters.vhd – jest zbiorem stałych wartości używanych w projekcie (dane dotyczące rozmiarów poszczególnych elementów, pozycji początkowych itp.). Wejścia Gra sterowana jest za pomocą dwóch włączników przyciskowych powiązanych z układem EPF10K70. Jeśli stan wysoki przypiszemy wciśniętemu przyciskowi, a niski wyciśniętemu to sterowanie samolotem wygląda następująco: Flex_PB 1 0 0 1 1 Flex_PB 2 0 1 0 1 Zdarzenie Brak wpływu na grę Przesunięcie samolotu w prawo Przesunięcie samolotu w lewo Oddanie strzału Za restart gry odpowiedzialny jest jeden z przełączników ośmiokrotnego włącznika FLEX_SWITCH. Wyjście Do wyjścia skojarzonego z układem EPF10K70 dołączony jest monitor VGA. Złącze to pozwala na wyświetlenie 480 linii po 640 punktów każda, w ośmiu różnych kolorach. 4. Opis poszczególnych modułów a) river_ride.vhd: wejścia modułu: clk_f – sygnał zegara 25 MHz generowany przez oscylator kwarcowy zainstalowany na płytce UP2 – reset – sygnał pochodzący z 8-krotnego włącznika (włącznik nr1) – move_left – sygnał pochodzący z włącznika Flex_PB1 – move_right – sygnał pochodzący z włącznika Flex_PB2 – wyjścia modułu: – rgb[2..0] – sygnał przekazujący informacje o kolorach wyświetlanych na ekranie – hsync – synchronizacja pozioma monitora – vsync – synchronizacja pionowa monitora Wyjścia modułu połączone są z pinami układu Flex wg tabeli: b) brain.vhd (moduł składowy dla river_ride.vhd) wejścia modułu: – reset – sygnał pochodzący z 8-krotnego włącznika (włącznik nr1) – move_left – sygnał pochodzący z włącznika Flex_PB1 – move_right – sygnał pochodzący z włącznika Flex_PB2 – clk_f – sygnał zegara 25MHz wyjścia modułu: – Ocolision_pg – sygnał przekazujący do modułu vga.vhd informację o zderzeniu samolotu z brzegiem lub przeszkodami – jeśli Ocolision_pg=”01”, to zaszło zderzenie, na ekranie wyświetlana jest informacja o końcu gry – Oplane_x – przekazuje informację o położeniu samolotu na osi x; wartość Oplane_x jest zmieniana w takt zegara pomocniczego „zegar” – Obullet_live – przekazje informację o istnieniu pocisku – jeśli Obullet_live=”01”, to pocisk jest rysowany na ekranie – Obullet_x – informuje o położeniu pocisku na osi x, jego wartość jest stała w czasie lotu pocisku i zależy od położenia samolotu w chwili wykonania strzału – Obullet_y – informuje o położeniu pocisku na osi y – zmienia się jednstajnie w takt zegara pomocniczego „zegar_bullet” – Oboat_x – zawiera informację o położeniu statku na wodzie wzdłuż osi x; wartość Oboat_x zmienia się w takt zegara pomocniczego „zegar_boat_x”; statek przesuwa się w prawo lub w lewo w zależności od przypisanego mu kierunku ruchu – Oboat_y – zawiera informację o położeniu statku na wodzie wzdłuż osi y; wartość Oboat_y zmienia się w takt zegara pomocniczego „zegar”boat_y” – Odirection_h – decyduje o kierunku ruchu helikoptera nr1 (z niebieskim paskiem wzdłuż kadłubu) – jeśli Odirection_h=”00”, to ruch następuje od lewej do prawej krawędzi ekranu, natomiast jeśli Odirection_h=”01”, to helikopter porusza się w lewo – Odirection_h2 – j/w, dotyczy kierunku ruchu helikoptera nr 2 (z fioletowym paskiem wzdłuż kadłubu) – Ohawk_x – zawiera informację o położeniu helikoptera nr1 na osi x; wartość zmieniana jest jednostajnie w takt zegara „zegar_hawk_x” – Ohawk_2x – j/w, dla helikoptera nr2 – Ohawk_y – informuje o położeniu helikoptera nr1 na osi y; wartość zmieniana jest w takt zegara „zegar_hawk_y” – Ohawk_2y – j/w, dla helikoptera nr2 c) vga.vhd: wejścia: – reset, clk_f, wszystkie wejścia sygnałów przekazujących informacje o położeniu obiektów na ekranie wyjścia: – rbg[2..0] – vsync – hsync – wyjścia przekazujące wyliczone w module sygnały niezbędne do wyświetlenia obrazu o porządanych kolorach na ekranie d) divider.vhd: wejścia: clock – sygnał zegarowy, względem którego ma zostać utworzony nowy sygnał o rządanej częstotliwości – setup – przekazuje parametry wskazujące modułowi sposób zmiany częstotliwości zegara wejściowego – wyjścia: wynik – wygenerowany w module sygnał zegarowy o rządanej częstotliwości – 5. Literatura – Tadeusz Łuba, Mariusz Rawski, Paweł Tomaszewicz, Bogdan Zbierzchowski: „Synteza układów cyfrowych – praca zbiorowa pod redakcą prof. Tadeusza Łuby”, WKŁ, Warszawa 2003 – T. Łuba, B. Zbierzchowski: „Komputerowe projektowanie układów cyfrowych”. WKŁ, Warszawa 2000 – James O. Hamblem, Michael D. Furman: „Rapid Prototyping of Digital Systems”, Kluwer Academic Publishers, 2002