MPU accediendo a la memoria ocupada

1

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:

  1. 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.
  2. 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.
  3. 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.

    
pregunta user35443

1 respuesta

1

Una cosa que solía ser común para los controladores gráficos de video es RAM de video 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 central 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 serializado de alto rendimiento para el conjunto de chips de gráficos.

Internamente, VRAM lee una fila completa de DRAM y la desplaza secuencialmente hacia el circuito de video. Esto deja la DRAM disponible para su uso por la MPU. VRAM ha sido reemplazado en gran medida por el uso de SDRAM, "a pesar de que solo tiene un puerto único y requiere más gastos generales".

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 describiré los conceptos básicos:

Básicamente, la MPU accede a la memoria de video entre los accesos de píxeles por el controlador de video. Si este tiempo se aprieta demasiado, hay un par de cosas que puede hacer que aliviarán el tiempo (por lo general solo se necesita 1):

  1. Puede usar 2 chips de RAM (o bancos) e intercalar aquellos que usan cada chip para cada píxel. En su caso, esto efectivamente ralentizaría su reloj de píxeles a 80 ns por chip, permitiendo que las MPU y el acceso al controlador de video tengan ventanas de 40 ns cada una. Esto podría extenderse a más bancos entrelazando más píxeles si es necesario. Esta técnica se llama Memoria intercalada .
  2. Puede aumentar el tamaño del bus de datos de la memoria de video. El controlador de video leería varios píxeles en un solo acceso y los usaría secuencialmente. La MPU tendría un bus de datos más grande, cada acceso se dirigiría al byte (o palabra) apropiado y se utilizarían los selectores de bytes en la memoria de video, o se tendría que realizar una escritura de lectura-modificación para escribir al tamaño de datos más grande. En su caso, probablemente sería más sencillo aumentar el bus de datos de la memoria de video a 16 o 32 bits (2 o 4 píxeles), y probablemente luego usar una MPU con el mismo tamaño de bus.

Si intercala accesos de video, puede 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 controlador de video está utilizando el otro para la visualización. Cuando la MPU termina de escribir, los accesos del banco se intercambian (generalmente durante un pulso de sincronización).

    
respondido por el Tut

Lea otras preguntas en las etiquetas