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 ich glaube, es unterstützt nur LVDS-Differenzsignale.
Ich lese viel online über Differenzialsignale und habe eine allgemeine Vorstellung davon, wie es funktioniert, aber ich bin verwirrt über die verschiedenen Standards. Ich habe auch die Spezifikationen für HDMI durchgesehen, aber es ist sehr trocken und scheint vorher eine gewisse Vertrautheit mit diesen Konzepten vorauszusetzen, die ich nicht habe.
Was genau ist beispielsweise TMDS gegen LDVS? Ist TMDS nur ein Codierungsschema, das über LVDS ausgeführt wird? Sind TMDS und LVDS nur Standards für die Differenzsignalisierung, jedoch mit unterschiedlichen elektrischen Eigenschaften? Das Fehlen von Suchergebnissen für LVDS-zu-TMDS-Konverterchips lässt darauf schließen, dass mein Verständnis hier nicht stimmt.
In praktischer Hinsicht frage ich mich, ob ich einfach eine HDMI-Breakout-Karte direkt an die Eingangspins meines FPGA anschließen, diese Pins nach dem LVDS-E / A-Standard konfigurieren und erwarten kann, dass sie funktionieren (vorausgesetzt, die Softwareseite ist korrekt geschrieben). Einige Websites implizieren, dass ich es kann, aber es scheint, dass ihre FPGAs alle TMDS-Treiber eingebaut haben, wo meine dies nicht tun. Andere Websites sagen, dass ich TMDS-Unterstützung benötige, aber dann sagen wir, dass LVDS auch funktioniert. Wikipedia scheint darauf hinzudeuten, dass LVDS als Standard für die Datenübertragung über DVI oder HDMI auslaufen wird.
Kann mir jemand helfen, Missverständnisse darüber auszuräumen, wie das alles funktioniert?
Antworten:
Gute Fragen. Ich habe dieses Thema kürzlich selbst recherchiert und werde versuchen, hier einige kurze Antworten zu geben.
LVDS (Niederspannungs-Differenzsignalisierung) ist einfach eine elektrische Spezifikation für eine Differenzsignalisierungsschnittstelle, während TMDS (übergangsminimierte Differenzsignalisierung) 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, sich unter bestimmten Umständen aneinander anzupassen.
Elektrisch verwendet LVDS Totempfahltreiber und Differenzanschluss (100-120 Ω), während TMDS CML-Open-Collector-Treiber (Current-Mode Logic) und einzelne 50 Ω-Anschlüsse mit +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 Mbit / s, jedoch ohne dedizierte Hochgeschwindigkeits-SERDES-Logik. Sie müssten die TMDS-Codierung und -Decodierung in der FPGA-Struktur durchführen und die DDR-Unterstützung in den IOBs verwenden, um die endgültigen Bitströme zu erhalten. Dies würde Sie auf Pixelraten von 62,8 Mp / s oder weniger beschränken.
Nein, nicht auf der Eingangsseite, zumindest nicht ohne Aufwand, um das TMDS ordnungsgemäß zu terminieren und dann mit der richtigen Vorspannung an die LVDS-Empfänger auf dem FPGA zu koppeln (all dies unter Beibehaltung einer genauen Differenzimpedanz von 100 Ω). Beachten Sie, dass die Beispielprojekte, auf die Sie verlinken, nur Beispiele für die Ausgabe sind. Das Ansteuern von DVI / HDMI von einem LVDS-Ausgang scheint viel verzeihender zu sein. Sie scheinen ihren Leiterplatten keine Vorspannungs- oder Abschlusswiderstände hinzugefügt zu haben.
Am besten verwenden Sie externe DVI / HDMI-Eingangs- und Ausgangschips und stellen die Verbindung zum FPGA über deren parallele Busse her. Ich habe in der Vergangenheit Teile von Analog Devices verwendet .
quelle
TMDS verwendet CML (Current Mode Logic), die auf der Empfangsseite mit Vcc abgeschlossen wird. LVDS aus dem Standard (IEEE644) ist ein Spannungsmodustreiber, der auch am Empfangsende paarweise terminiert wird. Dies ist jedoch nicht so einfach, da LVDS-Treiber häufig die Anstiegsgeschwindigkeit bei Übergängen steuern, um ein Klingeln und andere unangenehme Effekte zu verhindern. In diesem Modus verhält sich der Treiber eher wie eine Stromquelle.
Bei strenger Lesart sind diese beiden Standards jedoch unterschiedlich und nicht kompatibel. Das Codierungsschema auf dieser physischen Schicht (8b / 10b DDR usw.) sind logische Operationen.
Es gibt Übersetzer-Chips (einer von TI ist SN65CML100), so dass Sie diese der Karte hinzufügen können. Interessanterweise kann dieser Chip auch eine CML-zu-CML-Brücke sein, daher gibt es wahrscheinlich einige gute Informationen aus diesem Datenblatt, die Sie in Ihrem Verständnis weiterbringen werden.
Interessanterweise besagt dieses Datenblatt (Warnung wird als PDF geöffnet), dass kondensatorgekoppelte LVDS CML-Eingänge ansteuern können. Seite 14 "Ein AC-gekoppelter LVDS-Treiber ist häufig als CML-Treiber nützlich."
Angesichts der Tatsache, dass Sie TDMS in einen DVI-Eingang empfangen möchten, ist es möglich, dass dies funktioniert. Idealerweise würden Sie das Paar mit Vcc beenden, aber das LVDS verfügt wahrscheinlich über eine im Gerät integrierte Kreuzungsphase, die nicht entfernt werden kann. Dies ist eine Komplikation, da der Abschluss 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 weiteres PDF), die die obige Kündigung bedeutet. aber es gibt einen Hinweis:
Daher ist der Gleichtaktbereich des LVDS-Empfängers wichtig. Sie zeigen auch keine interne Terminierung an, was für ein FPGA ein Problem sein kann. Hier ist das ausgeschnittene Bild aus dieser App-Notiz.
Wenn der LVDS-Eingang mehrere Spannungshubbereiche unterstützt, haben Sie möglicherweise Glück. Einige "LVDS" arbeiten zum Beispiel nur mit einer Schwingung von 500 mV.
quelle