FPGA의 밑면을 보면 수많은 I/O 핀들이 격자(Grid) 형태로 맵핑되어 있습니다. FPGA의 가장 큰 장점은 개발자가 원하는 대로 핀(Pin)을 자유롭게 할당해 사용할 수 있다는 점입니다. 하지만 모든 내부 I/O를 100% 내 마음대로 사용할 수 있는 것은 아닙니다. 칩 구동에 필수적인 전용 핀들이 존재하고, 내부 하드웨어 로직의 위치나 고속 통신용 I/O 등 물리적인 제약 요소들이 있기 때문입니다.
상위 칩으로 가면 GT 트랜시버 관련 Dedicated Pin이 추가되지만, 여기선 제가 사용하던 Xilinx의 Spartan-7을 기준으로 설명하겠습니다.
아래 두 사진을 보겠습니다.
첫 번째 사진은 FPGA의 bank가 어떻게 나누어져있나에 대한 부분이고, 두 번째 사진은 각 위치의 핀은 어떤걸 의미하는 지에 대한 부분입니다.

위 그림에서는 각 뱅크가 어떻게 나누어져 있는지에 대한 부분을 쉽게 확인할 수 있고

위 그림에서는 각 Pin이 뭘 의미하는지를 알 수 있습니다.
FPGA Ball Map을 보면, 크게 4가지로 분류됩니다.
- User I/O Pins : GPIO 같은 느낌
- Multi-Function Pins : GPIO도 되고, 아니면 정해진 용도로 사용할 수도 있고.
- Dedicated Pins : 정해진 용도가 있어서 수정이 불가.
- Other Pins : GND, 특정 부분에 대한 VCC
`_B`는 Active Low를 의미.
User I/O Pins
- `IO_LXXY_#`: 차동신호. L은 Pair(쌍), XX는 번호, Y는 P, N을 , #은 Bank 번호
- `IO_XX_#`: 일반적인 단일(Single-ended) I/O 핀.
Multi-Function Pins
- `ADV_B`, `FCS_B`,` FOE_B`, `FWE_B`, `CSI_B`, `DOUT_CSO_B`: 주로 BPI 또는 SPI 플래시 메모리와 통신해서 부팅 데이터를 가져올 때 사용하는 제어핀.
- `MOSI`: SPI 통신 시 데이터를 내보내는 핀 (Master Out Slave In).
- `PUDC_B`: 부팅이 진행되는 동안 내부 핀들의 풀업 저항을 켤지 말지 결정하는 핀.
- `RDWR_B`: SelectMAP 부팅 모드 등에서 데이터를 Read할지, Write할 지 방향 제어.
- `RS0-RS1`: 멀티부트 기능을 쓸 때, 플래시 메모리 안에서 어떤 주소의 펌웨어를 읽어올지 상위 주소를 지정하는 핀.
- `EMCCLK`: 부팅 시 외부에서 별도의 고속 클럭을 공급받아 Configuration 속도를 높이고 싶을 때 사용하는 클럭 입력 핀.
- `DQS`: 데이터 스트로브.
- `VRN/VRP`: DCI(Digitally Controlled Impedance) 종단 저항을 위한 기준 전압
- `VREF`: 입력 기준 전압
- `MRCC`: 외부 클럭을 내부 글로벌 클럭망으로 넣기 위한 입력 핀. 인접한 다른 클럭 영역까지 클럭을 전달할 수 있어 SRCC보다 유연합니다.
- `SRCC`: 외부 클럭을 내부 클럭망으로 넣기 위한 입력 핀. 주로 자신이 혹산 단일 클럭 영역을 커버하며, 글로벌 클럭으로 쓰려면 BUFG를 거쳐야 합니다.
- `AD0P/AD0N` ~ `AD15P/AD15N`: FPGA 내부 XADC(아날로그 디지털 변환기)로 들어가는 16쌍의 보조 아날로그 입력 채널
- `D00`-`D31`: 병렬 부팅 모드 (SelectMAP, BPI 등)에서 비트스트림을 받아들이는 최대 32비트의 데이터 버스 핀.
- `A00`-`A28`: BPI 플래시 메모리에서 데이터를 읽어올 때 Address를 지정해주는 핀.
Dedicated Pins
- `CCLK_0`: 부팅 시 동기화를 맞추는 Configuration CLK 핀.
- `CFGBVS_0`: Configuration Bank Voltage Select 핀으로, Bank0에 인가된 전원 (`VCCO_0`)이 3.3V/2.5V 계열인지, 1.8V/1.5V 계열인지 FPGA 내부 로직에 알려주는 핀. 이 핀을 VCCO에 묶을지 GND에 묶을지에 따라 내부 I/O 버퍼의 동작 전압 임계값이 설정됩니다.
- `DONE_0`: 부팅이 에러없이 성공적으로 완료되었음을 외부로 알려주는(High 출력) 핀.
- `DXP_0`, `DXN_0`: 칩 내부에 내장된 온도 측정 다이오드와 바로 연결된 핀이다. 외부 온도 모니터링 칩에 연결해서 칩의 온도를 아주 정밀하게 잴 수 있다.
- `GNDADC_0`: 내부 아날로그 회로(XADC)가 노이즈의 영향을 덜 받도록 따로 분리해 놓은 안라로그 전용 접지 핀.
- `INIT_B_0`: 전원이 켜지고 내부 메모리가 초기화되는 중이거나, 부팅 중 CRC 에러가 났을 때 Low로 떨어져서 상태를 알려주는 핀.
- `M0_0`, `M1_0`, `M2_0`: 부팅 모드(Master SPI, JTAG 등)을 결정하는 하드웨어 핀
- `PROGRAM_B_0`: 이 핀에 Low 신호를 주면 FPGA 내부가 초기화되고 비트스트림을 처음부터 다시 읽어오게 만드는 리셋핀.
- `TCK_0`, `TDI_0`, `TDO_0`, `TMS_0`: PC와 연결해 비트스트림을 다운로드하거나 ILA로 디버깅 할 때, 사용하는 표준 JTAG 4핀
- `VCCADC_0`: 아날로그 회로(XADC)를 위한 전용 아날로그 전원 공급 핀.
- `VCCBATT_0`: 비트스트림을 암호화했을 때, 전원이 꺼져도 칩 내부에 저장된 복호화 키가 날아가지 않도록 배터리를 연결하는 핀.
- `VP_0`, `VN_0`: XADC를 위한 메인 전용 아날로그 차동 입력 핀. (Multi-Function은 보조 입력)
- `VREFP_0`, `VREFN_0:` 아날로그-디지털 변환의 정확도를 높이기 위해, 깨끗하고 정밀한 외부 기준 전압을 넣어주는 핀.
Other Pins
- `VCCINT`: FPGA 내부 코어 로직(LUT, FF)을 구동하는 가장 핵심적이고 전압이 낮은 전원.
- `VCCAUX`: Configuration 로직, JTAG, 내부 타이밍 회로(MMCM/PLL)를 위한 보조 전원.
- `VCCO_#`: I/O 뱅크의 입출력 전압을 결정하는 전원.
- `VCCBRAM`: 내부 메모리(Block RAM) 블록 전용 전원.
- `GND`: 접지
- `NC`: Not Connected.
이것도 Xilinx에서 가장 낮은 라인업인 Spartan에 있는 I/O니까 전부 알고 있는게 좋을 것 같긴 합니다.
'Circuit Design > 🔥HDL' 카테고리의 다른 글
| [FPGA] LVDS 기본 구조 (0) | 2026.06.03 |
|---|---|
| [설계 용어] PLL vs MMCM (Clocking Wizard) (0) | 2026.03.19 |
| [설계 개념] 8b/10b, CDR, PLL (0) | 2026.02.03 |
| [Vivado] IP : FIFO Generator (3) | 2025.11.09 |
| [설계 용어] CDC(Clock Domain Crossing) (0) | 2025.09.18 |