Turinys:

FPGA reakcijos žaidimas: 10 žingsnių
FPGA reakcijos žaidimas: 10 žingsnių

Video: FPGA reakcijos žaidimas: 10 žingsnių

Video: FPGA reakcijos žaidimas: 10 žingsnių
Video: Solving Belousov-Zhabotinsky Reaction System with Cellular Automaton 2024, Lapkritis
Anonim
FPGA reakcijos žaidimas
FPGA reakcijos žaidimas

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
Medžiagos
Medžiagos
Medžiagos
Medžiagos
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

Aukščiausio lygio diagramos juodosios dėžės dizainas
Aukščiausio lygio diagramos juodosios dėžės dizainas
Aukščiausio lygio diagramos juodosios dėžės dizainas
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

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
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ą

Pamainos proceso blokas
Pamainos proceso blokas

„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

Baigtos būsenos mašina
Baigtos 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

Ekrano proceso bloko valdymas lygiu
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

LED greičio valdymas su lygiu
LED greičio valdymas su 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

Techninės įrangos surinkimas
Techninės įrangos 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: