Contexto
Para nuestro proyecto de ingeniería, nuestros tutores quiso enfrentar los desafíos del diseño de un sistema en tiempo real con un relativamente alto rendimiento en limitados recursos (memoria, ancho de banda).
Las especificaciones requieren una plataforma de juego con el siguiente hardware:
- Junta de SDMONexys 3 de Digilent (para la implementación de una GPU en el FPGA).
- Junta de MCBSTM32F400 de Keil (para el sistema operativo de la plataforma de alojamiento y almacenamiento de los datos del juego).
- una pantalla Tech DT035TFT LCD con un controlador de Novatek NT39016 (pantalla en color verdadero protable).
Hay dos equipos de dos estudiantes que están trabajando en este proyecto. Un equipo se centra en el MCU del brazo y el otro en la GPU.
Especificaciones
La plataforma tiene que coincidir con el rendimiento de una plataforma de juegos comerciales de 16 bits como la Super Nintendo, Sega MegaDrive, con el multicapa Marcos y desplazamiento. La plataforma consta de dos componentes principales: la GPU y el MCU de la placa base conectado a la salida de vídeo.
- Los requisitos específicos del MCU son los gráficos API para la GPU, la API de audio para el codec de audio a bordo usuario IO, interfaz MCU/GPU, interfaz de la tarjeta SD. Programación del videojuego. Un módulo para configurar la pantalla (brillo, contraste, etc.) también se considera dentro de la GPU.
- Los requisitos específicos de GPU son pantalla multicapa, la mezcla de diferentes capas con transparencia, colores de 16 bits RGBA, múltiples capas de desplazamiento, operaciones básicas 2D (bitblit (copia), color de relleno, modificación de la transparencia y su combinación (borrar, mover, etc.), generación primitiva (líneas, círculos, texto), salidas de vídeo LCD y VGA. Gráficos orientados a controlador de memoria con acceso a DMA.
Planes de implementación
Los dos equipos tendrán que colaborar regularmente para desarrollar los dos componentes principales mencionados anteriormente. Hemos diseñado la arquitectura de la plataforma para ello.
Nuestro equipo comenzará la aplicación proporcionando todas las interfaces necesarias alrededor de la GPU, como el soporte para la pantalla LCD y la conexión hacia el tablero MCU. Esto se desarrollará en paralelo con el diseño de los módulos de HDL asociado a estas interfaces. En este punto, una integración preliminar con la GPU llevará a cabo con el fin de asegurar la consistencia y la interoperabilidad de ambos módulos. Seguirá por el diseño de software en el MCU de controladores de periféricos necesarios, API de audio y video y finalmente los RTOS. Después de la integración final con el equipo de gráficos, con todos los módulos de la GPU, el juego previsto ser implementado y probado.
Video de YouTube
Antes de pasar por los detalles, podéis consultar este enlace de Youtube que contiene un breve resumen de nuestro proyecto y un video que muestra lo que hemos conseguido hacer esto ahora. El proyecto aún no está completado pero se mantenga actualizando esta página cada vez que una nueva función se agrega al proyecto.
Primera demostración: animación
En esta demo hay dos capas de mostrar en el frame buffer, el fondo es una imagen de las estrellas en 320 x 240 y la imagen de primer plano es un 3200 x 240 con un color de fondo fijo que se establece en un color transparente al convertir el archivo bmp en nuestro formato. El MCU se desplaza periódicamente en la imagen de primer plano para crear el movimiento animado.
Segunda demostración: un juego corto
En esta demo nos proporcionan un juego corto usando sprites e imágenes de fondo de la calle de la ira (abandonware). En este caso, se crean animaciones usando bitblits en el primero plano y el movimiento del personaje se crea con desplazamiento. También se puede ver generación primitiva en el extremo para mostrar un mensaje.