Wiederherstellung der Displayport-Uhr

Das Displayport-Protokoll läuft mit einer festen Frequenz von entweder 1,62 GHz, 2,7 GHz oder 5,4 GHz. Der von ihm übertragene Pixelstrom (strm_clk) läuft mit einer beliebigen Frequenz und ist wahrscheinlich asynchron zum Verbindungstakt (link_clk). Der Empfänger soll strm_clk aus zwei Zahlen M, N als deren Verhältnis wiederherstellen, dh strm_clk/link_clk = M/N, wobei N auf 32.768 festgelegt ist und M davon abhängt, wie viele strm_clk-Zyklen während N link_clk-Zyklen aufgezeichnet wurden. Im asynchronen Modus würden wir erwarten, dass M zeitlich leicht variiert. So weit, ist es gut.

Nun die Probleme:

  • M, N werden einmal pro Rahmen gesendet, wohingegen sie alle N = 32.768 link_clk-Zyklen zurückgesetzt werden, was etwa 2–3 Zeilen entspricht. Wie können die empfindlichen Änderungen in M ​​von dem Empfänger erkannt werden, der M nicht so oft sieht (nur einmal in Millionen link_clk - während der vertikalen Austastung)?

  • Die niedrigsten 8 Bits von M werden in jeder Zeile gesendet - was das Obige erklären könnte, aber da M alle N = 32.768 link_clk-Zyklen zurückgesetzt wird, werden auch die unteren 8 Bits zurückgesetzt, was die Fähigkeit untergräbt, diese Bits als Referenz zwischen zwei zu verwenden Uhren (aufgrund dessen, was als plötzliche Rücksetzungen auf diesen Bits erscheint). Wie funktioniert das - gibt es zwei getrennte Zähler?

  • ein weiteres (kleines) problem: in jedem stream clock werden 24 bit gesendet (im RGB 444 modus), der displayport sendet entweder 4 oder 8 bytes (abhängig von der anzahl der spuren / deren geschwindigkeit). Bedeutet das, dass M in jedem lstrm_clk-Zyklus in einem Bruchteil inkrementieren sollte (dh um 3, um 3, dann um 2)?

Ich finde den Standard schwer zu verstehen - im Grunde Seite 60 hier:

http://read.pudn.com/downloads98/sourcecode/others/400577/DportV1.pdf

Fazit: Kann jemand erklären, wie dieses N,M-Schema angesichts der oben genannten Probleme funktionieren soll?

Jeder Gedanke wäre sehr willkommen!

Bitte stellen Sie eine spezifische Frage, Sie erhalten bessere Antworten

Antworten (1)

Ich bin kein Experte für Displayport, aber wenn ich mir den Standard anschaue, verstehe ich, was sie zu erreichen versuchen. Das Ziel besteht darin, die ursprüngliche Stromuhr über eine asynchrone Verbindung zu übertragen, indem Informationen über die Beziehung zwischen der ursprünglichen Stromuhr und der Verbindungsuhr über die Verbindung übertragen werden, anstatt so etwas wie das Ableiten der Verbindungsuhr von der Stromuhr zu tun. Diese Informationen können später verwendet werden, um die Stromuhr am anderen Ende der Verbindung neu zu generieren. Es ermöglicht auch, dass mehrere unabhängige Stromtakte über dieselbe Verbindung gesendet und regeneriert werden. Die übertragene Information ist einfach das Verhältnis der beiden Frequenzen als Bruchteil M/N, entweder beide konstant (in einem System, in dem der Stromtakt und der Verbindungstakt synchron sind) oder M gemessen und zeitveränderlich und N konstant. Es ist zu beachten, dass, obwohl der Stream-Takt und der Link-Takt asynchron sind, ihre Frequenzen relativ stabil sein sollten und daher nicht sehr schnell gegeneinander driften, sodass sich der gemessene M-Wert langsam ändert. Da M alle paar Taktzyklen gemessen wird, ist ein neuer Wert nur periodisch verfügbar. Der gesamte Wert wird nur einmal pro Frame gesendet, aber die unteren 8 Bits werden häufiger gesendet, was ausreichen sollte, um den langsam variierenden Wert zu verfolgen. Solange es zwischen den Messungen um weniger als, sagen wir, 128 Inkremente variiert, ist es sogar möglich, Variationen zu verfolgen, die zu Bit 8 übergehen (sagen wir zum Beispiel, der letzte M-Wert war 0x0023f2 und das neue LSB ist 0x10, das neues M ist wahrscheinlich 0x002410, da dies einen kleineren Schritt als 0x002310 darstellt). ihre Frequenzen sollten relativ stabil sein und daher nicht sehr schnell gegeneinander driften, damit sich der gemessene M-Wert langsam ändert. Da M alle paar Taktzyklen gemessen wird, ist ein neuer Wert nur periodisch verfügbar. Der gesamte Wert wird nur einmal pro Frame gesendet, aber die unteren 8 Bits werden häufiger gesendet, was ausreichen sollte, um den langsam variierenden Wert zu verfolgen. Solange es zwischen den Messungen um weniger als, sagen wir, 128 Inkremente variiert, ist es sogar möglich, Variationen zu verfolgen, die zu Bit 8 übergehen (sagen wir zum Beispiel, der letzte M-Wert war 0x0023f2 und das neue LSB ist 0x10, das neues M ist wahrscheinlich 0x002410, da dies einen kleineren Schritt als 0x002310 darstellt). ihre Frequenzen sollten relativ stabil sein und daher nicht sehr schnell gegeneinander driften, damit sich der gemessene M-Wert langsam ändert. Da M alle paar Taktzyklen gemessen wird, ist ein neuer Wert nur periodisch verfügbar. Der gesamte Wert wird nur einmal pro Frame gesendet, aber die unteren 8 Bits werden häufiger gesendet, was ausreichen sollte, um den langsam variierenden Wert zu verfolgen. Solange es zwischen den Messungen um weniger als, sagen wir, 128 Inkremente variiert, ist es sogar möglich, Variationen zu verfolgen, die zu Bit 8 übergehen (sagen wir zum Beispiel, der letzte M-Wert war 0x0023f2 und das neue LSB ist 0x10, das neues M ist wahrscheinlich 0x002410, da dies einen kleineren Schritt als 0x002310 darstellt). ein neuer Wert ist nur periodisch verfügbar. Der gesamte Wert wird nur einmal pro Frame gesendet, aber die unteren 8 Bits werden häufiger gesendet, was ausreichen sollte, um den langsam variierenden Wert zu verfolgen. Solange es zwischen den Messungen um weniger als, sagen wir, 128 Inkremente variiert, ist es sogar möglich, Variationen zu verfolgen, die zu Bit 8 übergehen (sagen wir zum Beispiel, der letzte M-Wert war 0x0023f2 und das neue LSB ist 0x10, das neues M ist wahrscheinlich 0x002410, da dies einen kleineren Schritt als 0x002310 darstellt). ein neuer Wert ist nur periodisch verfügbar. Der gesamte Wert wird nur einmal pro Frame gesendet, aber die unteren 8 Bits werden häufiger gesendet, was ausreichen sollte, um den langsam variierenden Wert zu verfolgen. Solange es zwischen den Messungen um weniger als, sagen wir, 128 Inkremente variiert, ist es sogar möglich, Variationen zu verfolgen, die auf Bit 8 übergehen (sagen wir zum Beispiel, der letzte M-Wert war 0x0023f2 und das neue LSB ist 0x10, das neues M ist wahrscheinlich 0x002410, da dies einen kleineren Schritt als 0x002310 darstellt).

Von Ihrem dritten Punkt und Ihrem Gerede über „Zurücksetzen“ aus denke ich, dass Sie vielleicht verwirrt darüber sind, wie M gemessen wird und was es darstellt. Er wird unter Verwendung von zwei Zählern gemessen, einem Zählzyklus von LS_Clk (Verbindungssymboltakt) und einem Zählzyklus von Strm_Clk (Stromtakt). Wenn der LS_Clk-Zähler nach 32768 LS_Clk-Zyklen überläuft, wird der Wert des Strm_Clk-Zählers zum neuen M, und der Zähler wird auf Null zurückgesetzt. M ändert sich nicht, bis der LS_Clk-Zähler das nächste Mal überläuft. Wenn sich also die Frequenz des Link-Takts und des Stream-Takts relativ zueinander nicht ändern, endet der von Strm_Clk getriebene Zähler immer auf dem gleichen Wert, und daher wird sich M nicht ändern. Wenn die Frequenzen driften, ändert sich M geringfügig, um die Änderung zu verfolgen. Die Werte werden dann verwendet, um eine PLL am Empfänger anzusteuern, um etwas zu erzeugen, das dem ursprünglichen Stream-Takt sehr ähnlich ist, indem LS_Clk als Referenz verwendet und mit M/N multipliziert wird. M wird in keiner Weise kontinuierlich inkrementiert oder dekrementiert, es sei denn, die Stream-Taktfrequenz steigt oder fällt mit der Zeit langsam mit einer kontinuierlichen Rate.