Satura rādītājs:

FPGA asteroīdu spēle: 7 soļi (ar attēliem)
FPGA asteroīdu spēle: 7 soļi (ar attēliem)

Video: FPGA asteroīdu spēle: 7 soļi (ar attēliem)

Video: FPGA asteroīdu spēle: 7 soļi (ar attēliem)
Video: Sound of the '90s: The Gravis Ultrasound Card Revival 2024, Novembris
Anonim
FPGA asteroīdu spēle
FPGA asteroīdu spēle

Mūsu CPE 133 galīgajam projektam mēs nolēmām izveidot asteroīdu spēli mūsu FPGA, izmantojot divus spiedpogas slēdžus un 7 segmentu displeju. Spēle darbojas tā, ka asteroīds nārsto vienā no trim nejauši izvēlētām rindām un nāk pretī kuģim 7 segmentu displeja otrā pusē. Augšējo pogu un apakšējo pogu var izmantot, lai pārvietotu savu kuģi no asteroīda ceļa. Ja tas nav izdarīts, displejā uz brīdi tiek rādīts uzraksts “BAnG” un pēc tam spēle tiek ātri restartēta, lai lietotājs varētu mēģināt vēlreiz. Tālāk ir īsi aprakstīts, kā projekts tika izveidots, lai jebkurš lietotājs varētu atkārtot vai uzlabot mūsu dizainu.

1. darbība. Pārskats

Pārskats
Pārskats
Pārskats
Pārskats

Projekts lielā mērā sastāv no Finite State Machines (FSM), kas izmanto loģiku, lai pārsūtītu FPGA starp valstīm, kurās tiek glabātas un attēlotas dažādas kuģu un klinšu pozīciju vērtības. Divi galvenie moduļi ir spēļu FSM akmeņiem un kuģiem, kā arī binārais līdz 7 segmentu displeja dekodētājs FSM, kas ir integrēti kopā, izmantojot ļoti vienkāršu VHDL strukturālo modeli.

MFV tika izveidotas kuģa stāvoklim, iežu stāvoklim un 7 segmentu dekodētājam. Kuģa FSM mērķis ir tāds, lai kuģis varētu pārvietoties pareizajā pozīcijā, kad spēlētājs nospiež augšup vai lejup vērsto pogu. MFV ir nepieciešama, jo tai jāatceras, kurā pozīcijā tā bija pēdējā, lai pārietu uz pareizo pozīciju.

Akmens FSM mērķis ir pārvietot iezi pareizajā pozīcijā, pamatojoties uz to, kurā rindā tā atrodas, un pēdējo pozīciju šajā rindā. Turklāt tas seko moduļa pozīcijai, kas to parādīs, un pseido nejauši izvēlas jaunu rindu, lai parādītos nākamajā.

FSM 7 segmentu displeja dekodētājam tika izmantots, lai ne tikai parādītu kuģi un iezi, bet arī lai parādītu “BAnG”, ja kuģa stāvoklis un klints stāvoklis ir vienādi.

2. solis: materiāli

Projektā izmantotie materiāli bija:

  • Basys3 attīstības padome no Digilent, Inc.
  • Vivado dizaina "suite" numurs
  • sseg_dec.vhd (Šis fails mums tika sniegts vietnē Polylearn, un to uzrakstīja Braiens Mīlijs)
  • Clk_div.vhd (Šis fails mums tika sniegts vietnē Polylearn, un to uzrakstīja Braiens Mīlijs)
  • Trīs ierobežota stāvokļa mašīnas (FSM)

3. solis: spēles izveidošana

Spēles veidošana
Spēles veidošana
Spēles veidošana
Spēles veidošana
Spēles veidošana
Spēles veidošana
Spēles veidošana
Spēles veidošana

Spēles modulis tika izveidots, izmantojot uzvedības modelēšanu, lai aprakstītu kuģa un klinšu stāvokli saviem attiecīgajiem MFV. Tā priekšrocība ir tā, ka ir daudz vieglāk modelēt ķēdi uzvedībā, aprakstot, ko tā dara, nevis izdomājot visus komponentus, kas nepieciešami aparatūras projektēšanai.

Akmeņu stāvokļi tika veikti, izmantojot klints pirmajai pozīcijai pseido nejaušo skaitļu ģeneratoru. Lai to paveiktu, mēs devām ģeneratoram savu pulksteni, kas bija ārkārtīgi ātrs salīdzinājumā ar spēles ātrumu. Katrā augošajā malā tiek palielināts trīs bitu skaitlis, un visas tā vērtības atbilst vienam no trim kuģa sākuma stāvokļiem. Tāpēc trīs vērtības atbilst 3. pozīcijai (augšējā labajā stūrī), trīs atbilst 7. pozīcijai (centrā) un divas atbilst 11. pozīcijai (apakšējā labajā stūrī).

Kad nejaušā paaudze ir notikusi un asteroīdam ir piešķirts sākotnējais stāvoklis, tas bez pārtraukumiem plūst horizontāli pret kuģi.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Pulkstenis, ko izmanto klints nākamajai stāvokļa loģikai, kontrolē spēles ātrumu; ar izmēģinājumu un kļūdu palīdzību mēs atklājām, ka 9999999 ir laba vērtība tā maksimālajam skaitam.

Kuģa loģika darbojas, inicializējot centrālajā pozīcijā (4. pozīcija) kreisajā pusē. Ja tiek nospiesta augšējā vai apakšējā poga, kuģis pārvietojas uz augšu un uz leju pozīcijā 0 un 11, kas atbilst nospiestajai pogai.

Lai kuģa kustība lietotājam justos labi, mēs nepadarījām tā kustību asinhronu. Mēs izmantojām pulksteni tā stāvokļa izmaiņām un maksimālo skaitu 5555555.

4. darbība. Rezultāta parādīšana

Binārā līdz 7 segmentu dekodētājs ņem 4 bitu pozīcijas mainīgos lielumus kuģim un asteroīdam un parāda atbilstošo attēlu (vai nu kuģis un klints, vai ziņojums “BAnG”).

Tas tiek panākts, vispirms pārbaudot, vai abi ir vienādi, un pēc tam parādot ziņojumu “BAnG”, ja pārbaude atgriež patiesu.

Ja tas neatgriezīsies patiesībā, dekodētājs parādīs kuģi un iezi, pārslēdzoties starp tiem ar ļoti augstu pulksteņa frekvenci un apmānot acis, lai tie būtu redzami tā, it kā tie tiktu parādīti vienlaikus.

5. solis: salieciet to visu kopā

Visu saliekot kopā
Visu saliekot kopā

Mēs iekļāvām kuģa un klints MFV vienā lielā MFV, ko savienojām ar displeja MFV. Spēles ievade ir augšup un lejup nospiesta poga uz BASYS3 tāfeles un sistēmas pulkstenis. Izejas ir septiņu segmentu un anoda vektori.

Šīs ieejas un izejas būs redzamas ierobežojumu failā, kur tās ir kartētas.

6. darbība. Turpmākās izmaiņas

Nākotnē, uzlabojot kuģa kustības funkcionalitāti, būtu uzlabojums. To var paveikt, vienkārši ievadot vēl 2 taustiņu ievades un ļaujot kuģim ieņemt pozīcijas (stāvokļus), kas nav 0, 4 un 8. Vēl viena iespējama modifikācija varētu būt asteroīda nākamā stāvokļa laika kontrole, lai tas sāktu lēnām un palielinātu ātrumu par 1,5 reizes katru reizi, kad tas nokavē kuģi, līdz tiek sasniegts trāpījums, kur tas atsāktos un atkal kļūtu lēns. Tas palielinātu spēles sarežģītību un padarītu to lietotājam jautrāku, ja tā tiktu ieviesta, un to varētu izdarīt, izveidojot mainīgo lielākam klints nākamā stāvokļa pulksteņa maksimālajam skaitam, reizinot šo mainīgo ar 1,5 katru reizi, kad asteroīds to nedara '' hit '', un atiestatot to uz sākotnējo vērtību katru reizi, kad roks hits.

7. solis. Secinājums

Šis projekts ir palīdzējis mums labāk izprast ierobežotu stāvokli, pulksteņus un interaktīvu attēlošanu septiņu segmentu displejos.

Vislielākā lieta par ierobežota stāvokļa mašīnām ir tā, ka ir svarīgi zināt (atcerēties), kādā stāvoklī jūs pašlaik atrodaties, lai pārietu uz nākamo vēlamo stāvokli. Ironiski, labs dzīves padoms; jums jāzina, kur atrodaties, lai zinātu, kurp dodaties.

Manipulējot ar dažādiem pulksteņu gadījumiem, mēs varējām nejauši ģenerēt skaitļus, pārvietot akmeni uz nākamo pozīciju un pārvaldīt kuģa, klints un spēles beigu ziņojuma parādīšanu.

Mēs uzzinājām, ka vienlaikus nevar parādīt vairāk nekā vienu anodu. Mums dotais modulis izmantoja to, ka cilvēka acs var redzēt atšķirību tikai līdz noteiktai frekvencei. Tātad tika izvēlēta augstāka pārslēgšanas anodu biežums. Vienlaicīgi redzamais kuģis un klints patiesībā ir mājiens, jo katrs tiek parādīts atsevišķi, bet ļoti ātri. Šī koncepcija tika izmantota, lai parādītu kuģa kustību, klinti un ziņojumu “BAnG”.

Ieteicams: