Fondamentalmente, nessun microcontrollore, nemmeno il lampone pi, è abbastanza veloce. Il raspberry pi ha una GPU integrata che genera l'uscita HDMI. Inoltre, la funzionalità I / O di raspberry pi è incredibilmente limitata: l'interfaccia con la larghezza di banda più alta oltre a HDMI è USB. Molti dei progetti di conversione HDMI implicano il passaggio di un altro flusso video in uno strano formato e la rielaborazione in qualcosa che può essere inviato a un HDTV standard su HDMI. Ciò richiede una logica di interfaccia personalizzata per leggere il segnale video, la logica di elaborazione del segnale per riformattarlo, la logica di codifica HDMI TMDS e quindi i serializzatori ad alta velocità per guidare effettivamente la porta HDMI.
Lavorare con streaming, video non compresso e ad alta definizione richiede l'elaborazione di un'enorme quantità di dati, cosa che non è fattibile su una CPU di uso generale. Un segnale video 1080p a 30 fotogrammi al secondo ha circa 62 milioni di pixel al secondo. Il raspberry pi funziona a 700 MHz, quindi hai, oh, 11 istruzioni per pixel. E queste sono 11 istruzioni per leggere in formato video dispari in tempo reale, ridimensionarlo, ecc. Ecc. Non possibile. Periodo.
Su un FPGA, è possibile generare una lunga pipeline di elaborazione in grado di elaborare uno o più pixel per ciclo di clock e farlo in modo altamente deterministico (senza interruzioni o commutazione di attività!) In modo che i dati dei pixel siano pronti per la trasmissione su HDMI esattamente al momento giusto. Se hai lavorato a lungo con CPU per scopi generici che eseguono qualsiasi tipo di sistema operativo, saprai che ottenere tempi precisi a livello di millisecondi è più o meno fattibile, ma a livello di microsecondi è praticamente impossibile. Per HDMI, è necessaria una precisione in scala dei nanosecondi. Non realizzabile su una CPU per scopi generici. Inoltre, dai un'occhiata al progetto audio / video HDMI per il neo geo. Questo non solo deve ridimensionare il video, ma deve anche ricampionare l'audio e inserirlo nel flusso video HDMI.
E questo non sta ancora considerando la logica personalizzata richiesta per leggere in qualunque formato di dati di input tu abbia. Avrai bisogno di hardware personalizzato per interpretarlo. Il software non è abbastanza veloce o abbastanza deterministico. Potresti essere in grado, per esempio, di riformattarlo in una sorta di flusso basato su USB, ma ciò richiederà comunque una logica digitale personalizzata, quindi potresti anche solo emettere HDMI direttamente.
Per implementare tutto ciò, la logica digitale è davvero l'unica soluzione possibile. E se stai facendo la logica digitale, gli FPGA sono l'unica soluzione fattibile, poiché è troppo veloce e troppo complesso per la logica discreta 7400 e gli ASIC sono, beh, molti ordini di grandezza più costosi.
Un altro componente richiesto sono gli attuali serializzatori ad alta velocità e driver differenziali per generare flussi di dati seriali paralleli che vengono inviati lungo il cavo. Non è possibile eseguire il bit-bang dei dati seriali nell'ordine di un gigabit al secondo da una CPU generica, ciò richiede hardware specializzato. Il raspberry pi ha una GPU integrata che lo fa, ma è limitato in termini di capacità della GPU, per non parlare di ciò che è documentato. La maggior parte degli FPGA contiene almeno i driver differenziali necessari e le infradito DDR sufficienti per supportare video a bassa risoluzione e ci sono alcuni FPGA che contengono anche i serializzatori necessari (cioè i blocchi OSERDES Xilinx) per generare flussi Full HD. Non dimenticare che il flusso seriale non è "baseband" come una normale porta seriale in cui i dati effettivi vengono inviati alla lettera con alcune informazioni sull'inquadramento, ma i dati sono effettivamente codificati con TMDS (segnalazione differenziale minimizzata in transizione) per dare al segnale determinate caratteristiche elettriche. Un po 'di logica è necessaria per implementare questo oltre agli attuali serializzatori ad alta velocità. Tutto ciò è relativamente semplice da fare nella pura logica digitale (beh, la codifica comunque - i serializzatori sono probabilmente analogici, o almeno segnali misti) su un ASIC o un FPGA.
In realtà è una parte molto importante del processo complessivo di progettazione di sistemi digitali / integrati per capire quali parti di un sistema possono essere implementate nel software e quali richiedono hardware, sia sotto forma di chip specializzati pronti all'uso, FPGA, personalizzati ASIC, IP hard o soft (HDL, netlist, GDSII), ecc. In questo caso è chiaro: la generazione di segnali video richiede hardware specializzato, sia una GPU accoppiata con una CPU per uso generale, un FPGA con un hard integrale o core della CPU soft o associato a una CPU esterna o qualcosa di più specializzato.
Modifica: mi sono appena reso conto che il sito fpga4fun e il progetto video neo geo funzionano entrambi a 640x480 invece che in full HD. Tuttavia, ciò non rende questo processo molto più semplice. Il pixel clock minimo è di 25 MHz, con un bit clock di 250 MHz. Ciò significa che l'FPGA in realtà non richiede serializzatori per trasmettere HDMI, ma solo infradito DDR. Tuttavia, ciò non allevia il problema della lettura dei dati video. Se vuoi farlo sul raspberry pi senza assistenza hardware, dovresti leggere continuamente da GPIO a 25 MHz. Che è uno letto ogni 175 istruzioni. Entrando nel regno della possibilità, ma l'unico modo per farlo funzionare è su bare metal (no Linux) con assembly codificato a mano.