Spisu treści:

Gra w ponga: 6 kroków
Gra w ponga: 6 kroków

Wideo: Gra w ponga: 6 kroków

Wideo: Gra w ponga: 6 kroków
Wideo: Podstawowe przepisy i zasady gry w tenisa stołowego 2024, Lipiec
Anonim
Gra w ponga
Gra w ponga

Materiały:

Płyta FPGA Basys3

Kabel VGA

Vivado

Celem tej instrukcji jest opracowanie gry Pong, która będzie wyświetlana na monitorze. Projekt będzie wykorzystywał VHDL do programowania i wykorzystuje układ FPGA Basys3 do wykonywania kodu i przesyłania obrazu za pomocą interfejsu VGA. Ten samouczek jest przeznaczony dla osób, które mają trochę wcześniejszej wiedzy na temat VHDL. Samouczek zostanie podzielony na 6 różnych sekcji: Przegląd, Proces, Obsługa wyników, Generowanie obrazu, Gra Pong i VGA.

Krok 1: Przegląd

Przegląd
Przegląd

Powyższy obrazek to ogólny schematyczny projekt projektu

Cel gry:

Gra składa się z wyświetlacza z wysuwanym wiosłem, którym może sterować użytkownik, oraz nieruchomej ściany, która pełni rolę górnego ogranicznika. Kiedy użytkownik naciśnie przycisk start, który jest przyciskiem w górę, piłka zacznie się odbijać, odbije od ściany i spróbuje uderzyć w wiosło. Jeśli piłka uderzy w paletkę, odbija się ponownie i odbija się dalej, dopóki nie ominie paletki. Gra kończy się, gdy piłka nie uderzy w paletkę. Użytkownik będzie mógł użyć lewego i prawego przycisku do określenia ruchu wiosła. Aby zresetować grę, użytkownik musi nacisnąć środkowy przycisk. Czas biegu będzie rejestrowany na 7-segmentowym wyświetlaczu. Jest pięć poziomów, a co dziesięć sekund poziom wzrasta, aż osiągniesz poziom 5, na którym pozostanie, dopóki użytkownik nie przegra. Poziomy są określane przez prędkość piłki; oznacza to, że co dziesięć sekund prędkość piłki wzrasta, zwiększając w ten sposób trudność gry.

Architektura systemu:

Poniższy schemat jest podstawowym ogólnym schematem blokowym najwyższego poziomu dla systemu. System posiada cztery wejścia: Przycisk R, Przycisk L, Start i Reset oraz Zegar. Posiada wyjścia synchronizacji poziomej i pionowej, RBG (który odnosi się do koloru piksela w określonym miejscu) i Score (który działa jak magistrala do 7-segmentowego wyświetlacza). Przycisk w górę będzie używany jako początek przycisk, a lewy i prawy przycisk będą używane do poruszania łopatką w odpowiednich kierunkach. 7-segmentowy wyświetlacz będzie używany do zapisywania wyniku, czyli liczby sekund, przez które użytkownik gra bez przegranej gry. Liczba zostanie wyświetlona jako liczba dziesiętna.

Architektura obwodów: Zbudujemy nasz gadżet przy użyciu jednego FSM, który zawiera mniejszy FSM, podrzędny FSM będzie kontrolował poziom trudności gry, podczas gdy główny FSM będzie kontrolował ogólny przebieg gry. Nasz gadżet będzie również używał co najmniej trzech dzielników zegara, jednego dla wyniku (czasu), jednego dla częstotliwości odświeżania wyświetlacza i jednego, który jest podłączony do wyjścia DeMux, dzięki czemu możemy kontrolować szybkość gry będzie postępował z coraz większymi trudnościami. Im dłużej grasz, tym szybciej gra. Będziemy mieć wejście sterujące DeMux w stanie sub-FSM, abyśmy mogli kontrolować, jak szybko gra będzie przebiegać przez jak długo w nią grasz. Będziemy używać kilku liczników, jednego do odświeżenia ekranu i jednego do podliczania wyniku podczas dalszej gry. Ten projekt ma dwa główne moduły i tablicę podmodułów, które będą manipulować danymi wejściowymi. Dwa główne podmoduły to sterownik VGA oraz moduł logiki przycisków. Sterownik VGA będzie składał się z programowalnej pamięci, dzielnika zegara i logiki, która będzie manipulować wyjściem koloru. Moduł logiki przycisków będzie również składał się z dzielnika zegara i programowalnej pamięci, a także konwertera binarnego na dziesiętny dla wyświetlacza 7-segmentowego z odpowiednim dzielnikiem zegara.

Krok 2: Proces obrazu

W sekcji Image Process projektu będziemy określać ruch piłki i wiosła. Program posiada porty, które obejmują lewy, prawy, górny i środkowy przycisk, aktualny stan, zegar, pozycje X i Y piłki, lewą i prawą krawędź paletki oraz błąd. Obecny stan jest używany do określenia sygnału zezwolenia. Kod sprawdza wiele przypadków, w których piłka może się poruszyć, i ustala warunki określające tor lotu piłki. Następny blok procesu określa kierunek ruchu łopatki w oparciu o przycisk naciśnięty przez użytkownika. Do kodu tej części projektu dołączono szczegółowe komentarze opisujące, co robi każda sekcja.

Krok 3: Obsługa wyników

Obsługa wyników
Obsługa wyników

Ta sekcja składa się z plików, które odnoszą się do wyświetlania wyniku w sekundach na 7-segmentowym wyświetlaczu na płycie Basys3. Zawiera dzielnik zegara, który służy do liczenia sekund, licznik wyników liczy sekundy, w których gra użytkownik, sterownik segmentu pobiera wynik i konwertuje go na anody i katody, które mają być wyświetlane na ekranie, a także określa pozycję, która liczba zostanie wyświetlona, a na końcu program obsługi segmentu konwertuje cyfry binarne na cyfry dziesiętne, które mają być wyświetlane na ekranie. Przewodnik punktacji łączy wszystkie elementy i mapuje sygnały. Poniżej znajduje się kod do wszystkich pięciu plików.

Dzielnik zegara:

Dzielnik zegara ma wejścia Clk(clock), CEN(enable in) i Div(dzielnik) oraz wyjście Clk_out. Jeśli sygnał zezwolenia jest włączony, zegar będzie odliczał narastające zbocze.

Licznik wyników

Licznik wyników ma wejścia Clk(Clock) i RST(Reset) oraz wyjścia Clk_Out i Q, które zasadniczo działają jako wyjście wyniku.

Sterownik segmentu

Sterownik segmentu ma wejścia D1, D10, D100, D1000 i Clock. Liczby po „D” odnoszą się do miejsca dziesiętnego na 7-segmentowym wyświetlaczu. Wyjściami są anody i cyfra. Zegar liczy i przypisuje liczby oraz swoją pozycję. Na przykład cyfra „9” zostanie wyświetlona w miejscu jedności, a „0” w miejscu tysięcy, setek i dziesiątek. Kiedy zmieni się na „10”, liczba będzie miała teraz „1” w miejscu dziesiątek i „0” w miejscu tysięcy, setek i jedynek.

Obsługa segmentu

Obsługa segmentu ma cyfrę jako wejście i katody jako wyjście. Zasadniczo liczby binarne są wyświetlane na katodzie, aby wyświetlać liczby dziesiętne na ekranie.

Obsługa wyników

Program obsługi wyniku składa się z poprzednich czterech elementów i łączy to wszystko w całość i mapuje sygnały. Włącza i wyłącza również licznik na podstawie aktualnego stanu.

Krok 4: Generowanie obrazu

Generowanie obrazu składa się z czterech komponentów: animacji, licznika niepowodzeń, odświeżenia obrazu i licznika startu. Pliki te odnoszą się do sposobu generowania obrazów na monitorze.

Animacja

Plik animacji ma wejścia Clk (sygnał zegara), CEN (włączenie zliczania), RST (sygnał resetu), B_X (pozycja X piłki), B_Y (pozycja Y piłki), P_L (pozycja lewej łopatki) i P_R (prawa pozycja wiosła). Dane wyjściowe to WA (adres, pod którym zapisujemy kolor) i WD (kolor zapisywany pod określonym adresem). Plik ma Play_Counter, który jest licznikiem, który będzie używany jako wejście sterujące dla MUX, koder, który może wyprowadzać prawidłowe kolory we właściwych miejscach, a na koniec multiplekser, który wyświetla prawidłowy kolor w oparciu o położenie łopatki i piłka.

Odśwież obraz

Plik Refresh Image służy do odświeżania obrazu w miarę zmiany pozycji kuli i paletki. Plik zawiera komponenty z plików Animation, Start Counter i Fail Counter. Odwzorowuje sygnały z każdego komponentu i wykorzystuje logikę stanu do określenia sygnałów i adresów wyjściowych.

Licznik startowy

Licznik startów wykorzystuje wejścia Clk, RS i CEN oraz wyjścia WA i WD. Wykorzystuje licznik i konwersję do określenia wejścia sterującego dla MUX. Multiplekser następnie wykorzystuje dane wejściowe do określenia prawidłowych adresów kolorów i wysyła te dane do sterownika VGA. Służy do wyświetlania "Pong", gdy użytkownik rozpoczyna grę.

Licznik niepowodzeń

Licznik niepowodzeń służy do wyświetlania komunikatu „Koniec gry”, gdy użytkownik przegrywa grę. Ma sygnał Clk, RST i CEN. Wykorzystuje licznik i wzór konwersji do określenia wejścia sterującego dla MUX. Multiplekser następnie wykorzystuje dane wejściowe do określenia prawidłowych adresów kolorów i wysyła te dane do sterownika VGA.

Krok 5: Gra w Pong

Gra w ponga
Gra w ponga

Ta sekcja projektu zawiera pliki Pong Master, Finite State Machine (FSM), Timer i Start Debounce.

Regulator czasowy

Timer ma wejścia Clk(Clock) i PS(Present State) oraz Timer i Clk_out jako wyjścia. Zegar służy do zmiany szybkości gry co około pięć sekund.

Przepływ FSM

Flow FSM ma wejścia Clk, Fail, Timer, Bttn_S (przycisk start) i Buttn_RST (przycisk resetowania) oraz wyjście Pres_S (wyjście stanu obecnego). FSM używa licznika do aktualizacji stanu obecnego do stanu następnego i aktualizuje stan następny, aż gra osiągnie poziom 5, na którym pozostaje do końca gry.

Rozpocznij odbijanie

Start Debounce to początkowe odbicie piłki. Posiada wejścia S_in i Clk oraz wyjście S_out.

Pong MasterTen plik wykorzystuje wszystkie poprzednie komponenty i sprawia, że wszystkie komponenty są natychmiastowe. Jest to plik główny, który łączy wszystkie poprzednie komponenty, które zbudowaliśmy razem.

Krok 6: Sterownik VGA

Sterownik VGA (Visual Graphics Array) to oprogramowanie służące do akceptowania poleceń lub danych przesyłanych na ekran wyświetlacza. Kierowcę podarował nam nasz profesor. Użyj sterownika i przewodu VGA, aby podłączyć płytę Basys3 do monitora.

Teraz powinieneś być gotowy do stworzenia własnej gry Pong przy użyciu VHDL!

Zalecana: