Sisällysluettelo:

FPGA -asteroidipeli: 7 vaihetta (kuvilla)
FPGA -asteroidipeli: 7 vaihetta (kuvilla)

Video: FPGA -asteroidipeli: 7 vaihetta (kuvilla)

Video: FPGA -asteroidipeli: 7 vaihetta (kuvilla)
Video: Представлен TPM 2.0: расширение возможностей ИТ-специалистов с помощью аналитических данных о модулях доверенной платформы 2024, Marraskuu
Anonim
FPGA -asteroidipeli
FPGA -asteroidipeli

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

Yleiskatsaus
Yleiskatsaus
Yleiskatsaus
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

Pelin tekeminen
Pelin tekeminen
Pelin tekeminen
Pelin tekeminen
Pelin tekeminen
Pelin tekeminen
Pelin tekeminen
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

Kokonaisuuden yhdistäminen
Kokonaisuuden yhdistäminen

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: