Spisu treści:

Gra Asteroid FPGA: 7 kroków (ze zdjęciami)
Gra Asteroid FPGA: 7 kroków (ze zdjęciami)

Wideo: Gra Asteroid FPGA: 7 kroków (ze zdjęciami)

Wideo: Gra Asteroid FPGA: 7 kroków (ze zdjęciami)
Wideo: Elon musk fires people like a boss😎 Credit: @geomfilms 2024, Październik
Anonim
Gra Asteroid FPGA
Gra Asteroid FPGA

W naszym projekcie końcowym CPE 133 postanowiliśmy stworzyć grę o asteroidach na naszym FPGA za pomocą dwóch przełączników przyciskowych i 7-segmentowego wyświetlacza. Gra działa tak, że asteroida pojawia się w jednym z trzech losowo wybranych rzędów i pędzi w kierunku statku po drugiej stronie 7-segmentowego wyświetlacza. Górny i dolny przycisk mogą służyć do przesuwania statku z dala od asteroidy. Jeśli tego nie zrobisz, na wyświetlaczu przez chwilę pojawi się napis „Bang”, a następnie gra zostanie szybko zrestartowana, aby użytkownik mógł spróbować ponownie. Poniżej znajduje się krótki opis tego, jak projekt został wykonany, aby każdy użytkownik mógł powielić lub ulepszyć nasz projekt.

Krok 1: Przegląd

Przegląd
Przegląd
Przegląd
Przegląd

Projekt w dużej mierze składa się z maszyn skończonych (FSM), które wykorzystują logikę do przesyłania FPGA między stanami, które przechowują i wyświetlają różne wartości pozycji statku i skały. Dwa główne moduły to FSM gry dla skały i statku oraz binarny do 7-segmentowego dekoder wyświetlacza FSM, które są zintegrowane ze sobą przy użyciu bardzo prostego modelu strukturalnego w VHDL.

FSM zostały stworzone dla pozycji statku, pozycji skały oraz dla 7-segmentowego dekodera. Celem FSM statku jest to, aby statek mógł przesunąć się do właściwej pozycji, gdy gracz naciśnie przycisk w górę lub w dół. FSM jest potrzebny, ponieważ musi pamiętać, w której pozycji był ostatnio, aby przejść do właściwej pozycji.

Celem FSM skały jest przesunięcie skały do właściwej pozycji w zależności od tego, w którym rzędzie się znajduje i ostatniej pozycji w tym rzędzie. Ponadto śledzi pozycję modułu, który ją wyświetli, i pseudolosowo wybiera nowy wiersz, który ma się pojawić w następnej kolejności.

FSM dla dekodera z 7-segmentowym wyświetlaczem był używany nie tylko do wyświetlania statku i skały, ale także do wyświetlania „BanG”, gdy pozycja statku i pozycja skały są takie same.

Krok 2: Materiały

Materiały użyte w projekcie to:

  • Płytka rozwojowa Basys3 firmy Digilent, Inc.
  • Apartament Vivado Design
  • sseg_dec.vhd (Ten plik został dostarczony przez Polylearn i został napisany przez Bryana Mealy'ego)
  • Clk_div.vhd (Ten plik został dostarczony do Polylearn i został napisany przez Bryana Mealy'ego)
  • Trzy maszyny skończone (FSM)

Krok 3: Tworzenie gry

Tworzenie gry
Tworzenie gry
Tworzenie gry
Tworzenie gry
Tworzenie gry
Tworzenie gry
Tworzenie gry
Tworzenie gry

Moduł gry został stworzony przy użyciu modelowania behawioralnego w celu opisania stanów statku i skały dla ich własnych FSM. Zaletą tego jest to, że znacznie łatwiej jest modelować obwód behawioralnie, opisując to, co robi, niż zastanawiając się nad wszystkimi komponentami potrzebnymi do zaprojektowania sprzętu.

Stany skały zostały wykonane przy użyciu generatora liczb pseudolosowych dla pierwszej pozycji skały. Aby to osiągnąć, nadaliśmy generatorowi własny zegar, który był niezwykle szybki w stosunku do szybkości gry. Na każdym zboczu narastającym zwiększana jest trzybitowa liczba, a wszystkie jej wartości odpowiadają jednemu z trzech stanów początkowych statku. Dlatego trzy wartości odpowiadają pozycji 3 (prawy górny róg), trzy odpowiadają pozycji 7 (środek), a dwie odpowiadają pozycji 11 (prawy dolny róg).

Gdy nastąpi losowe generowanie, a asteroida otrzyma stan początkowy, płynie poziomo w kierunku statku bez przerwy.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Zegar używany do logiki następnego stanu skały kontroluje prędkość gry; metodą prób i błędów odkryliśmy, że 9999999 to dobra wartość dla jego maksymalnej liczby.

Logika statku działa poprzez inicjalizację w pozycji środkowej (pozycja 4) po lewej stronie. Jeśli naciśnięty zostanie górny lub dolny przycisk, statek będzie poruszał się w górę iw dół do pozycji 0 i 11 odpowiadających wciśniętemu przyciskowi.

Aby ruch statku był przyjemny dla użytkownika, nie uczyniliśmy jego ruchu asynchronicznym. Użyliśmy zegara do zmian jego stanu i użyliśmy maksymalnej liczby 5555555.

Krok 4: Wyświetlanie wyniku

Dekoder binarny na 7-segmentowy pobiera 4-bitowe zmienne pozycji statku i asteroidy i wyświetla odpowiedni obraz (statek i skała lub komunikat „BAnG”).

Osiąga to, najpierw sprawdzając, czy oba są równe, a następnie wyświetlając komunikat „BAnG”, jeśli sprawdzenie zwróci prawdę.

Jeśli nie zwróci prawdy, dekoder wyświetli statek i skałę, przełączając się między nimi z bardzo wysoką częstotliwością zegara i oszukując oko, aby zobaczyło je tak, jakby były wyświetlane w tym samym czasie.

Krok 5: Składanie wszystkiego razem

Kładąc wszystko razem
Kładąc wszystko razem

Objęliśmy FSM statku i skały w jednym dużym FSM, który podłączyliśmy do wyświetlacza FSM. Wejście do gry to przycisk w górę i przycisk w dół na płycie BASYS3 oraz zegar systemowy. Wyjściami są segmentowe i anodowe wektory siedmiosegmentowe.

Te dane wejściowe i wyjściowe będą widoczne w pliku ograniczeń, w którym są mapowane na porty.

Krok 6: Przyszłe modyfikacje

W przyszłości ulepszeniem byłoby dodanie do projektu większej liczby funkcji ruchu statków. Można to osiągnąć po prostu wprowadzając 2 dodatkowe przyciski i pozwalając statkowi na zajmowanie pozycji (stanów) innych niż 0, 4 i 8. Inną możliwą modyfikacją może być kontrolowanie czasu następnego stanu asteroidy, tak aby zaczynał się powoli i zwiększał prędkość o 1,5 raza za każdym razem, gdy nie trafi w statek, dopóki nie otrzyma trafienia, po czym zrestartuje się i znów zwolni. Zwiększyłoby to trudność gry i sprawiłoby, że gra byłaby przyjemniejsza dla użytkownika, gdyby została zaimplementowana, i można by to zrobić, tworząc zmienną dla maksymalnej liczby zegara następnego stanu skały, mnożąc tę zmienną przez 1,5 za każdym razem, gdy asteroida 't hit, i resetowanie go do początkowej wartości za każdym razem, gdy uderzy kamień.

Krok 7: Wniosek

Ten projekt pomógł nam lepiej zrozumieć automaty skończone, zegary i interaktywne wyświetlanie na wyświetlaczach siedmiosegmentowych.

Najważniejszą rzeczą w automatach skończonych jest to, że ważne jest, aby wiedzieć (pamiętać), w jakim stanie się aktualnie znajdujesz, aby przejść do następnego pożądanego stanu. Jak na ironię, dobra rada życiowa; musisz wiedzieć, gdzie jesteś, aby wiedzieć, dokąd zmierzasz.

Manipulując różnymi instancjami zegarów, byliśmy w stanie losowo generować liczby, przesuwać kamień do następnej pozycji i zarządzać wyświetlaniem statku, kamienia i wiadomości o zakończeniu gry.

Dowiedzieliśmy się, że więcej niż jedna anoda nie może być jednocześnie wyświetlana. Podarowany nam moduł wykorzystał fakt, że ludzkie oko widzi różnicę tylko do określonej częstotliwości. Wybrano więc wyższą częstotliwość przełączania anod. Widoczne jednocześnie statek i skała jest właściwie aluzją, ponieważ każdy z nich jest wyświetlany osobno, ale bardzo szybko. Ta koncepcja została zastosowana do wyświetlenia ruchu statku, skały i komunikatu „BanG”.

Zalecana: