-
Kintex UltraScale+ FPGA 보드를 200달러에 구입해 개발 플랫폼으로 활용하는 실험 소개임
- 이 보드는 공식 문서나 보증 없이 판매되어 JTAG 디버깅 및 초기 설정에 도전 과제가 있음
- OpenOCD와 Segger JLink를 활용해 독자적으로 FPGA 구성 및 디버깅 환경 구현 가능성 탐색함
- 중고 FPGA의 PCIe/이더넷 인터페이스 검증 및 핀 배치 확인, 시스템 모니터링 등이 실험 목표임
-
초기화 및 JTAG 연결, 스캔 체인 파악, 온도/전압 모니터링까지 단계별 절차와 문제 해결 경험을 정리함
들어가며
- 필자는 대규모 프로젝트의 프로토타이핑을 위해 강력한 FPGA, 특히 Xilinx Virtex 계열의 UltraScale+를 원했으나, 비용 문제와 Vivado 엔터프라이즈 라이선스 부담으로 WebPack 지원 Kintex UltraScale+ 칩(XCKU3P, XCKU5P)으로 선택을 좁힘
- 해당 칩들도 취미용 수준을 넘어 LUTs와 GTY 트랜시버 등 높은 사양을 제공함
- 최소 2개의 SFP+ 혹은 1개의 QSFP, JTAG, PCIe x8 이상의 조건을 충족하는 개발 보드가 필요했으며, 직접 설계, Alinx 제품 구매, 중고 시장 탐색 중 Ebay에서 Alibaba Cloud 가속기 FPGA 보드를 200달러에 구매함
- 구매한 보드는 문서 지원이 전무하고 정상 동작 여부도 미지수였으나, 저렴한 가격에 Kintex UltraScale+ 보드를 해킹하는 데 매력을 느낌
디버거 도전과제
-
Xilinx의 UG908 문서에 따르면 권장 JTAG 프로브로 FPGA를 구성/디버깅하는 것이 일반적이나, 고가의 공식 프로브 대신 오픈소스 대안(OpenOCD 등)을 시도함
- Xilinx의 공식 툴체인(ILA 등)을 포기하는 대신, JTAG USER 레지스터 기반 자체 디버깅 로직을 개발할 수 있음
- OpenOCD는 ARM/RISC-V용으로 주로 사용되지만 광범위한 프로브, JTAG 작업 세밀 제어, SVF 포맷 지원 등 FPGA에도 활용 가능
- UltraScale+ 시리즈 지원 관련 문서는 희박하나, JTAG 및 SVF 표준과 스캔 구조는 유효함
전체 계획
- Ebay에서 저렴하게 구매한 중고 FPGA 보드를 공식 지원 없는 오픈소스/비공식 프로브(OpenOCD, JLink 등)로 구성해 개발 플랫폼으로 활용하는 단계별 실험 계획임
- 각 단계는 보드의 장치 동작 확인 → JTAG 디버거 연결 → 핀 배치 찾기 → 비트스트림 전송 단계로 진행됨
1단계 - 보드 정상 동작 확인
- Flash 메모리가 지워지지 않았다면, 이전 사용자 비트스트림을 통해 PCIe 엔드포인트 식별 또는 SFP PHY 이더넷 신호 유무로 동작 여부를 1차 확인할 수 있음
2단계 - JTAG 디버거 연결
- JTAG 인터페이스 핀 위치 및 연결된 디바이스 수, Daisy chain 현황 등 파악 필요
- FPGA의 JTAG 시스템 레지스터(특히 SYSMON)를 통해 온도/전압 실시간 모니터링도 활용 가능, openOCD의 지원 확대도 기대됨
3단계 - 핀배치(핀아웃) 파악
- 외부 클럭원 종류/주파수/연결핀, SFP 및 PCIe와 연결된 트랜시버 정보 등 실물 회로 분석 필요
4단계 - 비트스트림 쓰기
- JTAG을 통한 임시 구성(bypass Flash), openOCD virtex2 + pld 드라이버 또는 Vivado에서 생성한 SVF 재생 방식 활용 계획
- Vivado → SVF 전환 전체 플로우 자동화 예정
보드 수령 및 초기 테스트
- Alibaba Cloud 가속기 출신 Kintex UltraScale+ FPGA(XCKU3P-FFVB676) 보드 및 SFP28 25G 후아웨이 트랜시버, OS2 패치 케이블 등 동봉품 수령
- 보드는 다소 사용감이 있으나 구성품 및 PCIe/SFP 상태는 양호함
스탠드얼론 전원 확인
- PCIe-USB 어댑터로 간단히 전원 주입 및 LED/HW 발열로 전원 유무 1차 확인
PCIe 인터페이스 실험
- Raspberry Pi 5의 PCIe Gen2.0 x1 외부 인터페이스를 활용해 FPGA(Gen3.0, x8 지원)를 테스트하면, 역호환성으로 정상 인식 기대됨
- 리눅스 dmesg 로그 상 PCIe Bridge, endpoint(이더넷 유형)로 보드 인식됨; 베타적 vendor/device id 지정으로 OS 충돌 방지
- lspci -vvv 명령으로 전체 PCIe 장치 상태 확인: 본 보드가 Gen3.0 x8 지원 속성이 명시되어 있으나, 실제 Pi와 연결 시 bandwidth/speed가 Gen2.0 x1로 다운그레이드됨(Bridge 한계 및 실제 물리 연결 제한 때문)
- 이를 통해 FPGA 보드 PCIe 인터페이스 정상 동작 확인
JTAG 인터페이스
- Xilinx FPGA는 JTAG로 내부 CMOS Configuration Latch(CCL)를 SRAM 방식으로 갱신/로드 가능
- 실물 보드의 JTAG 인터페이스는 표준 4선(TCK/TMS/TDI/TDO) 및 전원/접지 신호로 구성됨; 리셋은 Xilinx FSM을 통해 구현 가능
- 실제 핀 배열은 표준과 달라 별도 배선 필요
Segger JLink 활용
- AMD 공식 JTAG 프로그래머 미보유 상태에서 Segger JLink를 OpenOCD와 함께 사용
- JTAG은 4개의 GPIO만 있으면 구성이 가능하므로, 임기응변 실험에 적합
- JLink → FPGA 보드간 배선 도식 제공, 브레드보드용 점퍼와 긴 신호 지연 발생 감안해 TCK(클럭) 속도를 1~10MHz로 제한 설정
OpenOCD 환경
- OpenOCD는 다양한 프로브/보드를 지원하는 오픈소스 on-chip 디버거임
- 표준 SVF 포맷 지원(Vivado와 연동), 회로 오픈소스화로 문제 발생 시 직접 분석/패치 용이성 확보
- 최신 OpenOCD(0.12.0+dev)와 JLink 라이브러리를 직접 빌드하여 사용
JTAG Scan Chain 확인 및 IDCODE 체크
- 보드 회로도를 알 수 없는 상태에서 OpenOCD의 자동 스캔 기능으로 JTAG 체인 내 디바이스/IDCODE 탐색
- 본 보드는 Xilinx KU3P의 IDCODE(0x04a63093)와 일치 확인됨
- IR길이(명령 레지스터 길이 6비트)까지 수동 지정하여 정상 탐지
- 최종적으로 보드 JTAG scan chain이 정리됨
SYSMON 시스템 모니터
- Xilinx 구세대는 XADC, UltraScale+ 계열은 SYSMON4로 온도/전압 측정 기능 내장
- openOCD 기본은 SYSMON JTAG 연동 미지원, 직접 추가 필요
- SYSMON(DRP) 명령 전송 및 status 레지스터을 통한 온도/전압 실시간 확인 기능까지 스크립트로 해킹할 수 있음
이상의 과정을 통해, 공식 지원 없는 구형 Alibaba Cloud FPGA 가속기 보드를 저렴하게 구해 오픈소스 도구 만으로 디버깅 및 활용 기반(PCIe/JTAG 인터페이스, 시스템 모니터링) 정립 경험을 기록함