Taula de continguts:
- Pas 1: Introducció
- Pas 2: materials
- Pas 3: Disseny de quadre negre del diagrama de nivell superior
- Pas 4: CLKDivide
- Pas 5: Canvia el bloc del procés
- Pas 6: màquina d'estats finits
- Pas 7: Control del bloc de processos de visualització amb el nivell
- Pas 8: Control de la velocitat del LED amb el nivell
- Pas 9: Muntatge de maquinari
- Pas 10: Diverteix-te
Vídeo: Joc de reacció FPGA: 10 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
Per Summer Rutherford i Regita Soetandar
Pas 1: Introducció
Per al nostre projecte final de CPE 133, vam dissenyar un joc de reacció en VHDL per a un tauler Basys3. Aquest joc es pot comparar amb el joc arcade "Stacker", on el jugador ha de deixar caure els blocs en el moment adequat. La placa Basys3 està connectada a una placa de control, que té els LED alternatius. Aquests llums LED s’alternaran a una freqüència específica, en funció del nivell. Aquest joc utilitza el divisor de rellotge i la pantalla de 4 dígits de 7 segments, a més d'una màquina d'estats finits. Quan el jugador activa l’interruptor correcte quan s’encén el LED central, el jugador avançarà al següent nivell del joc, augmentant la freqüència dels LED alterns. Això fa que cada nivell successiu sigui més dur que el nivell anterior. Quan el jugador bat amb èxit el nivell 7, el nivell més alt, apareixerà un missatge a la pantalla del segment i tots els LEDs parpellejaran simultàniament.
Pas 2: materials
Els materials que necessiteu són:
- Taula Digilent Basys3 amb cable micro USB
- Taula de pa
- 5 LEDs
- 5 resistències (hem utilitzat 220 ohms)
- 11 cables de pont
- Ordinador amb Vivado
Pas 3: Disseny de quadre negre del diagrama de nivell superior
Com podeu veure, el nostre diagrama de blocs de nivell superior comença per obtenir els rellotges necessaris del nostre submòdul, ClkDivide. Aquests rellotges són entrades als diferents blocs de procés. Bàsicament, el joc ha de reconèixer que quan un usuari encén correctament l’interruptor, els LED han de començar a alternar-se més ràpidament i la pantalla ha de pujar d’un nivell. El diagrama de blocs pot semblar una mica boig, però això es deu al fet que hi ha molts senyals que s’estableixen en un determinat procés i que aquest senyal defineix un altre senyal en un altre bloc de procés.
Al final, les úniques entrades que pren el joc són el rellotge d’entrada del tauler Basys3 que funciona a 100 Mhz, set commutadors al tauler Basys3 i el botó de reinici. El que es produeix és l’ànode per a la pantalla de set segments, els set segments per a la pantalla i els LED.
Pas 4: CLKDivide
Aquest submòdul divisor de rellotge va crear un rellotge més lent segons el valor que hi vam assignar al nostre fitxer principal. Hem utilitzat aquest submòdul per determinar Clk400, PushClk i newlck. Aquest submòdul pren com a entrades un rellotge i un divisor de 32 bits. Es produeix un rellotge lent. Hi ha un bloc de procés per al divisor i el rellotge lent. En el procés hi ha una variable temporal, que anomenem recompte, que compta una cada vegada que es colpeja una vora ascendent del rellotge introduït. Un cop assoleix el nombre divisor, el rellotge alentit es commuta i es torna a zero.
Pas 5: Canvia el bloc del procés
El bloc de procés Shift controla el moviment i la velocitat alterns dels LED. A la llista de sensibilitat hi ha els senyals newclk i Stop. L'aturada provoca un breu retard quan l'usuari passa el nivell. Si Stop no és alt, els LED s’alternen de manera normal en funció de la velocitat de newclk. Aquest patró altern està controlat per dues variables: Seguiment i recompte. El recompte determina quin LED ha d’estar encès, mentre que la pista determina si el recompte ha de comptar cap amunt o cap avall. Hi ha un altre senyal, Final, que només s'aplica quan el nivell és "111", que indica que el jugador ha guanyat el joc. El final alterna entre 0 i 1 cada vora del rellotge per encendre i apagar els LED de manera contínua. Això és només un element visual per a la visualització final.
Aquest procés de canvi és el lloc perfecte per començar aquest projecte. Si podeu aconseguir que els vostres LED s’alternin de manera correcta i constant, a partir d’aquí només heu d’afegir el comportament en pujar de nivell.
Pas 6: màquina d'estats finits
Hem creat una màquina d'estats finits per dictar el comportament quan es prem l'interruptor d'entrada o el botó de restabliment. Cada estat és un "nivell" i si l'interruptor està activat en el moment equivocat o es prem el reinici, el nivell torna a "000". En cas contrari, si l'interruptor està activat correctament, el nivell es mou cap amunt fins que arriba a l'estat final, es mostra "111" i apareix la visualització final. El FSM es basa en els dos blocs de procés sync_proc i comb_proc. Sync_proc utilitza el rellotge que anomenem PushClk. Aquest rellotge controla la velocitat amb què el següent estat es converteix en l'estat actual. Aquest rellotge hauria de ser força ràpid; vam triar una velocitat aproximadament dues vegades més ràpida que la nostra velocitat LED més ràpida.
Hem implementat aquest codi utilitzant un FSM per als nivells; no obstant això, després d'aquest projecte ens vam adonar que un ús més eficient d'un FSM podria haver estat tenir un estat de recompte, un estat de reinici o un estat de permanència. Si no es prem res, es manté en estat. Si es prem el restabliment o el reproductor està desordenat, es troba en estat de reinici. Si es prem correctament, es troba en l'estat de recompte. També hi ha moltes altres maneres d’utilitzar un FSM en aquest joc.
Pas 7: Control del bloc de processos de visualització amb el nivell
Level controla el bloc del procés de visualització. Les variables de la llista de sensibilitat són Nivell, Restabliment i Clk400. La pantalla de 7 segments comença mostrant "1" per al primer nivell. Compta fins a 7 cada vegada que l'usuari passa un nivell per mostrar-li a quin nivell es troba. Un cop l'usuari ha passat el nivell 7, mostra "COOL" per indicar que el jugador ha guanyat el joc. Aquesta pantalla "COOL" funciona amb un rellotge de 400 Hz que anomenàvem Clk400. Si es prem Reinici, la pantalla torna a ser "1."
Pas 8: Control de la velocitat del LED amb el nivell
Finalment, Level controla la velocitat dels LED. El nivell és l'únic senyal de la llista de sensibilitat. D1 és el senyal que entra al procés Clock Divider per obtenir newclk. Cada vegada que es canvia el nivell o es canvia l'estat, el bloc de procés "Velocitat". Aquest procés determina el valor de D1. Hi ha 8 valors definits de D1 que hem triat en funció de la rapidesa amb què volíem que s'executés cada nivell. D1 es redueix cada vegada que augmenta el nivell de manera que el newclk s’executa més ràpidament.
Pas 9: Muntatge de maquinari
Hem connectat la taula de suport al Basys3 amb un dels connectors pmod. Sis dels ports pmod es van utilitzar per connectar un connector mascle a mascle, un per a terra i els altres cinc per als 5 LED. També hem col·locat una resistència per a cada LED. Aquestes resistències són de 220 Ω i impedeixen que els LED siguin curtcircuitats i cremats. Tot i que cada LED té certa resistència, la resistència no és suficient per impedir el voltatge de la font.
Pas 10: Diverteix-te
Aquest joc és molt fàcil de jugar. El jugador comença a l'interruptor 1 de la dreta del tauler, V17. Han de girar l'interruptor fins que el LED central està encès. A continuació, mouen un interruptor cap a l’esquerra i fan el mateix. Si el jugador arriba al final, acabarà al setè interruptor, W14. Si superen el joc, podran veure una exhibició final molt divertida.
Alguna cosa a destacar és que en crear aquest joc, les velocitats depenen totalment de vosaltres. Si les velocitats que hem escollit són massa lentes, no dubteu a accelerar-la i fer-ho encara més difícil. Tampoc hi ha un nombre fixat de nivells. Si voleu que tingui encara més nivells, cal fer modificacions a la FSM i als blocs de procés determinats per Level, però es tracta de canvis molt senzills.
També vam optar per utilitzar commutadors a la placa com a entrada de l'usuari, però això també és possible amb un botó a la placa Basys3; el botó eliminarà la necessitat de restablir els commutadors cada vegada que l'usuari comença de nou. Inicialment vam utilitzar un botó, però això va provocar errors en definir el nivell, ja que saltaria diversos nivells si es premessin dues vores ascendents de PushClk quan es mantenia premut el botó.
A continuació es mostra un vídeo que demostra com es juga, passant pels primers 4 nivells i la pantalla final final.
A continuació s’inclou el fitxer principal d’aquest projecte.
Fonts
Manual de referència Basys3
Inspiració per al projecte: el joc Arduino Stop It
Recomanat:
Toca Tap Rainbow: un joc de reacció ràpida de 2 jugadors: 4 passos (amb imatges)
Tap Tap Rainbow: un joc de reacció ràpida de 2 jugadors: fa 2 setmanes, la meva filla va tenir la idea genial de fer un joc de reacció ràpida amb colors de l'arc de Sant Martí (és una experta en arc de Sant Martí: D). A l'instant em va encantar la idea i vam començar a pensar com podríem convertir-la en un joc real. Tens un arc de Sant Martí a
Joc de reacció del temporitzador 555: 5 passos
555 Timer Reaction Game: públic objectiu: aquest instructiu s’adreça a persones interessades en circuits (amb poc fons) que busquen un joc senzill que pugueu construir amb només uns quants components econòmics. Nivell de dificultat Això seria difícil si
Divertit joc de reacció Arduino: 3 passos
Divertit joc de reacció Arduino: divertit joc de reacció Arduino per a tota la família;) Basat en la comunicació Bluetooth multiplataforma. Només necessiteu coses d’Arduino, un telèfon intel·ligent Android i una caixa de sabates. Si no en teniu cap, cregueu-hi fermament: no hi ha res que
Joc de reacció: projecte d'enginyeria informàtica: 3 passos
Joc de reacció: projecte d’enginyeria informàtica: el joc de reacció és exactament el que diu el nom, prova la vostra velocitat de reacció. És possible que us pregunteu quins beneficis pot tenir aquest servidor fora de l’entreteniment, així que podeu utilitzar-lo per a persones en rehabilitació per cirurgia o accidents. La seva reacció és especial
Joc de reacció Arduino: 9 passos
Joc Arduino Reaction: He creat aquest joc com a tasca escolar. Hem hagut de fer quelcom interactiu amb un arduino. Aquest és el meu primer projecte Arduino que he realitzat, així que va ser força difícil, però no impossible