FPGA 클록 트리와 지터 버짓: 고속 링크가 계속 실패하는 이유
PCIe가 가끔 끊기고, JESD204B가 록되지 않고, 영상 링크가 흔들린다—원인이 RTL 코드가 아니라 클록 설계인 경우가 많다. FPGA 고속 트랜시버는 기준 클록 지터에 매우 민감하며, 오실레이터 → 클록 버퍼 → FPGA 글로벌 네트워크로 이어지는 클록 트리의 각 단이 지터를 더한다. 이 글에서는 지터 버짓 계산법, 클록 트리 설계, 흔한 함정을 설명한다.
1. 고속 링크가 지터를 두려워하는 이유
FPGA 고속 트랜시버(GTP/GTH/GTY)는 임베디드 클록 복원(CDR)을 쓰지만, 복원 클록의 품질은 기준 클록에 좌우된다. 기준 클록 지터가 과도하면:
- PCIe BER 저하: 기준 클록 RMS 지터 > 1 ps이면 Gen3 BER이 1e-12에서 1e-8로 나빠질 수 있다.
- JESD204B 동기화 실패: SYSREF 지터가 과도하면 LMFC가 정렬되지 않아 링크가 록되지 않는다.
- 영상 링크 흔들림: 픽셀 클록 지터가 샘플링 포인트를 옮려 흔들림이나 수평 띠를 만든다.
- DDR 타이밍 마진 손실: 클록 지터가 셋업/홀드 마진을 잠식해 고온에서 메모리 오류가 생긴다.
핵심 공식: 지터는 가산적이다—클록 트리의 각 단이 지터를 더하며, 총지터는 단순 합이 아니라 RSS(제곱합의 제곱근)다.
2. 지터 버짓 계산법
PCIe Gen3 x8을 예로 들면, 기준 클록 RMS 지터는 ≤ 1 ps(12 kHz ~ 20 MHz 적분)여야 한다. 단계별 계산:
| 클록 트리 단 | 지터 (RMS) | 비고 |
|---|---|---|
| 수정 발진기 (XO) | 0.3 ps | 저위상 잡음 OCXO, 100 MHz |
| 클록 버퍼 | 0.5 ps | Si5341 또는 8T49N 시리즈 |
| PCB 배선 + 비아 | 0.2 ps | 마이크로스트립 5 cm, 연속 임피던스 |
| FPGA 글로벌 클록 네트워크 | 0.3 ps | MRCC → BUFG → SERDES |
| 총지터 (RSS) | √(0.3²+0.5²+0.2²+0.3²) ≈ 0.67 ps | 1 ps 스펙 이하, 마진 33% |
버짓을 초과하면
총지터가 1.2 ps로 계산되어 PCIe Gen3의 1 ps 요건을 초과하면, 우선순위로 최적화한다:
- 저지터 발진기로 전환: 일반 TCXO 1 ps → OCXO는 0.3 ps까지, 즉각적 개선.
- 더 나은 클록 버퍼: 중복 버퍼를 제거하고 전용 클록 IC 사용(Si5341 vs GPIO 버퍼).
- PCB 배선 단축: 오실레이터를 FPGA에 가깝게 두고 배선 ≤ 5 cm, 비아 회피.
- 적절한 전력 디커플링: LDO가 클록 IC를 별도 공급하고 디지털 회로와 공유하지 않게 한다.
3. FPGA 클록 트리 구조
FPGA 내부 클록 트리는 단선이 아니라 다단 버퍼링이다:
| 단계 | 자원 | 용도 | 추가 지터 |
|---|---|---|---|
| 1. 외부 입력 | 클록 핀 (MRCC/SRCC) | 오실레이터/외부 클록 입력 | — |
| 2. MMCM/PLL | 혼합 모드 클록 매니저 | 배주, 분주, 위상 조정 | ≈ 0.1~0.3 ps |
| 3. 글로벌 버퍼 | BUFG / BUFGCE | FPGA 로직 어레이 전체 구동 | ≈ 0.1 ps |
| 4. 리저널 클록 | BUFH / BUFR | 로컬 클록 도메인, 저지터 | ≈ 0.05 ps |
| 5. SERDES 클록 | CPLL / QPLL | 고속 트랜시버 기준 클록 | ≈ 0.2 ps |
핵심 규칙
- 고속 트랜시버 클록은 전용 핀을 쓸 것: GTH/GTY 기준 클록 핀은 고정되어 있어 일반 IO를 쓸 수 없다.
- MMCM/PLL 단을 너무 많이 캐스케이드하지 말 것: PLL 2단 직렬은 지터를 더하며, 1단이 2단보다 낫다.
- FIFO로 클록 도메인을 넘을 것: 로직에서 도메인을 넘지 마라—메타스테이블리티가 임의 오류를 만든다.
- SDR/ADC 클록은 데이터 클록과 같은 소스일 것: JESD204B는 Device Clock과 SYSREF가 같은 클록 소스에서 나와 동기화되어야 한다.
4. 세 가지 흔한 클록 함정
함정 1: 오실레이터가 스위칭 전원에 너무 가까움
DC-DC 리플(mV 단위)이 오실레이터 출력을 변조시켜 지터를 2~3배 악화시킨다. 해결: 오실레이터를 DC-DC에서 떨어뜨리고, LDO로 별도 공급하며, 페라이트 비드를 추가한다.
함정 2: JESD204B SYSREF 미정렬
SYSREF는 LMFC(로컬 멀티프레임 클록)를 정렬시킨다. SYSREF과 Device Clock이 같은 소스에서 나오지 않거나 배선 길이 차이가 너무 크면 링크가 무작위로 록을 잃는다. 해결: SYSREF과 Device Clock을 같은 클록 IC에서 출력하고 배선 길이를 매칭한다.
함정 3: 일반 IO를 SERDES 기준 클록으로 사용
FPGA 고속 트랜시버에는 전용 기준 클록 핀이 있다(예: MGTREFCLK0P/N). 오실레이터를 일반 IO에 연결하면 로직용 클록은 배가할 수 있어도 SERDES CDR이 록되지 않는다—지터에 글로벌 클록 네트워크 잡음이 섞이기 때문이다.
FPGA 고속 링크 신뢰성의 절반은 로직 설계에서, 절반은 클록 설계에서 나온다. 지터 버짓을 제대로 계산하고, 클록 트리를 제대로 쌓고, 전력 디커플링을 잘 하면—많은 “간헐적 링크 끊김”이 사라진다. 클록은 마술이 아니라 계산 가능한 엔지니어링 문제다.
