Tabla de contenido:
- Paso 1: Introducción
- Paso 2: Materiales
- Paso 3: Diseño de caja negra del diagrama de nivel superior
- Paso 4: CLKDivide
- Paso 5: Bloque de proceso de cambio
- Paso 6: máquina de estados finitos
- Paso 7: Control del bloque de proceso de visualización con nivel
- Paso 8: Control de la velocidad del LED con nivel
- Paso 9: Montaje de hardware
- Paso 10: ¡Diviértete
Video: Juego de reacción FPGA: 10 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
Por Summer Rutherford y Regita Soetandar
Paso 1: Introducción
Para nuestro proyecto final para CPE 133, diseñamos un juego de reacción en VHDL para una placa Basys3. Este juego se puede comparar más de cerca con el juego de arcade "Stacker", donde el jugador tiene que soltar los bloques en el momento adecuado. La placa Basys3 está conectada a una placa de pruebas, que tiene LED alternos. Estas luces LED se alternarán a una frecuencia específica, dependiendo del nivel. Este juego utiliza el divisor de reloj y la pantalla de 4 dígitos y 7 segmentos, así como una máquina de estados finitos. Cuando el jugador activa el interruptor correcto cuando se enciende el LED del medio, el jugador avanzará al siguiente nivel del juego, aumentando la frecuencia de los LED alternos. Esto hace que cada nivel sucesivo sea más difícil que el nivel anterior. Cuando el jugador supera con éxito el nivel 7, el nivel más alto, se mostrará un mensaje en la pantalla de segmento y todos los LED parpadearán simultáneamente.
Paso 2: Materiales
Los materiales que necesitarás son:
- Placa Digilent Basys3 con cable micro USB
- Tablero de circuitos
- 5 LED
- 5 resistencias (usamos 220 ohmios)
- 11 cables de puente
- Computadora con Vivado
Paso 3: Diseño de caja negra del diagrama de nivel superior
Como puede ver, nuestro diagrama de bloques de nivel superior comienza obteniendo los relojes requeridos de nuestro submódulo, ClkDivide. Estos relojes son entradas a los distintos bloques de proceso. Esencialmente, el juego tiene que reconocer que cuando un usuario enciende correctamente el interruptor, los LED deben comenzar a alternar más rápido y la pantalla debe subir un nivel. El diagrama de bloques puede parecer un poco loco, pero eso se debe a que hay muchas señales que se establecen en un determinado proceso y luego esa señal define otra señal en otro bloque de proceso.
Al final, las únicas entradas que toma el juego son el reloj de entrada en el tablero Basys3 que funciona a 100 Mhz, siete interruptores en el tablero Basys3 y el botón de reinicio. Lo que se emite es el ánodo para la pantalla de siete segmentos, los siete segmentos para la pantalla y los LED.
Paso 4: CLKDivide
Este submódulo divisor de reloj creó un reloj más lento dependiendo del valor que le asignamos en nuestro archivo principal. Usamos este submódulo para determinar Clk400, PushClk y newlck. Este submódulo toma un reloj y un divisor de 32 bits como entradas. Se emite un reloj ralentizado. Hay un bloque de proceso para el divisor y el reloj ralentizado. En el proceso hay una variable temporal, a la que llamamos contar, que cuenta uno cada vez que se golpea un flanco ascendente del reloj introducido. Una vez que alcanza el número del divisor, el reloj ralentizado cambia y la cuenta se reinicia a cero.
Paso 5: Bloque de proceso de cambio
El bloque de proceso Shift controla el movimiento alterno y la velocidad de los LED. En la lista de sensibilidad están las señales newclk y Stop. La parada provoca un breve retraso cuando el usuario pasa de nivel. Si Stop no es alto, los LED se alternan de forma normal en función de la velocidad de newclk. Este patrón alterno está controlado por dos variables: seguimiento y recuento. Count determina qué LED debe estar encendido, mientras que Track determina si el conteo debe contar hacia arriba o hacia abajo. Hay otra señal, Final, que se aplica solo cuando el Nivel es "111", lo que indica que el jugador ha ganado el juego. Final alterna entre 0 y 1 en cada flanco del reloj para encender y apagar los LED de forma continua. Este es solo un elemento visual para la exhibición final.
Este proceso de cambio es el lugar perfecto para comenzar este proyecto. Si puede hacer que sus LED se alternen de manera correcta y consistente, ¡desde aquí solo tiene que agregar el comportamiento al subir de nivel!
Paso 6: máquina de estados finitos
Creamos una máquina de estados finitos para dictar el comportamiento cuando se presiona el interruptor de entrada o el botón de reinicio. Cada estado es un "nivel" y si el interruptor se enciende en el momento incorrecto o se presiona el reinicio, el nivel vuelve a "000". De lo contrario, si el interruptor se enciende correctamente, entonces el nivel se mueve hacia arriba hasta que alcanza el estado final, "111" y aparece la pantalla final. El FSM se basa en los dos bloques de proceso sync_proc y comb_proc. Sync_proc usa el reloj que llamamos PushClk. Este reloj controla qué tan rápido el siguiente estado se convierte en el estado actual. Este reloj debería ser bastante rápido; Elegimos una velocidad que era aproximadamente dos veces más rápida que nuestra velocidad LED más rápida.
Implementamos este código usando un FSM para los niveles; sin embargo, después de este proyecto, nos dimos cuenta de que un uso más eficiente de un FSM podría haber sido tener un estado de conteo ascendente, un estado de reinicio o un estado de suspensión. Si no se presiona nada, está en estado de suspensión. Si se presiona reiniciar o el reproductor se estropea, está en estado de reinicio. Si se presiona correctamente, está en el estado de conteo ascendente. ¡También hay muchas otras formas de usar un FSM en este juego!
Paso 7: Control del bloque de proceso de visualización con nivel
El nivel controla el bloque de proceso de visualización. Las variables en la lista de sensibilidad son Level, Reset y Clk400. La pantalla de 7 segmentos comienza mostrando "1" para el primer nivel. Cuenta hasta 7 cada vez que el usuario pasa de un nivel para mostrarle en qué nivel se encuentra. Una vez que el usuario ha pasado el nivel 7, muestra "COOL" para significar que el jugador ha ganado el juego. Esta pantalla "COOL" funciona con un reloj de 400 Hz que llamamos Clk400. Si se presiona Reset, la pantalla vuelve a "1".
Paso 8: Control de la velocidad del LED con nivel
Finalmente, Level controla la velocidad de los LED. El nivel es la única señal en la lista de sensibilidad. D1 es la señal que entra en el proceso Clock Divider para obtener newclk. Cada vez que se cambia el nivel, o cambia el estado, el bloque de proceso "Velocidad". Este proceso determina el valor de D1. Hay 8 valores definidos de D1 que elegimos en función de la rapidez con la que queríamos que se ejecutara cada nivel. D1 se vuelve más pequeño cada vez que aumenta el nivel para que newclk se ejecute más rápido.
Paso 9: Montaje de hardware
Conectamos la placa de pruebas al Basys3 con uno de los conectores pmod. Se utilizaron seis de los puertos pmod para enchufar un conector macho a macho, uno para tierra y los otros cinco para los 5 LED. También colocamos una resistencia para cada LED. Estas resistencias son de 220 Ω y evitan que los LED se cortocircuiten y se quemen. Aunque cada LED tiene cierta resistencia, la resistencia no es suficiente para impedir el voltaje de la fuente.
Paso 10: ¡Diviértete
Este juego es muy fácil de jugar. El jugador comienza en el interruptor 1 del extremo derecho del tablero, V17. Deben mover el interruptor hacia arriba cuando el LED del medio está encendido. Luego mueven un interruptor hacia la izquierda y hacen lo mismo. Si el jugador llega al final, terminará en el séptimo cambio, W14. ¡Si ganan el juego, pueden ver una pantalla final realmente divertida!
¡Algo a tener en cuenta es que al crear este juego, las velocidades dependen totalmente de ti! Si las velocidades que hemos elegido son demasiado lentas, ¡siéntete libre de acelerarlas y hacerlo aún más desafiante! Tampoco hay un número fijo de niveles. Si desea que tenga aún más niveles, hay modificaciones que deben realizarse en el FSM y los bloques de proceso determinados por Level, pero estos son cambios muy simples.
También elegimos usar interruptores en la placa como entrada del usuario, pero esto también es posible con un botón en la placa Basys3; el botón eliminará la necesidad de restablecer los interruptores cada vez que el usuario comience de nuevo. Inicialmente usamos un botón, sin embargo, esto causó errores al definir el nivel porque saltaría varios niveles si se presionan dos bordes ascendentes de PushClk cuando se mantiene presionado el botón.
A continuación se muestra un video que demuestra cómo jugar, pasando por los primeros 4 niveles y la pantalla final final.
El archivo principal de este proyecto se incluye a continuación.
Fuentes
Manual de referencia de Basys3
Inspiración para el proyecto: juego Arduino Stop It
Recomendado:
Tap Tap Rainbow: un juego de reacción rápida para 2 jugadores: 4 pasos (con imágenes)
Tap Tap Rainbow - un juego de reacción rápida para 2 jugadores: hace 2 semanas mi hija tuvo una idea genial para hacer un juego de reacción rápida con colores del arco iris (es una experta en arcoíris: D). Al instante me encantó la idea y empezamos a pensar en cómo convertirlo en un juego real. Tienes un arcoíris en
Divertido juego de reacción de Arduino: 3 pasos
Divertido juego de reacción de Arduino: divertido juego de reacción de Arduino para toda la familia;) Basado en la comunicación Bluetooth multiplataforma. Solo necesitas algunas cosas de Arduino, un teléfono inteligente Android y una caja de zapatos. Si no tienes ninguno de estos, créelo firmemente: no hay nada que
Juego de reacción - Proyecto de ingeniería informática: 3 pasos
Juego de reacción - Proyecto de ingeniería informática: el juego de reacción es exactamente lo que dice el nombre, pone a prueba tu velocidad de reacción. Es posible que se pregunte qué beneficios podría tener este servidor fuera del entretenimiento, bueno, puede usarlo para personas en rehabilitación por cirugías o accidentes. Su reacción spe
Juego de reacción Arduino: 9 pasos
Juego de reacción de Arduino: Hice este juego como una tarea escolar. Tuvimos que hacer algo interactivo con un arduino. Este es mi primer proyecto Arduino que he hecho, así que fue bastante difícil, ¡pero no imposible
Juego de reacción rápida: Versión a distancia: 5 pasos (con imágenes)
Juego de reacción rápida: Distancia Versión: Hola. Este es un Instructable sobre cómo crear un juego que prueba tanto tu tiempo de reacción como tu sentido de la distancia. Este proyecto se basa en un proyecto antiguo que hice en el que participaban dos jugadores que competían para ver quién tenía un tiempo de reacción más rápido al hacer clic en un botón w