recuperación del reloj de Displayport

3

El protocolo displayport se ejecuta a una frecuencia fija de 1.62GHz, 2.7GHz o 5.4GHz. El flujo de píxeles (strm_clk) que lleva se ejecuta a una frecuencia arbitraria y es probable que sea asíncrono al reloj de enlace (link_clk). Se supone que el receptor recupera strm_clk de dos números M, N, como su relación, es decir, strm_clk / link_clk = M / N, donde N se fija a 32,768 y M depende de cuántos ciclos de strm_clk se hayan registrado durante los ciclos de N link_clk. En modo asíncrono, esperaríamos que M varíe ligeramente en el tiempo. Hasta ahora todo bien.

Ahora, los problemas:

  • M, N se envían una vez por trama, mientras que se restablecen cada N = 32,768 ciclos de link_clk, que se encuentra en aproximadamente 2-3 líneas. ¿Cómo pueden los cambios delicados en M ser detectados por el receptor que no ve M con tanta frecuencia (solo una vez en millones link_clk - durante el cegamiento vertical)?

  • los 8 bits más bajos de M se envían a cada línea, lo que puede explicar lo anterior, pero como M se restablece cada N = 32,768 ciclos de link_clk, también lo son sus 8 bits más bajos, lo que socavará la capacidad de usar estos bits como referencia entre dos relojes (debido a lo que aparece como restablecimientos repentinos en estos bits). ¿Cómo funciona eso? ¿Hay dos contadores separados?

  • otro problema (menor): en cada reloj de flujo, se envían 24 bits (en el modo RGB 444), el puerto de pantalla envía 4 u 8 bytes (dependiendo del número de carriles / su velocidad). ¿Eso significa que en cada ciclo de lstrm_clk, M debería incrementarse de manera fraccionada (es decir, en 3, en 3, luego en 2)?

Encuentro el estándar difícil de entender - básicamente, página 60 aquí:

enlace

Conclusión: ¿alguien puede explicar cómo se supone que este esquema N, M debe funcionar dados los problemas anteriores?

¡Cualquier pensamiento sería muy apreciado!

    
pregunta Ran

1 respuesta

1

No soy un experto en displayport, pero al analizar el estándar, creo que entiendo lo que intentan lograr. El objetivo es transferir el reloj de flujo original a través de un enlace asíncrono mediante la transferencia de información sobre la relación entre el reloj de flujo original y el reloj de enlace sobre el enlace, en lugar de hacer algo como derivar el reloj de enlace del reloj de flujo. Esta información se puede usar más adelante para regenerar el reloj de transmisión en el otro extremo del enlace. También permite que se envíen por el mismo enlace y se regeneren múltiples relojes de flujo independientes. La información transferida es simplemente la relación de las dos frecuencias como fracción, M / N, ambas constantes (en un sistema donde el reloj de flujo y el reloj de enlace son síncronos) o M medida y variable en el tiempo y N constante. Lo que hay que tener en cuenta es que, aunque el reloj de flujo y el reloj de enlace son asíncronos, sus frecuencias deben ser relativamente estables y, por lo tanto, no desviarse muy rápidamente entre sí, por lo que el valor M medido cambiará lentamente. Como M se mide cada tantos ciclos de reloj, un nuevo valor solo está disponible periódicamente. El valor completo solo se envía una vez por trama, pero los 8 bits más bajos se envían con mayor frecuencia, lo que debería ser suficiente para rastrear el valor que varía lentamente. Mientras varíe en menos de, por ejemplo, 128 o más incrementos entre mediciones, incluso es posible rastrear las variaciones que se cruzan al bit 8 (por ejemplo, digamos que el último valor de M fue 0x0023f2 y el nuevo LSB es 0x10, nueva M es probablemente 0x002410 ya que representa un paso más pequeño que 0x002310).

Desde tu tercer punto, y tu charla sobre 'reinicios', creo que tal vez estás confundido acerca de cómo se mide M y qué representa. Se mide utilizando dos contadores, un ciclo de conteo de LS_Clk (reloj de símbolo de enlace) y un ciclo de conteo de Strm_Clk (reloj de flujo). Cuando el contador LS_Clk se desborda después de 32768 ciclos LS_Clk, el valor del contador Strm_Clk se convierte en la nueva M y el contador se restablece a cero. M no cambia hasta la próxima vez que el contador LS_Clk se desborda. Entonces, si la frecuencia del reloj de enlace y el reloj de flujo no cambian entre sí, el contador controlado por Strm_Clk siempre terminará en el mismo valor y, por lo tanto, M no cambiará. Si las frecuencias se desvían, entonces M cambiará ligeramente para rastrear el cambio. Luego, los valores se utilizan para impulsar un PLL en el receptor para generar algo muy similar al reloj de flujo original utilizando LS_Clk como referencia y multiplicándolo por M / N. M no aumenta ni disminuye continuamente de ninguna manera, a menos que la frecuencia del reloj de flujo aumente o disminuya lentamente a lo largo del tiempo a una velocidad continua.

    
respondido por el alex.forencich

Lea otras preguntas en las etiquetas