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.
Respuestas:
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:
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
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 .
fuente
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.
fuente
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.
fuente
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.
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. :)
fuente
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.
fuente