Innehållsförteckning:
- Steg 1: Översikt
- Steg 2: Material
- Steg 3: Gör spelet
- Steg 4: Visar resultatet
- Steg 5: Sätta ihop allt
- Steg 6: Framtida ändringar
- Steg 7: Slutsats
Video: FPGA Asteroid Game: 7 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
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
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
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
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:
Arduino Game Controller + Unity Game: 5 steg
Arduino Game Controller + Unity Game: I detta instruerbara ska jag visa dig hur du bygger/programmerar en arduino game controller som kan ansluta till enhet
Trådlös fjärrkontroll med 2,4 GHz NRF24L01 -modul med Arduino - Nrf24l01 4 -kanals / 6 -kanals sändarmottagare för Quadcopter - Rc helikopter - RC -plan med Arduino: 5 steg (med bilder)
Trådlös fjärrkontroll med 2,4 GHz NRF24L01 -modul med Arduino | Nrf24l01 4 -kanals / 6 -kanals sändarmottagare för Quadcopter | Rc helikopter | Rc -plan med Arduino: Att driva en Rc -bil | Quadcopter | Drone | RC -plan | RC -båt, vi behöver alltid en mottagare och sändare, antag att för RC QUADCOPTER behöver vi en 6 -kanals sändare och mottagare och den typen av TX och RX är för dyr, så vi kommer att göra en på vår
Hur man tar isär en dator med enkla steg och bilder: 13 steg (med bilder)
Hur man tar isär en dator med enkla steg och bilder: Detta är en instruktion om hur man demonterar en dator. De flesta av de grundläggande komponenterna är modulära och lätt att ta bort. Det är dock viktigt att du är organiserad kring det. Detta hjälper dig att inte förlora delar, och även för att göra ommonteringen
Arduino Pocket Game Console + A -Maze - Maze Game: 6 steg (med bilder)
Arduino Pocket Game Console + A -Maze - Maze Game: Välkommen till min första instruerbara! Projektet som jag vill dela med dig idag är Arduino labyrintspel, som blev en fickkonsol lika bra som Arduboy och liknande Arduino -baserade konsoler. Det kan blinka med mina (eller dina) framtida spel tack vare expo
Arduino som en billig brödbräda FPGA: 5 steg (med bilder)
Arduino Som en billig brödbräda FPGA: Att designa hårdvarulogikretsar kan vara kul. Det gamla skolans sätt att göra detta var med NAND -portar, på en brödbräda, anslutna med bygelkablar. Detta är fortfarande möjligt, men det tar inte mycket innan antalet portar går ur hand. Ett nyare alternativ