INHOUDSOPGAWE:

FPGA -asteroïdespel: 7 stappe (met foto's)
FPGA -asteroïdespel: 7 stappe (met foto's)

Video: FPGA -asteroïdespel: 7 stappe (met foto's)

Video: FPGA -asteroïdespel: 7 stappe (met foto's)
Video: Ik Leerde Realistisch Tekenen Binnen 7 Dagen! 2024, Oktober
Anonim
FPGA Asteroïdespel
FPGA Asteroïdespel

Vir ons CPE 133-finale projek het ons besluit om 'n asteroïdespel op ons FPGA te skep met behulp van twee drukknoppies en die 7-segment-skerm. Die spel werk so dat 'n asteroïde in een van die drie willekeurig geselekteerde rye uitbroei en teen die skip aan die ander kant van die 7-segment vertoon kom. Die boonste en onderste knoppie kan gebruik word om u skip uit die pad van die asteroïde te beweeg. As u dit nie gedoen het nie, lees die skerm 'BAnG' vir 'n oomblik en herlaai dan die speletjie vinnig sodat die gebruiker weer kan probeer. Hierna volg 'n kort beskrywing van hoe die projek gemaak is, sodat elke gebruiker ons ontwerp kan herhaal of verbeter.

Stap 1: Oorsig

Oorsig
Oorsig
Oorsig
Oorsig

Die projek bestaan grotendeels uit Finite State Machines (FSM's), wat logika gebruik om die FPGA oor te dra tussen state wat verskillende waardes van skeep- en rotsposisies stoor en vertoon. Die twee belangrikste modules is die spel FSM's vir die rots en die skip, en die binêre tot 7-segment vertoondekodeerder FSM, wat saam geïntegreer word met behulp van 'n baie eenvoudige strukturele model in VHDL.

FSM's is geskep vir die posisie van die skip, die posisie van die rots en vir die 7-segment-dekodeerder. Die doel van die skip se FSM is sodat die skip na die regte posisie kan beweeg as die speler op 'n op- of afknoppie druk. Die FSM is nodig omdat dit moet onthou in watter posisie dit laas was om na die regte posisie te beweeg.

Die doel van die rots se FSM is om die rots na die regte posisie te skuif, gebaseer op watter ry dit is en die laaste posisie in daardie ry. Boonop hou dit die posisie by vir die module wat dit sal vertoon, en kies pseudo-lukraak 'n nuwe ry om volgende te verskyn.

Die FSM vir die 7-segment vertoondekodeerder is gebruik om nie net die skip en die rots te vertoon nie, maar ook om 'BAnG' te vertoon wanneer die skipposisie en die rotsposisie dieselfde is.

Stap 2: materiaal

Die materiaal wat in die projek gebruik is, was:

  • Basys3 Development Board van Digilent, Inc.
  • Vivado Design Suite
  • sseg_dec.vhd (Hierdie lêer is aan ons verskaf op Polylearn en is geskryf deur Bryan Mealy)
  • Clk_div.vhd (Hierdie lêer is aan ons verskaf op Polylearn en is geskryf deur Bryan Mealy)
  • Drie eindige staatsmasjiene (FSM's)

Stap 3: Maak die spel

Die maak van die spel
Die maak van die spel
Die maak van die spel
Die maak van die spel
Die maak van die spel
Die maak van die spel
Die maak van die spel
Die maak van die spel

Die spelmodule is geskep deur gedragsmodellering te gebruik om die toestande van die skip en rock vir hul eie onderskeie FSM's te beskryf. Die voordeel hiervan is dat dit baie makliker is om die kring gedragsmatig te modelleer deur te beskryf wat dit doen, eerder as om al die komponente uit te vind wat nodig is om die hardeware te ontwerp.

Die gesteentestate is gedoen met behulp van 'n pseudo -ewekansige getalgenerator vir die eerste posisie van die gesteente. Om dit te bereik, het ons die kragopwekker sy eie klok gegee wat baie vinnig was in verhouding tot die spoed van die spel. Op elke stygende rand word 'n drie bis getal verhoog, en al sy waardes stem ooreen met een van die drie begin toestande vir die skip. Daarom stem drie waardes ooreen met posisie 3 (regs bo), drie stem ooreen met posisie 7 (die middel), en twee stem ooreen met posisie 11 (regs onder).

Sodra die lukrake generasie plaasgevind het en die asteroïde 'n aanvanklike toestand gekry het, vloei dit sonder onderbreking horisontaal na die skip.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Die klok wat gebruik word vir die rots se volgende staatslogika, beheer die spoed van die spel; ons het deur middel van toetsing en fout gevind dat 9999999 'n goeie waarde vir die maksimum telling is.

Die skip se logika werk deur in die middelste posisie (posisie 4) te begin, heel links. As die boonste of onderste knoppie ingedruk word, beweeg die skip op en af in posisie 0 en 11 wat ooreenstem met die knoppie wat ingedruk is.

Om die skeepsbeweging vir die gebruiker goed te laat voel, het ons die beweging nie asynchroon gemaak nie. Ons het 'n klok gebruik om sy toestand te verander, en ons het 'n maksimum telling van 5555555 gebruik.

Stap 4: Wys die resultaat

Die binêre tot 7-segment dekodeerder neem die 4-bis posisie veranderlikes vir die skip en die asteroïde in en vertoon die gepaste beeld (óf die skip en die rots óf die boodskap "BAnG").

Dit word bereik deur eers te kontroleer of die twee gelyk is en dan die boodskap "BAnG" te vertoon as die tjek waar is.

As dit nie waar word nie, sal die dekodeerder die skip en die rots vertoon deur op 'n baie hoë klokfrekwensie tussen hulle te skakel en die oog te mislei om dit te sien asof dit terselfdertyd vertoon word.

Stap 5: Alles saamvoeg

Om alles bymekaar te sit
Om alles bymekaar te sit

Ons het die FSM van die skip en die rots omvat in een groot FSM wat ons na die FSM op die skerm gekoppel het. Die insette in die spel is die op -knoppie en die af -knoppie op die BASYS3 -bord en die stelselklok. Die uitsette is die segment- en anodevektore sewe segmentvertoon.

Hierdie insette en uitsette sal gesien word in die beperkingslêer waar hulle in die poort gekarteer word.

Stap 6: Toekomstige wysigings

In die toekoms sou dit 'n verbetering wees om meer funksies vir skeepsbeweging by die projek te voeg. Dit kan eenvoudig gedoen word deur nog twee knoppie -insette te gee en die skip toe te laat om ander posisies (toestande) as 0, 4 en 8. in te neem. 1,5 keer elke keer as dit die skip mis totdat dit 'n treffer kry, waar dit weer begin en stadig word. Dit verhoog die moeilikheidsgraad van die spel en maak dit meer aangenaam vir die gebruiker as dit geïmplementeer word, en dit kan gedoen word deur 'n veranderlike te skep vir die maksimum telling van die rots se volgende staatsklok, die veranderlike met 1,5 te vermenigvuldig elke keer as die asteroïde nie slaan nie, en stel dit terug na die oorspronklike waarde elke keer as die rots slaan.

Stap 7: Gevolgtrekking

Hierdie projek het ons gehelp om die eindtoestandsmasjiene, -horlosies en die interaktiewe vertoning op die sewe-segment-skerms beter te verstaan.

Die grootste ding met eindige staatsmasjiene is dat dit belangrik is om te weet (onthou) in watter toestand u tans is om na die volgende gewenste toestand te beweeg. Ironies genoeg goeie lewensadvies; jy moet weet waarheen jy is om te weet waarheen jy op pad is.

Deur verskillende gevalle van horlosies te manipuleer, kon ons willekeurig getalle genereer, die rots na die volgende posisie skuif en die vertoning van die skip, die rots en die einde van die spel boodskap bestuur.

Ons het geleer dat meer as een anode nie gelyktydig vertoon kan word nie. Die module wat aan ons gegee is, het daarby gebaat dat die menslike oog slegs die verskil tot 'n sekere frekwensie kan sien. 'N Hoër frekwensie van skakel -anodes is dus gekies. Die skip en die rots wat gelyktydig gesien word, is eintlik 'n sinspeling, want elkeen word afsonderlik vertoon, maar baie vinnig. Hierdie konsep is toegepas om die beweging van die skip, die rots en die "BAnG" -boodskap te vertoon.

Aanbeveel: