Pong jest grą komputerową porównywaną do tenisa. Jest także najprawdopodobniej pierwszą grą stworzoną na komputery przez Atari w 1972 r. W grze dwóch graczy używa paletek do odbicia ruchomej piłki na pole przeciwnika. Wygrana następuje po zdobyciu przez jednego z graczy 9 punktów.
Do stworzenia elektronicznej wersji Ponga użyto płytki Nexys2 z układem FPGA, z kodem napisanym w VHDL. Wyjście grafiki, o rozdzielczości 640x480 pikseli, zrealizowano wykorzystując sprzętowy port VGA na płytce. Dla każdego gracza zostały użyte inne kolory paletek i punktów (gracz 1: czerwony, gracz 2: niebieski). Kontrola paletek odbywa się za pomocą 4 pinów wejściowych płytki (ruch góra/dół).
Położenie paletki, piłki i innych elementów jest zdefiniowane przez ich początek. Punkt go określający umieszczony jest w górnym, lewym roku każdego obiektu. Punkt stanowi odniesienie dla fizyki gry i dla wyświetlania na ekranie. Wszystkie obiekty zdefiniowane są przez taki właśnie punkt oraz ich rozmiar, np. paletka ma rozmiar 15x70 px a piłka – 15x15 px. Położenie linii środkowej i punktacji jest stałe. Paletki nie mogą poruszać się w poziomie, lecz jedynie równolegle do umownej osi OY. Piłka porusza się zarówno w kierunku osi OX jak i OY. Ruch piłki jest losowy (28 wektorów przesunięcia). Kierunek, kąt i szybkość ruchu są ustalane przez grę.
Port VGA w wersji podstawowej wykorzystuje pięć wyprowadzeń, 3 z nich używane są do opisywania koloru (R, G bądź B) a dwa pozostałe do synchronizacji pionowej i poziomej obrazu (H-Synch, V-Synch). Kolory w przypadku płytki Nexys2 opisywane są 8 bitami – 3 dla czerwieni, i po 2 dla zieleni i koloru niebieskiego. Synchronizacja pozioma jest używana do określania końca każdej pojedynczej linii obrazu, a pionowa – do określania końca całej ramki obrazu. Na poniższych obrazach można zobaczyć, w jaki sposób przeprowadzana jest synchronizacja i jakie są czasy poszczególnych impulsów synchronizacyjnych w przypadku rozdzielczości 640x480 px.
Realizacja całości układu w strukturze FPGA:
Elementem kodu układu FPGA sterującym portem VGA jest gotowy komponent, który posiada 4 wejścia, pięć wyjść i 2 dodatkowe wyjścia równoległe (10-bitowe wektory). Komponent jest „napędzany” sygnałem zegarowym o częstotliwości 25 MHz. Komponent korzysta z wyjść równoległych do podawania aktualnej pozycji piksela. Kod komponentu podany jest poniżej.
Kod: VHDL
W strukturze FPGA zaimplementowano też dzielnik sygnału zegarowego 2:1, jako że używany jest zegar systemowy o częstości 50 MHz.
Kod: VHDL
Główny program jest także realizowany przez komponent pracujący z zegarem 25 MHz. Komponent obsługuje także wejścia przycisków.
Kod: VHDL
Za grafikę odpowiedzialny jest osobny proces, który określa kolor aktualnie wyświetlanego piksela, zawiera informacje o rozmiarach obiektów i położeniu obiektów ruchomych (zrealizowane jako wewnętrzny sygnał w architekturze modułu, który może być zmieniany podczas gry).
Kod: VHDL
Fizyka gry odpowiada za ruch obiektów, tablicę wyników i przetwarzanie sygnałów wejściowych. Wektor ruchu piłki jest generowany w osobnej procedurze.
Kod: VHDL
Kompletny kod VHDL jest następujący:
Kod: VHDL
Na stronie projektu dostępne są dodatkowe pliki dla projektu.
Fajne? Ranking DIY
