Innehållsförteckning:

FPGA Asteroid Game: 7 steg (med bilder)
FPGA Asteroid Game: 7 steg (med bilder)

Video: FPGA Asteroid Game: 7 steg (med bilder)

Video: FPGA Asteroid Game: 7 steg (med bilder)
Video: Asteroids game using FPGA 2024, Oktober
Anonim
FPGA Asteroid Game
FPGA Asteroid Game

För vårt CPE 133-slutprojekt bestämde vi oss för att skapa ett asteroidespel på vår FPGA med två tryckknappar och 7-segmentskärmen. Spelet fungerar så att en asteroid gyter i en av tre slumpmässigt valda rader, och kommer tappande mot skeppet på andra sidan av 7-segmentet. Den övre knappen och den nedre knappen kan användas för att flytta ditt skepp ur vägen för asteroiden. Vid misslyckande visar displayen "BAnG" en stund och startar sedan om spelet snabbt så att användaren kan försöka igen. Det som följer är en kort beskrivning av hur projektet gjordes så att alla användare kan replikera eller förbättra vår design.

Steg 1: Översikt

Översikt
Översikt
Översikt
Översikt

Projektet består till stor del av Finite State Machines (FSM), som använder logik för att överföra FPGA mellan stater som lagrar och visar olika värden för fartygs- och bergpositioner. De två stora modulerna är spelet FSM för berget och fartyget, och den binära till 7-segmentiga displaydekodern FSM, som är integrerade tillsammans med en mycket enkel strukturell modell i VHDL.

FSM skapades för fartygets position, bergets position och för 7-segments avkodare. Syftet med fartygets FSM är så att fartyget kan flytta till rätt position när spelaren trycker på en upp- eller nedknapp. FSM behövs eftersom det måste komma ihåg vilken position det var senast för att flytta till rätt position.

Syftet med bergets FSM är att flytta berget till rätt position baserat på vilken rad den är i och den sista positionen i den raden. Dessutom håller den koll på positionen för modulen som kommer att visa den och pseudo-slumpmässigt väljer en ny rad för att visas på nästa.

FSM för 7-segments displaydekoder användes för att inte bara visa fartyget och berget utan också för att visa “BAnG” när fartygets position och bergläget är desamma.

Steg 2: Material

Materialen som användes i projektet var:

  • Basys3 Development Board från Digilent, Inc.
  • Vivado Design Suite
  • sseg_dec.vhd (Denna fil levererades till oss på Polylearn och skrevs av Bryan Mealy)
  • Clk_div.vhd (Denna fil levererades till oss på Polylearn och skrevs av Bryan Mealy)
  • Three Finite State Machines (FSM)

Steg 3: Gör spelet

Att göra spelet
Att göra spelet
Att göra spelet
Att göra spelet
Att göra spelet
Att göra spelet
Att göra spelet
Att göra spelet

Spelmodulen skapades genom att använda beteendemodellering för att beskriva fartygets och rockens tillstånd för sina egna respektive FSM. Fördelen med detta är att det är mycket lättare att modellera kretsen beteendemässigt genom att beskriva vad den gör snarare än att räkna ut alla komponenter som behövs för att designa hårdvaran.

Bergstaterna gjordes med hjälp av en pseudo -slumptalsgenerator för bergets första position. För att uppnå detta gav vi generatorn en egen klocka som var extremt snabb i förhållande till spelets hastighet. På varje stigande kant ökas ett tre bitars nummer och alla dess värden motsvarar ett av tre starttillstånd för fartyget. Därför motsvarar tre värden position 3 (uppe till höger), tre motsvarar position 7 (mitten) och två motsvarar position 11 (nedre högra).

När den slumpmässiga generationen har inträffat och asteroiden har fått ett initialtillstånd flyter den horisontellt mot skeppet utan avbrott.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Klockan som används för bergets nästa tillståndslogik styr spelets hastighet; vi fann genom försök och fel att 9999999 är ett bra värde för dess maxantal.

Fartygets logik fungerar genom att initialisera till mittläget (position 4) längst till vänster. Om du trycker på den övre eller nedre knappen kommer fartyget att flytta upp och ner till position 0 och 11 motsvarande knappen som har tryckts in.

För att få fartygsrörelsen att må bra för användaren gjorde vi inte dess rörelse asynkron. Vi använde en klocka för dess tillståndsändringar och vi använde ett maxantal på 5555555.

Steg 4: Visar resultatet

Den binära till 7-segmentiga avkodaren tar in 4-bitars positionsvariabler för fartyget och asteroiden och visar lämplig bild (antingen fartyget och berget eller meddelandet "BAnG").

Det uppnås genom att först kontrollera om de två är lika och sedan visa meddelandet “BAnG” om kontrollen returnerar sant.

Om det inte återkommer sant kommer avkodaren att visa fartyget och berget genom att växla mellan dem med en mycket hög klockfrekvens och lura ögat att se dem som om de visas samtidigt.

Steg 5: Sätta ihop allt

Få alltid att falla på plats
Få alltid att falla på plats

Vi omfattade fartygets och rockens FSM i en stor FSM som vi kopplade till displayen FSM. Ingångarna till spelet är upp -knappen och ned -knappen på BASYS3 -kortet och systemklockan. Utgångarna är segment- och anodvektorerna sju segmentvisning.

Dessa in- och utgångar kommer att ses i begränsningsfilen där de är mappade.

Steg 6: Framtida ändringar

I framtiden skulle det bli en förbättring att lägga till fler funktioner för fartygsrörelse i projektet. Detta kan åstadkommas helt enkelt genom att ge ytterligare två knappar och låta fartyget ta andra positioner (tillstånd) än 0, 4 och 8. En annan möjlig modifiering kan vara att styra asteroidens nästa tillståndstiming så att det börjar långsamt och öka hastigheten med 1,5 gånger varje gång det missar skeppet tills det får en träff, där det skulle starta om och bli långsamt igen. Detta skulle öka svårigheten för spelet och göra det roligare för användaren om det implementerades, och kan göras genom att skapa en variabel för maxräkningen för bergets nästa tillståndsklocka, multiplicera den variabeln med 1,5 varje gång asteroiden inte gör det inte slå, och återställa det till det ursprungliga värdet varje gång rocken träffar.

Steg 7: Slutsats

Detta projekt har hjälpt oss att bättre förstå finita tillståndsmaskiner, klockor och interaktivt visa på sjusegmentsdisplayerna.

Det största med ändliga tillståndsmaskiner är att det är viktigt att veta (kom ihåg) i vilket tillstånd du befinner dig för närvarande för att gå till nästa önskade tillstånd. Ironiskt nog, bra livsråd; du måste veta var du är för att veta vart du ska.

Genom att manipulera olika instanser av klockor kunde vi slumpmässigt generera nummer, flytta berget till nästa position och hantera visningen av fartyget, berget och budskapet i slutet av spelet.

Vi fick veta att mer än en anod inte kan visas samtidigt. Modulen som vi fick utnyttjade att det mänskliga ögat bara kan se skillnaden upp till en viss frekvens. Så en högre frekvens för växlingsanoder valdes. Fartyget och berget som ses samtidigt är faktiskt en anspelning eftersom varje visas separat, men mycket snabbt. Det konceptet tillämpades för att visa fartygets, bergets och”BAnG” -rörelsen.

Rekommenderad: