Taula de continguts:

Joc d'asteroides FPGA: 7 passos (amb imatges)
Joc d'asteroides FPGA: 7 passos (amb imatges)

Vídeo: Joc d'asteroides FPGA: 7 passos (amb imatges)

Vídeo: Joc d'asteroides FPGA: 7 passos (amb imatges)
Vídeo: Joc d'Invasió d'Asteroides amb Scratch 2024, Octubre
Anonim
Joc FPGA Asteroid
Joc FPGA Asteroid

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

Visió general
Visió general
Visió general
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

Fent el joc
Fent el joc
Fent el joc
Fent el joc
Fent el joc
Fent el joc
Fent el joc
Fent el 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

Posant-ho tot junt
Posant-ho tot junt

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: