Árbol de relojes y presupuesto de jitter en FPGA: por qué su enlace de alta velocidad sigue fallando
PCIe se cae de vez en cuando, JESD204B no logra bloquear, el enlace de vídeo parpadea: a menudo no es el código RTL, es el diseño de relojes. Los transceptores de alta velocidad del FPGA son extremadamente sensibles al jitter del reloj de referencia, y cada etapa del árbol de relojes —oscilador → buffer de reloj → red global del FPGA— añade jitter. Este artículo explica cómo calcular el presupuesto de jitter, diseñar el árbol de relojes y evitar las trampas más habituales.
1. Por qué los enlaces de alta velocidad temen al jitter
Los transceptores de alta velocidad del FPGA (GTP/GTH/GTY) usan recuperación de reloj embebida (CDR), pero la calidad del reloj recuperado depende del reloj de referencia. Un jitter excesivo del reloj de referencia provoca:
- Degradación del BER de PCIe: un jitter RMS del reloj de referencia > 1 ps puede hacer que el BER de Gen3 pase de 1e-12 a 1e-8.
- Fallo de sincronización JESD204B: un jitter excesivo del SYSREF impide alinear el LMFC; el enlace simplemente no bloquea.
- Parpadeo del enlace de vídeo: el jitter del reloj de píxel desplaza los puntos de muestreo, provocando jitter o bandas horizontales.
- Pérdida de margen de temporización DDR: el jitter del reloj se come el margen de setup/hold, con errores de memoria a alta temperatura.
Fórmula clave: el jitter es aditivo; cada etapa del árbol de relojes añade jitter; el jitter total es el RSS (raíz cuadrada de la suma de cuadrados), no una suma simple.
2. Cómo calcular el presupuesto de jitter
Tomemos PCIe Gen3 x8 como ejemplo: el jitter RMS del reloj de referencia debe ser ≤ 1 ps (integración de 12 kHz a 20 MHz). Cálculo etapa por etapa:
| Etapa del árbol de relojes | Jitter (RMS) | Notas |
|---|---|---|
| Oscilador de cristal (XO) | 0,3 ps | OCXO de bajo ruido de fase, 100 MHz |
| Buffer de reloj | 0,5 ps | Si5341 o serie 8T49N |
| Pista de PCB + vías | 0,2 ps | Microstrip de 5 cm, impedancia continua |
| Red global de relojes del FPGA | 0,3 ps | MRCC → BUFG → SERDES |
| Jitter total (RSS) | √(0,3²+0,5²+0,2²+0,3²) ≈ 0,67 ps | Por debajo de la especificación de 1 ps, 33 % de margen |
Qué hacer si se supera el presupuesto
Si el jitter total calculado es 1,2 ps, superando el requisito de 1 ps de PCIe Gen3, optimice en este orden de prioridad:
1. Cambie a un oscilador de menor jitter: un TCXO común de 1 ps pasa a un OCXO de 0,3 ps, mejoría inmediata.
2. Mejor buffer de reloj: elimine buffers redundantes, use un IC de reloj dedicado (Si5341 frente a buffer GPIO).
3. Acorte la pista de PCB: oscilador cerca del FPGA, pista ≤ 5 cm, evite vías.
4. Desacoplamiento de alimentación adecuado: el LDO alimenta el IC de reloj por separado, no compartido con los circuitos digitales.
3. Estructura del árbol de relojes del FPGA
El árbol de relojes interno del FPGA no es una línea única, sino un buffer de varias etapas:
| Etapa | Recurso | Propósito | Jitter añadido |
|---|---|---|---|
| 1. Entrada externa | Pin de reloj (MRCC/SRCC) | Oscilador / entrada de reloj externo | — |
| 2. MMCM/PLL | Gestor de reloj de modo mixto | Multiplicar, dividir, ajustar fase | ≈ 0,1~0,3 ps |
| 3. Buffer global | BUFG / BUFGCE | Conducir toda la matriz lógica del FPGA | ≈ 0,1 ps |
| 4. Reloj regional | BUFH / BUFR | Dominio de reloj local, bajo jitter | ≈ 0,05 ps |
| 5. Reloj SERDES | CPLL / QPLL | Reloj de referencia del transceptor de alta velocidad | ≈ 0,2 ps |
Reglas clave
- Los relojes de los transceptores de alta velocidad deben usar pines dedicados: los pines de reloj de referencia GTH/GTY son fijos, no se puede usar una E/S cualquiera.
- No encadene demasiadas etapas MMCM/PLL: dos PLL en cascada añaden jitter; una etapa es mejor que dos.
- Cruce los dominios de reloj con FIFO: no cruce dominios en lógica; la metaestabilidad provoca errores aleatorios.
- El reloj del SDR/ADC debe ser de la misma fuente que el reloj de datos: JESD204B necesita que el Device Clock y el SYSREF sean de la misma fuente y estén sincronizados.
4. Tres trampas de reloj habituales
Trampa 1: el oscilador demasiado cerca de una fuente conmutada
El rizado del DC-DC (nivel mV) modula la salida del oscilador, empeorando el jitter 2~3 veces. Solución: mantenga el oscilador alejado del DC-DC, utilice un LDO para alimentación independiente, y añada una ferrita.
Trampa 2: el SYSREF de JESD204B no está alineado
El SYSREF alinea el LMFC (reloj local de trama múltiple). Si el SYSREF y el Device Clock no son de la misma fuente, o el skew de pista es excesivo, el enlace pierde el bloqueo de forma aleatoria. Solución: el SYSREF y el Device Clock salen del mismo IC de reloj, con longitudes de pista igualadas.
Trampa 3: usar una E/S cualquiera como reloj de referencia del SERDES
Los transceptores de alta velocidad del FPGA tienen pines de reloj de referencia dedicados (por ejemplo, MGTREFCLK0P/N). Si conecta el oscilador a una E/S común, podrá multiplicar el reloj para la lógica, pero la CDR del SERDES no bloqueará: el jitter incluye el ruido de la red global de relojes.
La mitad de la fiabilidad de un enlace de alta velocidad en FPGA viene del diseño lógico, y la otra mitad del diseño de relojes. Calcule bien el presupuesto de jitter, construya correctamente el árbol de relojes, y haga bien el desacoplamiento de alimentación: entonces muchas «caídas intermitentes del enlace» desaparecen. El reloj no es magia: es un problema de ingeniería que se puede calcular.
