Pantalla virtual para el desarrollo simple de GPU

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

Soy un programador bastante fuerte, pero soy muy nuevo en el diseño de hardware, por lo que me disculpo si uso una terminología extraña.

Mi objetivo a largo plazo es escribir una GPU personalizada, pero estoy empezando con un framebuffer básico para familiarizarme con el diseño del hardware. Aquí hay un resumen de lo que espero hacer con mi proyecto:

  1. Reciba un marco de datos de píxeles en un bus
  2. Almacene el marco en una pila en el hardware
  3. Cuadros de salida a la frecuencia de actualización del monitor

Puedo descifrar el #1 y el #2, pero nunca he hecho nada como el #3. Estoy pensando que la configuración de desarrollo óptima sería tener una pantalla virtual que se conecte a los pines de salida de mi diseño (VGA o DVI) y lo muestre en una ventana de mi computadora. Probablemente podría hacer esto con un FPGA y una pequeña pantalla LCD, pero creo que será más fácil para el desarrollo (especialmente viajar) tenerlo todo simulado.

¿Ya hay una solución para esto? Si es así, ¿qué puedo buscar para obtener más información al respecto? Si no, ¿cuál es la configuración de desarrollo habitual para algo como esto?

Estoy desarrollando en Linux usando Icarus Verilog, por lo que sería preferible una solución que funcione con eso.

No creo que vaya a encontrar ningún software listo para usar que le permita controlar una pantalla virtual en su escritorio a través de una simulación de verilog. Honestamente, creo que la forma más fácil de hacerlo sería comprar un monitor VGA barato y un FPGA con un puerto VGA. Escriba pruebas dirigidas simples que se puedan verificar en la simulación, pero en cuanto a ver realmente su diseño en una pantalla, probablemente necesitará sintetizarlo y ejecutarlo en tiempo real.
En segundo lugar, la salida de VGA real será mucho más fácil que intentar enrutarla de nuevo a la computadora. Un osciloscopio capaz de manejar señales de velocidad de video (por ejemplo, 100 MHz) puede ser muy útil si no puede hacer que aparezca nada.
@Tim - Dang, eso es desafortunado. Supongo que no es un mercado muy grande...
@tjameson Tenga en cuenta también que las simulaciones son generalmente mucho más lentas en comparación con la ejecución real en tiempo real. En un diseño grande, una computadora puede tardar una o más horas en avanzar una simulación verilog en 1 milisegundo. Eso no hará que ningún gráfico de computadora sea muy impresionante :). Creo que probablemente sea más divertido conducir un monitor real, dejando de lado los problemas de viaje/portabilidad.
@Tim - Correcto. Principalmente estaba buscando algo que pudiera hacer en un avión o en algún lugar donde no tenga mi pila de desarrollo. Supongo que esto se vuelve cada vez menos realista cuanto más grande es el diseño... ¡Sin embargo, conectarlo a un monitor real definitivamente sería mucho más divertido! ¡Gracias!

Respuestas (1)

Una alternativa sería usar PLI/VPI para llamar a algún código C, por lo que en lugar de realizar la conducción de pines de nivel superior, llame a una tarea del sistema que almacene el píxel en un búfer de marco de software y lo represente en una ventana.

He usado la misma técnica para un UART recientemente: instanciado otro uart con el TX + RX cruzado, y cuando el que está en el banco de pruebas recibe datos, lo alimenta a un código C con una tarea del sistema que escribe en un PTY (y viceversa).

Dado que la simulación probablemente no se ejecutará tan rápido, escribir archivos de imagen o datos binarios y luego el procesamiento posterior podría hacerlo más útil.

Esto suena bastante razonable y sería muy útil para escribir pruebas unitarias basadas en software.