Verwendung des HDMI-Anschlusses am FPGA (Basic)

8

Zwei Fragen.

Ich habe ein Xilinx Spartan 6 FPGA, das nur HDMI-Ein- und Ausgänge hat. Gibt es eine Anleitung oder einen vorab geschriebenen Code, mit dem ich Bilder an den Bildschirm senden kann? Ich habe keine Ahnung, wie ich anfangen soll, und ich konnte keine Ressourcen finden.

Zweitens, der Grund, warum ich das mache, ist, dass ich Atari 2600-Code verwenden und ändern möchte, den ein Typ auf einem Spartan 3E mit VGA implementiert hat. Ist es überhaupt möglich, den Videoaspekt meines Projekts einfach anzupassen?

Jede Hilfe, Ressourcen oder Ratschläge wäre sehr dankbar!

Kugel
quelle
Ist das ein kommerzielles Entwicklungsboard? Wenn ja, welches Modell und überprüfen Sie die mitgelieferten Referenzdesigns.
David
Dies ist das Board: digilentinc.com/Products/… Es kam mit nichts.
Ballaw
@ballaw - Digilent-Produkte werden ziemlich gut unterstützt. Scrollen Sie zum Ende der Seite, auf die Sie gerade verlinkt haben, und Sie sehen eine ganze Reihe von Dokumentationen und Beispielprojekten online: i.stack.imgur.com/F0TgY.png . Online zählt jetzt als "kommt mit". Möglicherweise möchten Sie auch die Datenblätter für andere Teile auf der Platine suchen, z. B. den XC6SLX45 FPGA- und den TMDS141RHAR HDMI-Puffer. Sie befinden sich an anderer Stelle im Internet.
Kevin Vermeer

Antworten:

12

Die Atlys-Karte verwendet TDMS-Eingänge, daher benötigen Sie einen HDMI-Decoder, der diese Eingänge verwendet und VSYNC, HSYNC, DE und DATA erzeugt. Xilinx beschreibt den DVI-Codierungs- und -Decodierungsprozess in einigen Anwendungshinweisen. Diese werden jeweils mit Beispielcode geliefert. Xilinx-Login erforderlich:

Der Beispielcode befindet sich in Verilog, obwohl das Konvertieren der obersten Ebene in VHDL, wenn Sie dies bevorzugen, eine relativ triviale Übung ist.

Hier ist eine Abbildung aus dem ersten Anwendungsbericht, die die Grundvoraussetzung des Empfängers zeigt:

von Xilinx App Hinweis

Da der Spartan 6 über eine integrierte SERDES-Hardware verfügt, können diese im Rahmen des Deserialisierungsprozesses verwendet werden. Es gibt einen Synchronisationsprozess, der die Uhr wiederherstellt und sicherstellt, dass alle Kanäle synchron sind. Schließlich wird eine 8b / 10b-Decodierung angewendet, um die RGB-Kanaldaten zu erzeugen.

Sobald die Videosignale wiederhergestellt wurden, können Sie diese Signale an die gewünschte Verarbeitung weiterleiten oder an einen Encoder, der sie erneut aus den HDMI-Anschlüssen sendet.

Wenn Sie über das TFTMOD-Display verfügen, können Sie die Daten einfach an das Display weiterleiten, indem Sie die DE- und DATA-Signale an die entsprechenden FPGA-Pins anschließen. Das Referenzhandbuch für die TFT-Karte ist nützlich, um Informationen zum Timing des Displays zu erhalten, obwohl ich festgestellt habe, dass das Timing des Deserialisiererausgangs in Ordnung war.

Sie können die UCF-Datei aus diesem Projekt für die Einschränkungen für HDMI und dieses Projekt für die MODTFT-Einschränkungen verwenden, wenn Sie diese Karte verwenden.

Das einzige, was zu beachten ist, ist, dass das Xilinx-Beispiel keine EDID-Informationen verarbeitet. Wenn Sie die Karte nur zum Weiterleiten von Daten verwenden, können Sie die EDID-Leitungen direkt durchleiten und sie einen Tag lang aufrufen. In anderen Szenarien müssen möglicherweise die EDID-Daten auf dem FPGA verarbeitet werden. Im Grunde ist es nur I2C. Die OpenCores-I2C-Schnittstelle ist ziemlich solide, oder Sie können Ihre eigene codieren. Soweit ich weiß, ist die Wikipedia-Tabelle zum Datenformat für EDID 1.3 korrekt.

Stanri
quelle
4

Nur um zu ergänzen, was eine vorherige Antwort erklärt hat:

Ein DVI / HDMI-Sender kann ein guter Ausgangspunkt sein, da Sie direkt Videos aufnehmen können.

Die HDMI / DVI-Videoübertragung über eine TMDS-Verbindung ist logisch in Stufen unterteilt, wie in Abbildung 1 dargestellt: Entwurf eines TMDS-Senders zur Implementierung einer TMDS-Videoschnittstelle im Spartan-6-FPGA

Geben Sie hier die Bildbeschreibung ein

  1. TMDS-Encoder: Konvertieren Sie Pixeldaten von einer Videoquelle, HDMI-Hilfs- / Audiodaten sowie HSYNC und VSYNC in drei 10-Bit-Symbolströme

  2. Die Serialisierer (10: 5-Getriebe und OSERDES2 5: 1-Konvertierung) führen in zwei Schritten eine 10-Bit-Parallel-Seriell-Konvertierung für alle drei Streams durch und senden sie dann an drei Kanäle mit Differenzialausgangspaaren (TMDS-Puffer).

Beide Stufen erfordern eine Taktschaltung, um die Taktsignale (mit den Frequenzen des Pixelreferenztakts und seiner Vielfachen) richtig zu erzeugen (PLL) und zu verteilen (BUFPLL, BUFG).

Der Kern des Senders ist natürlich der Encoder-Block. Sie können mit dem DVI-Encoder beginnen, da er im Vergleich zum HDMI-Encoder einfach ist. Sowohl HDMI als auch DVI haben viele Aspekte gemeinsam, einschließlich der physischen TMDS-Verbindung, des aktiven Videokodierungsalgorithmus und der Definitionen der Steuertoken.

Der Anwendungshinweis enthält auch 2 Designs. Ein einfacher, aber guter Start ist die "SMPTE HD-Farbbalkengenerierung mit programmierbarem Video-Timing". Es sendet ein Farbbalkengenerator-Video über viele Bildschirmmodi, die über die Schiebeschalter ausgewählt werden können. Dieses Design ist nützlich, da wir den Farbbalkengenerator gegen eine andere Videoquelle austauschen können und dennoch einige Videos erhalten können, die den ursprünglichen Senderblock beibehalten.

Ich hoffe das hilft!

L30nardo SV.
quelle
2
Antworten nur auf Links werden nicht empfohlen, da Xilinx künftig keine Hilfe mehr leisten kann, wenn Xilinx seine Website in Zukunft neu organisiert und der Link tot ist. Vielleicht könnten Sie einige zusätzliche Details des allgemeinen Ansatzes hinzufügen, den der Anwendungshinweis beschreibt?
PeterJ
Danke, du hast vollkommen recht. Ich habe einige weitere Details hinzugefügt.
L30nardo SV.
3

Hier ist der Text eines Referenzdesigns, das Sie von der Board-Seite herunterladen können, auf die Sie verlinkt haben:

DSD-0000326 13.12.11 Diese Zip-Datei enthält ein EDK-Demo-Projekt, das die Verwendung von HDMI auf dem Genesys-Board demonstriert. Es akzeptiert einen HDMI-Eingang, puffert die Eingangsrahmen in den Speicher und gibt den Puffer dann an einen anderen HDMI-Port aus. Dies wird über den PLB-Bus implementiert. Herunterladen

Sie können sich auch die Referenzdesigns ansehen, die mit dem industriellen Videoverarbeitungskit Xilinx spartan 6 geliefert werden. http://www.em.avnet.com/en-us/design/drc/Pages/Xilinx-Spartan-6-FPGA-Industrial-Video-Processing-Kit.aspx (klicken Sie auf den Link Support-Dateien, Avnet-Login erforderlich ).

Es gibt wahrscheinlich auch mehr Referenzdesigns für verschiedene fpgas.

Auch wenn Sie das Audio oder die Verschlüsselung nicht implementieren, ist hdmi im Grunde dasselbe wie dvi.

Davidd
quelle
Vielen Dank. Ich habe das gesehen, bin mir aber nicht sicher, wie ich es verwenden soll, da es EDK verwendet, das ich nicht habe, weil es nicht kostenlos ist. Wäre es einfach, die darin enthaltenen vhd-Dateien zu verwenden? Ich bezweifle es, weil der Download noch viele andere Dinge enthält, von denen die meisten keine Ahnung haben, was sie sind.
Ballaw
1

Das folgende Tutorial, das ein miniSpartan6 verwendet, ist sehr detailliert und einen Blick wert: http://zerocharactersleft.blogspot.com/2015/04/diy-fpga-based-hdmi-ambient-lighting.html

Jason Denney
quelle
Antworten nur auf Links werden nicht empfohlen, da der Link für zukünftige Besucher nicht hilfreich ist, wenn er nicht mehr funktioniert. Vielleicht könnten Sie einige zusätzliche Details hinzufügen?
Brian Carlton