Wie kommuniziert eine GPU / CPU mit einem Standard-Bildschirmausgang? (HDMI / DVI / etc) [geschlossen]

14

Ich interessiere mich dafür, wie die CPU / GPU (für jedes Gerät, das sie verwendet) Videodaten darstellt, nachdem sie verarbeitet wurden.

Es wurde mir mitgeteilt, dass das Video von der CPU / GPU verarbeitet und dann über eine Hochgeschwindigkeits-serielle Schnittstelle an eine integrierte Schaltung gesendet wird, die das serielle Signal in einen geeigneten Anzeigeausgang umwandelt. Dies kann ich jedoch nicht durch Online-Suche bestätigen.

Ich interessiere mich für die Signalisierung und kann nicht nach Protokollen / usw. suchen, weil ich nicht weiß, wonach ich suche. Interagiert die CPU / GPU also direkt mit Videoausgängen (diese Protokolle sind leicht zu finden) oder gibt es sozusagen einen "Mittelsmann" und wenn ja, welche Art von Chip / etc?

Craig Lafferty
quelle
Sie können Video- RAMDACs als separate Teile kaufen: ti.com.cn/cn/lit/ds/symlink/tvp3703.pdf, obwohl dies nicht bedeutet, dass sie auf Ihrer Grafikkarte separat sind.
pjc50

Antworten:

18

Das auf dem Monitor angezeigte Bild wird im Video-RAM Ihres Computers auf der Grafikkarte in einer als Framebuffer bezeichneten Struktur gespeichert. Die Daten im Framebuffer sind im Allgemeinen 24-Bit-RGB-Farben, sodass für jedes Pixel auf dem Display ein Byte für Rot, eines für Grün und eines für Blau angezeigt wird, möglicherweise mit einigen zusätzlichen Füllbytes. Die Daten im Video-RAM können von der GPU oder von der CPU erzeugt werden. Der Video-RAM wird kontinuierlich von einer speziellen DMA-Komponente auf der Grafikkarte ausgelesen und an den Monitor gesendet. Das an den Monitor ausgegebene Signal ist entweder ein analoges Signal (VGA), bei dem die Farbkomponenten vor dem Verlassen der Karte über Digital-Analog-Wandler übertragen werden, oder ein digitales Signal bei DVI, HDMI oder DisplayPort. Die dafür zuständige Hardware generiert auch die horizontalen und vertikalen Synchronisationssignale sowie alle entsprechenden Verzögerungen, sodass die Bilddaten erst dann an den Monitor gesendet werden, wenn sie dafür bereit sind. Bei DVI und HDMI wird der Strom von Pixelfarbinformationen codiert und serialisiert und über TMDS (Transition Minimized Differential Signaling) an den Monitor gesendet. DisplayPort verwendet 8b / 10b-Codierung. Die Codierung dient mehreren Zwecken. Erstens minimiert TMDS Signalübergänge, um die EMI-Emissionen zu reduzieren. Zweitens sind sowohl TMDS als auch 8b / 10b gleichspannungsausgeglichene Protokolle, sodass Gleichspannungsblockierungskondensatoren verwendet werden können, um Probleme mit Masseschleifen zu beseitigen. Drittens stellt 8b / 10b eine ausreichend hohe Übergangsdichte sicher, um eine Taktwiederherstellung am Empfänger zu ermöglichen, da DisplayPort keinen separaten Takt verteilt. Der Strom von Pixelfarbinformationen wird codiert und serialisiert und über TMDS (Transition Minimized Differential Signaling) an den Monitor gesendet. DisplayPort verwendet 8b / 10b-Codierung. Die Codierung dient mehreren Zwecken. Erstens minimiert TMDS Signalübergänge, um die EMI-Emissionen zu reduzieren. Zweitens sind sowohl TMDS als auch 8b / 10b gleichspannungsausgeglichene Protokolle, sodass Gleichspannungsblockierungskondensatoren verwendet werden können, um Probleme mit Masseschleifen zu beseitigen. Drittens stellt 8b / 10b eine ausreichend hohe Übergangsdichte sicher, um eine Taktwiederherstellung am Empfänger zu ermöglichen, da DisplayPort keinen separaten Takt verteilt. Der Strom von Pixelfarbinformationen wird codiert und serialisiert und über TMDS (Transition Minimized Differential Signaling) an den Monitor gesendet. DisplayPort verwendet 8b / 10b-Codierung. Die Codierung dient mehreren Zwecken. Erstens minimiert TMDS Signalübergänge, um die EMI-Emissionen zu reduzieren. Zweitens sind sowohl TMDS als auch 8b / 10b gleichspannungsausgeglichene Protokolle, sodass Gleichspannungsblockierungskondensatoren verwendet werden können, um Probleme mit Masseschleifen zu beseitigen. Drittens stellt 8b / 10b eine ausreichend hohe Übergangsdichte sicher, um eine Taktwiederherstellung am Empfänger zu ermöglichen, da DisplayPort keinen separaten Takt verteilt.

Bei HDMI und DisplayPort werden außerdem Audiodaten zur Übertragung an den Monitor an die Grafikkarte gesendet. Diese Daten werden in Pausen im Datenstrom zwischen Videoframes eingefügt. In diesem Fall präsentiert sich die Grafikkarte dem Betriebssystem als Audio-Senke, und die Audiodaten werden per DMA auf die Karte übertragen, um sie in die Videodaten aufzunehmen.

Jetzt stellen Sie wahrscheinlich fest, dass Sie für eine 1920 x 1080-Anzeige mit 4 Bytes pro Pixel nur etwa 8 MB zum Speichern des Bildes benötigen, der Video-RAM in Ihrem Computer jedoch wahrscheinlich ein Vielfaches dieser Größe hat. Dies liegt daran, dass der Video-RAM nicht nur zum Speichern des Framebuffers vorgesehen ist. Das Video-RAM ist direkt mit der GPU verbunden, einem Spezialprozessor für effizientes 3D-Rendering und Videodecodierung. Die GPU verwendet ihren direkten Zugriff auf den Video-RAM, um den Rendering-Prozess zu beschleunigen. Tatsächlich ist das Übertragen von Daten vom Hauptspeicher in den Videospeicher ein gewisser Engpass, da der PCI-Bus, der die Grafikkarte mit der CPU und dem Hauptspeicher verbindet, erheblich langsamer ist als die Verbindung zwischen der GPU und dem Videospeicher.

alex.forencich
quelle
7

Die verschiedenen modernen Anzeigeausgänge sind im wesentlichen serielle Bitströme. Die Bitrate ist für einen Prozessor zu hoch (oder wenn sie mithalten könnte, würde sie zu viel Verarbeitungszeit beanspruchen). Ein Stück Speicher wird zur Seite gelegt, um die Bits des Bildes zu enthalten. Eine dedizierte Hardware liest den Speicherinhalt und überträgt ihn. Dieses Stück ähnelt einem DMA-Controller und ist eigentlich recht einfach. Es ist nur ein kleiner Teil einer modernen GPU, der sich hauptsächlich mit der Erstellung dieses Abbilds aus übergeordneten GPU-Befehlen im Speicher befasst.

Der Speicher, der das Videobild enthält, kann Teil des Hauptspeichers (billig) oder ein dedizierter Speicher sein, auf den der 'DMA' und die CPU und / oder GPU gleichzeitig zugreifen können. Der 'DMA' muss mit verschiedenen Parametern konfiguriert werden, zum Beispiel der Pixelbreite und -höhe, der Farbtiefe, der Startposition im Speicher usw.

Auf modernen Computern ist die GPU ein (sehr spezialisierter) Prozessor, der mit der Geschwindigkeit der Haupt-CPU mithalten kann (und diese sogar übertrifft). Es erzeugt beispielsweise ein Psuido-3D-Bild aus einer Reihe von 3D-Objekten mit Texturen und Lichtquellen. Dies kann alles innerhalb des Videospeichers durch die GPU erfolgen. Die CPU liefert nur die Objekte, Texturen und Lichtquellen.

Das Auslesen und Verschieben der Videodaten aus dem Speicher ist ein ziemlich einfacher Vorgang, der jedoch immer sehr schnell erfolgen muss. Daher ist diese Aufgabe für dedizierte Hardware gut geeignet und für eine CPU schlecht geeignet. AFAIK Die letzten Computer, auf denen die CPU an der Erzeugung des Videosignals beteiligt war, waren ZX80 / 81 und Spectrum. Auf diesen konnte die CPU nur während der (vertikalen?) Rücklaufzeit ihre eigene Arbeit verrichten.

Wouter van Ooijen
quelle
1
Das sind großartige Informationen. Der DMA-Controller (oder eine ähnliche Hardware) greift also direkt auf den Videospeicher zu? Und auf einem System mit integrierter Grafik, das System-RAM verwendet, greift es direkt auf System-RAM zu? Entschuldigen Sie die Einfachheit meiner Fragen. Ich bin ein großer Heimwerker, also neige ich dazu, in Sachen auf höherer Ebene mit Wissen auf niedrigerer Ebene zu springen. :)
Craig Lafferty
Und um nachzuverfolgen, woher weiß der Controller, von welcher Adresse im RAM der Frame "gestohlen" werden soll? Ich nehme an, die Frames / Bitmaps werden sehr schnell ersetzt und verschoben.
Craig Lafferty
Dein letzter Kommentar ist richtig: Er wird in einem Framebuffer gespeichert und für analoges Video an einen RAMDAC übergeben . Die Framebuffer-Adresse kann fest sein oder in einem Steuerregister angegeben werden. Es gibt verschiedene Tricks, bei denen Framebuffer zwischen oder während Frames ausgetauscht werden oder bei einigen Systemen (Amiga) der Videomodus in der Mitte eines Frames geändert wird.
pjc50
Warum sollte der Prozessor verlangsamt werden? Muss das Video nicht bereits verarbeitet werden, damit der Controller es verwenden kann? Ich nehme hier eine weitere Vermutung an und sage, dass der Controller den RAM immer wieder liest und die CPU / GPU den RAM nur dann mit neuen Anzeigeinformationen aktualisiert, wenn sich etwas geändert hat, so dass zum Beispiel die GPU meinen aktuellen Bildschirm einfügt sein RAM und wenn ich meinen Cursor bewege, aktualisiert es die Pixel, die geändert worden sind. In der Zwischenzeit liest der Controller etwa 60 Mal pro Sekunde den RAM (eine Art Standard-FR, denke ich).
Craig Lafferty
1
Der Video-RAM wird nicht nur zum Speichern des Anzeigebildes verwendet, sondern wird auch intern von der GPU zum Speichern von Szenendaten verwendet, die in den Framebuffer gerendert werden. Dies kann viel Platz in Anspruch nehmen, da die GPU Zugriff auf die detaillierten 3D-Netze der Objekte sowie auf alle Texturdaten für ihre Oberflächen benötigt.
alex.forencich