No sabía si colocar esta pregunta aquí o en stackoverflow, pero finalmente decidí publicarla aquí.
Quiero construir un sistema simple que pueda funcionar con periféricos básicos (UART, teclado, monitor VGA). Me gustaría usar MPU en lugar de MCU como 'unidad principal', por lo que habría más memoria para procesar datos. Este chip "principal" usaría un solo SDRAM para almacenar sus datos.
Para la salida VGA, quiero usar un chip AVR de Atmel, que solicitaría datos de otra memoria, que contendría datos de pantalla en formato RGBS de 8 bits. Aquí es donde llego a los problemas.
No necesito mucha memoria VGA (menos de 512 KB), por lo tanto, quiero usar la memoria SRAM, que también es fácil de acceder en comparación con la SDRAM. La resolución VGA que elegí usa un reloj de píxeles de 25 MHz, lo que significa que solo tengo ~ 40 ns de tiempo para recuperar un solo píxel de SRAM a DAC. Eso es bueno ya que la mayoría de las memorias que coinciden con mi entrada de búsqueda (> = memoria de 4Mbit, tiempo de acceso de < 40ns) pueden hacer esto.
De vuelta a la memoria MPU, me gustaría hacer mi primera pregunta: ¿cuándo es necesario enviar un comando de actualización a SDRAM? ¿Tengo que hacerlo o es posible obtener una memoria que necesite alguna magia externa para actualizarla?
Ahora llego al problema de cómo acceder a esa memoria SRAM VGA desde el chip principal, ya que casi siempre se accede a él desde mi controlador VGA (sin mencionar que necesito otro chip para asignar esta memoria a la dirección de MPU espacio). Pensé en reservar algunos pines del controlador VGA para las solicitudes de MPU para el acceso a la SRAM, lo que significaría que habría que omitir algunos cuadros de video dejando esta SRAM accesible a la MPU sin interrupciones.
Estoy atrapado aquí. Solo pude pensar en estas posibles soluciones:
- Puedo usar SDRAM en un chip VGA en lugar de SRAM, pero también necesitaré un mejor controlador para la salida de video. Este SDRAM será compatible con el de MPU, y tendré que pensar en una táctica especial para el robo de reloj, donde podría acceder a la memoria de video desde el controlador de video y la unidad de procesamiento principal de una vez.
- Puedo agregar otro chip que usará el tiempo cuando no se acceda a la memoria de video (pulsos de sincronización, porches, etc.) para copiar bloques de datos de la memoria principal a la memoria de video.
- Puedo usar solo una memoria SDRAM y solicitar acceso a la misma desde la MPU cada vez que VGA necesite otro píxel. Eso ralentizaría todo el sistema, pero sería más simple.
¿Qué piensas de esto? ¿Qué otras formas (trucos, diseños) están aquí para tener dos unidades (principal y unidad de procesamiento de video), de las cuales una está siendo administrada por otra?
Gracias.