Satura rādītājs:

FPGA reakcijas spēle: 10 soļi
FPGA reakcijas spēle: 10 soļi

Video: FPGA reakcijas spēle: 10 soļi

Video: FPGA reakcijas spēle: 10 soļi
Video: Sound of the '90s: The Gravis Ultrasound Card Revival 2024, Jūlijs
Anonim
FPGA reakcijas spēle
FPGA reakcijas spēle

Autori Summer Rutherford un Regita Soetandar

1. darbība. Ievads

Mūsu galīgajam CPE 133 projektam mēs izstrādājām reakcijas spēli VHDL Basys3 plāksnei. Šo spēli var visciešāk salīdzināt ar arkādes spēli “Stacker”, kur spēlētājam īstajā laikā ir jāatsakās no blokiem. Plāksne Basys3 ir savienota ar maizes dēli, kuram ir mainīgas gaismas diodes. Šīs LED gaismas mainīsies noteiktā frekvencē atkarībā no līmeņa. Šajā spēlē tiek izmantots pulksteņa dalītājs un 4 ciparu 7 segmentu displejs, kā arī ierobežota stāvokļa mašīna. Kad spēlētājs aktivizē pareizo slēdzi, kad iedegas vidējā gaismas diode, spēlētājs pāriet uz nākamo spēles līmeni, palielinot mainīgo gaismas diodes frekvenci. Tas padara katru nākamo līmeni grūtāku nekā iepriekšējais līmenis. Kad atskaņotājs veiksmīgi pārspēj 7. līmeni, augstāko līmeni, segmenta displejā parādīsies ziņojums un visas gaismas diodes vienlaicīgi iedegsies un izslēgsies.

2. solis: materiāli

Materiāli
Materiāli
Materiāli
Materiāli
Materiāli
Materiāli

Materiāli, kas jums būs nepieciešami:

  • Digilent Basys3 plate ar mikro USB kabeli
  • Maizes dēlis
  • 5 gaismas diodes
  • 5 rezistori (mēs izmantojām 220 omus)
  • 11 džemperu vadi
  • Dators ar Vivado

3. solis: augšējā līmeņa diagrammas melnās kastes dizains

Augstākā līmeņa diagrammas melnās kastes dizains
Augstākā līmeņa diagrammas melnās kastes dizains
Augstākā līmeņa diagrammas melnās kastes dizains
Augstākā līmeņa diagrammas melnās kastes dizains

Kā redzat, mūsu augstākā līmeņa blokshēma sākas, iegūstot nepieciešamos pulksteņus no mūsu apakšmoduļa ClkDivide. Šie pulksteņi ir ievadi dažādos procesa blokos. Būtībā spēlei ir jāatzīst, ka tad, kad lietotājs pareizi ieslēdz slēdzi, gaismas diodēm jāsāk mainīties ātrāk un displejam jāpaaugstinās par vienu līmeni. Blokshēma var izskatīties nedaudz traka, bet tas ir tāpēc, ka ir daudz signālu, kas tiek izveidoti noteiktā procesā, un pēc tam šis signāls nosaka citu signālu citā procesa blokā.

Galu galā vienīgie spēles ievadi ir ievades pulkstenis uz Basys3 tāfeles, kas darbojas ar 100 Mhz, septiņi Basys3 tāfeles slēdži un atiestatīšanas poga. Tiek izvadīts septiņu segmentu displeja anods, displeja septiņi segmenti un gaismas diodes.

4. solis: CLKDivide

CLKDifide
CLKDifide
CLKDifide
CLKDifide
CLKDifide
CLKDifide

Šis pulksteņu dalītāja apakšmodulis izveidoja lēnāku pulksteni atkarībā no vērtības, kuru mēs tam piesaistījām mūsu galvenajā failā. Mēs izmantojām šo apakšmoduli, lai noteiktu Clk400, PushClk un newlck. Šis apakšmodulis kā ievadi ņem pulksteni un 32 bitu dalītāju. Tiek rādīts palēnināts pulkstenis. Ir procesa bloks dalītājam un palēninātajam pulkstenim. Šajā procesā ir pagaidu mainīgais, ko mēs saucām par skaitli, kas skaitās viens katru reizi, kad tiek sasniegta ievadītās pulksteņa augošā mala. Kad tas sasniedz dalītāja skaitli, palēninātais pulkstenis pārslēdzās un skaitīšana tiek atiestatīta uz nulli.

5. solis: maiņas procesa bloks

Pārmaiņu procesa bloks
Pārmaiņu procesa bloks

Shift procesa bloks kontrolē gaismas diodes mainīgo kustību un ātrumu. Jutības sarakstā ir jaunie un apstāšanās signāli. Stop izraisa īsu aizkavi, kad lietotājs nokļūst līmenī. Ja Stop nav augsts, tad gaismas diodes mainās kā parasti, pamatojoties uz newclk ātrumu. Šo mainīgo modeli kontrolē divi mainīgie: izsekošana un skaitīšana. Skaits nosaka, kurai gaismas diodei vajadzētu iedegties, savukārt Track nosaka, vai skaitīšanai vajadzētu skaitīt augšup vai lejup. Ir vēl viens signāls - fināls -, kas attiecas tikai tad, ja līmenis ir “111”, kas norāda, ka spēlētājs ir uzvarējis spēli. Final mainās no 0 līdz 1 katrā pulksteņa malā, lai nepārtraukti ieslēgtu un izslēgtu gaismas diodes. Tas ir tikai vizuāls elements pēdējā displejā.

Šis maiņas process ir ideāla vieta, kur sākt šo projektu. Ja jūs varat panākt, lai gaismas diodes mainītos pareizi un konsekventi, tad no šejienes jums vienkārši jāpievieno uzvedība, izlīdzinot!

6. darbība: ierobežota stāvokļa mašīna

Galīgā stāvokļa mašīna
Galīgā stāvokļa mašīna

Mēs izveidojām ierobežota stāvokļa mašīnu, lai diktētu uzvedību, kad tiek nospiests ievades slēdzis vai atiestatīšanas poga. Katrs stāvoklis ir “līmenis”, un, ja slēdzis tiek ieslēgts nepareizā laikā vai tiek nospiesta atiestatīšana, līmenis atgriežas pie “000”. Pretējā gadījumā, ja slēdzis ir pareizi ieslēgts, līmenis virzās uz augšu, līdz sasniedz galīgo stāvokli, “111” un parādās beigu displejs. MFV pamatā ir divi procesa bloki sync_proc un comb_proc. Sync_proc izmanto pulksteni, ko mēs saucām par PushClk. Šis pulkstenis kontrolē, cik ātri nākamais stāvoklis kļūst par pašreizējo stāvokli. Šim pulkstenim vajadzētu būt diezgan ātram; mēs izvēlējāmies ātrumu, kas bija aptuveni divas reizes ātrāks par mūsu ātrāko LED ātrumu.

Mēs ieviesām šo kodu, izmantojot MFV līmeņiem; tomēr pēc šī projekta mēs sapratām, ka efektīvāka MFV izmantošana varētu būt skaitīšanas, atiestatīšanas vai uzturēšanās stāvoklis. Ja nekas netiek nospiests, tas ir uzturēšanās stāvoklī. Ja tiek nospiesta atiestatīšana vai atskaņotājs ir sajaukts, tas ir atiestatīšanas stāvoklī. Ja tas ir pareizi nospiests, tas ir atpakaļskaitīšanas stāvoklī. Šajā spēlē ir arī daudzi citi veidi, kā izmantot MFV!

7. darbība: displeja procesa bloka kontrole ar līmeni

Displeja procesa bloka kontrole ar līmeni
Displeja procesa bloka kontrole ar līmeni

Līmenis kontrolē displeja procesa bloku. Jutīguma saraksta mainīgie ir Level, Reset un Clk400. Septiņu segmentu displejs sākas, parādot “1” pirmajam līmenim. Katru reizi, kad lietotājs nokļūst kādā līmenī, tas tiek skaitīts līdz 7, lai parādītu lietotājam, kādā līmenī viņš atrodas. Kad lietotājs ir nokārtojis 7. līmeni, tas parāda “COOL”, lai norādītu, ka spēlētājs ir uzvarējis spēli. Šis “COOL” displejs darbojas ar 400 Hz pulksteni, ko mēs saucām par Clk400. Ja tiek nospiests Atiestatīt, displejs atgriežas uz “1.”

8. solis: LED ātruma kontrole ar līmeni

LED ātruma kontrole ar līmeni
LED ātruma kontrole ar līmeni

Visbeidzot, līmenis kontrolē gaismas diožu ātrumu. Līmenis ir vienīgais signāls jutīguma sarakstā. D1 ir signāls, kas nonāk pulksteņa dalītāja procesā, lai iegūtu jaunu klipu. Katru reizi, kad tiek mainīts līmenis vai mainīts stāvoklis, procesa bloks “Ātrums”. Šis process nosaka D1 vērtību. Ir noteiktas 8 D1 vērtības, kuras mēs izvēlējāmies, pamatojoties uz to, cik ātri mēs vēlējāmies, lai katrs līmenis darbotos. D1 kļūst mazāks katru reizi, kad līmenis palielinās, lai jaunais bloks darbotos ātrāk.

9. solis: Aparatūras montāža

Aparatūras montāža
Aparatūras montāža

Mēs savienojām maizes dēli ar Basys3 ar vienu no pmod savienotājiem. Seši no pmod portiem tika izmantoti, lai pievienotu savienotāju no vīrieša līdz vīrietim, vienu - zemei un pārējos piecus - 5 gaismas diodēm. Mēs arī ievietojām rezistoru katrai gaismas diodei. Šie rezistori ir 220Ω un novērš gaismas diodes īssavienojumu un izdegšanu. Lai gan katrai gaismas diodei ir zināma pretestība, pretestība nav pietiekama, lai traucētu spriegumu no avota.

10. solis: izklaidējieties

Šo spēli ir ļoti viegli spēlēt. Spēlētājs sāk no tāfeles labās slēdža 1, V17. Tiem ir jāpagriež slēdzis augstu, kad ir ieslēgta vidējā gaismas diode. Pēc tam viņi pārvieto vienu slēdzi pa kreisi un dara to pašu! Ja spēlētājs tiks līdz galam, viņš nonāks septītajā slēdzī W14. Ja viņi pārspēj spēli, viņi var redzēt patiešām jautru beigu displeju!

Jāatzīmē, ka, veidojot šo spēli, ātrums ir pilnībā atkarīgs no jums! Ja mūsu izvēlētie ātrumi ir pārāk lēni, jūtieties brīvi to paātrināt un padarīt to vēl izaicinošāku! Nav arī noteikts līmeņu skaits. Ja vēlaties, lai tai būtu vēl vairāk līmeņu, MFV un līmeņa blokā ir jāveic izmaiņas, taču tās ir ļoti vienkāršas izmaiņas.

Mēs arī izvēlējāmies izmantot slēdžus uz tāfeles kā lietotāja ievadi, taču tas ir iespējams arī ar pogu uz Basys3 tāfeles; poga novērš nepieciešamību atiestatīt slēdžus katru reizi, kad lietotājs sāk darbu no jauna. Sākumā mēs izmantojām pogu, taču tas radīja kļūdas, nosakot līmeni, jo tas pārlēktu vairākus līmeņus, ja, nospiežot pogu, tiktu notriektas divas PushClk augošās malas.

Zemāk ir video, kurā parādīts, kā spēlēt, iet cauri pirmajiem 4 līmeņiem un pēdējais displejs.

Šī projekta galvenais fails ir iekļauts zemāk.

Avoti

Basys3 uzziņu rokasgrāmata

Iedvesma projektam - spēle Arduino Stop It

Ieteicams: