Taula de continguts:
- Pas 1: Visió general
- Pas 2: materials
- Pas 3: Creació del joc
- Pas 4: visualització del resultat
- Pas 5: ajuntar-ho tot
- Pas 6: futures modificacions
- Pas 7: Conclusió
Vídeo: Joc d'asteroides FPGA: 7 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:16
Per al nostre projecte final CPE 133, vam decidir crear un joc d’asteroides al nostre FPGA mitjançant dos interruptors de botó i la pantalla de 7 segments. El joc funciona de manera que un asteroide apareix en una de les tres files seleccionades a l'atzar i arriba a la nau a l'altre costat de la pantalla de 7 segments. El botó superior i el botó inferior es poden utilitzar per moure la nau fora del camí de l'asteroide. Si no ho fa, la pantalla diu "BAnG" per un moment i després reinicia el joc ràpidament perquè l'usuari pugui tornar a intentar-ho. El que segueix és una breu descripció de com es va fer el projecte perquè qualsevol usuari pugui replicar o millorar el nostre disseny.
Pas 1: Visió general
El projecte consisteix en gran part en màquines d’estat finit (FSM), que utilitzen la lògica per transferir l’FPGA entre estats que emmagatzemen i mostren diferents valors de posició del vaixell i de la roca. Els dos mòduls principals són els FSM de jocs per al rock and ship i el descodificador de pantalla binari a 7 segments FSM, que s’integren junts mitjançant un model estructural molt senzill en VHDL.
Es van crear FSM per a la posició del vaixell, la posició de la roca i per al descodificador de 7 segments. L’objectiu del FSM del vaixell és que el vaixell es pugui moure a la posició correcta quan el jugador prem un botó amunt o avall. Es necessita el FSM perquè ha de recordar en quina posició va ser l'última per passar a la posició correcta.
L’objectiu del FSM de la roca és moure la roca a la posició correcta en funció de la fila en què es troba i de l’última posició d’aquesta fila. A més, fa un seguiment de la posició del mòdul que el mostrarà i tria pseudo-aleatòriament una nova fila que apareixerà a la següent.
El FSM per al descodificador de pantalla de 7 segments es va utilitzar no només per mostrar el vaixell i la roca, sinó també per mostrar "BAnG" quan la posició del vaixell i la posició de la roca són les mateixes.
Pas 2: materials
Els materials utilitzats en el projecte van ser:
- Basys3 Development Board de Digilent, Inc.
- Vivado Design Suite
- sseg_dec.vhd (Aquest fitxer ens el van proporcionar a Polylearn i el va escriure Bryan Mealy)
- Clk_div.vhd (Aquest fitxer ens el van proporcionar a Polylearn i el va escriure Bryan Mealy)
- Tres màquines d'estat finit (FSM)
Pas 3: Creació del joc
El mòdul de joc es va crear utilitzant models de comportament per descriure els estats del vaixell i la roca dels seus propis FSM respectius. L’avantatge d’això és que és molt més fàcil modelar el circuit de manera conductual descrivint què fa en lloc d’esbrinar tots els components necessaris per dissenyar el maquinari.
Els estats de roca es van fer utilitzant un pseudo generador de nombres aleatoris per a la primera posició de la roca. Per aconseguir-ho, vam donar al generador el seu propi rellotge, que era extremadament ràpid en relació amb la velocitat del joc. A cada vora ascendent, s'incrementa un número de tres bits i tots els seus valors corresponen a un dels tres estats d'inici del vaixell. Per tant, tres valors corresponen a la posició 3 (la part superior dreta), tres corresponen a la posició 7 (el centre) i dos corresponen a la posició 11 (la part inferior dreta).
Un cop s’ha produït la generació aleatòria i s’ha donat a l’asteroide un estat inicial, flueix horitzontalment cap al vaixell sense interrupcions.
0 ← 1 ← 2 ← 3
4 ← 5 ← 6 ← 7
11 ← 10 ← 9 ← 8
El rellotge utilitzat per a la següent lògica d’estat de la roca controla la velocitat del joc; a través de proves i errors, hem trobat que 9999999 és un bon valor pel seu recompte màxim.
La lògica del vaixell funciona inicialitzant-se a la posició central (posició 4) a l’extrem esquerre. Si es prem el botó superior o inferior, el vaixell es mourà cap amunt i cap avall fins a la posició 0 i 11 corresponent al botó que s’ha premut.
Per tal que el moviment del vaixell se sentís bé per a l'usuari, no vam fer que el seu moviment fos asíncron. Hem utilitzat un rellotge per als seus canvis d’estat i hem utilitzat un recompte màxim de 5555555.
Pas 4: visualització del resultat
El descodificador binari a 7 segments pren les variables de posició de 4 bits per al vaixell i l'asteroide i mostra la imatge adequada (ja sigui el vaixell i la roca o el missatge "BAnG").
Per aconseguir-ho, comprova primer si els dos són iguals i després mostra el missatge "BAnG" si el xec torna cert.
Si no es torna cert, el descodificador mostrarà el vaixell i la roca canviant entre ells a una freqüència de rellotge molt alta i enganyant la vista perquè els vegi com si estiguessin visualitzats al mateix temps.
Pas 5: ajuntar-ho tot
Vam incloure el FSM del vaixell i la roca en un FSM gran que vam connectar a la pantalla FSM. Les entrades del joc són el botó amunt i el botó avall de la placa BASYS3 i el rellotge del sistema. Les sortides són els vectors de segments i ànodes de set segments de visualització.
Aquestes entrades i sortides es veuran al fitxer de restriccions on es mapen els ports.
Pas 6: futures modificacions
En el futur, afegir més funcionalitats de moviment de vaixells al projecte seria una millora. Això es pot aconseguir simplement donant dues entrades de botó més i permetent que el vaixell prengui posicions (estats) diferents de 0, 4 i 8. Una altra possible modificació podria ser controlar el següent estat de temps de l'asteroide perquè comenci lentament i augmenti la velocitat 1,5 vegades cada vegada que perd el vaixell fins que rep un cop, on es reiniciaria i tornaria a ser lent. Això augmentaria la dificultat del joc i el faria més divertit per a l'usuari si s'implementés, i es podria fer creant una variable per al recompte màxim del següent rellotge d'estat de la roca, multiplicant aquesta variable per 1,5 cada vegada que l'asteroide no No he arribat i restableix-lo al seu valor inicial cada vegada que toca la roca.
Pas 7: Conclusió
Aquest projecte ens ha ajudat a entendre millor les màquines d'estats finits, els rellotges i la visualització interactiva a les pantalles de set segments.
El més important de les màquines d'estat finit és que és important saber (recordar) en quin estat es troba actualment per passar al següent estat desitjat. Irònicament, bons consells sobre la vida; has de saber on ets per saber cap a on vas.
Mitjançant la manipulació de diferents instàncies de rellotges, vam poder generar números a l’atzar, moure la roca a la següent posició i gestionar la visualització de la nau, la roca i el missatge de final de joc.
Hem après que no es poden mostrar més d'un ànode alhora. El mòdul que ens van donar va aprofitar que l'ull humà només pot veure la diferència fins a una freqüència determinada. Per tant, es va escollir una freqüència més alta d’anodes de commutació. El vaixell i la roca que es veuen al mateix temps és en realitat una al·lusió, ja que cadascun es mostra per separat, però molt ràpidament. Aquest concepte es va aplicar per mostrar el moviment del vaixell, la roca i el missatge "BAnG".
Recomanat:
Joc de laberint 3d amb Arduino: 8 passos (amb imatges)
Joc de laberint 3d amb Arduino: Hola amics, així que avui farem un joc de laberint amb ARDUINO UNO. Com que Arduino Uno és el tauler més utilitzat, és molt divertit fer jocs amb ell. En aquest Instructable permet fer el joc de laberint que es controla mitjançant palanques de control. No oblideu
Joc magnètic de Plinko amb Makey Makey: 6 passos (amb imatges)
Magnetic Plinko Game With Makey Makey: Olá, em seguida, mostrarei com criar amb un joc magnètic de Plinko com Makey Makey. Makey.Para a construção do painel, fui
QuizzPi, un joc de trivia Raspberry Pi amb Python: 7 passos (amb imatges)
QuizzPi, un joc de trivia Raspberry Pi amb Python: QuizzPi és un joc de trivia tipus arcade. QuizzPi va néixer perquè tenia la necessitat de divertir-me a la meva filla. Té 7 anys i ja exigeix l’ús de noves tecnologies, la idea era crear quelcom que fos alhora divertit i educatiu
Joc de memòria amb tacte (Simon Says) - Si això és així: 6 passos (amb imatges)
Joc de memòria amb tacte (Simon Says) - If This Then That: vaig fer un joc de memòria amb coixinets tàctils de fabricació pròpia i un anell de neopíxels per a un projecte escolar. Aquest joc és similar a Simon Says, tret que moltes formes d’entrada i retroalimentació (sons i efectes de llum) són diferents. Vaig programar sons de Su
Joc de laberint per controlar amb un telèfon intel·ligent: 5 passos (amb imatges)
Joc de laberint per controlar amb un telèfon intel·ligent: joc de laberint per controlar amb un telèfon intel·ligent. El laberint es mou segons la pendent del telèfon intel·ligent. En primer lloc, vegeu el vídeo. Raspberry Pi és un servidor de Websocket. El telèfon intel·ligent és un client de Websocket. El telèfon intel·ligent envia el ti