Árvore de Clock FPGA e Orçamento de Jitter: Por Que Seu Link de Alta Velocidade Continha Falhando
O PCIe cai de vez em quando, o JESD204B não trava, o link de vídeo pisca — muitas vezes não é o código RTL, é o design do clock. Os transceptores de alta velocidade do FPGA são extremamente sensíveis ao jitter do clock de referência, e cada estágio da árvore de clock do oscilador → buffer de clock → rede global do FPGA adiciona jitter. Este artigo explica como calcular o orçamento de jitter, projetar a árvore de clock e evitar armadilhas comuns.
1. Por Que Links de Alta Velocidade Têmem Jitter
Os transceptores de alta velocidade do FPGA (GTP/GTH/GTY) usam recuperação de clock embutida (CDR), mas a qualidade do clock recuperado depende do clock de referência. Jitter excessivo no clock de referência causa:
- Degradação de BER no PCIe: jitter RMS do clock de referência > 1 ps, o BER do Gen3 pode piorar de 1e-12 para 1e-8.
- Falha de sync no JESD204B: jitter SYSREF excessivo, o LMFC não alinha, o link simplesmente não trava.
- Piscada no link de vídeo: o jitter do pixel clock desloca os pontos de amostragem, causando tremulação ou faixas horizontais.
- Perda de margem de temporização DDR: o jitter de clock come a margem de setup/hold, erros de memória em alta temperatura.
Fórmula chave: o jitter é aditivo — cada estágio da árvore de clock adiciona jitter; o jitter total é o RSS (raiz quadrada da soma dos quadrados), não a soma simples.
2. Como Calcular o Orçamento de Jitter
Pegue PCIe Gen3 x8 como exemplo: o jitter RMS do clock de referência deve ser ≤ 1 ps (integração de 12 kHz a 20 MHz). Cálculo estágio por estágio:
| Estágio da árvore de clock | Jitter (RMS) | Observações |
|---|---|---|
| Oscilador de cristal (XO) | 0,3 ps | OCXO de baixo phase noise, 100 MHz |
| Buffer de clock | 0,5 ps | Si5341 ou série 8T49N |
| Rastreamento de PCB + vias | 0,2 ps | Microstrip 5 cm, impedância contínua |
| Rede global de clock do FPGA | 0,3 ps | MRCC → BUFG → SERDES |
| Jitter total (RSS) | √(0,3²+0,5²+0,2²+0,3²) ≈ 0,67 ps | Abaixo da spec de 1 ps, 33% de margem |
E se o Orçamento For Ultrapassado
Se o jitter total calcula 1,2 ps, ultrapassando o requisito de 1 ps do PCIe Gen3, otimize nesta ordem de prioridade:
1. Trocar para oscilador de menor jitter: TCXO comum 1 ps → OCXO desce para 0,3 ps, melhoria imediata.
2. Buffer de clock melhor: remover buffers redundantes, usar IC dedicado de clock (Si5341 vs buffer de GPIO).
3. Encurtar o rastreamento de PCB: oscilador perto do FPGA, rastreamento ≤ 5 cm, evitar vias.
4. Desacoplamento de potência adequado: LDO alimenta o IC de clock separadamente, não compartilhado com circuitos digitais.
3. Estrutura da Árvore de Clock do FPGA
A árvore de clock interna do FPGA não é uma linha única, mas bufferização multiestágio:
| Estágio | Recurso | Propósito | Jitter adicionado |
|---|---|---|---|
| 1. Entrada externa | Pino de clock (MRCC/SRCC) | Oscilador / entrada de clock externo | — |
| 2. MMCM/PLL | Mixed-mode clock manager | Multiplicar, dividir, ajustar fase | ≈ 0,1~0,3 ps |
| 3. Buffer global | BUFG / BUFGCE | Dirige toda a matriz lógica do FPGA | ≈ 0,1 ps |
| 4. Clock regional | BUFH / BUFR | Domínio de clock local, baixo jitter | ≈ 0,05 ps |
| 5. Clock SERDES | CPLL / QPLL | Clock de referência do transceptor de alta velocidade | ≈ 0,2 ps |
Regras Chave
- Clocks de transceptor de alta velocidade precisam usar pinos dedicados: os pinos de clock de referência GTH/GTY são fixos, não dá para usar I/O comum.
- Não cascatear estágios demais de MMCM/PLL: dois PLLs cascateados somam jitter; um estágio é melhor que dois.
- Cruce domínios de clock com FIFO: não cruze domínios na lógica; metaestabilidade causa erros aleatórios.
- Clock de SDR/ADC precisa ser da mesma fonte que o clock de dados: o JESD204B precisa de Device Clock e SYSREF na mesma fonte e sincronizados.
4. Três Armadilhas Comuns de Clock
Armadilha 1: Oscilador Muito Perto da Fonte Chaveadora de Potência
O ripple do DC-DC (nível mV) modula a saída do oscilador, piorando o jitter em 2~3×. Correção: mantenha o oscilador longe do DC-DC, use LDO para alimentação separada, adicione bead de ferrite.
Armadilha 2: SYSREF do JESD204B Desalinhado
O SYSREF alinha o LMFC (local multi-frame clock). Se SYSREF e Device Clock não são da mesma fonte, ou o skew do rastreamento é grande demais, o link perde o trave de forma aleatória. Correção: SYSREF e Device Clock saem do mesmo IC de clock, comprimentos de rastreamento casados.
Armadilha 3: Usar I/O Comum como Clock de Referência do SERDES
Os transceptores de alta velocidade do FPGA têm pinos dedicados de clock de referência (por exemplo, MGTREFCLK0P/N). Se você conectar o oscilador a um I/O comum, pode multiplicar o clock para a lógica, mas o CDR do SERDES não trava — o jitter inclui o ruído da rede global de clock.
Metade da confiabilidade do link de alta velocidade no FPGA vem do design de lógica, metade do design de clock. Calcule o orçamento de jitter corretamente, construa a árvore de clock direito e faça bem o desacoplamento de potência — muitos “cascos intermitentes de link” desaparecem. Clock não é mágica; é um problema de engenharia que você pode calcular.
