¿Cómo se comunica una GPU / CPU con una salida de pantalla estándar? (HDMI / DVI / etc) [cerrado]

14

Estoy interesado en cómo la CPU / GPU presenta (a cualquier equipo que lo haga) datos de video después de que se ha procesado.

Me han dicho que el video es procesado por la CPU / GPU y luego enviado a un circuito integrado por un serial de alta velocidad que convierte la señal serial a una salida de pantalla apropiada, pero no puedo confirmar esto buscando en línea.

Estoy interesado en la señalización y no puedo buscar protocolos / etc. porque no sé qué es lo que estoy buscando. Entonces, ¿la CPU / GPU interactúa directamente con las salidas de video (puedo encontrar estos protocolos fácilmente) o hay un "intermediario", por así decirlo, y si es así, ¿qué tipo de chip / etc?

Craig Lafferty
fuente
Puede comprar RAMDAC de video como partes distintas: ti.com.cn/cn/lit/ds/symlink/tvp3703.pdf, aunque eso no significa que estará separado en su tarjeta gráfica.
pjc50

Respuestas:

18

La imagen que se muestra en el monitor se almacena en la RAM de video de su computadora en la tarjeta gráfica en una estructura llamada framebuffer. Los datos en el framebuffer son generalmente de color RGB de 24 bits, por lo que habrá un byte para el rojo, uno para el verde y uno para el azul para cada píxel en la pantalla, posiblemente con algunos bytes de relleno adicionales. Los datos en la RAM de video pueden ser generados por la GPU o por la CPU. La memoria RAM de video es leída continuamente por un componente especializado de DMA en la tarjeta de video y enviada al monitor. La salida de señal al monitor es una señal analógica (VGA) donde los componentes de color se envían a través de convertidores digitales a analógicos antes de abandonar la tarjeta, o una señal digital en el caso de DVI, HDMI o DisplayPort. El hardware responsable de esto también genera las señales de sincronización horizontal y vertical, así como todos los retrasos apropiados, por lo que los datos de la imagen solo se envían al monitor cuando está listo para ello. En DVI y HDMI, el flujo de información de color de píxeles se codifica y serializa y se envía a través de TMDS (señalización diferencial minimizada de transición) al monitor. DisplayPort utiliza codificación 8b / 10b. La codificación tiene múltiples propósitos. Primero, TMDS minimiza las transiciones de señal para reducir las emisiones EMI. En segundo lugar, tanto TMDS como 8b / 10b son protocolos balanceados de CC, por lo que los condensadores de bloqueo de CC pueden usarse para eliminar problemas con los bucles de tierra. Tercero, 8b / 10b asegura una densidad de transición lo suficientemente alta como para permitir la recuperación del reloj en el receptor ya que DisplayPort no distribuye un reloj separado. El flujo de información de color de píxeles se codifica y serializa y se envía a través de TMDS (señalización diferencial minimizada de transición) al monitor. DisplayPort utiliza codificación 8b / 10b. La codificación tiene múltiples propósitos. Primero, TMDS minimiza las transiciones de señal para reducir las emisiones EMI. En segundo lugar, tanto TMDS como 8b / 10b son protocolos balanceados de CC, por lo que los condensadores de bloqueo de CC pueden usarse para eliminar problemas con los bucles de tierra. Tercero, 8b / 10b asegura una densidad de transición lo suficientemente alta como para permitir la recuperación del reloj en el receptor ya que DisplayPort no distribuye un reloj separado. El flujo de información de color de píxeles se codifica y serializa y se envía a través de TMDS (señalización diferencial minimizada de transición) al monitor. DisplayPort utiliza codificación 8b / 10b. La codificación tiene múltiples propósitos. Primero, TMDS minimiza las transiciones de señal para reducir las emisiones EMI. En segundo lugar, tanto TMDS como 8b / 10b son protocolos balanceados de CC, por lo que los condensadores de bloqueo de CC pueden usarse para eliminar problemas con los bucles de tierra. Tercero, 8b / 10b asegura una densidad de transición lo suficientemente alta como para permitir la recuperación del reloj en el receptor ya que DisplayPort no distribuye un reloj separado.

Además, para HDMI y DisplayPort, los datos de audio también se envían a la tarjeta gráfica para su transmisión al monitor. Estos datos se insertan en pausas en el flujo de datos entre cuadros de video. En este caso, la tarjeta de video se presentará como un receptor de audio para el sistema operativo, y los datos de audio se transferirán a través de DMA a la tarjeta para su inclusión con los datos de video.

Ahora, probablemente se dé cuenta de que para una pantalla de 1920x1080 con 4 bytes por píxel, solo necesita unos 8 MB para almacenar la imagen, pero la RAM de video en su computadora probablemente sea muchas veces mayor. Esto se debe a que la RAM de video no solo está diseñada para almacenar el framebuffer. La RAM de video está directamente conectada a la GPU, un procesador de propósito especial diseñado para una eficiente representación 3D y decodificación de video. La GPU utiliza su acceso directo a la RAM de video para acelerar el proceso de renderizado. De hecho, obtener datos de la memoria principal en la memoria de video es un pequeño cuello de botella, ya que el bus PCI que conecta la tarjeta de video a la CPU y la memoria principal es significativamente más lento que la conexión entre la GPU y la RAM de video.

alex.forencich
fuente
7

Las diversas salidas de pantalla modernas son esencialmente flujos de bits en serie. La tasa de bits es demasiado alta para un procesador (o si pudiera mantenerse, reclamaría demasiado tiempo de procesamiento). Se reserva un trozo de memoria para contener los bits de la imagen. Una pieza de hardware dedicada lee el contenido de la memoria y la transmite. Esta pieza es similar a un controlador DMA y en realidad es bastante simple. Es solo una pequeña parte de una GPU moderna, que se ocupa principalmente de crear esa imagen en la memoria a partir de comandos de GPU de nivel superior.

La memoria que contiene la imagen de video puede ser parte de la memoria principal (barata) o una memoria dedicada a la que puede acceder simultáneamente el 'DMA' y la CPU y / o GPU. El 'DMA' debe configurarse con varios parámetros, por ejemplo, el ancho y la altura de los píxeles, la profundidad del color, la ubicación de inicio en la memoria, etc.

En las computadoras modernas, la GPU es un procesador (muy especializado) que rivaliza con la velocidad de la CPU principal (y la supera en su propio territorio). Hace cosas como generar una imagen psuido-3D a partir de un montón de objetos 3D con texturas y fuentes de luz. Todo esto se puede hacer dentro de la memoria de video, por la GPU. La CPU solo entrega los objetos, texturas y fuentes de luz.

Leer los datos de video de la memoria y cambiarlos es un proceso bastante simple, pero debe hacerse bastante rápido y todo el tiempo. Por lo tanto, esta tarea es adecuada para hardware dedicado y no adecuada para una CPU. AFAIK las últimas computadoras que tuvieron la CPU involucrada en la generación de la señal de video fueron la ZX80 / 81 y Spectrum. En esos, la CPU podría hacer su propio trabajo solo durante el tiempo de retroceso (¿vertical?).

Wouter van Ooijen
fuente
1
Esta es una gran información. Entonces, ¿el controlador DMA (o hardware similar) accede a la memoria de video directamente? ¿Y en un sistema con gráficos integrados que usa RAM del sistema, accede directamente a la RAM del sistema? Perdón por la simplicidad de mis preguntas. Soy un gran aficionado al bricolaje, así que tiendo a saltar a cosas de nivel superior con conocimientos de nivel inferior. :)
Craig Lafferty
Y para seguir, ¿cómo sabe el controlador de qué dirección en la RAM "robar" el marco? Los cuadros / mapas de bits se están reemplazando muy rápidamente y se están moviendo, supongo.
Craig Lafferty
Su último comentario es correcto: se almacena en un framebuffer , y para video analógico se pasa a un RAMDAC . La dirección del framebuffer puede ser fija o especificada en un registro de control. Hay varios trucos que involucran el intercambio de framebuffers entre cuadros o durante los cuadros, o en algunos sistemas (Amiga) que cambian el modo de video a mitad de un cuadro.
pjc50
¿Por qué se ralentizaría el procesador? ¿Ya no tiene que procesar el video para que el controlador pueda usarlo? Voy a hacer otra conjetura aquí y decir que el controlador lee la RAM una y otra vez y la CPU / GPU solo actualiza la RAM con nueva información de visualización cuando algo ha cambiado, por lo que la GPU pondrá mi pantalla actual en su RAM y cuando muevo mi cursor actualiza los píxeles que han cambiado. Mientras tanto, el controlador lee la RAM 60 o más veces por segundo (tipo de FR estándar, supongo).
Craig Lafferty
1
La RAM de video no solo se usa para almacenar la imagen de la pantalla, sino que también la GPU la usa internamente para almacenar los datos de la escena que se procesan en el framebuffer. Esto puede ocupar mucho espacio porque la GPU necesita acceso a las mallas 3D de los objetos junto con todos los datos de textura para sus superficies.
alex.forencich