Sisukord:

FPGA reaktsioonimäng: 10 sammu
FPGA reaktsioonimäng: 10 sammu

Video: FPGA reaktsioonimäng: 10 sammu

Video: FPGA reaktsioonimäng: 10 sammu
Video: Лекция №1 "Что умеют FPGA и зачем они нужны?" 2024, Juuli
Anonim
FPGA reaktsioonimäng
FPGA reaktsioonimäng

Autorid Summer Rutherford ja Regita Soetandar

Samm 1: Sissejuhatus

CPE 133 viimase projekti jaoks kavandasime Basys3 tahvli jaoks reaktsioonimängu VHDL -is. Seda mängu saab kõige tihedamalt võrrelda arkaadmänguga "Stacker", kus mängija peab klotsid õigel ajal maha laskma. Laud Basys3 on ühendatud leivalauaga, millel on vahelduvad LED -id. Need LED -tuled vahelduvad kindlal sagedusel, sõltuvalt tasemest. Selles mängus kasutatakse kellajagurit ja neljakohalist 7 -segmendilist ekraani, samuti piiratud olekuga masinat. Kui mängija aktiveerib keskmise lüliti süttimisel õige lüliti, liigub mängija mängu järgmisele tasemele, suurendades vahelduvate LED -de sagedust. See muudab iga järgmise taseme raskemaks kui eelmine. Kui mängija edukalt edestab 7. taseme, kõrgeima taseme, ilmub segmendi ekraanile teade ja kõik LED -id vilguvad samaaegselt.

2. samm: materjalid

Materjalid
Materjalid
Materjalid
Materjalid
Materjalid
Materjalid

Materjalid, mida vajate, on järgmised:

  • Digilent Basys3 tahvel koos mikro -USB -kaabliga
  • Leivalaud
  • 5 LED -i
  • 5 takistit (kasutasime 220 oomi)
  • 11 hüppaja juhet
  • Arvuti koos Vivadoga

3. samm: mustast kastist kujundamine tipptasemel

Ülataseme skeemi must kast
Ülataseme skeemi must kast
Ülataseme skeemi must kast
Ülataseme skeemi must kast

Nagu näete, algab meie tipptasemel plokkskeem, saades alammoodulist ClkDivide vajalikud kellad. Need kellad on erinevate protsessiplokkide sisendid. Põhimõtteliselt peab mäng tunnistama, et kui kasutaja lüliti õigesti sisse lülitab, peavad LED -id hakkama kiiremini vahelduma ja ekraan peab tõusma ühe taseme võrra. Plokkskeem võib tunduda pisut hull, kuid seda seetõttu, et teatud protsessis luuakse palju signaale ja seejärel määratleb see signaal teises protsessiplokis teise signaali.

Lõpuks ainsad mängu sisendid on Basys3 tahvli sisendkell, mis töötab 100 Mhz, seitse lülitit Basys3 tahvlil ja lähtestusnupp. Väljundiks on seitsme segmendi ekraani anood, ekraani seitse segmenti ja LED -id.

4. samm: CLKDivide

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide

See kellajagaja alammoodul lõi aeglasema kella sõltuvalt väärtusest, mille me sellele oma põhifailis kaardistasime. Kasutasime seda alammoodulit Clk400, PushClk ja newlck määramiseks. See alammoodul võtab sisendina kella ja 32 -bitise eraldaja. Väljastatakse aeglustatud kell. Eraldaja ja aeglustatud kella jaoks on protsessiplokk. Protsessis on ajutine muutuja, mida me nimetasime loenduseks, mis loeb ühe iga kord, kui tabatakse sisestatud kella tõusvat serva. Kui see jagaja numbrini jõuab, lülitub aeglustatud kell ümber ja arv nullitakse.

Samm: nihkeprotsessi plokk

Vahetusprotsessi plokk
Vahetusprotsessi plokk

Shift -protsessiplokk juhib LED -ide vahelduvat liikumist ja kiirust. Tundlikkuse loendis on newclk ja Stop signaalid. Stopp põhjustab lühikese viivituse, kui kasutaja tase ületab. Kui Stopp pole kõrge, vahelduvad valgusdioodid tavapäraselt, lähtudes newclk kiirusest. Seda vahelduvat mustrit juhivad kaks muutujat: Jälgi ja loe. Loendus määrab, milline LED peaks põlema, ja Track määrab, kas loendus peaks üles või alla loendama. On veel üks signaal, lõplik, mis kehtib ainult siis, kui tase on “111”, mis näitab, et mängija on mängu võitnud. Final vaheldub 0 ja 1 vahel igal kella serval, et LED -id pidevalt sisse ja välja lülitada. See on vaid lõpliku kuvamise visuaalne element.

See vahetusprotsess on ideaalne koht selle projekti alustamiseks. Kui saate oma LED -id õigesti ja järjekindlalt vahelduda, siis siit peate lihtsalt nivelleerimisel käitumist lisama!

6. samm: piiratud olekuga masin

Piiratud olekuga masin
Piiratud olekuga masin

Lõime piiratud olekuga masina, et dikteerida käitumist sisendlüliti või lähtestusnupu vajutamisel. Iga olek on "tase" ja kui lüliti lülitatakse sisse valel ajal või vajutatakse lähtestamist, naaseb tase "000" -le. Muidu, kui lüliti on õigesti sisse lülitatud, liigub tase üles, kuni jõuab lõppseisundini, “111” ja ilmub lõppnäidik. FSM põhineb kahel protsessiplokil sync_proc ja comb_proc. Sync_proc kasutab kella, mille nimetasime PushClk. See kell kontrollib, kui kiiresti järgmine olek muutub praeguseks. See kell peaks olema üsna kiire; valisime kiiruse, mis oli umbes kaks korda kiirem kui meie kiireim LED -kiirus.

Rakendasime selle koodi taseme FSM abil; aga pärast seda projekti mõistsime, et Mikroneesia liidese tõhusam kasutamine oleks võinud olla loendus-, lähtestamis- või viibimisolek. Kui midagi ei vajutata, on see olekus. Kui lähtestamist vajutatakse või mängija segab, on see lähtestamise olekus. Kui see on õigesti vajutatud, on see loendamise olekus. Selles mängus on ka palju muid võimalusi FSM kasutamiseks!

Samm 7: kuvariprotsessi ploki juhtimine tasemega

Ekraaniprotsessi ploki juhtimine tasemega
Ekraaniprotsessi ploki juhtimine tasemega

Tase juhib kuvariprotsessi plokki. Tundlikkuse loendi muutujad on Level, Reset ja Clk400. Seitsme segmendi kuva algab esimese taseme kuvamisega „1”. See loeb kuni 7 -ni iga kord, kui kasutaja läbib taseme, et näidata kasutajale, millisel tasemel ta on. Kui kasutaja on 7. taseme läbinud, kuvab see "COOL", mis näitab, et mängija on mängu võitnud. See "COOL" ekraan töötab 400 Hz kellaga, mida me nimetasime Clk400 -ks. Kui vajutate nuppu Lähtesta, naaseb ekraan „1“.

8. samm: LED -kiiruse reguleerimine tasemega

LED -kiiruse reguleerimine tasemega
LED -kiiruse reguleerimine tasemega

Lõpuks reguleerib tase LED -de kiirust. Tase on tundlikkuse loendis ainus signaal. D1 on signaal, mis läheb kellajaguri protsessi, et saada uus klk. Iga kord, kui taset muudetakse või olek muutub, protsessiplokk „Kiirus”. See protsess määrab D1 väärtuse. D1 -l on 8 määratletud väärtust, mille valisime vastavalt sellele, kui kiiresti soovisime iga taseme jooksmist. D1 väheneb iga kord, kui tase tõuseb, nii et uusklink töötab kiiremini.

9. samm: riistvara kokkupanek

Riistvara kokkupanek
Riistvara kokkupanek

Ühendasime leivalaua Basys3 -ga ühe pmod -pistikuga. Kuus pmod -porti kasutati isase -isase pistiku ühendamiseks, ühte maandamiseks ja viit 5 LED -i jaoks. Samuti panime iga LED -i jaoks takisti. Need takistid on 220Ω ja takistavad valgusdioodide lühistamist ja läbipõlemist. Kuigi igal valgusdioodil on teatud takistus, ei ole takistus piisav, et takistada pinget allikast.

Samm: nautige

Seda mängu on väga lihtne mängida. Mängija alustab laua parempoolsest lülitist 1, V17. Kui keskmine LED põleb, peavad nad lüliti kõrgele pöörama. Seejärel liigutavad nad ühe lüliti vasakule ja teevad sama asja! Kui mängija jõuab lõpuni, jõuab ta seitsmenda lülitini W14. Kui nad mängust üle saavad, näevad nad tõeliselt lõbusat lõppkuva!

Tuleb märkida, et selle mängu loomisel on kiirused täiesti teie otsustada! Kui meie valitud kiirused on liiga aeglased, kiirendage seda julgelt ja muutke see veelgi keerukamaks! Samuti ei ole määratud tasemete arvu. Kui soovite, et sellel oleks veelgi rohkem tasemeid, tuleb FSM -is ja taseme määratud protsessiplokkides teha muudatusi, kuid need on väga lihtsad muudatused.

Samuti valisime kasutajasisendina tahvli lülitite kasutamise, kuid see on võimalik ka Basys3 tahvli nupu abil; nupp välistab vajaduse lülitid lähtestada iga kord, kui kasutaja otsast peale hakkab. Algselt kasutasime nuppu, kuid see põhjustas taseme määratlemisel vigu, kuna see hüppas mitu taset, kui nuppu PushClk kaks tõusvat serva tabati, kui nuppu all hoiti.

Allpool on video, mis näitab, kuidas mängida, läbides neli esimest taset ja lõpliku kuva.

Selle projekti põhifail on toodud allpool.

Allikad

Basys3 kasutusjuhend

Projekti inspiratsioon - mäng Arduino Stop It

Soovitan: