2026. 6. 17. 21:39ㆍ기초지식
PCIe란?
PCIe(PCI Express)는 Intel이 2003년 PCI/PCI-X를 대체하기 위해 도입한 직렬(serial) 고속 인터페이스 표준이다. PCI가 공유 버스 구조였던 것과 달리, PCIe는 Point-to-Point 전용 링크 구조를 쓴다. 현재 서버, PC, GPU, NVMe SSD, 네트워크 카드 등 사실상 모든 고속 인터페이스에 사용된다.
PCI vs PCIe - 핵심 차이
PCI (구조)
- 공유 병렬 버스. 여러 장치가 같은 버스를 공유
- 버스 폭: 32bit / 64bit, 클락: 33MHz / 66MHz
- 최대 대역폭: 32bit@33MHz = 133MB/s
- 버스를 공유하므로 한 번에 하나의 장치만 통신 가능
- 버스 마스터링, 중재(arbitration) 필요
PCIe (구조)
- Point-to-Point 직렬 링크. 장치마다 전용 링크
- 차동 신호 쌍(differential pair) 기반, 양방향 동시 전송(Full Duplex)
- 레인(Lane) 수에 따라 대역폭 선형 확장 (x1, x2, x4, x8, x16)
- 중재 불필요, 각 링크 독립 동작
물리 구조 - Lane과 Link
Lane
PCIe의 기본 물리 단위다. 하나의 Lane은 TX 차동 쌍 1개 + RX 차동 쌍 1개로 구성된다. 즉 1 Lane = 4개 와이어(TX+, TX-, RX+, RX-)다. 각 Lane은 동시에 양방향 전송이 가능하다(Full Duplex).
Link
1개 이상의 Lane이 묶인 단위다. Link Width는 x1, x2, x4, x8, x16으로 협상(Link Training)을 통해 결정된다. 대역폭은 Lane 수에 비례해 증가한다.
// Link Width 예시
// x1 = Lane 1개 (NVMe M.2 슬롯 등)
// x4 = Lane 4개 (NVMe U.2, CXL 등)
// x8 = Lane 8개 (NIC, 일부 GPU)
// x16 = Lane 16개 (GPU 그래픽 카드)
Port
장치에서 Link와 연결되는 논리적 인터페이스다. Root Port(RC 측)와 Downstream Port(Switch 측), Upstream Port(Endpoint 측)로 구분한다.
- PCIe에서 Upstream/Downstream은 data 흐름 방향이 아니라 topology 기준의 방향이다.
즉, Data가 CPU → SSD로 가도, Data가 SSD → CPU로 가도 Port 명칭은 바뀌지 않는다.
차동 신호 (Differential Signaling)
PCIe는 단일 신호선 대신 +/-로 쌍을 이루는 차동 신호를 쓴다. 수신단에서 두 신호의 차이(D+ - D-)로 데이터를 판단하기 때문에 공통 노이즈(Common Mode Noise)가 제거된다. 고속 직렬 전송에서 노이즈 마진을 확보하는 핵심 기술이다.
PCIe Gen 1~5는 NRZ(Non-Return-to-Zero) 인코딩을 쓰고,
Gen 6부터는 PAM4(Pulse Amplitude Modulation 4-level)로 전환해 같은 주파수에서 2배 데이터를 전송한다.
Gen 세대별 속도
PCIe는 세대마다 전송 속도(GT/s, Giga-Transfers per second)가 두 배씩 증가했다. 실제 대역폭은 인코딩 오버헤드를 제외한 값이다.
// Per-Lane 대역폭 (단방향 기준)
// Gen 1 : 2.5 GT/s, 인코딩 8b/10b -> 유효 250 MB/s
// Gen 2 : 5.0 GT/s, 인코딩 8b/10b -> 유효 500 MB/s
// Gen 3 : 8.0 GT/s, 인코딩 128b/130b -> 유효 ~985 MB/s
// Gen 4 : 16.0 GT/s, 인코딩 128b/130b -> 유효 ~1969 MB/s
// Gen 5 : 32.0 GT/s, 인코딩 128b/130b -> 유효 ~3938 MB/s
// Gen 6 : 64.0 GT/s, PAM4 + 242b/256b -> 유효 ~7563 MB/s
// x16 링크 양방향 총 대역폭
// Gen 4 x16: ~63 GB/s (단방향 ~31.5 GB/s)
8b/10b 인코딩 (Gen 1/2)
8bit 데이터를 10bit 심볼로 변환한다. DC 밸런스와 클락 복원을 위해 오버헤드가 20%다. 즉 유효 대역폭은 전송 속도의 80%다.
128b/130b 인코딩 (Gen 3/4/5)
128bit 데이터를 130bit 블록으로 전송한다. 오버헤드가 약 1.5%로 대폭 줄었다. 대신 Scrambling으로 DC 밸런스를 유지한다.
PAM4 + FEC (Gen 6)
한 심볼에 2bit를 실어 같은 주파수에서 2배 데이터 전송이 가능하다. 신호 마진이 줄어드는 대신 FEC(Forward Error Correction)를 추가해 오류를 보정한다.
PCIe Topology
PCIe는 계층적인 트리 구조로 장치를 연결한다.
1. Root Complex (RC)
CPU/메모리 서브시스템과 PCIe 패브릭을 연결하는 최상위 컴포넌트다. 내부에 Root Port를 하나 이상 가진다. 시스템 내 모든 PCIe 트랜잭션의 시작점이 된다.
2. Endpoint (EP)
실제 기능을 수행하는 장치다. NVMe SSD, GPU, NIC 등이 해당한다. Downstream 방향에서 Link를 통해 RC나 Switch에 연결된다.
3. Switch
여러 Downstream Port를 가지는 PCIe 스위치다. 하나의 Upstream Port와 다수의 Downstream Port로 구성된다. 패킷을 Downstream/Upstream 방향으로 라우팅한다. 내부적으로는 가상 PCI-to-PCI Bridge(PPB)로 동작한다.
4. Bridge
PCIe와 다른 버스(PCI, PCI-X 등)를 연결하는 컴포넌트다. 현재는 Legacy 호환 용도로만 쓰인다.
// 일반적인 서버 토폴로지 예시
// CPU (Root Complex)
// |- Root Port 0 -- [NVMe SSD x4]
// |- Root Port 1 -- [GPU x16]
// |- Root Port 2 -- [PCIe Switch]
// |- Downstream Port 0 -- [NIC x8]
// |- Downstream Port 1 -- [NVMe SSD x4]
// |- Downstream Port 2 -- [NVMe SSD x4]
PCIe 계층 구조
PCIe 스택은 3개 계층으로 구성된다. 상위 계층일수록 소프트웨어에 가깝고, 하위 계층일수록 물리 하드웨어에 가깝다.
Transaction Layer (트랜잭션 계층)
TLP(Transaction Layer Packet)를 생성/처리한다. 메모리 Read/Write, I/O, Configuration, Message 트랜잭션을 담당한다. Flow Control, 완료(Completion) 처리도 이 계층이다.
Data Link Layer (데이터 링크 계층)
DLLP(Data Link Layer Packet)를 처리한다. TLP의 신뢰성 있는 전달을 보장하는 ACK/NAK 메커니즘, Replay Buffer, 시퀀스 번호 관리를 담당한다. Flow Control Credit도 이 계층에서 교환한다.
Physical Layer (물리 계층)
실제 비트를 전기 신호로 변환한다. 인코딩/디코딩(8b/10b, 128b/130b), Scrambling, 차동 신호 구동, 클락 복원, Lane 역전(Lane Reversal), Polarity Inversion 처리를 담당한다.
// 패킷 계층 관계
// [Transaction Layer] : TLP 생성
// |
// [Data Link Layer] : TLP에 Sequence#, LCRC 추가 -> DLLP 교환
// |
// [Physical Layer] : 인코딩, Scrambling, 직렬화, 전기 신호 출력
Link Training & LTSSM
PCIe Link는 전원 인가 후 자동으로 Link Training을 수행해 통신 가능한 상태가 된다. 이 과정을 LTSSM(Link Training and Status State Machine)이 관리한다.
주요 LTSSM 상태
Detect - 상대 장치 존재 여부 확인. 수신단 임피던스 감지
Polling - 비트 동기화(Bit Lock), 심볼/블록 동기화(Symbol Lock). Training Sequence(TS1/TS2) 교환
Configuration - Lane 수와 Link 번호 협상. Lane to Lane de-skew 수행
L0 - 정상 동작 상태. 모든 TLP/DLLP 전송 가능
Recovery - 오류 발생 또는 속도 변경(Speed Change) 시 재훈련
L0s - 저전력 상태. TX를 Electrical Idle로 전환. 빠른 복귀 가능(~수백 ns)
L1 - 더 깊은 저전력. 양쪽 모두 Electrical Idle. 복귀 시간 ~수 us
L2/L3 - 전원 차단에 가까운 상태. 복귀에 링크 재훈련 필요
// LTSSM 상태 전이 (요약)
// Detect -> Polling -> Configuration -> L0 (정상 동작)
// |
// 오류/속도변경 -> Recovery -> L0
// |
// 유휴 -> L0s / L1 / L2
Training Sequence에서는 TS1, TS2 ordered set을 교환하면서 Lane 번호, Link 번호, 속도(Data Rate), FTS(Fast Training Sequence) 개수 등을 협상한다.
PCIe 번호 체계
PCIe 장치는 BDF(Bus:Device:Function) 번호로 식별된다. 시스템 부팅 시 BIOS/OS가 PCIe 버스를 스캔하며 번호를 할당한다.
Bus Number - 8bit, 최대 256개 버스
Device Number - 5bit, 버스당 최대 32개 장치
Function Number - 3bit, 장치당 최대 8개 기능(Multi-Function Device)
// BDF 예시
// 0000:03:00.0 = Domain 0, Bus 3, Device 0, Function 0
// (lspci 출력 형식)
📚 다음 글
'기초지식' 카테고리의 다른 글
| [PCIe] Data Link Layer 완전 정리 | DLLP, ACK/NAK, Retry Buffer, 시퀀스 번호 (0) | 2026.06.17 |
|---|---|
| [PCIe] Transaction Layer 완전 정리 | TLP 구조, Header, Routing, Completion (0) | 2026.06.17 |
| [반도체 설계] STA(Static Timing Analysis) 완전 정리 | Setup/Hold, Slack, PVT 코너, SDC (0) | 2026.04.22 |
| [반도체 설계] CDC(Clock Domain Crossing) 완전 정리 | Metastability, 동기화 기법, Async FIFO (0) | 2026.04.20 |
| 스택(Stack)과 힙(Heap) 메모리 영역 (0) | 2025.08.17 |