Actualmente estoy trabajando en Super OSD, un proyecto de visualización en pantalla. http://code.google.com/p/super-osd tiene todos los detalles.
En este momento estoy usando una MCU dsPIC para hacer el trabajo. Este es un DSP muy potente (40 MIPS @ 80 MHz, operaciones de un solo ciclo de tres registros y una unidad MAC) y, lo que es más importante, viene en un paquete DIP (porque estoy usando una placa de pruebas para crear un prototipo). Realmente estoy obteniendo hasta el último rendimiento ejecutando el OSD: el chip tiene aproximadamente 200ns o 10 ciclos por píxel en la etapa de salida, por lo que el código debe estar muy optimizado en esta parte (por esta razón, siempre se escribirá en montaje.)
Ahora estaba considerando usar un FPGA para esto porque debido a la arquitectura paralela de dicho chip, es posible tener un programa lógico simple que ejecute el OSD. Cosas como dibujar líneas y código algorítmico serían manejados por un MCU, pero la salida real se haría con un FPGA. Y algunas cosas simples como configurar píxeles o dibujar líneas horizontales y verticales que me gustaría integrar en el FPGA, para mejorar la velocidad.
Tengo algunas preguntas:
- ¿Costará mucho más? Los FPGA más baratos que encontré fueron de ~ £ 5 cada uno y el dsPIC es de £ 3 cada uno. Entonces costará más, pero ¿por cuánto?
- El dsPIC cabe en un paquete SO28. No me gustaría ir más grande que SO28 o TQFP44. La mayoría de los FPGA que he visto vienen en paquetes BGA o TQFP> 100, que no son una opción en este momento, debido al tamaño de corte y la dificultad de soldarlos yo mismo.
- ¿Cuánta corriente utiliza un FPGA? La solución dsPIC actualmente consume aproximadamente 55 mA +/- 10 mA, lo cual está bien en este momento. ¿Un FPGA consumiría más o menos? ¿Es variable, o es bastante estático, como el dsPIC?
- Necesito al menos 12 KB de memoria gráfica para almacenar los gráficos OSD. ¿Los FPGA tienen este tipo de memoria disponible en el chip o solo está disponible con chips externos?
fuente
Mi inclinación sería usar algo para amortiguar el tiempo entre el procesador y la pantalla. Tener hardware que pueda mostrar un fotograma completo de video sin la intervención del procesador puede ser bueno, pero quizás exagerado. Sugeriría que el mejor compromiso entre la complejidad del hardware y el software probablemente sería hacer algo con dos o tres registros de desplazamiento independientes de 1024 bits (dos bits por píxel, para permitir negro, blanco, gris o transparente), y un medio de cambiar entre ellos. Haga que el PIC cargue un registro de desplazamiento, y luego haga que el hardware comience a desplazarlo mientras establece una bandera para que el PIC pueda cargar el siguiente. Con dos registros de desplazamiento, el PIC tendría 64us entre el momento en que se le informa que un registro de desplazamiento está disponible y el momento en que todos los datos tienen que ser desplazados. Con tres registros de desplazamiento,
Tenga en cuenta que, si bien una FIFO de 1024 bits sería tan buena como dos registros de desplazamiento de 1024 bits, y en un CPLD, una FIFO solo cuesta una macrocelda por bit, más algo de lógica de control, en la mayoría de los otros tipos de lógica, dos bits de registro de desplazamiento será más barato que un bit de FIFO.
Un enfoque alternativo sería conectar un CPLD a una SRAM y crear un subsistema de video simple con eso. Estéticamente, me gusta la generación de video sobre la marcha, y si alguien hiciera buenos chips de registro de desplazamiento de 1024 bits es el enfoque que preferiría, pero usar una SRAM externa puede ser más barato que usar un FPGA con suficientes recursos para hacer múltiples registros de desplazamiento de 1024 bits. Para su resolución de salida, será necesario desconectar los datos a 12M píxeles / seg, o 3MBytes / seg. Debería ser posible organizar las cosas para permitir que los datos se registren a una velocidad de hasta 10 mbps sin demasiada dificultad intercalando ciclos de memoria; El mayor truco sería evitar la corrupción de datos si no se produce un pulso de sincronización en el momento preciso esperado.
fuente