Básicamente, ningún microcontrolador, incluso la frambuesa pi, es lo suficientemente rápido. El raspberry pi tiene una GPU integrada que genera la salida HDMI. Y aparte de eso, la capacidad de E / S de la frambuesa pi es increíblemente limitada: la interfaz de mayor ancho de banda aparte de HDMI es USB. Muchos de los proyectos de conversión HDMI implican tomar otro flujo de video en un formato extraño y reelaborarlo en algo que pueda enviarse a un HDTV estándar a través de HDMI. Esto requiere cierta lógica de interfaz personalizada para leer la señal de video, lógica de procesamiento de señal para volver a formatearla, lógica de codificación HDMI TMDS y luego serializadores de alta velocidad para controlar el puerto HDMI.
Trabajar con transmisión de video de alta definición sin comprimir requiere el procesamiento de una gran cantidad de datos, algo que no es factible en una CPU de uso general. Una señal de video de 1080p a 30 cuadros por segundo tiene aproximadamente 62 millones de píxeles por segundo. El raspberry pi funciona a 700 MHz, por lo que tienes, oh, 11 instrucciones por píxel. Y son 11 instrucciones para leer en formato de video extraño en tiempo real, reescalarlo, etc., etc. No es posible. Período.
En un FPGA, es posible generar una larga tubería de procesamiento que puede procesar uno o más píxeles por ciclo de reloj y hacerlo de una manera altamente determinista (¡sin interrupciones ni cambios de tarea!) Para que los datos de píxeles estén listos para la transmisión a través de HDMI exactamente en el momento correcto. Si ha trabajado extensamente con CPU de propósito general que ejecutan cualquier tipo de sistema operativo, sabrá que obtener una sincronización precisa en un nivel de milisegundos es más o menos factible, pero en un nivel de microsegundos es prácticamente imposible. Para HDMI, necesita precisión de escala de nanosegundos. No es factible en una CPU de uso general. Además, eche un vistazo al proyecto de audio / video HDMI para el neo geo. Este no solo tiene que reescalar el video, también tiene que volver a muestrear el audio e insertarlo en la transmisión de video HDMI.
Y esto todavía no está considerando la lógica personalizada requerida para leer en cualquier formato de datos de entrada que tenga. Necesitará hardware personalizado para interpretar esto. El software no es lo suficientemente rápido o lo suficientemente determinista. Es posible que pueda, por ejemplo, volver a formatearlo en algún tipo de flujo basado en USB, pero esto requerirá una lógica digital personalizada de todos modos, por lo que también podría generar HDMI directamente.
Para implementar todo esto, la lógica digital es realmente la única solución viable. Y si está haciendo lógica digital, los FPGA son la única solución factible, ya que es demasiado rápida y demasiado compleja para la lógica discreta 7400 y los ASIC son, bueno, varios órdenes de magnitud más caros.
Otro componente requerido son los serializadores de alta velocidad y los controladores diferenciales para generar los flujos de datos en serie paralelos que se envían por el cable. No es posible hacer un bit de datos en serie del orden de un gigabit por segundo desde una CPU de uso general, esto requiere hardware especializado. La Raspberry Pi tiene una GPU integrada que hace esto, pero está limitada en términos de lo que la GPU es capaz de hacer, sin mencionar lo que está documentado. La mayoría de los FPGA contienen al menos los controladores diferenciales necesarios y los flip flops DDR que son suficientes para admitir video de baja resolución y hay bastantes FPGA que también contienen los serializadores necesarios (es decir, bloques Xilinx OSERDES) para generar transmisiones Full HD. No olvide que la transmisión en serie no es 'banda base' como un puerto serie normal donde los datos reales se envían textualmente con cierta información de trama, pero los datos se codifican realmente con TMDS (señalización diferencial minimizada en transición) para darle a la señal ciertas características eléctricas. Se requiere un poco de lógica para implementar esto además de los serializadores de alta velocidad reales. Todo esto es relativamente simple de hacer en lógica digital pura (bueno, la codificación de todos modos; los serializadores son posiblemente analógicos, o al menos una señal mixta) en un ASIC o un FPGA.
En realidad, es una parte muy importante del proceso general de diseño del sistema digital / embebido determinar qué partes de un sistema se pueden implementar en el software y cuáles requieren hardware, ya sea en forma de chips especializados, FPGAs, personalizados. ASIC, IP dura o blanda (HDL, netlists, GDSII), etc. En este caso, está claro: la generación de señal de video requiere hardware especializado, ya sea una GPU emparejada con una CPU de uso general, una FPGA con un disco duro integral o núcleo de CPU suave o emparejado con una CPU externa, o algo más especializado.
Editar: Me acabo de dar cuenta de que el sitio fpga4fun y el proyecto de video neo geo se ejecutan a 640x480 en lugar de Full HD. Sin embargo, esto realmente no hace esto mientras que la operación sea mucho más simple. El reloj mínimo de píxeles es de 25 MHz, con un reloj de bits de 250 MHz. Esto significa que el FPGA en realidad no requiere serializadores para transmitir HDMI, solo flip flops DDR. Sin embargo, esto todavía no alivia el problema de la lectura de los datos de video. Si desea hacer eso en la frambuesa pi sin asistencia de hardware, tendría que leer de GPIO continuamente a 25 MHz. Cuál es una lectura cada 175 instrucciones. Entrando en el reino de las posibilidades, pero la única forma de hacer que ese trabajo funcione es en metal desnudo (sin Linux) con ensamblaje codificado a mano.