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

Podobne dokumenty