Turinys:
- 1 žingsnis: Įvadas
- 2 žingsnis: medžiagos
- 3 žingsnis: aukščiausio lygio diagramos juodosios dėžės dizainas
- 4 žingsnis: CLKDivide
- 5 žingsnis: perjunkite proceso bloką
- 6 žingsnis: baigtinės būsenos mašina
- 7 veiksmas: ekrano proceso bloko valdymas lygiu
- 8 žingsnis: LED greičio valdymas lygiu
- 9 žingsnis: Aparatūros surinkimas
- 10 žingsnis: linksminkitės
Video: FPGA reakcijos žaidimas: 10 žingsnių
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Autoriai Summer Rutherford ir Regita Soetandar
1 žingsnis: Įvadas
Paskutiniam CPE 133 projektui mes sukūrėme „Basys3“plokštės reakcijos žaidimą VHDL. Šį žaidimą galima labiausiai palyginti su arkadiniu žaidimu „Stacker“, kuriame žaidėjas turi mesti blokus reikiamu laiku. „Basys3“plokštė prijungta prie duonos lentos, kurioje yra kintami šviesos diodai. Šios LED lemputės kinta tam tikru dažniu, priklausomai nuo lygio. Šiame žaidime naudojamas laikrodžio daliklis ir 4 skaitmenų 7 segmentų ekranas, taip pat baigtinės būsenos mašina. Kai žaidėjas įjungia teisingą jungiklį, kai užsidega vidurinis šviesos diodas, žaidėjas pereina į kitą žaidimo lygį, padidindamas kintančių šviesos diodų dažnį. Dėl to kiekvienas paskesnis lygis yra sunkesnis nei ankstesnis. Kai grotuvas sėkmingai įveikia aukščiausio lygio 7 lygį, segmento ekrane pasirodys pranešimas ir visi šviesos diodai tuo pačiu metu mirksės.
2 žingsnis: medžiagos
Medžiagos, kurių jums reikės:
- „Digilent Basys3“plokštė su mikro USB kabeliu
- Bandomoji Lenta
- 5 šviesos diodai
- 5 rezistoriai (mes naudojome 220 omų)
- 11 trumpiklių
- Kompiuteris su Vivado
3 žingsnis: aukščiausio lygio diagramos juodosios dėžės dizainas
Kaip matote, mūsų aukščiausio lygio blokinė diagrama prasideda gaunant reikiamus laikrodžius iš mūsų submodulio „ClkDivide“. Šie laikrodžiai yra įvestys į įvairius proceso blokus. Iš esmės žaidimas turi pripažinti, kad kai vartotojas teisingai įjungia jungiklį, šviesos diodai turi pradėti keistis greičiau ir ekranas turi pakilti vienu lygiu. Blokinė schema gali atrodyti šiek tiek beprotiška, bet taip yra todėl, kad tam tikrame procese yra daug signalų, o tada tas signalas apibrėžia kitą signalą kitame proceso bloke.
Galų gale vieninteliai žaidimo įvestys yra „Basys3“plokštės įvesties laikrodis, veikiantis 100 Mhz dažniu, septyni „Basys3“plokštės jungikliai ir atstatymo mygtukas. Išvedamas septynių segmentų ekrano anodas, septyni ekrano segmentai ir šviesos diodai.
4 žingsnis: CLKDivide
Šis laikrodžio daliklio submodulis sukūrė lėtesnį laikrodį, atsižvelgiant į vertę, kurią mes nustatėme pagrindiniame faile. Mes naudojome šį submodulį, kad nustatytume „Clk400“, „PushClk“ir „newlck“. Šis submodulis kaip įvestis naudoja laikrodį ir 32 bitų skirstytuvą. Išvestas sulėtėjęs laikrodis. Yra daliklis ir sulėtintas laikrodis. Šiame procese yra laikinas kintamasis, kurį mes vadinome skaičiumi, kuris skaičiuojamas po vieną kiekvieną kartą, kai paspaudžiamas kylančio įvesties laikrodžio kraštas. Kai jis pasiekia daliklio skaičių, sulėtėjęs laikrodis persijungia ir skaičiavimas atsistato į nulį.
5 žingsnis: perjunkite proceso bloką
„Shift“proceso blokas valdo kintamą šviesos diodų judesį ir greitį. Jautrumo sąraše yra „newclk“ir „Stop“signalai. Sustabdyti sukelia trumpą delsą, kai vartotojas peržengia lygį. Jei „Stop“nėra didelis, šviesos diodai kinta kaip įprasta, atsižvelgiant į „newclk“greitį. Šį kintantį modelį valdo du kintamieji: sekimas ir skaičiavimas. Skaičius nustato, kuris šviesos diodas turi būti įjungtas, o sekimas nustato, ar skaičiavimas turėtų būti skaičiuojamas aukštyn ar žemyn. Yra dar vienas signalas, galutinis, kuris taikomas tik tada, kai lygis yra „111“, rodantis, kad žaidėjas įveikė žaidimą. Finalis keičiasi nuo 0 iki 1 kiekviename laikrodžio krašte, kad šviesos diodai būtų nuolat įjungiami ir išjungiami. Tai tik vizualinis elementas galutiniame ekrane.
Šis pamainos procesas yra puiki vieta pradėti šį projektą. Jei galite pakeisti savo šviesos diodus teisingai ir nuosekliai, tada jūs tiesiog turite pridėti elgesį, kai lyginate aukštyn!
6 žingsnis: baigtinės būsenos mašina
Mes sukūrėme baigtinės būsenos mašiną, kuri padiktuotų elgesį paspaudus įvesties jungiklį arba atstatymo mygtuką. Kiekviena būsena yra „lygis“, o jei jungiklis įjungiamas netinkamu laiku arba paspaudžiamas atstatymas, lygis grįžta į „000“. Priešingu atveju, jei jungiklis yra tinkamai įjungtas, lygis juda aukštyn, kol pasiekia galutinę būseną, „111“ir atsiranda pabaigos rodymas. FSM yra pagrįstas dviem proceso blokais sync_proc ir comb_proc. „Sync_proc“naudoja laikrodį, kurį vadinome „PushClk“. Šis laikrodis kontroliuoja, kaip greitai kita būsena tampa dabartine būsena. Šis laikrodis turėtų būti gana greitas; mes pasirinkome greitį, kuris buvo maždaug du kartus greitesnis už mūsų greičiausią LED greitį.
Mes įdiegėme šį kodą, naudodami lygių FSM; tačiau po šio projekto supratome, kad efektyviau panaudoti MFV galėjo būti skaičiavimo būsena, atstatymo būsena arba buvimo būsena. Jei nieko nespaudžiate, jis yra buvimo būsenoje. Jei paspaudžiamas atstatymas arba grotuvas suklysta, jis yra atstatymo būsenoje. Jei teisingai paspausite, jis bus suskaičiuotas. Šiame žaidime taip pat yra daug kitų būdų naudoti FSM!
7 veiksmas: ekrano proceso bloko valdymas lygiu
Lygis valdo ekrano proceso bloką. Jautrumo sąrašo kintamieji yra „Level“, „Reset“ir „Clk400“. 7 segmentų ekranas prasideda rodant „1“pirmajam lygiui. Kiekvieną kartą, kai naudotojas pereina lygį, jis skaičiuojamas iki 7, kad parodytų vartotojui, kokio lygio jis yra. Kai vartotojas įveikia 7 lygį, jame rodoma „COOL“, rodanti, kad žaidėjas įveikė žaidimą. Šis „COOL“ekranas veikia iš 400 Hz laikrodžio, kurį vadinome „Clk400“. Paspaudus „Reset“, ekranas grįžta į „1.“
8 žingsnis: LED greičio valdymas lygiu
Galiausiai, lygis kontroliuoja šviesos diodų greitį. Lygis yra vienintelis signalas jautrumo sąraše. D1 yra signalas, kuris eina į laikrodžio daliklio procesą, kad gautų naująjį. Kiekvieną kartą keičiant lygį arba keičiant būseną, proceso blokas „Greitis“. Šis procesas nustato D1 vertę. Yra 8 apibrėžtos D1 vertės, kurias pasirinkome pagal tai, kaip greitai norėjome, kad kiekvienas lygis veiktų. D1 mažėja kiekvieną kartą, kai lygis pakyla, kad naujasis blokas veiktų greičiau.
9 žingsnis: Aparatūros surinkimas
Duonos lentą prijungėme prie „Basys3“viena iš „pmod“jungčių. Šeši iš „pmod“prievadų buvo naudojami kištukui prijungti nuo vieno prie kito, vienas skirtas įžeminimui, o kiti penki - 5 šviesos diodams. Mes taip pat įdėjome rezistorių kiekvienam šviesos diodui. Šie rezistoriai yra 220Ω ir neleidžia šviesos diodams trumpai jungti ir sudeginti. Nors kiekvienas šviesos diodas turi tam tikrą pasipriešinimą, jo nepakanka, kad trukdytų šaltinio įtampai.
10 žingsnis: linksminkitės
Šį žaidimą labai lengva žaisti. Žaidėjas pradeda nuo dešiniojo lentos jungiklio 1, V17. Jie turi pakelti jungiklį aukštai, kai įjungtas vidurinis šviesos diodas. Tada jie perkelia vieną jungiklį į kairę ir daro tą patį! Jei žaidėjas pasiekia pabaigą, jis atsidurs septintame jungiklyje W14. Jei jie įveiks žaidimą, jie pamatys tikrai smagų pabaigos ekraną!
Pažymėtina, kad kuriant šį žaidimą greitis visiškai priklauso nuo jūsų! Jei mūsų pasirinktas greitis yra per lėtas, drąsiai jį pagreitinkite ir padarykite dar sudėtingesnį! Taip pat nėra nustatyto lygių skaičiaus. Jei norite, kad jis turėtų dar daugiau lygių, FSM ir lygio blokuose turi būti atlikti pakeitimai, tačiau tai labai paprasti pakeitimai.
Mes taip pat pasirinkome naudoti plokštės jungiklius kaip vartotojo įvestį, tačiau tai taip pat įmanoma naudojant mygtuką „Basys3“plokštėje; mygtukas pašalins poreikį iš naujo nustatyti jungiklius kiekvieną kartą, kai vartotojas pradės iš naujo. Iš pradžių naudojome mygtuką, tačiau tai sukėlė klaidų apibrėžiant lygį, nes jis šoktelėtų keliais lygiais, jei paspaudus mygtuką buvo paspausti du kylantys „PushClk“kraštai.
Žemiau yra vaizdo įrašas, kuriame parodoma, kaip žaisti, per pirmuosius 4 lygius ir paskutinis pabaigos ekranas.
Žemiau pateikiamas pagrindinis šio projekto failas.
Šaltiniai
„Basys3“informacinis vadovas
Įkvėpimas projektui - žaidimas „Arduino Stop It“
Rekomenduojamas:
555 Laikmačio reakcijos žaidimas: 5 žingsniai
Žaidimas „Laikmatis“: tikslinė auditorija Sunkumo lygis Tai būtų sunku, jei
Linksmas „Arduino“reakcijos žaidimas: 3 žingsniai
Linksmas „Arduino“reakcijos žaidimas: Linksmas „Arduino“reakcijos žaidimas visai šeimai;) Remiantis kelių platformų „Bluetooth“ryšiu. Jums reikia tik „Arduino“daiktų, „Android“išmaniojo telefono ir batų dėžutės. Jei neturite nė vieno iš jų, patikėkite tuo: nėra nieko, kas
Reakcijos žaidimas- kompiuterių inžinerijos projektas: 3 žingsniai
Reakcijos žaidimas- Kompiuterių inžinerijos projektas: Reakcijos žaidimas yra būtent tai, ką sako pavadinimas, jis išbando jūsų reakcijos greitį. Galbūt klausiate, kokią naudą šis serveris galėtų suteikti ne pramogoms, o jūs galite tai panaudoti asmenims, reabilitaciniams po operacijos ar nelaimingų atsitikimų. Jų reakcija konkrečiai
„Arduino“reakcijos žaidimas: 9 žingsniai
„Arduino“reakcijos žaidimas: Aš padariau šį žaidimą kaip mokyklos užduotį. Turėjome sukurti ką nors interaktyvaus su arduino. Tai pirmas mano sukurtas „Arduino“projektas, todėl tai buvo gana sunku, bet ne neįmanoma
„Fischertechnik“LED reakcijos laiko žaidimas: 7 žingsniai
„Fischertechnik LED“reakcijos laiko žaidimas: Kaip sukurti „fischertechnik LED“REAKCIJOS LAIKO ŽAIDIMĄ Žaidžiu su įvairiais švietėjiškais manipuliavimo įrankiais. (Apsilankykite www.weirdrichard.com). Lengvai kuriama programa yra LED REAKCIJOS LAIKO ŽAIDIMAS. Robotinis valdiklis (šiuo atveju