01signal.com

La generación de relojes en un MGT: explicación de los fundamentos

Esta página es la séptima de una serie de páginas dedicada al transceptor multigigabit (MGT).

Introducción

Es natural esperar que la mayor parte del trabajo de configurar un MGT de una FPGA tenga que ver con el procesamiento de los datos y con elegir el protocolo correcto. Por eso puede sorprender la cantidad de tiempo y esfuerzo que requiere hacer bien la parte de los relojes. Ese esfuerzo suele dedicarse, sobre todo, a ordenar las distintas opciones que ofrece el MGT en relación con sus recursos de reloj, así como las restricciones que imponen.

Como las reglas de diseño relativas a los relojes del MGT son distintas según la FPGA, la única fuente fiable de información precisa y completa sobre este tema es la documentación del propio MGT. Esa documentación suele centrarse en los mecanismos y sus detalles, y puede no explicar por qué esos mecanismos son necesarios. Esta página intenta llenar ese vacío tratando los conceptos y retos relacionados con los relojes que utiliza un MGT.

PLLs y VCOs

En general, los PLL multiplican la frecuencia de un reloj de referencia por una constante. Esa constante a veces es un número entero, pero también puede ser fraccionaria, e incluso menor que 1. En otras palabras, la frecuencia a la salida de un PLL puede ser menor que la del reloj de referencia. Esto es poco habitual en los PLL que se utilizan con los MGT, pero puede ser útil con los PLL del tejido lógico.

En una FPGA hay PLL independientes para generar los relojes que necesitan los MGT. Los PLL y demás recursos de reloj del tejido lógico no son capaces de alcanzar las frecuencias que exige un MGT. En particular, el MGT necesita un reloj cuya frecuencia sea como mínimo la mitad de la velocidad de datos. Para velocidades de datos bajas, la frecuencia requerida puede ser mayor.

Por ejemplo, si la velocidad de datos es de 5 Gb/s, el reloj de bit suele funcionar a 2,5 GHz. Esto se debe a que el SERDES del MGT se activa con ambos flancos del reloj (DDR). Sin embargo, si la velocidad de datos es relativamente baja, la salida del PLL del MGT puede dividirse a una frecuencia menor.

Casi todos los PLL funcionan según el mismo principio: la parte central es un VCO (oscilador controlado por tensión; del inglés Voltage Controlled Oscillator) que puede generar un reloj dentro de un rango de frecuencias. La salida del VCO entra en un divisor de reloj que divide la frecuencia por una constante. La salida del divisor se compara con el reloj de referencia del PLL. Un mecanismo de control ajusta la frecuencia del VCO para que el reloj de referencia y la salida del divisor estén alineados. En otras palabras, estas dos señales tienen la misma frecuencia y la misma fase.

Volviendo al ejemplo de 5 Gb/s, supongamos que la frecuencia del reloj de referencia es de 125 MHz. Una implementación posible de un PLL es que la salida del VCO se divida por 20. La señal dividida se compara y se alinea con el reloj de referencia. Por tanto, la frecuencia del VCO debe ser de 2500 MHz, porque 2500 MHz / 20 = 125 MHz.

Este método de generar el reloj vale para transmitir bits: el MGT transmisor decide por sí solo dónde empieza y termina el periodo de cada bit. Sin embargo, cuando el MGT recibe bits, el otro extremo es quien impone el ritmo de cada bit. Por tanto, el receptor debe adaptarse al flujo de datos entrante. Como se menciona en una de las páginas anteriores, este mecanismo de adaptación se llama recuperación de reloj y datos (CDR, del inglés Clock Data Recovery). La implementación de la CDR consiste en un lazo de control que ajusta la frecuencia del VCO para sincronizar el reloj del receptor con el flujo de datos entrante. El reloj de referencia se utiliza de vez en cuando para llevar el VCO a una frecuencia inicial suficientemente cercana a la esperada. El reloj de referencia se ignora una vez conseguida la sincronización.

Utilización de los PLL

Los PLL para MGT dentro de una FPGA son un tema complicado. Cada MGT puede recibir su reloj de más de un PLL. Si en el proyecto de FPGA solo hay una aplicación que utilice MGT, las herramientas suelen elegir automáticamente el PLL más adecuado. Sin embargo, si en un proyecto los MGT se utilizan para fines distintos, es importante asegurarse de que cada MGT esté conectado al PLL que mejor le convenga.

En una FPGA suele haber PLL compartidos entre varios MGT. AMD (Xilinx) los llama QPLL, y Altera tiene fPLL y ATX PLL. Por otro lado, hay PLL locales a un MGT concreto. Estos se llaman CPLL (AMD / Xilinx) o CMU PLL (Altera). Los PLL locales suelen tener menos calidad y menos capacidades que los compartidos. Las diferencias pueden estar en el rango de frecuencias, la fluctuación de fase (jitter) o los factores de multiplicación que pueden elegirse con respecto al reloj de referencia.

Cada FPGA tiene un conjunto de reglas complicadas que definen cómo pueden interconectarse los PLL y los MGT. Estas reglas definen también las posibilidades de conectar los PLL a las entradas de reloj de referencia de la FPGA. Por tanto, no puede darse por hecho que todos los MGT pueden conectarse a los relojes que necesitan. Esto es muy distinto de los relojes del tejido lógico, para los que casi no hay restricciones.

Por eso se recomienda leer detenidamente la hoja de datos antes de decidir qué PLL elegir para cada MGT. En particular, es importante verificar que es posible proporcionar sus relojes a todos los MGT al diseñar una placa de circuito impreso. Esto puede hacerse creando un proyecto de FPGA que incluya todos los MGT necesarios y comprobando que la implementación del proyecto tiene éxito y que todos los pines están colocados en las posiciones correctas.

Reloj de referencia

La FPGA tiene pines independientes para los relojes de referencia destinados a los PLL de los MGT. En el diseño de una placa, es importante verificar que una entrada de reloj de referencia puede utilizarse con los MGT para los que está pensado ese reloj. La interconexión entre entradas de reloj de referencia, PLL y MGT no permite todas las combinaciones posibles. Las combinaciones permitidas se describen en la documentación de la FPGA, pero puede resultar difícil llegar a una conclusión definitiva, porque las reglas pueden ser complicadas. A menudo es mejor asegurarse de que las necesidades quedan cubiertas con ayuda de proyectos de FPGA.

Los relojes utilizados para este fin deben tener una calidad alta en cuanto a precisión y a baja fluctuación de fase (jitter). Es un error común conectar un reloj generado por un circuito integrado de reloj de propósito general. Hacerlo probablemente degradará el rendimiento del MGT y provocará fallos que parecen problemas de integridad de señal o ruido añadido en los cables de datos.

Si el MGT está destinado a un protocolo concreto (por ejemplo PCIe, SuperSpeed USB o SATA), se recomienda leer la documentación del fabricante de la FPGA sobre los requisitos del reloj de referencia. Varios componentes electrónicos etiquetados como “fuente de reloj de bajo jitter” pueden no ser suficientemente buenos.

La fluctuación de fase (jitter) es un proceso aleatorio. Su magnitud es un parámetro importante, pero no siempre suficiente. La aleatoriedad del jitter del reloj puede provocar cambios rápidos en el ciclo del reloj, y también cambios lentos. Cómo se comporta el jitter en este aspecto puede deducirse del espectro de ruido del jitter.

La hoja de datos del componente que genera el reloj a veces solo ofrece un número para la magnitud del jitter (normalmente en picosegundos). La información sobre el espectro de ruido del jitter suele no estar disponible. Es posible que un componente así sea adecuado a pesar de esa falta de información, sobre todo si de todas formas la magnitud del jitter es extremadamente baja. A menudo no hay una respuesta sencilla a esta cuestión.

La calidad del reloj de referencia es importante para cualquier uso del MGT. Los requisitos de los protocolos conocidos son una buena referencia que puede utilizarse en cualquier proyecto. También es útil comparar con los componentes que se utilizan como relojes de referencia en las placas de desarrollo.

Relojes para el tejido lógico

El reloj que se utiliza en la interfaz entre el MGT y el tejido lógico tiene su origen en el propio PLL del MGT. Esto es necesario porque dentro del PMA el SERDES depende de dos relojes: el reloj correspondiente a los bits del canal físico y el reloj que se utiliza junto con las palabras paralelas. Para que el SERDES funcione correctamente, estos dos relojes deben estar alineados dentro del PMA.

Por otro lado, cualquier reloj utilizado por el tejido lógico debe distribuirse de manera que se garantice un desfase de reloj (clock skew) bajo. Las herramientas suelen elegir para ello un búfer de reloj global. El retardo de propagación (propagation delay) desde el búfer de reloj hasta todos los elementos lógicos es casi el mismo, de modo que los flancos del reloj llegan simultáneamente a todos los destinos. Esta es una condición necesaria para que las herramientas puedan realizar cálculos de temporización correctos en el tejido lógico.

Aunque ese retardo de propagación es uniforme en todos los caminos, no es necesariamente pequeño. Al contrario, los cables internos de la FPGA que conectan el búfer con sus destinos añaden un retardo considerable. Eso no suele importar, porque las diferencias entre todas estas conexiones son pequeñas.

Pero ese retardo hace que los dos relojes que utiliza el PMA no estén alineados con el reloj del tejido lógico. Es imposible alinear estos tres relojes con los recursos del tejido lógico, porque uno de ellos tiene una frecuencia demasiado alta. Y sin embargo, el MGT y el tejido lógico deben tener un reloj con el que ambos lados sean síncronos. La única solución es añadir otra señal de reloj.

Todo esto se reduce a que deben intervenir al menos tres señales de reloj para cada dirección:

Observa que, en general, hay relojes distintos para la transmisión y para la recepción. Este diagrama de bloques muestra la distribución típica de los relojes dentro de un MGT:

Clock domains in a typical Multi-Gigabit Transceiver

En este diagrama de bloques hay cuatro relojes para cada dirección, no tres como se ha dicho antes. Esto se explica a continuación.

Generación del reloj del tejido lógico

Como se ha explicado, el reloj que es común al tejido lógico y al MGT debe distribuirse con el búfer de reloj del tejido lógico. Por otro lado, ese reloj debe tener su origen dentro del MGT.

Empecemos por la solución más simple posible a estos dos requisitos en conflicto: el MGT genera efectivamente un reloj y lo pone a disposición en un puerto de salida. Ese puerto suele llamarse TXOUTCLK, RXOUTCLK, tx_clkout, rx_clkout, etc. (es el cuarto reloj, llamado “Tx out clock” y “Rx out clock” en el diagrama anterior). Esta señal llega a la entrada de un búfer de reloj del tejido lógico. La salida de ese búfer es la señal de reloj utilizada para la interfaz entre el MGT y el tejido lógico.

Como resultado de esta disposición, la única diferencia entre el reloj del tejido lógico y el reloj generado por el MGT es el retardo de propagación (propagation delay) del búfer. En otras palabras, el MGT tiene el control total del reloj del tejido lógico, excepto en lo que respecta a su fase. Esto es importante en particular para la recepción de datos, si el reloj de la CDR se utiliza como base para la interfaz con el tejido lógico (esta opción se comenta más abajo). La razón es que la CDR ajusta continuamente la frecuencia de su reloj para mantenerse sincronizada con el flujo de datos entrante.

Como se explica en una página anterior, el PCS ofrece mecanismos para superar la diferencia entre las fases del reloj del tejido lógico y el reloj del PMA. El búfer Tx o el búfer Rx son las opciones más sencillas, pero el PCS también puede tener la capacidad de ajustar directamente esa diferencia.

¿Qué reloj se expone en el puerto de salida de reloj del MGT? La respuesta natural es XCLK, porque es el candidato más cercano al requisito del reloj del tejido lógico. Hay, sin embargo, varias posibilidades más para generar el reloj del tejido lógico. Por ejemplo, la salida de reloj del MGT puede llevarse a un PLL normal del tejido lógico para generar un reloj con una frecuencia distinta. Ese PLL se utiliza junto con un búfer de reloj, de modo que la señal de reloj sea adecuada para su propósito. Usar un PLL de esta manera abre nuevas posibilidades, por ejemplo que el MGT saque su propio reloj de referencia por el puerto de salida de reloj. La frecuencia de ese reloj puede no ser la adecuada para usarla en la interfaz con el MGT, pero el PLL puede multiplicarla por la relación necesaria.

Nótese también que la frecuencia del reloj del tejido lógico puede ser distinta de la de XCLK. Esto puede ser necesario cuando se activa un gearbox asíncrono dentro del PCS. En ese escenario, la diferencia de frecuencia es necesaria para compensar las distintas anchuras de la palabra paralela en el PMA y en la interfaz con el tejido lógico.

Las reglas relativas a este tema son complicadas y cambian de una FPGA a otra. Una gran parte de la documentación de un MGT suele dedicarse a detallar las distintas posibilidades. Por desgracia, tomar las decisiones correctas sobre los relojes requiere dedicar tiempo a aprender las reglas que se aplican a la FPGA concreta.

Elección del reloj del tejido lógico para la recepción de datos

Al elegir cómo generar el reloj del tejido lógico destinado a la recepción de datos, hace falta tomar una decisión fundamental: si ese reloj se deriva del reloj de la CDR o de un reloj de referencia fijo. En otras palabras, si el reloj del tejido lógico se adapta o no a la velocidad exacta de datos del flujo entrante.

En la mayoría de las aplicaciones, el MGT se utiliza para comunicar datos en ambas direcciones. Suele haber una relación estrecha entre los datos que llegan y los que se transmiten. Por ejemplo, el flujo de datos transmitido puede incluir confirmaciones y solicitudes de retransmisión enviadas como respuesta al flujo de datos entrante. En aplicaciones de este tipo, conviene que toda la lógica sea síncrona con el mismo reloj (es decir, que toda la lógica esté en el mismo dominio de reloj). En particular, la interfaz PIPE exige que todas las interfaces con el MGT sean síncronas con un único reloj (llamado PCLK en el documento del estándar). Recuerda de antes que PIPE es la interfaz estándar entre los MGT y varios protocolos: PCIe, SuperSpeed USB y SATA.

Sin embargo, esta comodidad tiene un precio: la frecuencia del reloj del tejido lógico puede ser ligeramente distinta de la utilizada con la palabra paralela del PMA (es decir, la frecuencia de XCLK). Esa diferencia provoca un exceso o una falta de datos dentro del PCS, porque el tejido lógico recibe las palabras paralelas más despacio o más rápido de lo que llegan al PMA. La solución suele ser recurrir al búfer Rx y a los símbolos de omisión, como se explica en la página dedicada al PCS.

Alternativamente, el reloj del tejido lógico puede derivarse del reloj del PMA. Con este método, el tejido lógico consume los datos al mismo ritmo al que llegan. Es la solución natural cuando el MGT se utiliza solo para recibir datos. También es una opción posible para un enlace bidireccional cuando la lógica de aplicación se encarga del cruce entre dominios de reloj (clock domain crossing). Xillyp2p es un ejemplo de protocolo que ha adoptado este enfoque, como se muestra en su diseño de ejemplo completo.

FPGA de AMD: dos relojes desde el tejido lógico

Los MGT de las FPGA de AMD (antes Xilinx) tienen dos puertos de entrada de reloj desde el tejido lógico, es decir, dos puertos por cada dirección: TXUSRCLK y TXUSRCLK2 para la transmisión, y RXUSRCLK y RXUSRCLK2 para la recepción. En este diseño de ejemplo se muestra una instanciación (instantiation) del MGT.

Casi toda la interfaz con el tejido lógico es síncrona con TXUSRCLK2 o RXUSRCLK2 (según la dirección). Las otras dos entradas, TXUSRCLK y RXUSRCLK, se utilizan solo internamente en algunas partes del PCS.

TXUSRCLK suele ser la misma señal de reloj que TXUSRCLK2. Sin embargo, los MGT de las FPGA de AMD tienen una funcionalidad que permite que la palabra paralela utilizada en la interfaz con el tejido lógico tenga el doble de anchura que dentro del PCS. Cuando se utiliza esta funcionalidad, la frecuencia de TXUSRCLK es el doble que la de TXUSRCLK2. Esta es otra razón más para usar un PLL del tejido lógico.

El mismo principio se aplica a RXUSRCLK y RXUSRCLK2.

Resumen

Esta página ha destacado brevemente algunos temas relacionados con los relojes de un MGT. Aun así, es necesario conocer las características y limitaciones específicas del MGT para tomar buenas decisiones sobre el uso de sus recursos de reloj. Esperamos que las explicaciones de esta página ayuden a entender cómo se supone que funcionan los relojes de un MGT y cómo interactúan entre sí.

Con esto concluye la séptima página de esta serie sobre los MGT. La página siguiente cierra esta serie con una discusión sobre el control de flujo (flow control).

Esta página se ha traducido del inglés mediante traducción automática. En caso de duda, consulta el texto original.
Copyright © 2021-2026. All rights reserved. (dcc38493)