Cuprins:
- Pasul 1: Introducere
- Pasul 2: Materiale
- Pasul 3: Diagrama de nivel superior Proiectare cutie neagră
- Pasul 4: CLKDivide
- Pasul 5: Shift Process Block
- Pasul 6: Mașină de stat finit
- Pasul 7: Controlul blocului procesului de afișare cu nivel
- Pasul 8: Controlul vitezei LED-ului cu nivelul
- Pasul 9: Asamblare hardware
- Pasul 10: Distrează-te
Video: Joc de reacție FPGA: 10 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
De Summer Rutherford și Regita Soetandar
Pasul 1: Introducere
Pentru proiectul nostru final pentru CPE 133, am proiectat un joc de reacție în VHDL pentru o placă Basys3. Acest joc poate fi cel mai strâns comparat cu jocul arcade „Stacker”, unde jucătorul trebuie să arunce blocurile la momentul potrivit. Placa Basys3 este conectată la o placă de măsurare, care are LED-uri alternative. Aceste lumini LED vor alterna la o anumită frecvență, în funcție de nivel. Acest joc folosește divizorul de ceas și afișajul cu 4 cifre din 7 segmente, precum și o mașină cu stări finite. Când jucătorul activează comutatorul corect pe măsură ce LED-ul din mijloc se aprinde, jucătorul va avansa la următorul nivel al jocului, crescând frecvența LED-urilor alternative. Acest lucru face ca fiecare nivel succesiv să fie mai greu decât nivelul anterior. Când jucătorul bate cu succes nivelul 7, cel mai înalt nivel, un mesaj va fi afișat pe afișajul segmentului și toate LED-urile vor clipi simultan aprinse și stinse.
Pasul 2: Materiale
Materialele de care veți avea nevoie sunt:
- Placă Digilent Basys3 cu cablu micro USB
- Pană de pâine
- 5 LED-uri
- 5 rezistențe (am folosit 220 ohmi)
- 11 fire jumper
- Computer cu Vivado
Pasul 3: Diagrama de nivel superior Proiectare cutie neagră
După cum puteți vedea, diagrama noastră bloc de nivel superior începe prin obținerea ceasurilor necesare din submodulul nostru, ClkDivide. Aceste ceasuri sunt intrări în diferitele blocuri de proces. În esență, jocul trebuie să recunoască faptul că atunci când un utilizator pornește corect comutatorul, LED-urile trebuie să înceapă să se alterneze mai repede și afișajul trebuie să urce cu un nivel. Diagrama bloc ar putea părea puțin nebună, dar asta pentru că există multe semnale care sunt stabilite într-un anumit proces și apoi acel semnal definește un alt semnal într-un alt bloc de proces.
În cele din urmă, singurele intrări pe care le ia jocul sunt ceasul de intrare de pe placa Basys3 care rulează la 100 Mhz, șapte comutatoare pe placa Basys3 și butonul de resetare. Ceea ce se produce este anodul pentru afișajul cu șapte segmente, cele șapte segmente pentru afișaj și LED-urile.
Pasul 4: CLKDivide
Acest submodul divizor de ceas a creat un ceas mai lent, în funcție de valoarea pe care am mapat-o în fișierul nostru principal. Am folosit acest submodul pentru a determina Clk400, PushClk și newlck. Acest submodul ia ca intrări un ceas și un divizor pe 32 de biți. Se produce un ceas încetinit. Există un bloc de proces pentru divizor și ceasul încetinit. În proces este o variabilă temporară, pe care am numit-o numărare, care se numără una de fiecare dată când este lovită o margine ascendentă a ceasului introdus. Odată ce a ajuns la numărul divizorului, ceasul încetinit s-a comutat și contorul se resetează la zero.
Pasul 5: Shift Process Block
Blocul de proces Shift controlează mișcarea alternativă și viteza LED-urilor. În lista de sensibilitate sunt semnalele newclk și Stop. Oprirea provoacă o scurtă întârziere când utilizatorul trece nivelul. Dacă Stop nu este ridicat, atunci LED-urile alternează normal în funcție de viteza newclk. Acest model alternativ este controlat de două variabile: Urmărire și numărare. Numărul determină ce LED trebuie să fie aprins, în timp ce Track determină dacă numărătoarea trebuie să fie numărătoare sus sau jos. Există un alt semnal, Final, care se aplică numai atunci când nivelul este „111”, indicând faptul că jucătorul a învins jocul. Finalul alternează între 0 și 1 la fiecare margine de ceas pentru a porni și a stinge LED-urile continuu. Acesta este doar un element vizual pentru afișarea finală.
Acest proces de schimbare este locul perfect pentru a începe acest proiect. Dacă puteți obține LED-urile dvs. alternând corect și consecvent, atunci de aici trebuie doar să adăugați comportamentul la ridicarea nivelului!
Pasul 6: Mașină de stat finit
Am creat o mașină de stare finită pentru a dicta comportamentul atunci când este apăsat comutatorul de intrare sau butonul de resetare. Fiecare stare este un „nivel” și dacă comutatorul este pornit la momentul greșit sau resetarea este apăsată, nivelul revine la „000”. În caz contrar, dacă comutatorul este corect pornit, atunci nivelul se deplasează în sus până ajunge la starea finală, „111” și apare afișajul final. FSM se bazează pe cele două blocuri de proces sync_proc și comb_proc. Sync_proc folosește ceasul pe care l-am numit PushClk. Acest ceas controlează cât de repede starea următoare devine starea actuală. Acest ceas ar trebui să fie destul de rapid; am ales o viteză care a fost de aproximativ două ori mai rapidă decât cea mai rapidă viteză LED.
Am implementat acest cod folosind un FSM pentru niveluri; totuși, după acest proiect, am realizat că o utilizare mai eficientă a unui FSM ar fi putut avea o stare de contorizare, o stare de resetare sau o stare de staționare. Dacă nu este apăsat nimic, acesta se află în starea de ședere. Dacă resetarea este apăsată sau playerul este deranjat, aceasta se află în starea de resetare. Dacă este apăsat corect, acesta se află în starea de numărare în sus. Există multe alte modalități de a utiliza un FSM și în acest joc!
Pasul 7: Controlul blocului procesului de afișare cu nivel
Nivelul controlează blocul procesului de afișare. Variabilele din lista de sensibilitate sunt Level, Reset și Clk400. Afișajul pe 7 segmente începe prin afișarea „1” pentru primul nivel. Numără până la 7 de fiecare dată când utilizatorul trece un nivel pentru a-i arăta utilizatorului la ce nivel se află. Odată ce utilizatorul a trecut nivelul 7, acesta afișează „COOL” pentru a semnifica faptul că jucătorul a învins jocul. Acest afișaj „COOL” rulează dintr-un ceas de 400 Hz pe care l-am numit Clk400. Dacă Reset este apăsat, afișajul revine la „1.”
Pasul 8: Controlul vitezei LED-ului cu nivelul
În cele din urmă, Level controlează viteza LED-urilor. Nivelul este singurul semnal din lista de sensibilitate. D1 este semnalul care intră în procesul Clock Divider pentru a obține newclk. De fiecare dată când Nivelul este modificat sau starea se modifică, blocul de proces „Viteză”. Acest proces determină valoarea lui D1. Există 8 valori definite pentru D1 pe care le-am ales în funcție de cât de repede am vrut să ruleze fiecare nivel. D1 devine mai mic de fiecare dată când nivelul crește, astfel încât newclk să ruleze mai repede.
Pasul 9: Asamblare hardware
Am conectat placa de bază la Basys3 cu unul dintre conectorii pmod. Șase dintre porturile pmod au fost utilizate pentru a conecta un conector tată la tată, unul pentru masă și celelalte cinci pentru cele 5 LED-uri. De asemenea, am amplasat un rezistor pentru fiecare LED. Aceste rezistențe sunt de 220Ω și împiedică scurtcircuitul și arderea LED-urilor. Deși fiecare LED are o anumită rezistență, rezistența nu este suficientă pentru a împiedica tensiunea de la sursă.
Pasul 10: Distrează-te
Acest joc este foarte ușor de jucat. Jucătorul pornește pe butonul 1 din dreapta al tabloului, V17. Acestea trebuie să întoarcă comutatorul în sus când LED-ul din mijloc este aprins. Apoi mișcă un comutator spre stânga și fac același lucru! Dacă jucătorul ajunge la final, vor ajunge pe al șaptelea comutator, W14. Dacă înving jocul, vor vedea un final extrem de distractiv!
Ceva de remarcat este că, atunci când creați acest joc, viteza depinde de dvs.! Dacă viteza pe care am ales-o este prea lentă, nu ezitați să o accelerați și să o faceți și mai provocatoare! De asemenea, nu există un număr stabilit de niveluri. Dacă doriți să faceți ca acesta să aibă și mai multe niveluri, trebuie făcute modificări la FSM și la blocurile de proces determinate de Nivel, dar acestea sunt modificări foarte simple.
De asemenea, am ales să folosim comutatoare de pe placa ca intrare de utilizator, dar acest lucru este posibil și cu un buton de pe placa Basys3; butonul va elimina necesitatea de a reseta comutatoarele de fiecare dată când utilizatorul reia. Am folosit inițial un buton, cu toate acestea, acest lucru a cauzat erori în definirea nivelului, deoarece ar sari mai multe niveluri dacă două margini ascendente ale PushClk ar fi lovite atunci când butonul a fost ținut apăsat.
Mai jos este un videoclip care demonstrează cum să joci, parcurgând primele 4 niveluri și afișarea finală finală.
Fișierul principal pentru acest proiect este inclus mai jos.
Surse
Manual de referință Basys3
Inspirație pentru proiect - jocul Arduino Stop It
Recomandat:
Atingeți atingeți Rainbow - un joc cu reacție rapidă pentru 2 jucători: 4 pași (cu imagini)
Tap Tap Rainbow - un joc de reacție rapidă pentru 2 jucători: acum 2 săptămâni fiica mea a avut o idee genială de a face un joc de reacție rapidă cu culori curcubeu (este un expert în curcubeu: D). Mi-a plăcut instantaneu ideea și am început să ne gândim cum o putem transforma într-un joc real. Ai un curcubeu în
Joc Simon - Joc distractiv !: 5 pași
Joc Simon - Joc distractiv !: Referință: Aici După un weekend lung, trebuie să fii cu adevărat greu să îndeplinești toate sarcinile și munca de care ești responsabil. Este timpul să ne antrenăm creierul, nu-i așa? Pe lângă acele jocuri plictisitoare și fără sens, există și un joc numit Simon Game
Amuzant joc de reacție Arduino: 3 pași
Joc de reacție amuzant Arduino: joc de reacție amuzant Arduino pentru întreaga familie;) Bazat pe comunicare Bluetooth pe mai multe platforme. Ai nevoie doar de câteva lucruri Arduino, un smartphone Android și o cutie de pantofi. Dacă nu aveți niciunul dintre acestea, credeți cu fermitate în el: nu există nimic care
Joc de reacție Arduino: 9 pași
Joc de reacție Arduino: Am făcut acest joc ca o sarcină școlară. A trebuit să facem ceva interactiv cu un arduino. Acesta este primul meu proiect Arduino pe care l-am realizat vreodată, așa că a fost destul de dificil, dar nu imposibil
Joc de reacție rapidă: Versiune la distanță: 5 pași (cu imagini)
Joc cu reacție rapidă: Versiune la distanță: Bună. Acesta este un instructiv despre cum să creați un joc care vă testează atât timpul de reacție, cât și sensul distanței. Acest proiect se bazează pe un proiect vechi pe care l-am făcut, implicând doi jucători care concurau pentru a vedea cine a avut un timp de reacție mai rapid făcând clic pe un buton w