Wenn Sie sich HDMI-Projekte auf einer Site wie hackaday ansehen , werden Sie feststellen, dass fast jeder von ihnen ein FPGA beinhaltet. Ich glaube nicht, dass ich ein DIY-Projekt mit HDMI-Ausgang gesehen habe, bei dem kein FPGA verwendet wurde.
Aber wieso? Soweit ich das beurteilen kann, sind FPGAs teuer und kosten zwischen 70 und 100 US-Dollar. Vergleichen Sie das mit einem Himbeer-Pi für 35 US-Dollar, der komplexere Dinge erledigen und HDMI ausgeben kann. Warum wird kein ARM verwendet? Oder einen noch günstigeren Mikrocontroller?
Im Falle eines Upgrades des Videos auf alten Spielesystemen sollte die Logik nicht komplizierter sein, als ein billiger Mikrocontroller , aber ich sehe HDMI immer als eine unmögliche Hürde, die nur von FPGAs gemeistert wird.
Antworten:
Grundsätzlich ist kein Mikrocontroller, auch der Himbeer-Pi, schnell genug. Das Himbeer-Pi verfügt über eine integrierte GPU, die den HDMI-Ausgang erzeugt. Ansonsten ist die E / A-Fähigkeit des Himbeer-Pi unglaublich begrenzt - die Schnittstelle mit der höchsten Bandbreite neben HDMI ist USB. Bei vielen HDMI-Konvertierungsprojekten geht es darum, einen anderen Videostream in einem ungewöhnlichen Format in etwas umzuwandeln, das über HDMI an einen Standard-HDTV gesendet werden kann. Dies erfordert eine benutzerdefinierte Schnittstellenlogik zum Einlesen des Videosignals, eine Signalverarbeitungslogik zum Neuformatieren, eine HDMI TMDS-Codierungslogik und dann Hochgeschwindigkeitsserialisierer, um den HDMI-Anschluss tatsächlich anzusteuern.
Das Arbeiten mit Streaming, unkomprimiertem, hochauflösendem Video erfordert die Verarbeitung einer großen Datenmenge, was auf einer Allzweck-CPU nicht möglich ist. Ein 1080p-Videosignal mit 30 Bildern pro Sekunde hat ungefähr 62 Millionen Pixel pro Sekunde. Der Himbeer-Pi läuft mit 700 MHz, Sie haben also 11 Anweisungen pro Pixel. Und das sind 11 Anweisungen, um das Oddball-Videoformat in Echtzeit zu lesen, es neu zu skalieren usw. usw. Nicht möglich. Zeitraum.
Auf einem FPGA kann eine lange Verarbeitungspipeline generiert werden, die ein oder mehrere Pixel pro Taktzyklus sehr deterministisch verarbeiten kann (keine Unterbrechungen oder Taskwechsel!), Sodass die Pixeldaten für die Übertragung über HDMI bereit sind genau zum richtigen Zeitpunkt. Wenn Sie ausgiebig mit Allzweck-CPUs gearbeitet haben, auf denen ein beliebiges Betriebssystem ausgeführt wird, wissen Sie, dass ein genaues Timing auf einer Millisekunden-Ebene mehr oder weniger machbar ist, auf einer Mikrosekunden-Ebene jedoch so gut wie unmöglich. Für HDMI benötigen Sie eine Genauigkeit im Nanosekundenbereich. Auf einer Allzweck-CPU nicht möglich. Schauen Sie sich auch das HDMI-Audio / Video-Projekt für das Neo-Geo an. Dieser muss nicht nur das Video neu skalieren, sondern auch das Audio neu abtasten und in den HDMI-Videostream einfügen.
Dabei wird immer noch nicht die benutzerdefinierte Logik berücksichtigt, die zum Einlesen des von Ihnen verwendeten Eingabedatenformats erforderlich ist. Sie benötigen angepasste Hardware, um dies zu interpretieren. Software ist nicht schnell genug oder deterministisch genug. Sie können es beispielsweise in eine Art USB-basierten Stream umformatieren, dies erfordert jedoch ohnehin eine benutzerdefinierte digitale Logik, sodass Sie auch einfach nur HDMI direkt ausgeben können.
Um all dies zu realisieren, ist digitale Logik die einzig mögliche Lösung. Und wenn Sie digitale Logik verwenden, sind FPGAs die einzig mögliche Lösung, da sie für diskrete 7400-Logik zu schnell und zu komplex sind und ASICs um mehrere Größenordnungen teurer sind.
Eine weitere erforderliche Komponente sind die tatsächlichen Hochgeschwindigkeits-Serialisierer und Differenzialtreiber, um die parallelen seriellen Datenströme zu erzeugen, die über das Kabel gesendet werden. Es ist nicht möglich, serielle Daten in der Größenordnung von Gigabit pro Sekunde von einer Allzweck-CPU zu übertragen. Dies erfordert spezielle Hardware. Der Himbeer-Pi verfügt über eine integrierte GPU, die dies ermöglicht. Was die GPU leistet, und was dokumentiert ist, ist jedoch begrenzt. Die meisten FPGAs enthalten mindestens die erforderlichen differentiellen Treiber und DDR-Flip-Flops, die für die Unterstützung von Video mit niedriger Auflösung ausreichen, und einige FPGAs enthalten auch die erforderlichen Serialisierer (dh Xilinx OSERDES-Blöcke), um Full-HD-Streams zu generieren. Vergiss nicht, dass der serielle Stream kein Basisband ist Wie ein normaler serieller Port, an dem die eigentlichen Daten wörtlich mit einigen Bildinformationen gesendet werden, die Daten jedoch tatsächlich mit TMDS (Transition-Minimized Differential Signaling) codiert werden, um dem Signal bestimmte elektrische Eigenschaften zu verleihen. Zusätzlich zu den eigentlichen Hochgeschwindigkeitsserialisierern ist ein wenig Logik erforderlich, um dies zu implementieren. All dies ist relativ einfach in reiner digitaler Logik (naja, die Codierung ist sowieso - Serialzer sind vermutlich analog oder zumindest ein gemischtes Signal) entweder auf einem ASIC oder einem FPGA durchzuführen.
Tatsächlich ist es ein sehr wichtiger Teil des gesamten Entwurfsprozesses für digitale / eingebettete Systeme, herauszufinden, welche Teile eines Systems in Software implementiert werden können und welche Hardware erforderlich ist, entweder in Form von handelsüblichen spezialisierten Chips (FPGAs) ASICs, Hard- oder Soft-IP (HDL, Netzlisten, GDSII) usw. In diesem Fall ist es eindeutig: Die Videosignalerzeugung erfordert spezielle Hardware, sei es eine mit einer Allzweck-CPU gepaarte GPU, ein FPGA mit integriertem Hard- oder weicher CPU-Kern oder gepaart mit einer externen CPU oder etwas spezialisierterem.
Bearbeiten: Ich habe gerade festgestellt, dass die fpga4fun-Site und das Neo-Geo-Videoprojekt beide mit 640 x 480 statt mit Full HD laufen. Dies macht die Bedienung jedoch nicht wirklich einfacher. Der minimale Pixeltakt beträgt 25 MHz, bei einem Bittakt von 250 MHz. Dies bedeutet, dass der FPGA tatsächlich keine Serialisierer zur Übertragung von HDMI benötigt, sondern nur DDR-Flip-Flops. Dies erleichtert jedoch immer noch nicht das Lesen der Videodaten. Wenn Sie dies auf dem Himbeer-Pi ohne Hardwareunterstützung tun möchten, müssen Sie kontinuierlich mit 25 MHz von GPIO lesen. Welches ist man alle 175 Anweisungen gelesen. Betreten Sie das Reich der Möglichkeiten, aber die einzige Möglichkeit, wie Sie dies erreichen können, ist Bare-Metal (ohne Linux) mit handcodierter Assembly.
quelle