Übertragen von HDMI/DVI über ein FPGA ohne Unterstützung für TMDS

Ich hoffe, HDMI/DVI-D für mein nächstes FGPA-Projekt ausgeben zu können, aber mein FPGA bietet keine native Unterstützung für TMDS-Ausgänge. Das FPGA ist ein Spartan 3E und unterstützt meines Erachtens nur die LVDS-Differenzsignalisierung.

Ich habe online viel über differenzielle Signalisierung gelesen und habe eine allgemeine Vorstellung davon, wie es funktioniert, aber ich bin verwirrt über die verschiedenen Standards. Ich bin auch die Spezifikationen für HDMI durchgegangen, aber es ist sehr trocken und scheint vorher eine gewisse Vertrautheit mit diesen Konzepten vorauszusetzen, die ich nicht habe.

Was genau ist zum Beispiel TMDS vs. LDVS? Ist TMDS nur ein Codierungsschema, das über LVDS ausgeführt wird? Sind TMDS und LVDS nur Standards für differenzielle Signalisierung, aber mit unterschiedlichen elektrischen Eigenschaften? Das Fehlen von Suchergebnissen für LVDS-zu-TMDS-Konverterchips deutet darauf hin, dass mein Verständnis hier gebrochen ist.

In praktischer Hinsicht frage ich mich, ob ich ein HDMI-Breakout-Board einfach direkt mit den Eingangspins meines FPGA verbinden, diese Pins nach dem LVDS-IO-Standard konfigurieren und erwarten kann, dass es funktioniert (vorausgesetzt, die Softwareseite ist korrekt geschrieben). Einige Websites implizieren, dass ich das kann, aber es scheint, dass ihre FPGAs alle TMDS-Treiber eingebaut haben, während meine dies nicht tun. Andere Seiten sagen, dass ich TMDS-Unterstützung benötige, sagen dann aber, dass LVDS auch funktioniert. Wikipedia scheint anzudeuten, dass LVDS als Standard für die Übertragung von Daten über DVI oder HDMI ausläuft.

Kann mir jemand helfen, Missverständnisse darüber auszuräumen, wie das alles funktioniert?

Vielleicht ist diese Antwort für Sie nützlich?
Das heißt, wenn Sie HDMI-Kompatibilität wünschen, benötigen Sie TMDS. Diese Seite enthält einige Informationen. Solange die Spannungen korrekt sind, könnten Sie dies manuell im FPGA tun, aber eine dedizierte Siliziumeinheit wird bei der 8b/10b-Codierung und anderen Protokollspezifika sehr hilfreich sein.

Antworten (2)

Gute Fragen. Ich habe dieses Thema kürzlich selbst recherchiert und werde versuchen, hier einige kurze Antworten zu geben.

Was genau ist TMDS vs. LDVS?

LVDS (Low Voltage Differential Signaling) ist einfach eine elektrische Spezifikation für eine differenzielle Signalisierungsschnittstelle, während TMDS (transition-minimized differentielle Signalisierung) sowohl eine elektrische Spezifikation als auch ein spezifisches 8b/10b-Codierungsschema ist. Leider sind die elektrischen Spezifikationen nicht direkt kompatibel, obwohl es verschiedene Möglichkeiten gibt, sie unter Umständen aneinander "anzupassen".

Elektrisch verwendet LVDS Totem-Pole-Treiber und differenzielle Terminierung (100–120 Ω), während TMDS CML (Current-Mode Logic) Open-Collector-Treiber und einzelne 50 Ω-Terminierungen bis +3,3 V verwendet. Die Spartan-3E-IOBs unterstützen CML nicht direkt.

Dann ist da noch die Frage der TMDS-Codierung. Die Spartan-3E-IOBs unterstützen DDR mit Datenraten von bis zu 628 Mb/s, aber keine dedizierte Hochgeschwindigkeits-SERDES-Logik. Sie müssten die TMDS-Codierung und -Decodierung im FPGA-Fabric durchführen und die DDR-Unterstützung in den IOBs verwenden, um die endgültigen Bitstreams zu erhalten. Dies würde Sie auf Pixelraten von 62,8 Mp/s oder weniger beschränken.

In praktischer Hinsicht frage ich mich, ob ich ein HDMI-Breakout-Board einfach direkt mit den Eingangspins meines FPGA verbinden, diese Pins nach dem LVDS-IO-Standard konfigurieren und erwarten kann, dass es funktioniert

Nein, nicht auf der Eingangsseite, zumindest nicht ohne einigen Aufwand, um das TMDS ordnungsgemäß zu terminieren und es dann mit der richtigen Vorspannung an die LVDS-Empfänger auf dem FPGA zu koppeln (all dies unter Beibehaltung einer genauen 100-Ω-Differenzimpedanz). Beachten Sie, dass die Beispielprojekte, auf die Sie verlinken, ausschließlich reine Ausgabebeispiele sind. Das Ansteuern von DVI/HDMI von einem LVDS-Ausgang scheint viel nachsichtiger zu sein; Sie scheinen ihren Leiterplatten keine Vorspannungs- oder Abschlusswiderstände hinzugefügt zu haben.

Am besten verwenden Sie externe DVI/HDMI-Ein- und -Ausgangschips und stellen die Verbindung zum FPGA über deren parallele Busse her. Ich habe in der Vergangenheit Teile von Analog Devices verwendet.

Danke für die Klärung. Ich habe mir bereits HDMI-Ausgangschips angesehen, konnte aber keinen kostengünstigen finden.

TMDS verwendet CML (Current Mode Logic), das auf der Empfangsseite mit Vcc abgeschlossen wird. LVDS aus dem Standard (IEEE644) ist ein Spannungsmodustreiber, der auch auf der Empfangsseite über die Paare terminiert wird. Aber so einfach ist das nicht, da LVDS-Treiber oft die Slew-Rate bei Übergängen steuern, um Klingeln und andere unangenehme Effekte zu verhindern, und während dieses Modus der Treiber eher wie eine Stromquelle wirkt.

Bei strenger Betrachtung sind diese beiden Standards jedoch unterschiedlich und nicht kompatibel. das Codierungsschema auf dieser physikalischen Schicht (8b/10b DDR usw.) sind logische Operationen.

Es gibt Übersetzer-Chips (einer von TI ist SN65CML100), also könnten Sie das der Platine hinzufügen. Interessanterweise kann dieser Chip auch eine CML-zu-CML-Brücke sein, daher gibt es wahrscheinlich einige gute Lektüren aus diesem Datenblatt, die Sie in Ihrem Verständnis weiterbringen werden.

Interessanterweise besagt dieses Datenblatt (Warnung öffnet sich als PDF), dass kondensatorgekoppelte LVDS CML-Eingänge ansteuern können. Seite 14 " Als CML-Treiber ist oft ein AC-gekoppelter LVDS-Treiber sinnvoll."

Da Sie TDMS an einem DVI-Eingang empfangen möchten, ist es möglich, dass dies funktioniert. Idealerweise würden Sie das Paar an Vcc terminieren, aber das LVDS wird wahrscheinlich eine in das Gerät eingebaute Terminierungskreuzphase haben, die nicht entfernt werden kann. Das ist also eine Komplikation, da die Terminierung den falschen Wert hat und Sie einen Widerstandsteiler an Ihrem Eingang haben.

Und schließlich ist hier ein Link zu einer App-Notiz von Ti (wieder ein anderes pdf) und es bedeutet die Kündigung oben. aber es gibt einen hinweis:

Im Allgemeinen wird eine AC-Kopplung empfohlen, wenn LVDS-Empfänger mit CML betrieben werden. Wenn der LVDS-Empfänger über einen großen Gleichtaktbereich verfügt, der einen CML-Eingang akzeptieren kann (der Gleichtaktbereich muss zur VCC-Schiene gehen), dann ist eine gleichstromgekoppelte Verbindung eine direkte Verbindung.

Daher ist der Gleichtaktbereich des LVDS-Empfängers wichtig. Sie zeigen auch keine interne Terminierung, was für ein FPGA ein Problem sein kann. Hier ist das ausgeschnittene Bild aus dieser App-Notiz.

Geben Sie hier die Bildbeschreibung ein

Wenn der LVDS-Eingang mehrere Spannungshubbereiche unterstützt, haben Sie vielleicht Glück. Einige "LVDS" arbeiten zum Beispiel mit nur 500 mV Hub.