Je travaille actuellement sur Super OSD - un projet d'affichage à l'écran. http://code.google.com/p/super-osd a tous les détails.
Pour le moment, j'utilise un MCU dsPIC pour faire le travail. Il s'agit d'un DSP très puissant (40 MIPS @ 80 MHz, opérations à un cycle à trois registres et une unité MAC) et, surtout, il est livré dans un package DIP (parce que j'utilise une maquette pour le prototyper.) Je tire vraiment le maximum de ses performances en exécutant l'OSD - la puce a environ 200 ns ou 10 cycles par pixel sur l'étage de sortie, donc le code doit être très optimisé dans cette partie (pour cette raison, il sera toujours écrit en Assemblée.)
Maintenant, j'envisageais d'utiliser un FPGA pour cela, car en raison de l'architecture parallèle d'une telle puce, il est possible d'avoir un programme logique simple exécutant l'OSD. Des choses comme tracer des lignes et du code algorithmique seraient gérées par un MCU, mais la sortie réelle se ferait avec un FPGA. Et des choses simples comme la définition de pixels ou le dessin de lignes horizontales et verticales que je voudrais intégrer sur le FPGA, pour améliorer la vitesse.
J'ai quelques questions:
- Cela coûtera-t-il beaucoup plus cher? Les FPGA les moins chers que j'ai trouvés étaient ~ 5 £ chacun et le dsPIC est de 3 £ chacun. Cela coûtera donc plus cher, mais de combien?
- Le dsPIC tient dans un package SO28. Je ne voudrais pas aller plus loin que SO28 ou TQFP44. La plupart des FPGA que j'ai vus sont livrés en boîtiers BGA ou TQFP> 100, ce qui n'est pas une option pour le moment, en raison de la taille du cisaillement et de la difficulté de les souder moi-même.
- Quelle quantité de courant est utilisée par un FPGA? La solution dsPIC consomme actuellement environ 55mA +/- 10mA, ce qui est correct pour le moment. Un FPGA consommerait-il plus ou moins? Est-il variable, ou est-il à peu près statique, comme le dsPIC?
- J'ai besoin d'au moins 12 Ko de mémoire graphique pour stocker les graphiques OSD. Les FPGA ont-ils ce type de mémoire disponible sur la puce ou est-ce uniquement disponible avec des puces externes?
la source
Mon inclination serait d'utiliser quelque chose pour tamponner le timing entre le processeur et l'écran. Avoir du matériel qui peut montrer une image entière de vidéo sans intervention du processeur peut être bien, mais peut-être exagéré. Je suggérerais que le meilleur compromis entre la complexité matérielle et logicielle serait probablement de créer quelque chose avec deux ou trois registres à décalage 1024 bits indépendants (deux bits par pixel, pour permettre le noir, le blanc, le gris ou le transparent), et un moyen de basculer entre eux. Demandez au PIC de charger un registre à décalage, puis au matériel de commencer à décaler celui-ci pendant qu'il définit un indicateur afin que le PIC puisse charger le suivant. Avec deux registres à décalage, le PIC aurait eu 64us entre le moment où il est dit qu'un registre à décalage est disponible et le moment où toutes les données doivent être décalées. Avec trois registres à décalage,
Notez que même si une FIFO 1024 bits serait aussi bonne que deux registres à décalage 1024 bits, et dans un CPLD, une FIFO ne coûte qu'une macrocellule par bit, plus une logique de contrôle, dans la plupart des autres types de logique, deux bits de registre à décalage sera moins cher qu'un bit de FIFO.
Une autre approche consisterait à connecter un CPLD à une SRAM et à créer un sous-système vidéo simple avec cela. Esthétiquement, j'aime la génération de vidéo à la volée, et si quelqu'un a fait de belles puces de registre à décalage 1024 bits, c'est l'approche que je privilégierais, mais utiliser une SRAM externe peut être moins cher que d'utiliser un FPGA avec suffisamment de ressources pour créer plusieurs registres à décalage de 1024 bits. Pour votre résolution de sortie, il sera nécessaire de synchroniser les données à 12 millions de pixels / s ou 3 Mo / s. Il devrait être possible d'arranger les choses pour permettre aux données d'être synchronisées à un taux allant jusqu'à 10 Mbps sans trop de difficulté en entrelaçant les cycles de mémoire; la plus grande astuce serait d'empêcher la corruption des données si une impulsion de synchronisation ne vient pas au moment précis prévu.
la source