Spisu treści:
- Krok 1: Wprowadzenie
- Krok 2: Materiały
- Krok 3: Projekt czarnej skrzynki na diagramie najwyższego poziomu
- Krok 4: CLKDPodziel
- Krok 5: Przesuń blok procesu
- Krok 6: Maszyna skończona
- Krok 7: Kontrolowanie bloku procesu wyświetlania za pomocą poziomu
- Krok 8: Kontrolowanie prędkości LED za pomocą poziomu
- Krok 9: Montaż sprzętu
- Krok 10: Baw się dobrze
Wideo: Gra reakcji FPGA: 10 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Przez Summer Rutherford i Regita Soetandar
Krok 1: Wprowadzenie
Dla naszego ostatniego projektu dla CPE 133 zaprojektowaliśmy grę reakcji w VHDL dla płyty Basys3. Tę grę można najdokładniej porównać do gry zręcznościowej „Układacz”, w której gracz musi upuszczać klocki we właściwym czasie. Płytka Basys3 jest połączona z płytką stykową, na której znajdują się naprzemienne diody LED. Te diody LED będą się zmieniać z określoną częstotliwością, w zależności od poziomu. Ta gra wykorzystuje dzielnik zegara i 4-cyfrowy 7-segmentowy wyświetlacz, a także automat skończony. Gdy gracz aktywuje odpowiedni przełącznik, gdy zapali się środkowa dioda LED, gracz przejdzie do następnego poziomu gry, zwiększając częstotliwość naprzemiennych diod LED. To sprawia, że każdy kolejny poziom jest trudniejszy niż poprzedni. Gdy gracz pomyślnie pokona poziom 7, najwyższy, na wyświetlaczu segmentowym zostanie wyświetlony komunikat, a wszystkie diody LED będą jednocześnie migać i świecić.
Krok 2: Materiały
Materiały, których będziesz potrzebować to:
- Płyta Digilent Basys3 z kablem micro USB
- Deska do krojenia chleba
- 5 diod LED
- 5 rezystorów (użyliśmy 220 omów)
- 11 przewodów połączeniowych
- Komputer z Vivado
Krok 3: Projekt czarnej skrzynki na diagramie najwyższego poziomu
Jak widać, nasz schemat blokowy najwyższego poziomu zaczyna się od pobrania wymaganych zegarów z naszego modułu podrzędnego ClkDivide. Te zegary są wejściami do różnych bloków procesowych. Zasadniczo gra musi rozpoznać, że gdy użytkownik prawidłowo włączy przełącznik, diody LED muszą zacząć się szybciej zmieniać, a wyświetlacz musi wzrosnąć o jeden poziom. Schemat blokowy może wyglądać trochę szalenie, ale dzieje się tak dlatego, że istnieje wiele sygnałów, które są ustanowione w pewnym procesie, a następnie ten sygnał definiuje inny sygnał w innym bloku procesu.
Ostatecznie jedynymi danymi wejściowymi, jakie pobiera gra, są zegar wejściowy na płycie Basys3, który działa z częstotliwością 100 MHz, siedem przełączników na płycie Basys3 i przycisk resetowania. To, co jest wyprowadzane, to anoda dla siedmiosegmentowego wyświetlacza, siedmiosegmentowy wyświetlacz i diody LED.
Krok 4: CLKDPodziel
Ten podmoduł dzielnika zegara utworzył wolniejszy zegar w zależności od wartości, którą zmapowaliśmy do niego w naszym głównym pliku. Użyliśmy tego podmodułu do określenia Clk400, PushClk i newlck. Ten podmoduł przyjmuje jako wejścia zegar i 32-bitowy dzielnik. Wyprowadzany jest spowolniony zegar. Jest blok procesowy dla dzielnika i spowolnionego zegara. W tym procesie jest zmienna tymczasowa, którą nazwaliśmy count, która zlicza jeden za każdym razem, gdy uderzy się w zbocze narastające wprowadzonego zegara. Gdy osiągnie liczbę dzielnika, spowolniony zegar przełączy się, a licznik zostanie zresetowany do zera.
Krok 5: Przesuń blok procesu
Blok procesu Shift kontroluje naprzemienny ruch i prędkość diod LED. Na liście czułości znajdują się sygnały newclk i stop. Stop powoduje krótkie opóźnienie, gdy użytkownik przekroczy poziom. Jeśli Stop nie jest wysoki, diody LED zmieniają się normalnie, w zależności od prędkości newclk. Ten naprzemienny wzór jest kontrolowany przez dwie zmienne: Śledzenie i liczenie. Count określa, która dioda LED powinna być włączona, podczas gdy Track określa, czy liczba ma odliczać w górę, czy w dół. Jest inny sygnał, Finał, który ma zastosowanie tylko wtedy, gdy Poziom wynosi „111,” wskazujący, że gracz wygrał grę. Final zmienia się od 0 do 1 na każdej krawędzi zegara, aby stale włączać i wyłączać diody LED. To tylko wizualny element końcowego pokazu.
Ten proces zmianowy jest idealnym miejscem do rozpoczęcia tego projektu. Jeśli możesz sprawić, że diody LED będą się prawidłowo i konsekwentnie zmieniać, to od tego momentu musisz tylko dodać zachowanie podczas zdobywania poziomów!
Krok 6: Maszyna skończona
Stworzyliśmy maszynę skończoną, aby dyktować zachowanie po naciśnięciu przełącznika wejściowego lub przycisku resetowania. Każdy stan jest „poziomem”, a jeśli przełącznik zostanie włączony w niewłaściwym czasie lub zostanie naciśnięty reset, poziom powraca do „000”. W przeciwnym razie, jeśli przełącznik jest prawidłowo włączony, poziom podnosi się, aż osiągnie stan końcowy „111” i pojawi się ekran końcowy. FSM opiera się na dwóch blokach procesowych sync_proc i comb_proc. Sync_proc używa zegara, który nazwaliśmy PushClk. Ten zegar kontroluje, jak szybko następny stan staje się stanem obecnym. Ten zegar powinien być dość szybki; wybraliśmy prędkość, która była około dwa razy większa niż nasza najszybsza prędkość LED.
Zaimplementowaliśmy ten kod przy użyciu FSM dla poziomów; jednak po tym projekcie zdaliśmy sobie sprawę, że bardziej wydajnym wykorzystaniem FSM może być posiadanie stanu odliczania, stanu resetowania lub stanu wstrzymania. Jeśli nic nie jest naciskane, jest w stanie podtrzymania. Jeśli reset jest wciśnięty lub gracz zawiódł, jest w stanie resetowania. Prawidłowo naciśnięty jest w stanie odliczania. Istnieje wiele innych sposobów wykorzystania FSM w tej grze!
Krok 7: Kontrolowanie bloku procesu wyświetlania za pomocą poziomu
Poziom kontroluje blok procesu wyświetlania. Zmienne na liście czułości to Level, Reset i Clk400. 7-segmentowy wyświetlacz zaczyna się od wyświetlenia „1” dla pierwszego poziomu. Liczy do 7 za każdym razem, gdy użytkownik przechodzi poziom, aby pokazać użytkownikowi, na jakim poziomie się znajduje. Gdy użytkownik przejdzie poziom 7, wyświetla się „COOL”, co oznacza, że gracz ukończył grę. Ten „COOL” wyświetlacz działa na zegarze 400 Hz, który nazwaliśmy Clk400. Jeśli zostanie naciśnięty przycisk Reset, wyświetlacz powróci do „1”.
Krok 8: Kontrolowanie prędkości LED za pomocą poziomu
Na koniec Level kontroluje prędkość diod LED. Jedynym sygnałem na liście czułości jest poziom. D1 to sygnał, który przechodzi do procesu dzielnika zegara, aby uzyskać nowy zegar. Za każdym razem, gdy zmienia się poziom lub zmienia się stan, blok procesu „Prędkość”. Ten proces określa wartość D1. Istnieje 8 zdefiniowanych wartości D1, które wybraliśmy na podstawie tego, jak szybko chcieliśmy uruchomić każdy poziom. D1 zmniejsza się za każdym razem, gdy zwiększa się poziom, dzięki czemu nowicjusz biega szybciej.
Krok 9: Montaż sprzętu
Płytkę stykową podłączyliśmy do Basys3 za pomocą jednego ze złącz pmod. Sześć portów pmod zostało użytych do podłączenia złącza męskiego do męskiego, jeden do masy, a pozostałe pięć do 5 diod LED. Do każdej diody umieściliśmy również rezystor. Rezystory te mają 220 Ω i zapobiegają zwarciu i przepaleniu diod LED. Chociaż każda dioda LED ma pewną rezystancję, rezystancja nie jest wystarczająca, aby zakłócić napięcie ze źródła.
Krok 10: Baw się dobrze
Ta gra jest bardzo łatwa do grania. Gracz zaczyna na skrajnym prawym przełączniku 1 na planszy, V17. Muszą przestawić przełącznik wysoko, gdy środkowa dioda LED jest włączona. Następnie przesuwają jeden przełącznik w lewo i robią to samo! Jeśli gracz dotrze do końca, trafi na siódmy przełącznik, W14. Jeśli pokonają grę, zobaczą naprawdę zabawne zakończenie!
Należy zauważyć, że podczas tworzenia tej gry prędkość zależy wyłącznie od Ciebie! Jeśli wybrane przez nas prędkości są zbyt wolne, możesz je przyspieszyć i uczynić je jeszcze większym wyzwaniem! Nie ma też ustalonej liczby poziomów. Jeśli chcesz, aby miał jeszcze więcej poziomów, musisz wprowadzić modyfikacje w FSM i blokach procesu określonych przez poziom, ale są to bardzo proste zmiany.
Zdecydowaliśmy się również użyć przełączników na płycie jako danych wejściowych użytkownika, ale jest to również możliwe za pomocą przycisku na płycie Basys3; przycisk wyeliminuje konieczność resetowania przełączników za każdym razem, gdy użytkownik zaczyna od nowa. Początkowo używaliśmy przycisku, jednak powodowało to błędy w definiowaniu poziomu, ponieważ przeskakiwałby o wiele poziomów, gdyby dwie narastające krawędzie PushClk zostały trafione, gdy przycisk był przytrzymywany.
Poniżej znajduje się film pokazujący, jak grać, przechodząc przez pierwsze 4 poziomy i końcowy ekran zakończenia.
Główny plik tego projektu znajduje się poniżej.
Źródła
Instrukcja obsługi Basys3
Inspiracja do projektu - gra Arduino Stop It
Zalecana:
Tap Tap Rainbow – gra szybkiej reakcji dla 2 graczy: 4 kroki (ze zdjęciami)
Tap Tap Rainbow – gra z szybką reakcją dla 2 graczy: 2 tygodnie temu moja córka wpadła na genialny pomysł na stworzenie gry z szybką reakcją w kolorach tęczy (jest ekspertem od tęczy :D). Od razu spodobał mi się ten pomysł i zaczęliśmy zastanawiać się, jak przekształcić go w prawdziwą grę. Pomysł był taki. Masz tęczę w
Zabawna gra reakcji Arduino: 3 kroki
Zabawna gra reakcji Arduino: Zabawna gra reakcji Arduino dla całej rodziny;) Oparta na wieloplatformowej komunikacji Bluetooth. Potrzebujesz tylko trochę Arduino, smartfona z Androidem i pudełka na buty. Jeśli nie masz żadnego z nich, uwierz w to mocno: nie ma nic, co
Gra reakcji Arduino: 9 kroków
Arduino Reaction Game: Stworzyłem tę grę jako zadanie szkolne. Musieliśmy stworzyć coś interaktywnego za pomocą arduino. To mój pierwszy projekt Arduino, jaki kiedykolwiek stworzyłem, więc było to dość trudne, ale nie niemożliwe
Szybka gra reakcji: Wersja na odległość: 5 kroków (ze zdjęciami)
Szybka gra reakcji: Odległość Wersja: Cześć. To jest instrukcja, jak stworzyć grę, która sprawdza zarówno twój czas reakcji, jak i poczucie odległości. Ten projekt jest oparty na starym projekcie, który wykonałem z udziałem dwóch graczy rywalizujących, aby zobaczyć, kto miał szybszy czas reakcji, klikając przycisk w
Gra Fischertechnik LED z czasem reakcji: 7 kroków
Fischertechnik LED Reaction Time Game: Jak stworzyć Fischertechnik LED Reaction Time Game Gram na życie różnymi manipulacjami edukacyjnymi. (Odwiedź www.weirdrichard.com). Prostą do zbudowania aplikacją jest gra LED REACTION TIME GAME. Kontroler robota (w tym przypadku