Indholdsfortegnelse:
- Trin 1: Oversigt
- Trin 2: Materialer
- Trin 3: Lav spillet
- Trin 4: Visning af resultatet
- Trin 5: Sæt det hele sammen
- Trin 6: Fremtidige ændringer
- Trin 7: Konklusion
Video: FPGA Asteroid Game: 7 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Til vores CPE 133-afsluttende projekt besluttede vi at oprette et asteroidespil på vores FPGA ved hjælp af to trykknapkontakter og 7-segment displayet. Spillet fungerer således, at en asteroide gyder i en af tre tilfældigt udvalgte rækker, og kommer skævende mod skibet på den anden side af 7-segmentet display. Den øverste knap og den nederste knap kan bruges til at flytte dit skib væk fra asteroiden. Hvis det ikke lykkes, viser displayet 'BAnG' et øjeblik og genstarter derefter spillet hurtigt, så brugeren kan prøve igen. Det følgende er en kort beskrivelse af, hvordan projektet blev lavet, så enhver bruger kan replikere eller forbedre vores design.
Trin 1: Oversigt
Projektet består stort set af Finite State Machines (FSM'er), som bruger logik til at overføre FPGA mellem stater, der gemmer og viser forskellige værdier af skibs- og klippestillinger. De to store moduler er spillet FSM'er til klippen og skibet og den binære til 7-segmenters displaydekoder FSM, som er integreret sammen ved hjælp af en meget enkel strukturel model i VHDL.
FSM'er blev oprettet til skibets position, klippens position og til 7-segment dekoderen. Formålet med skibets FSM er, så skibet kan bevæge sig til den korrekte position, når spilleren trykker på en op eller ned -knap. FSM er nødvendig, fordi den skal huske, hvilken position den sidst var i for at flytte til den korrekte position.
Formålet med klippens FSM er at flytte klippen til den korrekte position baseret på hvilken række den er i og den sidste position i den række. Derudover holder den styr på positionen for modulet, der vil vise det, og pseudo-tilfældigt vælger en ny række, der skal vises på næste.
FSM til 7-segment display-dekoderen blev brugt til ikke kun at vise skibet og klippen, men også til at vise “BAnG”, når skibets position og bjergpositionen er den samme.
Trin 2: Materialer
Materialerne anvendt i projektet var:
- Basys3 Development Board fra Digilent, Inc.
- Vivado Design Suite
- sseg_dec.vhd (Denne fil blev leveret til os på Polylearn og blev skrevet af Bryan Mealy)
- Clk_div.vhd (Denne fil blev leveret til os på Polylearn og blev skrevet af Bryan Mealy)
- Three Finite State Machines (FSM'er)
Trin 3: Lav spillet
Spillemodulet blev oprettet ved at bruge adfærdsmodellering til at beskrive skibets og rockens tilstande for deres egne respektive FSM'er. Fordelen ved dette er, at det er langt lettere at modellere kredsløbet adfærdsmæssigt ved at beskrive, hvad det gør frem for at finde ud af alle de komponenter, der er nødvendige for at designe hardwaren.
Stenstaterne blev udført ved hjælp af en pseudo -tilfældig talgenerator til klippens første position. For at opnå dette gav vi generatoren sit eget ur, som var ekstremt hurtigt i forhold til spillets hastighed. På hver stigende kant øges et tre bit -nummer, og alle dets værdier svarer til en af tre starttilstande for skibet. Derfor svarer tre værdier til position 3 (øverst til højre), tre svarer til position 7 (midten), og to svarer til position 11 (nederst til højre).
Når den tilfældige generation er sket, og asteroiden har fået en starttilstand, flyder den vandret mod skibet uden afbrydelse.
0 ← 1 ← 2 ← 3
4 ← 5 ← 6 ← 7
11 ← 10 ← 9 ← 8
Uret, der bruges til rockens næste tilstandslogik, styrer spillets hastighed; Vi fandt gennem forsøg og fejl, at 9999999 er en god værdi for dets maksimale antal.
Skibets logik fungerer ved at initialisere til midterpositionen (position 4) yderst til venstre. Hvis der trykkes på den øverste knap eller den nederste knap, bevæger skibet sig op og ned til position 0 og 11 svarende til den knap, der er blevet trykket på.
For at få skibets bevægelse til at føle sig godt for brugeren, gjorde vi ikke dens bevægelse asynkron. Vi brugte et ur til dets tilstandsændringer, og vi brugte et maxantal på 5555555.
Trin 4: Visning af resultatet
Den binære til 7-segment dekoder indtager 4-bit positionsvariablerne for skibet og asteroiden og viser det passende billede (enten skib og sten eller meddelelsen "BAnG").
Det opnår dette ved først at kontrollere, om de to er ens og derefter vise meddelelsen "BAnG", hvis checken returnerer sand.
Hvis det ikke vender tilbage, vil dekoderen vise skibet og klippen ved at skifte mellem dem med en meget høj urfrekvens og narre øjet til at se dem, som om de vises samtidigt.
Trin 5: Sæt det hele sammen
Vi omfattede skibets og rockens FSM i en stor FSM, som vi tilsluttede displayet FSM. Inputene til spillet er op -knappen og ned -knappen på BASYS3 -kortet og systemuret. Outputene er segment- og anodevektorerne syv segment-display.
Disse input og output vil blive set i begrænsningsfilen, hvor de er portkortlagt.
Trin 6: Fremtidige ændringer
I fremtiden ville det være en forbedring at tilføje flere funktioner til skibsbevægelse til projektet. Dette kan opnås ved blot at give yderligere 2 knapindgange og lade skibet indtage andre positioner (tilstande) end 0, 4 og 8. En anden mulig ændring kan være at kontrollere asteroidens næste tilstandstiming, så det starter langsomt og øger hastigheden med 1,5x hver gang det savner skibet, indtil det får et hit, hvor det ville genstarte og blive langsomt igen. Dette ville øge spillets sværhedsgrad og gøre det sjovere for brugeren, hvis det blev implementeret, og det kunne gøres ved at oprette en variabel for den maksimale tælling af klippens næste tilstandsur, multiplicere denne variabel med 1,5 hver gang asteroiden ikke ikke rammer, og nulstiller den til sin oprindelige værdi, hver gang rocken rammer.
Trin 7: Konklusion
Dette projekt har hjulpet os med bedre at forstå endelige tilstandsmaskiner, ure og interaktivt visning på de syv segmenter.
Den største ting ved endelige statsmaskiner er, at det er vigtigt at vide (husk) hvilken tilstand du er i øjeblikket for at flytte til næste ønskede tilstand. Ironisk nok gode livsråd; du skal vide, hvor du er for at vide, hvor du skal hen.
Ved at manipulere forskellige forekomster af ure, kunne vi tilfældigt generere tal, flytte klippen til den næste position og styre visningen af skibet, klippen og slut-of-game-besked.
Vi lærte, at mere end en anode ikke kan vises samtidigt. Det modul, vi fik, udnyttede, at det menneskelige øje kun kan se forskellen op til en bestemt frekvens. Så en højere frekvens for at skifte anoder blev valgt. Skibet og klippen, der ses på samme tid, er faktisk en hentydning, da hver vises separat, men meget hurtigt. Dette koncept blev anvendt til at vise bevægelsen af skibet, klippen og meddelelsen "BAnG".
Anbefalede:
Sådan gør du: Installation af Raspberry PI 4 Headless (VNC) med Rpi-imager og billeder: 7 trin (med billeder)
Sådan gør du: Installation af Raspberry PI 4 Headless (VNC) med Rpi-imager og billeder: Jeg planlægger at bruge denne Rapsberry PI i en masse sjove projekter tilbage i min blog. Tjek det gerne ud. Jeg ville tilbage til at bruge min Raspberry PI, men jeg havde ikke et tastatur eller en mus på min nye placering. Det var et stykke tid siden jeg konfigurerede en hindbær
Sådan adskilles en computer med nemme trin og billeder: 13 trin (med billeder)
Sådan adskilles en computer med nemme trin og billeder: Dette er en instruktion om, hvordan du adskiller en pc. De fleste af de grundlæggende komponenter er modulopbyggede og nemme at fjerne. Det er dog vigtigt, at du er organiseret omkring det. Dette hjælper med at forhindre dig i at miste dele og også ved at lave genmonteringen til
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: 7 trin (med billeder)
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: Selv efter 25 års introduktion til forbrugermarkedet er infrarød kommunikation stadig meget relevant i de seneste dage. Uanset om det er dit 55 tommer 4K -fjernsyn eller dit billydsystem, har alt brug for en IR -fjernbetjening for at reagere på vores
Arduino Pocket Game Console + A -Maze - Maze Game: 6 trin (med billeder)
Arduino Pocket Game Console + A -Maze - Maze Game: Velkommen til min første instruerbare! Det projekt, jeg vil dele med dig i dag, er Arduino labyrintspil, der blev en lommekonsol, der var lige så god som Arduboy og lignende Arduino -baserede konsoller. Det kan flashes med mine (eller dine) fremtidige spil takket være ekspo
Arduino som et billigt brødbræt FPGA: 5 trin (med billeder)
Arduino Som et billigt brødbræt FPGA: Det kan være sjovt at designe hardware logikkredsløb. Den gamle skole måde at gøre dette på var med NAND -porte, på et brødbræt, forbundet med jumperwires. Dette er stadig muligt, men der skal ikke meget til, før antallet af porte kommer ud af hånden. En nyere mulighed