Sommario:
- Passaggio 1: Introduzione
- Passaggio 2: materiali
- Passaggio 3: progettazione della scatola nera del diagramma di livello superiore
- Passaggio 4: CLKDivide
- Passaggio 5: blocco del processo di spostamento
- Passaggio 6: macchina a stati finiti
- Passaggio 7: controllo del blocco del processo di visualizzazione con il livello
- Passaggio 8: controllo della velocità del LED con il livello
- Passaggio 9: assemblaggio dell'hardware
- Passaggio 10: divertiti
Video: Gioco di reazione FPGA: 10 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
Di Summer Rutherford e Regita Soetandar
Passaggio 1: Introduzione
Per il nostro progetto finale per CPE 133, abbiamo progettato un gioco di reazione in VHDL per una scheda Basys3. Questo gioco può essere paragonato più da vicino al gioco arcade "Stacker" in cui il giocatore deve far cadere i blocchi al momento giusto. La scheda Basys3 è collegata a una breadboard, che ha i LED alternati. Queste luci a LED si alterneranno a una frequenza specifica, a seconda del livello. Questo gioco utilizza il divisore dell'orologio e il display a 7 segmenti a 4 cifre, oltre a una macchina a stati finiti. Quando il giocatore attiva l'interruttore corretto quando il LED centrale si illumina, il giocatore avanzerà al livello successivo del gioco, aumentando la frequenza dei LED alternati. Questo rende ogni livello successivo più difficile del livello precedente. Quando il giocatore supera con successo il livello 7, il livello più alto, verrà visualizzato un messaggio sul display a segmenti e tutti i LED si accenderanno e si spegneranno contemporaneamente.
Passaggio 2: materiali
I materiali di cui avrai bisogno sono:
- Scheda Digilent Basys3 con cavo micro USB
- tagliere
- 5 LED
- 5 resistenze (abbiamo usato 220 ohm)
- 11 ponticelli
- Computer con Vivado
Passaggio 3: progettazione della scatola nera del diagramma di livello superiore
Come puoi vedere, il nostro diagramma a blocchi di primo livello inizia ottenendo i clock richiesti dal nostro sottomodulo, ClkDivide. Questi clock sono ingressi nei vari blocchi di processo. In sostanza, il gioco deve riconoscere che quando un utente accende correttamente l'interruttore, i LED devono iniziare ad alternarsi più velocemente e il display deve salire di un livello. Il diagramma a blocchi potrebbe sembrare un po' folle, ma questo è dovuto al fatto che ci sono molti segnali che vengono stabiliti in un determinato processo e quindi quel segnale definisce un altro segnale in un altro blocco di processo.
Alla fine, gli unici input che il gioco accetta sono l'orologio in ingresso sulla scheda Basys3 che funziona a 100 Mhz, sette interruttori sulla scheda Basys3 e il pulsante di ripristino. Ciò che viene emesso è l'anodo per il display a sette segmenti, i sette segmenti per il display e i LED.
Passaggio 4: CLKDivide
Questo sottomodulo divisore di clock ha creato un clock più lento a seconda del valore che gli abbiamo mappato nel nostro file principale. Abbiamo usato questo sottomodulo per determinare Clk400, PushClk e newlck. Questo sottomodulo accetta un clock e un divisore a 32 bit come input. Viene emesso un clock rallentato. C'è un blocco di processo per il divisore e l'orologio rallentato. Nel processo c'è una variabile temporanea, che abbiamo chiamato conteggio, che conta uno ogni volta che viene colpito un fronte di salita del clock immesso. Una volta raggiunto il numero del divisore, l'orologio rallentato si è attivato e il conteggio si è azzerato.
Passaggio 5: blocco del processo di spostamento
Il blocco del processo Shift controlla il movimento alternato e la velocità dei LED. Nella lista della sensibilità ci sono i segnali newclk e stop. Stop provoca un breve ritardo quando l'utente supera il livello. Se Stop non è alto, i LED si alternano normalmente in base alla velocità di newclk. Questo schema alternato è controllato da due variabili: Track e count. Count determina quale LED deve essere acceso, mentre Track determina se il conteggio deve aumentare o diminuire. C'è un altro segnale, Finale, che si applica solo quando il Livello è "111", che indica che il giocatore ha battuto il gioco. Final alterna tra 0 e 1 ogni fronte di clock per accendere e spegnere continuamente i LED. Questo è solo un elemento visivo per il display finale.
Questo processo di spostamento è il punto di partenza perfetto per questo progetto. Se riesci a far alternare i tuoi LED in modo corretto e coerente, da qui devi solo aggiungere il comportamento quando sali di livello!
Passaggio 6: macchina a stati finiti
Abbiamo creato una macchina a stati finiti per dettare il comportamento quando viene premuto l'interruttore di input o il pulsante di ripristino. Ogni stato è un "livello" e se l'interruttore viene acceso al momento sbagliato o viene premuto il ripristino, il livello torna a "000". Altrimenti, se l'interruttore è correttamente acceso, il livello sale fino a raggiungere lo stato finale, "111" e si verifica la visualizzazione finale. L'FSM si basa sui due blocchi di processo sync_proc e comb_proc. Sync_proc utilizza l'orologio che abbiamo chiamato PushClk. Questo orologio controlla la velocità con cui lo stato successivo diventa lo stato attuale. Questo orologio dovrebbe essere abbastanza veloce; abbiamo scelto una velocità che era circa due volte più veloce della nostra velocità LED più veloce.
Abbiamo implementato questo codice utilizzando un FSM per i livelli; tuttavia, dopo questo progetto ci siamo resi conto che un uso più efficiente di un FSM avrebbe potuto essere uno stato di conteggio in avanti, uno stato di ripristino o uno stato di permanenza. Se non viene premuto nulla, è in stato di permanenza. Se viene premuto reset o il lettore è incasinato, è in stato di reset. Se premuto correttamente, è nello stato di conteggio in avanti. Ci sono molti altri modi per usare un FSM anche in questo gioco!
Passaggio 7: controllo del blocco del processo di visualizzazione con il livello
Livello controlla il blocco del processo Visualizza. Le variabili nell'elenco di sensibilità sono Level, Reset e Clk400. Il display a 7 segmenti inizia visualizzando "1" per il primo livello. Conta fino a 7 ogni volta che l'utente supera un livello per mostrare all'utente a quale livello si trova. Una volta che l'utente ha superato il livello 7, visualizza "COOL" per indicare che il giocatore ha battuto il gioco. Questo display "COOL" funziona con un clock a 400 Hz che abbiamo chiamato Clk400. Se si preme Reset, il display torna a "1".
Passaggio 8: controllo della velocità del LED con il livello
Infine, Level controlla la velocità dei LED. Il livello è l'unico segnale nell'elenco delle sensibilità. D1 è il segnale che va nel processo Clock Divider per ottenere newclk. Ogni volta che il livello viene modificato o lo stato cambia, il processo blocca "Velocità". Questo processo determina il valore di D1. Ci sono 8 valori definiti di D1 che abbiamo scelto in base alla velocità con cui volevamo che ogni livello fosse eseguito. D1 diventa più piccolo ogni volta che il livello aumenta in modo che il newclk funzioni più velocemente.
Passaggio 9: assemblaggio dell'hardware
Abbiamo collegato la breadboard al Basys3 con uno dei connettori pmod. Sei delle porte pmod sono state utilizzate per collegare un connettore maschio a maschio, una per la terra e le altre cinque per i 5 LED. Abbiamo anche posizionato una resistenza per ogni LED. Questi resistori sono da 220 e impediscono che i LED vengano cortocircuitati e bruciati. Sebbene ogni LED abbia una certa resistenza, la resistenza non è sufficiente per impedire la tensione dalla sorgente.
Passaggio 10: divertiti
Questo gioco è molto facile da giocare. Il giocatore inizia dall'interruttore 1 all'estrema destra del tabellone, V17. Devono alzare l'interruttore quando il LED centrale è acceso. Quindi spostano un interruttore a sinistra e fanno la stessa cosa! Se il giocatore arriva alla fine, finirà al settimo interruttore, V14. Se battono il gioco, possono vedere un finale davvero divertente!
Qualcosa da notare è che quando crei questo gioco le velocità dipendono totalmente da te! Se le velocità che abbiamo scelto sono troppo lente, sentiti libero di accelerarlo e renderlo ancora più impegnativo! Inoltre, non esiste un numero fisso di livelli. Se vuoi che abbia ancora più livelli, ci sono modifiche che devono essere apportate all'FSM e ai blocchi di processo determinati da Livello, ma si tratta di modifiche molto semplici.
Abbiamo anche scelto di utilizzare gli interruttori sulla scheda come input dell'utente, ma questo è possibile anche con un pulsante sulla scheda Basys3; il pulsante eliminerà la necessità di ripristinare gli interruttori ogni volta che l'utente ricomincia. Inizialmente abbiamo utilizzato un pulsante, tuttavia ciò ha causato errori nella definizione del livello perché salterebbe più livelli se due fronti di salita di PushClk venivano colpiti quando il pulsante veniva tenuto premuto.
Di seguito è riportato un video che mostra come giocare, passando attraverso i primi 4 livelli e il display finale.
Il file principale per questo progetto è incluso di seguito.
Fonti
Manuale di riferimento Basys3
Ispirazione per il progetto - Arduino Stop It game
Consigliato:
Tap Tap Rainbow - un gioco di reazione rapida per 2 giocatori: 4 passaggi (con immagini)
Tap Tap Rainbow - un gioco di reazione rapida per 2 giocatori: 2 settimane fa mia figlia ha avuto l'idea geniale di creare un gioco di reazione rapida con i colori dell'arcobaleno (è un'esperta di arcobaleno: D). Mi è subito piaciuta l'idea e abbiamo iniziato a pensare a come potevamo trasformarla in un vero gioco. L'idea era quella. Hai un arcobaleno in
555 Gioco di reazione al timer: 5 passaggi
555 Timer Reaction Game: Target AudienceQuesto istruibile è rivolto a persone interessate ai circuiti (con un po' di background) che cercano un gioco semplice che puoi costruire con pochi componenti economici. Livello di difficoltà Sarebbe difficile se
Divertente gioco di reazione Arduino: 3 passaggi
Divertente gioco di reazione Arduino: divertente gioco di reazione Arduino per tutta la famiglia;) Basato sulla comunicazione Bluetooth multipiattaforma. Hai solo bisogno di alcune cose Arduino, uno smartphone Android e una scatola da scarpe. Se non possiedi nessuno di questi, credici fermamente: non c'è niente che
Gioco di reazione - Progetto di ingegneria informatica: 3 passaggi
Reaction Game- Computer Engineering Project: il gioco di reazione è esattamente quello che dice il nome, mette alla prova la tua velocità di reazione. Potresti chiederti quali vantaggi potrebbe avere questo server al di fuori dell'intrattenimento, beh, puoi usarlo per le persone in riabilitazione da interventi chirurgici o incidenti. La loro reazione spe
Gioco di reazione Arduino: 9 passaggi
Arduino Reaction Game: ho realizzato questo gioco come compito scolastico. Abbiamo dovuto creare qualcosa di interattivo con un arduino. Questo è il mio primo progetto Arduino che abbia mai realizzato, quindi è stato piuttosto difficile, ma non impossibile