¿Dónde comenzar cuando se considera hacer una GPU?

6

Yo vi este video el otro día y me puse a pensar cómo hacerlo. y diseñar algo así como la GPU. ¿Dónde empezarías? Estoy más interesado solo en leer sobre cómo funcionan y no hacer uno de TTL (de todos modos).

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

    
pregunta Dean

6 respuestas

15

Eso es un poco 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 a eso de manera práctica, así que responderé una pregunta diferente.

¿Qué tipo de cosas debo 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 escritura de lógica digital).
  3. Cosas básicas de la ruta de datos, como FIFO's.
  4. Interfaces de bus, como las interfaces PCIe y DDR2 / 3
  5. Implementaciones binarias de funciones matemáticas, incluyendo coma flotante, etc.
  6. diseño de la CPU.
  7. Estándares de interfaz de video.
  8. Material analógico de alta velocidad (el lado analógico de digital de alta velocidad)
  9. PLL y otras cosas de reloj semi-avanzadas.
  10. Diseño de circuitos de alta velocidad en PCB.
  11. Diseño de convertidor CC / CC de baja tensión y alta corriente.
  12. Muchas y muchas cosas de software.
  13. Y finalmente, ASIC u otro diseño de tipo de chip personalizado.

También me atrevería a decir que no harás este tipo de cosas con los 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).

Ir al paso 6 probablemente será "lo suficientemente bueno para saciar tu sed intelectual". Esto también podría hacerse dentro de un período de tiempo razonable, aproximadamente un año, para establecerlo como un 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 Hz. El diablo está en los detalles, pero aquí hay un resumen aproximado de cómo hacer esto:

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

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

En tercer lugar: haga un circuito que emita las señales de control de video (HSync, Vsync, etc.) y le indique al circuito anterior cuándo debe pausar y reiniciar. Estos circuitos son bastante fáciles de hacer. Encontrar el estándar de video apropiado es más difícil, imho.

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 a color. Podría ser a un DAC de video 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 utilizar la RAM interna del FPGA en lugar de una SDRAM DDR2 externa. Debería advertirle que si se usa DDR2 SDRAM, entonces probablemente necesitará un FIFO y algunas otras cosas, pero eso tampoco es muy difícil. Pero con DDR2 SDRAM puede soportar pantallas de resolución bastante alta. También puede encontrar placas de desarrollo FPGA con DAC VGA integrado y otras formas de salidas de video.

    
respondido por el user3624
8

Racing the Beam es una vista detallada del diseño y Funcionamiento del Atari VCS. Tiene un tratamiento exhaustivo del Adaptador de interfaz de televisión.

El TIA es el GPU más simple y práctico.

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

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

    
respondido por el Toby Jaffey
5

Si solo quieres poner algunas cosas en la pantalla, y crees que realmente podrías, realmente disfrutar del cableado, podrías apuntar a un sistema de gráficos de personajes de principios de 1980. Si puede alcanzar el tiempo para el RS-170A, incluso podría empujar la señal a una entrada AV de repuesto en un televisor de plasma de 50 "y volverse retro en gran medida.

Algunos sistemas antiguos 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 un ensamblador, y es muy exigente, y los resultados serán realmente decepcionantes. Podría decirse que el 2600 empleaba hardware adicional, pero el TIA no tenía mucho FIFO, y el 6502 (bueno, 6507, realmente) tenía que volcar bytes en tiempo real. En este enfoque, no hay modo de video estándar; cada aplicación que utiliza video tiene que estar íntimamente combinada con las necesidades de mantener los píxeles fluyendo.

Si realmente quieres construir algo a partir de TTL, el siguiente nivel de complejidad sería ir a la visualización de texto basada en ROM de caracteres. Esto le permite colocar 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.

De una manera: haga lo que hizo el modelo TRS80 que hice. Un grupo de 74161 contadores con un surtido de puertas generó la dirección de video; tres 74157s multiplexados 12 bits de la dirección de la CPU con la dirección de video, para alimentar una dirección a una memoria RAM estática 2K. Los datos de la RAM se almacenaron de nuevo en la CPU, pero se enviaron sin búfer como dirección a la ROM del conjunto de caracteres. No hubo arbitraje de autobuses; si la CPU deseaba la memoria RAM de video, el sistema de video se pisó, lo que resultó en el efecto 'nieve'. La dirección de video muxed se combinó con algunas líneas de la sección del contador para redondear las direcciones bajas; La salida de ROM de caracteres se volcó en un registro de desplazamiento 74166. Todo salió de las divisiones de un cristal de 14.31818MHz. En este enfoque, tendrías exactamente un modo de video completamente implementado en hardware, como 40x25 o 64x16, etc., y cualquier juego de caracteres que puedas poner en la ROM.

Otra forma: extraiga un chip CRTC llamado 6845. Combinaron la mayoría de las lógicas de pegado y contador, y proporcionaron al procesador una interfaz de registro de control para que pueda reprogramar parte de la sincronización. Los sistemas como este podrían ser algo más flexibles, por ejemplo, podría obtener 40x25 y 80x25 del mismo hardware, bajo el control del registro. Si se da cuenta de las frecuencias de reloj, puede permitir que su CPU tenga acceso gratuito a la RAM de video durante la mitad del reloj y al generador de direcciones de video durante la otra mitad del tiempo, evitando así la necesidad de arbitraje de bus. y eliminando el efecto de nieve.

Sin embargo, si quieres ir a modos de gráficos reales, rápidamente encontrarás que hacer rodar los tuyos es problemático. El Apple 2 original lo logró, pero ese sistema tenía algo así como 110 chips MSI TTL, y aún 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 a Woz generalmente se le reconoce que tuvo 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 ... yo diría que hay dos formas de hacerlo. De una manera: saque su cubeta de TTL anterior y aspire para una pantalla de texto de un color de 80x25; a la inversa: consiga una buena placa de evaluación FPGA, haga todo en VHDL y comience con una pantalla de texto de 80x25.

    
respondido por el JustJeff
1

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

Una vez que haya aprendido los conceptos básicos de la arquitectura de la computadora, recomendaría aventurarse en gráficos de computadora, tal vez comenzando con algunos proyectos simples de OpenGL. El principal punto de partida aquí sería tener una idea de la arquitectura de representación de la tubería de gráficos .

El siguiente paso sería pensar en las formas en que se podría lograr este flujo de procesamiento con hardware dedicado en lugar de software.

En términos de construir una GPU y conectarlo a su computadora, no creo que sea posible hacerlo con el presupuesto de un entusiasta, pero quizás haya algo muy básico que pueda probar con un ARM-linux integrado. La plataforma (que expone un bus de sistema) y una FPGA (la FPGA en este caso es su GPU escrita en VHDL) que se traducen en una pantalla VGA de baja resolución como un proyecto que se une a todos. Esto requeriría escribir controladores también. Si puedes hacerlo, sería un asesino en un currículum.

    
respondido por el Jon L
1

Observe los diagramas de bloques de alto nivel de las GPU de AMD y NVidia. Probablemente encontrará bastante información de la gente de opengraphics, que está diseñando hardware de gráficos que es 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?
  • Pixel Shading?
  • Recorte de triángulos y rasterización?
  • ¿Alguna textura?
  • ¿Operaciones de trama?

Si no ha realizado ninguna programación con las funciones de GPU, también es bueno saberlo.

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

Si solo desea videos compsite, como en el video que publicó. Hay muchos ejemplos por ahí. Heck, mira la implementación de Woz de Apple II. :)

    
respondido por el Joe
1

Parece que no estás 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 VGA u otro tipo de monitor y proyectos de muestra del fabricante u otros usuarios para mostrar cosas en ese monitor. También hay algunos tableros con pantallas LCD integradas, pero tienden a estar en la clase superior a $ 300, mientras que las básicas que pueden manejar un monitor estándar van de $ 60 a $ 120.

La mayoría de los FGPA no tienen suficiente memoria interna para hacer más que una pequeña pantalla, pero muchas de las tarjetas 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 es probable que encuentre uno con un DAC de video o un conector para una interfaz de monitor digital.

    
respondido por el Chris Stratton

Lea otras preguntas en las etiquetas