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 una sola SDRAM para almacenar sus datos.
Para la salida VGA, quiero usar un chip Atmel AVR, 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 que quiero usar memoria SRAM, que también es fácil de acceder en comparación con 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 4 Mbit, <40 ns de tiempo de acceso) pueden hacer esto.
Volviendo 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 necesitaría magia externa para actualizarla?
Ahora llego al problema de cómo acceder a esa memoria SRAM VGA desde el chip principal, ya que mi controlador VGA casi siempre accede a ella (sin mencionar que necesito otro chip para mapear esta memoria correctamente al espacio de direcciones de MPU). Pensé en reservar algunos pines del controlador VGA para las solicitudes de acceso a SRAM de MPU, lo que significaría que algunos cuadros de video tendrían que omitirse dejando esta SRAM accesible a MPU sin interrupciones.
Estoy atorado aqui. Sólo podía pensar en estas posibles soluciones:
¿Qué piensas de esto? ¿Qué otras formas (trucos, diseños?) hay aquí para tener dos unidades (unidad principal y unidad de procesamiento de video), desde las cuales una está siendo administrada por otra?
Gracias.
Una cosa que solía ser común para los controladores de gráficos de video es Video RAM o VRAM .
VRAM tiene dos conjuntos de pines de salida de datos y, por lo tanto, dos puertos que se pueden usar simultáneamente. La computadora host accede al primer puerto, el puerto DRAM, de una manera muy similar a la DRAM tradicional. El segundo puerto, el puerto de video, generalmente es de solo lectura y está dedicado a proporcionar un canal de datos serializados de alto rendimiento para el conjunto de chips de gráficos.
Internamente, VRAM lee una fila DRAM completa y la desplaza secuencialmente hacia el circuito de video. Esto deja la DRAM disponible para que la use la MPU. La VRAM ha sido reemplazada en gran medida por el uso de SDRAM, "aunque solo tiene un puerto y se requiere más sobrecarga".
Una técnica que he usado en el pasado es usar el acceso intercalado a la memoria. Es un poco complejo de explicar (el diablo está en los detalles), pero resumiré lo básico:
Básicamente, la MPU accede a la memoria de video entre accesos de píxeles por parte del controlador de video. Si este tiempo se vuelve demasiado apretado, hay un par de cosas que puede hacer que aliviarán en gran medida el tiempo (por lo general, solo 1 de estas es necesaria):
Si intercala accesos de video, es posible que desee considerar el uso de un FPGA o CPLD para su controlador de memoria de video.
Otro método es tener 2 memorias de video separadas y usar la selección de banco. La MPU escribe en un banco mientras el otro está siendo utilizado por el controlador de video para la visualización. Cuando la MPU termina de escribir, los accesos al banco se intercambian (generalmente durante un pulso de sincronización).
usuario35443
Gesto de desaprobación