¿Por dónde empezar al considerar hacer una GPU?

8

Yo vi este video el otro día y me hizo pensar en cómo hacer y diseñar algo así como la GPU. ¿Por dónde comenzarías? Estoy más interesado en leer acerca de cómo funcionan y no en hacer uno de TTL (aún así).

Sé que esto suena como una pregunta de 'cómo se hace un lenguaje de programación', pero cualquier punto de partida sería bueno ya que no tengo idea de dónde comenzar a buscar.

Decano
fuente
3
¿Está interesado en "gráficos 3D de alta velocidad" o "cómo conducir un CRT / LCD"?
Toby Jaffey
@Joby atm solo muestra algo en una pantalla. Un cuadrado de color estaría bien.
Dean
3
¿Alguien puede explicarme por qué obtuve un voto negativo? Entonces puedo resolver cualquier problema con la pregunta.
Dean
1
La dificultad que veo con esta pregunta es que hay MUCHO terreno entre generar solo una pantalla monocromática de 80x25 caracteres, lo que alguna vez podría llamarse un generador de pantalla de video y lo que se entiende por 'GPU'. La sugerencia de que es posible que desee hacer uno 'con TTL' lo acerca mucho más al viejo generador de pantallas de 80x25.
JustJeff
@JustJeff, Ok, no sabía cómo se llamaban, ¿por qué son tan diferentes si hacen un trabajo similar?
Dean

Respuestas:

16

Eso es como ir a tu examen final de collage para la clase de ciencias y tener esto como tu pregunta: Describe el universo. Sea breve, pero conciso. No hay forma posible de responder esa pregunta de manera práctica, así que responderé una pregunta diferente.

¿Cuáles son los tipos de cosas que necesito saber antes de intentar diseñar una GPU?

En un orden cronológico aproximado, son:

  1. Ya sea VHDL o Verilog.
  2. FPGA's (área útil para jugar con la escritura de lógica digital).
  3. Cosas básicas de ruta de datos, como FIFO.
  4. Interfaces de bus, como PCIe y DDR2 / 3.
  5. Implementaciones binarias de funciones matemáticas, incluyendo coma flotante, etc.
  6. Diseño de CPU.
  7. Estándares de interfaz de video.
  8. Cosas analógicas de alta velocidad (el lado analógico de la alta velocidad digital)
  9. PLL y otras cosas de marcado semi-avanzado.
  10. Diseño de PCB de circuitos de alta velocidad.
  11. Diseño de convertidor CC / CC de baja tensión y alta corriente.
  12. Montones y montones de cosas de software.
  13. Y finalmente, ASIC u otro diseño de tipo de chip personalizado.

También me atreveré a decir que no harás este tipo de cosas con chips lógicos TTL. Dudo que pueda obtener una interfaz de memoria DDR2 / 3 razonable que funcione con chips TTL normales. Usar un gran FPGA sería mucho más fácil (pero no fácil).

Subir al paso 6 probablemente será "lo suficientemente bueno como para calmar tu sed intelectual". Eso también podría hacerse dentro de un período de tiempo razonable, alrededor de un año, para establecer como objetivo a corto plazo.

EDITAR: si todo lo que quieres hacer es escupir una señal de video, entonces es relativamente fácil. Es, en esencia, un trozo de memoria que se desplaza a una pantalla a 60-ish Hz. El diablo está en los detalles, pero aquí hay un bosquejo de cómo hacer esto:

Comience con un poco de RAM de doble puerto. No tiene que ser un verdadero ram de doble puerto, solo algo de RAM que una CPU pueda leer / escribir y que su circuito de video pueda leer. El tamaño y la velocidad de esta RAM dependerán del tipo de pantalla que esté conduciendo. Yo personalmente usaría DDR2 SDRAM conectado a la interfaz de memoria de un FPGA Xilinx Spartan-6. Su núcleo "generador de interfaz de memoria" (MIG) hace que sea fácil convertir esto en una RAM de doble puerto.

A continuación, diseñe un circuito que controle cómo se lee esta RAM y escupe estos datos en un bus simple. Normalmente solo lees la RAM secuencialmente. El "autobús simple" realmente es solo eso. Son algunos bits con el valor de píxel, y eso es todo. Este circuito deberá hacer dos cosas más: tendrá que volver al comienzo de la RAM en cada cuadro de video y tendrá que "pausar" la salida durante los períodos de retroceso horizontal / vertical.

En tercer lugar: haga un circuito que emita las señales de control de video (HSync, Vsync, etc.), así como diga al circuito anterior cuándo hacer una pausa y reiniciar. Estos circuitos son realmente bastante fáciles de hacer. Encontrar el estándar de video apropiado es más difícil, en mi humilde opinión.

Y finalmente: conecte las señales de control y el bus de datos de píxeles de video a "algo". Eso podría ser una pequeña pantalla LCD en color. Podría ser un video DAC para emitir una señal compatible con VGA. Hay codificadores NTSC / PAL que tomarían estas señales. Etc.

Si la resolución es realmente pequeña, puede salirse con la suya utilizando la RAM interna de la FPGA en lugar de una SDRAM DDR2 externa. Debo advertirle que si se usa DDR2 SDRAM, probablemente necesitará una FIFO y algunas otras cosas, pero eso tampoco es terriblemente difícil. Pero con DDR2 SDRAM puede admitir pantallas de bastante alta resolución. También puede encontrar placas de desarrollo FPGA con DAC VGA integrados y otras formas de salidas de video.


fuente
Wow no es una tarea corta entonces. Entiendo que no hubo una respuesta concisa. Pero me ha dado un buen punto de partida y tendré que hacerlo en mi tiempo libre muy limitado. Pero debería ser una experiencia interesante.
Dean
@Dean Hmmm ... Aquí hay TRES cosas diferentes: CPU, GPU y algo para escupir una señal de video. Es fácil hacer algo para escupir una señal de video. Una GPU es más como una CPU que está diseñada para hacer procesamiento relacionado con video / gráficos: gráficos en 3-D, aceleración de gráficos en 2-D, etc. Si solo quiere que algo escupe una señal de video, entonces está listo. Si quieres gráficos 3-D o incluso 2-D semi-avanzados, entonces deberás revisar mi lista.
1
¿Cómo es fácil escupir una señal de video? Creo que este sería un mejor primer paso.
Dean
@Dean, edité mi respuesta para incluir cosas sobre cómo escupir una señal de video.
1
Una vez escribí un libro sobre gráficos de computadora (ISBN 0-471-13040-0), pero es muy introductorio. En la década de 1990, cuando ATI solo tenía sus chips MACH64 y quería entrar en 3D, me contrataron como consultor para enseñarles algunos de los conceptos, ponerlos en marcha y ayudar con la arquitectura. El resultado fueron las primeras fichas RAGE. Yo era un tipo de gráficos en ese entonces. Echa un vistazo a la patente estadounidense 5097427 si no me crees. Sin embargo, creo que la patente de interpolación cuadrática (US 5109481) fue más importante pero menos llamativa. Es posible que reconozca algunos otros nombres en esos ;-)
Olin Lathrop
8

Racing the Beam es una mirada detallada al diseño y operación del Atari VCS. Tiene un tratamiento exhaustivo del adaptador de interfaz de televisión.

El TIA se trata de la GPU más simple y práctica.

Comprender un sistema de trabajo pequeño pero completo puede ser una buena manera de aprender un tema nuevo.

Los esquemas completos están disponibles, al igual que un manual técnico .

Toby Jaffey
fuente
Atari 2600 reglas! La mayoría de los sistemas de juego usan hardware para generar la pantalla, pero el 2600 lo hace todo por arte de magia. Compare algo como Combate o incluso Asteroides con algo como Toyshop Trouble (Asteroides y Toyshop Trouble son ambos 8K). El combate muestra dos objetos de un solo color con resolución de 2 líneas; Toyshop Trouble muestra 16 objetos con resolución de una sola línea y coloración por línea (y sin parpadeo). No hay hardware adicional para Toyshop Trouble más allá de un conmutador de banco para permitir 8k de código. Solo un poco de codificación inteligente y algo de magia.
supercat
Por cierto, la programación 2600 puede ser oscura, pero un diseño de superposición de video basado en PSOC que hice para un cliente se sintió más bien 2600-ish. Configure el hardware en el chip para generar algunas de las temporizaciones y use el código para alimentar datos a un esclavo SPI para que pueda sincronizarse como píxeles.
supercat
increíble que todo el código del juego tuviera que ejecutarse durante los tiempos de
retransmisión
5

Si solo quieres poner algunas cosas en la pantalla y crees que realmente, realmente disfrutar de cableado, se puede aspirar a un sistema de gráficos de los personajes 1980-ish temprano. Si puede alcanzar el tiempo para el RS-170A, incluso podría insertar la señal en una entrada AV de repuesto en un televisor de plasma de 50 ", y retroceder a lo grande.

Algunos de los primeros sistemas utilizaron sus CPU de 8 bits para generar directamente la pantalla, por ejemplo, el 6507 en el Atari 2600 y el Z-80 en el Timex Sinclair ZX-81. Incluso puede hacer lo mismo con los microcontroladores modernos. La ventaja de esta manera es que el hardware es simple, pero el software generalmente tiene que estar en ensamblador, y es muy exigente, y los resultados serán realmente decepcionantes. Podría decirse que el 2600 empleó hardware adicional, pero el TIA no tenía mucho FIFO, y el 6502 (bueno, 6507, realmente) tuvo que volcarle bytes en tiempo real. En este enfoque, no hay modo de video estándar; Cada aplicación que utiliza video debe combinarse íntimamente con las necesidades de mantener el flujo de píxeles.

Si realmente desea construir algo de TTL, el siguiente nivel de complejidad sería optar por la visualización de texto basada en ROM de caracteres. Esto le permite poner cualquiera de, digamos, 256 caracteres en cualquiera de, por ejemplo, 40 columnas y 25 posiciones de fila. Hay un par de maneras de hacer esto.

Una forma: haz lo que hice con el modelo TRS80. Un grupo de 74161 mostradores con una variedad de puertas generó la dirección de video; tres 74157 multiplexaron 12 bits de la dirección de la CPU con la dirección de video, para alimentar una dirección a una RAM estática de 2K. Los datos de RAM se almacenaron de nuevo en la CPU, pero se enviaron sin almacenar como dirección a la ROM del juego de caracteres. No hubo arbitraje de autobús; Si la CPU quería RAM de video, se pisaba el sistema de video, lo que resultaba en el efecto 'nieve'. La dirección de video multiplexada se combinó con algunas líneas de la sección del contador para completar las direcciones bajas; La salida de ROM de caracteres se volcó en un registro de desplazamiento 74166. Todo salió corriendo divisiones de un cristal de 14.31818MHz. En este enfoque, tendría exactamente un modo de video completamente implementado en hardware, como 40x25 o 64x16, etc.,

Otra forma: desenterrar un chip llamado CRTC como un 6845. Estos combinaron la mayor parte de la lógica del contador y el pegamento, y proporcionaron al procesador una interfaz de control-registro para que pudiera reprogramar parte del tiempo. Sistemas como este podrían hacerse algo más flexibles, por ejemplo, puede obtener 40x25 y 80x25 del mismo hardware, bajo control de registro. Si tiene inteligencia sobre las frecuencias de reloj, es posible que pueda permitir que su CPU tenga acceso libre a la RAM de video durante la mitad del reloj y que el generador de direcciones de video acceda durante la otra mitad del reloj, evitando así la necesidad de arbitraje de bus y eliminando el efecto nieve.

Sin embargo, si desea utilizar modos gráficos reales, encontrará rápidamente que rodar el suyo es problemático. El Apple 2 original lo logró, pero ese sistema tenía algo así como 110 chips MSI TTL, y aun así había algunas cosas divertidas con las que lidiar, como el mapeo no lineal del búfer de video a la pantalla y paletas de colores extremadamente limitadas. , por nombrar dos. Y Woz es generalmente reconocido por haber tenido una pista. Cuando llegó el '2e', Apple ya estaba poniendo el sistema de video en un chip personalizado. El C-64, casi al mismo tiempo, debía sus capacidades gráficas a chips personalizados.

Entonces ... diría que hay dos formas de hacerlo. Una forma: saca tu cubo de viejos TTL y aspira a una pantalla de texto de un color de 80x25; Por otro lado, obtenga una buena placa de evaluación FPGA, haga todo en VHDL y comience con una pantalla de texto de 80x25.

JustJeff
fuente
1

Debería comenzar con algunos fundamentos de la arquitectura de la computadora y, en paralelo, comenzar con el diseño básico de ASIC utilizando VHDL u otro lenguaje de descripción.

Una vez que haya aprendido los conceptos básicos de la arquitectura de la computadora, le recomendaría incursionar en los gráficos de la computadora, tal vez comenzando con algunos proyectos simples de OpenGL. La conclusión principal aquí sería tener una idea de la arquitectura de representación de canalización de gráficos .

El siguiente paso sería pensar en formas en que esta canalización de renderizado podría lograrse con hardware dedicado en lugar de con software.

En términos de construir una GPU y conectarla a su computadora, no creo que sea factible hacerlo con el presupuesto de un entusiasta, pero tal vez hay algo muy básico que puede probar con una plataforma ARM-Linux integrada (que expone un bus del sistema) y un FPGA (el FPGA en este caso es su GPU escrito en VHDL) que sale a una pantalla VGA de baja resolución como un proyecto de conexión conjunta. Esto requeriría escribir controladores también. Si puedes hacerlo, sería asesino en un currículum.

Jon L
fuente
1

Mire los diagramas de bloques de alto nivel de GPU de AMD y NVidia. Probablemente encontrará bastante información de la gente de Opengraphics, que está diseñando hardware de gráficos de código abierto, con controladores de código abierto.

Entonces necesitas mirar lo que quieres.

  • Salida, HDMI, DVI o VGA?
  • Transformaciones de vértices?
  • Texturizado?
  • Sombreado de píxeles?
  • ¿Triángulo de recorte y rasterización?
  • Cualquier textura?
  • Operaciones de trama?

Si no ha realizado ninguna programación utilizando las funciones de GPU, eso también puede ser algo bueno para saber.

Creo que Leon también lo tiene clavado. Usaría Verilog si hiciera esto.

Si solo quieres un video compuesto, como en el video que publicaste. Hay muchos ejemplos por ahí. Heck, mira la implementación de Woz de Apple II. :)

Joe
fuente
1
¿@Leon ha dejado un comentario? Si es así, no puedo verlo.
Dean
Lo borré. Sugerí usar un FPGA para implementar una CPU simple. Lo hice hace algunos años con un diseño de un libro, escrito en VHDL, que modifiqué para mi hardware.
Leon Heller
Ahh ok entonces es por eso que puedo verlo.
Dean
1

Parece que no está buscando hacer una GPU (en el sentido de 3d y sombrear todo eso) tanto como un generador de video. Muchas placas de evaluación FPGA tienen un conector para un monitor VGA u otro tipo y proyectos de muestra del fabricante u otros usuarios para mostrar cosas en ese monitor. También hay algunas placas con LCD incorporadas, pero tienden a estar en la clase de $ 300 y más, mientras que las básicas que pueden manejar un monitor estándar cuestan entre $ 60 y 120.

La mayoría de los FGPA no tienen suficiente memoria interna para hacer más que una pantalla pequeña, pero muchas de las placas tienen memorias externas con más capacidad. Muchos de ellos manejan monitores VGA analógicos digitalmente, es decir, RG y B están completamente encendidos o apagados, aunque algunos le dan dos niveles y probablemente pueda encontrar uno con un DAC de video o conector para una interfaz de monitor digital.

Chris Stratton
fuente