Sisukord:

FPGA asteroidimäng: 7 sammu (piltidega)
FPGA asteroidimäng: 7 sammu (piltidega)

Video: FPGA asteroidimäng: 7 sammu (piltidega)

Video: FPGA asteroidimäng: 7 sammu (piltidega)
Video: Лекция №1 "Что умеют FPGA и зачем они нужны?" 2024, Oktoober
Anonim
FPGA asteroidide mäng
FPGA asteroidide mäng

Meie CPE 133 lõpliku projekti jaoks otsustasime luua oma FPGA-le kahe astmelise mängu, kasutades kahte nupunuppu ja 7-segmendilist ekraani. Mäng toimib nii, et asteroid kudeb ühte kolmest juhuslikult valitud reast ja tuleb 7-segmendilise ekraani teisel poolel laeva poole. Ülemise ja alumise nupuga saab oma laeva asteroidi teelt eemale viia. Kui seda ei tehta, kuvatakse ekraanil hetkeks „BAnG” ja seejärel taaskäivitatakse mäng kiiresti, et kasutaja saaks uuesti proovida. Järgnevalt kirjeldatakse lühidalt, kuidas projekt koostati, et iga kasutaja saaks meie disaini korrata või täiustada.

1. samm: ülevaade

Ülevaade
Ülevaade
Ülevaade
Ülevaade

Projekt koosneb suuresti Finite State Machines (FSM) seadmetest, mis kasutavad loogikat FPGA ülekandmiseks olekute vahel, mis salvestavad ja kuvavad erinevaid laeva- ja kivipositsiooni väärtusi. Kaks peamist moodulit on kivimite ja laevade mängude FSM-id ning binaarne kuni 7-segmendiline kuvaridekooder FSM, mis on integreeritud VHDL-i väga lihtsa struktuurimudeli abil.

FSM-id loodi laeva asukoha, kivimite asukoha ja 7-segmendilise dekoodri jaoks. Laeva FSM eesmärk on, et laev saaks liikuda õigesse asendisse, kui mängija vajutab üles või alla nuppu. Mikroneesia on vajalik, sest õigele positsioonile liikumiseks peab ta meeles pidama, millises asendis see viimati oli.

Kivi FSM -i eesmärk on viia kivim õigesse asendisse, lähtudes sellest, millises reas see on ja selle rea viimases asendis. Lisaks jälgib see seda kuvava mooduli asukohta ja valib pseudojuhuslikult järgmise rea kuvamiseks uue rea.

7-segmendilise kuvari dekoodri FSM-i kasutati mitte ainult laeva ja kivimi kuvamiseks, vaid ka „BAnG” kuvamiseks, kui laeva ja kivimi asukoht on samad.

2. samm: materjalid

Projektis kasutatud materjalid olid:

  • Basile3 arendusnõukogu firmast Digilent, Inc.
  • Vivado Design Suite
  • sseg_dec.vhd (See fail esitati meile saidil Polylearn ja selle kirjutas Bryan Mealy)
  • Clk_div.vhd (See fail esitati meile saidil Polylearn ja selle kirjutas Bryan Mealy)
  • Kolm piiratud olekuga masinat (FSM)

3. samm: mängu loomine

Mängu tegemine
Mängu tegemine
Mängu tegemine
Mängu tegemine
Mängu tegemine
Mängu tegemine
Mängu tegemine
Mängu tegemine

Mängumoodul loodi käitumusliku modelleerimise abil, et kirjeldada laeva ja kiviseisundit nende enda FSMide jaoks. Selle eeliseks on see, et skeemi käitumist on palju lihtsam modelleerida, kirjeldades, mida see teeb, selle asemel, et välja selgitada kõik riistvara projekteerimiseks vajalikud komponendid.

Kivimite olekud tehti kivimi esimese positsiooni jaoks pseudo -juhuslike arvude generaatori abil. Selle saavutamiseks andsime generaatorile oma kella, mis oli mängu kiirusega võrreldes ülikiire. Igal tõusval serval suurendatakse kolmebitist numbrit ja kõik selle väärtused vastavad ühele laeva kolmest algusolekust. Seetõttu vastavad kolm väärtust positsioonile 3 (üleval paremal), kolm vastavad positsioonile 7 (keskel) ja kaks vastavad positsioonile 11 (all paremal).

Kui juhuslik genereerimine on toimunud ja asteroid on saanud algseisundi, voolab see horisontaalselt laeva poole ilma katkestusteta.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Roki järgmise olekuloogika jaoks kasutatav kell kontrollib mängu kiirust; leidsime katse -eksituse meetodil, et 9999999 on selle maksimaalse arvu jaoks hea väärtus.

Laeva loogika toimib, lähtestades vasakpoolses servas keskmisesse asendisse (positsioon 4). Kui vajutada ülemist või alumist nuppu, liigub laev üles ja alla asendisse 0 ja 11, mis vastab vajutatud nupule.

Selleks, et laeva liikumine kasutajale hästi tunduks, ei muutnud me selle liikumist asünkroonseks. Kasutasime oleku muutmiseks kella ja maksimaalset arvu 5555555.

4. samm: tulemuse kuvamine

Binaarne kuni 7-segmendiline dekooder võtab laeva ja asteroidi 4-bitised positsioonimuutujad ning kuvab sobiva pildi (kas laev ja kivi või teade „BAnG”).

See saavutab selle, kontrollides kõigepealt, kas need kaks on võrdsed, ja kuvab seejärel teate „BAnG”, kui kontroll tagastab tõese.

Kui see ei vasta tõele, kuvab dekooder laeva ja kivimit, vahetades nende vahel väga kõrge taktsagedusega ja petta silma, et nad näeksid neid nii, nagu neid kuvatakse samal ajal.

Samm: pange see kõik kokku

Kõike kokku panema
Kõike kokku panema

Me hõlmasime laeva ja kivi FSM -i ühes suures FSM -is, mille ühendasime kuvari FSM -iga. Mängu sisendid on üles- ja allanupp BASYS3 plaadil ja süsteemikell. Väljunditeks on segmendi- ja anoodvektorid seitse segmenti.

Neid sisendeid ja väljundeid näeb piirangute failis, kus need on portide kaardistatud.

6. samm: tulevased muudatused

Tulevikus oleks laevade liikumise funktsionaalsuse lisamine projektile parem. Selle saavutamiseks piisab lihtsalt kahe nupuvajutuse lisamisest ja laeval muude positsioonide (olekute) võtmisest kui 0, 4 ja 8. Teine võimalik muudatus võib olla asteroidi järgmise oleku ajastuse juhtimine nii, et see käivitub aeglaselt ja suurendab kiirust 1,5 korda iga kord, kui ta laevast mööda läheb, kuni see löögi saab, kus see taaskäivitub ja muutub uuesti aeglaseks. See suurendaks mängu keerukust ja muudaks selle rakendamise korral kasutajale lõbusamaks ning seda saaks teha, luues muutuja kalju järgmise olekukella maksimaalseks arvuks, korrutades selle muutuja 1,5 -ga iga kord, kui asteroid seda ei tee Ära löö, ja lähtesta see algsele väärtusele iga kord, kui rokk tabab.

Samm 7: Järeldus

See projekt on aidanud meil paremini mõista piiratud olekuga masinaid, kellasid ja interaktiivset kuvamist seitsme segmendi kuvaritel.

Piiratud olekuga masinate puhul on suurim asi see, et järgmisse soovitud olekusse liikumiseks on oluline teada (meeles pidada), millises olekus te praegu olete. Irooniline, head elunõuanded; sa pead teadma, kus sa oled, et teada, kuhu sa lähed.

Erinevate kellajuhtumitega manipuleerides suutsime juhuslikult genereerida numbreid, viia kivi järgmisele positsioonile ja hallata laeva, kivi ja mängu lõpusõnumi kuvamist.

Saime teada, et rohkem kui ühte anoodi ei saa korraga kuvada. Meile antud moodul kasutas ära, et inimsilm näeb erinevust ainult teatud sageduseni. Seega valiti anoodide vahetamise kõrgem sagedus. Samaaegselt nähtud laev ja kivi on tegelikult vihje, kuna igaüks kuvatakse eraldi, kuid väga kiiresti. Seda kontseptsiooni kasutati laeva, kivi ja teate „BAnG” liikumise kuvamiseks.

Soovitan: