Satura rādītājs:
- 1. darbība. Pārskats
- 2. solis: materiāli
- 3. solis: spēles izveidošana
- 4. darbība. Rezultāta parādīšana
- 5. solis: salieciet to visu kopā
- 6. darbība. Turpmākās izmaiņas
- 7. solis. Secinājums
Video: FPGA asteroīdu spēle: 7 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
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
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 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ā
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:
DIY 37 Leds Arduino ruletes spēle: 3 soļi (ar attēliem)
DIY 37 Leds Arduino Roulette Spēle: Rulete ir kazino spēle, kas nosaukta pēc franču vārda, kas nozīmē mazu riteni
BBC Micro: bit and Scratch - Interaktīva stūre un braukšanas spēle: 5 soļi (ar attēliem)
BBC Micro: bit and Scratch - Interaktīva stūre un braukšanas spēle: Viens no maniem šīs nedēļas uzdevumiem ir izmantot BBC Micro: bit, lai saskarne ar mūsu rakstīto Scratch programmu. Es domāju, ka šī ir lieliska iespēja izmantot savu ThreadBoard, lai izveidotu iegultu sistēmu! Mana iedvesma skrāpējumiem
3D labirinta spēle, izmantojot Arduino: 8 soļi (ar attēliem)
3D labirinta spēle, izmantojot Arduino: Sveiki draugi, tāpēc šodien mēs veidosim labirinta spēli, izmantojot ARDUINO UNO. Tā kā Arduino Uno ir visbiežāk izmantotais dēlis, ir ļoti forši ar to spēlēt spēles. Šajā pamācībā ļauj izveidot labirinta spēli, kuru kontrolē, izmantojot kursorsviras. Neaizmirstiet
Simona spēle - jautra spēle!: 5 soļi
Simona spēle - jautra spēle !: Atsauce: šeitPēc garas nedēļas nogales jums patiešām ir jācenšas izpildīt visus uzdevumus un darbu, par kuru esat atbildīgs. Mums ir pienācis laiks trenēt smadzenes, vai ne? Bez šīm garlaicīgajām un bezjēdzīgajām spēlēm ir arī spēle ar nosaukumu Simona spēle
FPGA reakcijas spēle: 10 soļi
FPGA reakcijas spēle: Summer Rutherford un Regita Soetandar