Sisällysluettelo:
- Vaihe 1: Yleiskatsaus
- Vaihe 2: Materiaalit
- Vaihe 3: Pelin tekeminen
- Vaihe 4: Tuloksen näyttäminen
- Vaihe 5: Yhdistä kaikki
- Vaihe 6: Tulevat muutokset
- Vaihe 7: Johtopäätös
Video: FPGA -asteroidipeli: 7 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:03
CPE 133 Final -projektia varten päätimme luoda asteroidipelin FPGA-laitteellemme käyttämällä kahta painikekytkintä ja 7-segmenttistä näyttöä. Peli toimii siten, että asteroidi kutee yhdelle kolmesta satunnaisesti valitusta rivistä ja tulee loukkaamaan kohti laivaa 7-segmentin näytön toisella puolella. Ylä- ja alapainiketta voidaan käyttää aluksen siirtämiseen asteroidin tieltä. Jos näin ei tapahdu, näytössä lukee hetken ajan "BAnG" ja käynnistetään sitten peli uudelleen nopeasti, jotta käyttäjä voi yrittää uudelleen. Seuraavassa on lyhyt kuvaus siitä, miten projekti tehtiin, jotta kuka tahansa käyttäjä voi kopioida tai parantaa suunnittelua.
Vaihe 1: Yleiskatsaus
Projekti koostuu suurelta osin Finite State Machines (FSM) -laitteista, jotka käyttävät logiikkaa FPGA: n siirtämiseen tilojen välillä, jotka tallentavat ja näyttävät eri arvot aluksen ja kallion asemista. Kaksi päämoduulia ovat pelin FSM: t rockille ja aluksille sekä binäärinen ja 7-segmenttinen näyttödekooderi FSM, jotka on integroitu yhteen käyttäen erittäin yksinkertaista rakenteellista mallia VHDL: ssä.
Mikronesiat luotiin aluksen sijaintia, kallion asemaa ja 7-segmentin dekooderia varten. Aluksen FSM: n tarkoitus on, että alus voi siirtyä oikeaan paikkaan, kun pelaaja painaa ylös- tai alas -painiketta. Mikronesiaa tarvitaan, koska sen on muistettava viimeisessä asennossaan siirtyäkseen oikeaan asentoon.
Kiven FSM: n tarkoituksena on siirtää kivi oikeaan asentoon sen mukaan, millä rivillä se on ja viimeisellä paikalla kyseisellä rivillä. Lisäksi se seuraa sen näyttävän moduulin sijaintia ja valitsee näennäissatunnaisesti uuden rivin, joka ilmestyy seuraavaksi.
Seitsemän segmentin näyttödekooderin FSM: ää käytettiin paitsi aluksen ja kallion näyttämiseen myös "BAnG" näyttämiseen, kun aluksen sijainti ja kallion sijainti ovat samat.
Vaihe 2: Materiaalit
Hankkeessa käytetyt materiaalit olivat:
- Basile3 Development Board, Digilent, Inc.
- Vivado Design -sviitti
- sseg_dec.vhd (Tämä tiedosto toimitettiin meille Polylearnissa ja kirjoitti Bryan Mealy)
- Clk_div.vhd (Tämä tiedosto toimitettiin meille Polylearnissa ja kirjoitti Bryan Mealy)
- Kolme äärellistä tilakonetta (FSM)
Vaihe 3: Pelin tekeminen
Pelimoduuli luotiin käyttäytymismallinnuksella kuvaamaan aluksen ja kallion tilat omille FSM -laitteilleen. Tämän etuna on, että piirin mallintaminen käyttäytymiseen on paljon helpompaa kuvaamalla, mitä se tekee sen sijaan, että selvittäisi kaikki laitteiston suunnittelussa tarvittavat komponentit.
Kalliotilat tehtiin käyttämällä pseudo -satunnaislukugeneraattoria kiven ensimmäiselle sijainnille. Tämän saavuttamiseksi annoimme generaattorille oman kellonsa, joka oli erittäin nopea suhteessa pelin nopeuteen. Jokaisella nousevalla reunalla lisätään kolmen bitin numero, ja kaikki sen arvot vastaavat yhtä aluksen kolmesta aloitustilasta. Siksi kolme arvoa vastaa kohtaa 3 (ylhäällä oikealla), kolme paikkaa 7 (keskellä) ja kaksi arvoa 11 (alhaalla oikealla).
Kun satunnainen sukupolvi on tapahtunut ja asteroidille on annettu alkutila, se virtaa vaakasuoraan kohti alusta ilman keskeytyksiä.
0 ← 1 ← 2 ← 3
4 ← 5 ← 6 ← 7
11 ← 10 ← 9 ← 8
Kallion seuraavaan tilalogiikkaan käytetty kello ohjaa pelin nopeutta; havaitsimme kokeilun ja erehdyksen kautta, että 9999999 on hyvä arvo sen enimmäismäärälle.
Laivan logiikka toimii alustamalla keskiasentoon (asento 4) vasemmanpuoleisella puolella. Jos ylä- tai alapainiketta painetaan, alus siirtyy ylös ja alas asentoihin 0 ja 11, jotka vastaavat painettua painiketta.
Jotta aluksen liike tuntuisi käyttäjältä hyvältä, emme tehneet sen liikettä epätahdiksi. Käytimme kelloa sen tilanmuutoksiin ja enimmäislukua 5555555.
Vaihe 4: Tuloksen näyttäminen
Binäärinen 7-segmenttinen dekooderi ottaa aluksen ja asteroidin 4-bittiset sijaintimuuttujat ja näyttää sopivan kuvan (joko laiva ja kallio tai viesti “BAnG”).
Se suorittaa tämän tarkistamalla ensin, ovatko nämä kaksi yhtä suuret, ja näyttämällä sitten viestin "BAnG", jos tarkistus palauttaa tosi.
Jos se ei palaa totuudeksi, dekooderi näyttää aluksen ja kiven vaihtamalla niiden välillä erittäin korkealla kellotaajuudella ja huijaamalla silmänsä näkemään ne ikään kuin ne näytettäisiin samanaikaisesti.
Vaihe 5: Yhdistä kaikki
Yhdistimme laivan ja kallion FSM: n yhdeksi suureksi FSM: ksi, joka kytkettiin näytön FSM: ään. Pelin tulot ovat ylös- ja alas -painike BASYS3 -kortilla ja järjestelmän kello. Lähdöt ovat segmentti- ja anodivektorit, seitsemän segmenttinäyttöä.
Nämä tulot ja lähdöt näkyvät rajoitustiedostossa, jossa ne on liitetty porttiin.
Vaihe 6: Tulevat muutokset
Tulevaisuudessa parannusta lisäämällä aluksen liikkeen toimintoja hankkeeseen. Tämä voidaan tehdä yksinkertaisesti antamalla 2 painikkeen lisäsyöttöä ja antamalla aluksen ottaa muut asemat (tilat) kuin 0, 4 ja 8. Toinen mahdollinen muutos voisi olla asteroidin seuraavan tilan ajoituksen ohjaaminen siten, että se alkaa hitaasti ja lisää nopeutta 1,5 kertaa joka kerta, kun se osuu laivaan, kunnes se saa osuman, jolloin se käynnistyy uudelleen ja hidastuu jälleen. Tämä lisäisi pelin vaikeutta ja tekisi siitä hauskempaa käyttäjälle, jos se toteutettaisiin, ja se voitaisiin tehdä luomalla muuttuja rockin seuraavan tilakellon enimmäismääräksi kertomalla tämä muuttuja 1,5: llä joka kerta, kun asteroidi ei Älä osu, ja palauta se alkuperäiseen arvoonsa aina, kun rock osuu.
Vaihe 7: Johtopäätös
Tämä projekti on auttanut meitä ymmärtämään paremmin äärellisiä tilakoneita, kelloja ja interaktiivista näyttöä seitsemän segmentin näytöillä.
Suurin asia äärellisissä tilakoneissa on se, että on tärkeää tietää (muistaa), missä tilassa olet tällä hetkellä, jotta voit siirtyä seuraavaan haluttuun tilaan. Ironista kyllä, hyviä elämänohjeita; sinun on tiedettävä missä olet, jotta tiedät minne olet menossa.
Käsittelemällä eri kellotapauksia pystyimme luomaan satunnaisesti numeroita, siirtämään kiven seuraavalle paikalle ja hallitsemaan aluksen, kiven ja pelin lopun viestin näyttämistä.
Opimme, että useampaa kuin yhtä anodia ei voida näyttää samanaikaisesti. Meille annettu moduuli hyödynsi sitä, että ihmissilmä näkee eron vain tiettyyn taajuuteen asti. Joten valittiin korkeampi kytkentäanodien taajuus. Laiva ja kallio, jotka nähdään samanaikaisesti, on itse asiassa viittaus, koska jokainen näytetään erikseen, mutta hyvin nopeasti. Tätä käsitettä käytettiin aluksen liikkeen, kiven ja "BAnG" -viestin näyttämiseen.
Suositeltava:
FPGA Cyclone IV DueProLogic Controls Raspberry Pi -kamera: 5 vaihetta
FPGA Cyclone IV DueProLogic Controls Raspberry Pi -kamera: FPGA DueProLogic on virallisesti suunniteltu Arduinolle, mutta aiomme tehdä FPGA: sta ja Raspberry Pi 4B: stä kommunikoitavia. FPGA kääntää kulmaa
FPGA Cyclone IV DueProLogic - Painike ja LED: 5 vaihetta
FPGA Cyclone IV DueProLogic - Painike ja LED: Tässä opetusohjelmassa aiomme käyttää FPGA: ta ulkoisen LED -piirin ohjaamiseen. Toteutamme seuraavat tehtävät (A) Käytä FPGA Cyclone IV DuePrologicin painikkeita LED: in ohjaamiseen. (B) Salaman merkkivalo palaa & pois käytöstä ajoittainVideoesittelylaboratorio
FPGA Cyclone IV DueProLogic Controls Servomoottori: 4 vaihetta
FPGA Cyclone IV DueProLogic Controls Servomoottori: Tässä opetusohjelmassa aiomme kirjoittaa Verilog -koodin servomoottorin ohjaamiseen. Servo SG-90 on Wavesharen valmistama. Kun ostat servomoottorin, saatat saada tietolomakkeen, jossa luetellaan käyttöjännite, suurin vääntömomentti ja ehdotettu pu
DIY VR -juoksumatto- Basys3 FPGA-Digilent -kilpailu: 3 vaihetta
DIY VR -juoksumatto- Basys3 FPGA-Digilent -kilpailu: Haluatko rakentaa VR-juoksumaton, jolla voit käyttää työpöytäsovelluksiasi ja -pelejäsi? Sitten olet tullut oikeaan paikkaan! Perinteisissä peleissä käytät hiirtä ja näppäimistöä vuorovaikutuksessa ympäristön kanssa. Siksi meidän on lähetettävä
Arduino halvalla leipälevyllä FPGA: 5 vaihetta (kuvilla)
Arduino halvalla leipälevyllä FPGA: Laitteiston logiikkapiirien suunnittelu voi olla hauskaa. Vanhan koulun tapa tehdä tämä oli NAND -porteilla, leipätaululla, kytketty hyppyjohtimilla. Tämä on edelleen mahdollista, mutta ei mene paljon ennen kuin porttien määrä kaatuu käsistä. Uutta vaihtoehtoa