Pattern Recogniser en FPGA

2

Estoy tratando de codificar un juego simon en mi FPGA, y estoy un poco atascado en cómo debo crear un patrón y detectarlo.

Juego de simon: enlace

Mi idea hasta ahora es que creo 99 estados (99 porque estoy implementando 99 etapas). Y al usar un generador aleatorio (que aún falta), determine qué LED debe estar cerrado para cada estado,

luego, utilizando una instrucción if, compruebo si cada estado (cada LED coincide con un botón) coincide con el botón que se está presionando. Si coinciden, luego verifica si el siguiente botón de presión coincide con el estado siguiente y así sucesivamente.

Cada vez que pasa al siguiente estado, comparo el valor del estado con el valor de las etapas, y si los estados

¿Se podría hacer esto más inteligente de alguna manera?

    
pregunta Carlton Banks

2 respuestas

3

Sugeriría un LFSR (registro de desplazamiento de retroalimentación lineal). Este es un generador de números pseudoaleatorios. Consulte wikipedia para obtener detalles sobre lo que es un LFSR.

Lo único que debes almacenar es el vector de inicialización que debe ser diferente para cada juego.

Por ejemplo: Tienes dos LFSR de 32 bits. (El LSB de cada registro LFSR es la salida del sistema LFSR). La combinación del LSB de cada registro LFSR define el color a mostrar (2bit define 4 opciones). Cada vez que se toca una nueva nota, utiliza el contenido de los dos registros LFRS anteriores como vector de inicialización. Por lo tanto, la secuencia es determinista y solo está definida por los primeros vectores de inicialización. No tendría ningún límite excepto el desbordamiento del contador de la nota actual en la secuencia. Y también el LFSR es cíclico, pero con un registro suficientemente grande, podría repetirse después de solo una secuencia de varios millones ...

No tienes que guardar la secuencia, cuando el jugador juega, regenera la secuencia y verifica que lo que el jugador está jugando es idéntico a tu secuencia.

Por último, pero no menos importante, los LFSR son muy fáciles de implementar en los FPGA.

    
respondido por el Blup1980
2

Dado que la secuencia de luces / tonos será diferente cada vez que juegues, deberías pensar en almacenar esa secuencia en una memoria (bloquear la RAM dentro del FPGA) para poder leerla. repetidamente, tanto para preguntar al usuario como para verificar su respuesta.

También necesitarás una máquina de estados, pero esta máquina tratará más sobre cómo funciona la secuencia de juego: inicialización, generación de la secuencia, reproducción de parte de la secuencia de luz / tono, espera a que el usuario vuelva a ingresar la secuencia, etc.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas