Chapter 06

DDR·LPDDR·GDDR 인터페이스

5장에서 DRAM이 명령을 받아 데이터를 꺼내는 순서를 배웠다. 그런데 꺼낸 데이터는 몇 센티미터의 PCB 배선을 지나 프로세서까지 가야 한다. 초당 수십억 번 뒤집히는 전압이 선 위에서 반사되고, 번지고, 옆 선과 간섭하는 세계 — 메모리 인터페이스의 물리층을 이 장에서 다룬다. DDR5 한 핀의 비트 하나는 156 ps, 신호가 PCB 배선 위를 약 2.3 cm 가는 시간 동안만 존재한다.

칩 밖으로 나가는 선: 왜 인터페이스가 중요한가

1장에서 본 메모리 월(Memory Wall)은 결국 "DRAM 칩에서 프로세서로 초당 몇 바이트를 옮길 수 있는가"의 문제다. DRAM 코어 내부는 한 번의 활성화(ACT)로 칩당 1 KB(8,192비트)짜리 로우 전체를 센스 앰프에 올려놓을 만큼 병렬성이 풍부하다(4장). 병목은 칩 경계, 즉 패키지 핀과 PCB 배선이다. 핀 수는 패키지 크기와 비용 때문에 쉽게 늘릴 수 없으므로, 남은 방법은 핀 하나당 속도를 올리는 것이다.

핀 속도는 20여 년 동안 약 50배 빨라졌다. 2000년 무렵 SDR SDRAM(PC133)이 핀당 0.133 Gb/s였다면, 2024~2025년의 DDR5는 6.4~8.8 Gb/s, 그래픽용 GDDR7은 28~32 Gb/s에 이른다. 이 속도에서는 PCB 배선이 더 이상 '전선'이 아니라 전송선(transmission line)이 되고, 비트 하나가 선 위에 머무는 시간이 선을 지나가는 시간보다 짧아진다. 이 장의 주제는 그 결과로 생기는 문제들과 해결책이다.

메모리 컨트롤러명령 스케줄링, 뱅크 관리(5장). 논리 계층.
PHY직렬화기, DLL/PLL, 드라이버·수신기, 이퀄라이저, 트레이닝 엔진.
채널패키지 → PCB 트레이스 → 커넥터 → DIMM 배선. 반사·손실·크로스토크.
DRAM I/OODT, 수신기 Vref, DQS 게이팅, 역직렬화 → 코어(프리페치).

숫자로 감을 잡자. DDR5-6400 DIMM 하나는 초당 51.2 GB를 전송한다. 12채널 DDR5-6400을 쓰는 2024년형 서버 CPU(64~128코어)라면 총 614 GB/s지만, 128코어로 나누면 코어당 약 4.8 GB/s에 불과하다. 코어 수가 늘어나는 속도를 메모리 대역폭이 따라가지 못하는 것이 7장 HBM과 이 장의 고속 인터페이스가 존재하는 이유다.

이 장의 표기

데이터율은 핀당 초당 전송 횟수로 적는다. "DDR5-6400"은 6400 MT/s(= 6.4 Gb/s/핀, NRZ에서 1 전송 = 1 비트)이고, 클럭은 그 절반인 3200 MHz다. 비트 하나의 시간 폭을 UI(Unit Interval)라 하며 \(UI = 1/R_{pin}\)이다(6.4 Gb/s → 156.25 ps).

SDR에서 DDR로: 양 에지, 스트로브, 프리페치

SDR(Single Data Rate) SDRAM은 클럭의 상승 에지에서만 데이터를 주고받았다. 클럭 한 주기에 비트 하나다. 데이터율을 두 배로 올리려면 클럭도 두 배로 올려야 하는데, 클럭은 데이터보다 두 배 빠르게 토글하는 신호(한 주기에 전이 2번)라서 채널 대역폭을 가장 많이 잡아먹는다. DDR(Double Data Rate)은 발상을 바꿔 상승과 하강 에지 모두에서 데이터를 보낸다. 클럭 주파수는 그대로 두고 데이터율만 두 배가 된다. 이제 클럭과 데이터의 최고 토글 주파수가 같아진다.

CLK SDR 데이터 DDR 데이터 tCK D0D1D2D3 D4D5D6D7 0123 4567 891011 12131415 1 UI = tCK/2 같은 클럭에서 DDR은 2배의 비트 — 상승(초록)·하강(보라) 에지 모두 사용
그림 6-1. SDR과 DDR. SDR은 클럭 상승 에지(굵은 점선)에서만 비트 하나를 전송하고, DDR은 하강 에지(가는 점선)에서도 전송한다. 클럭 주파수는 같아도 데이터율은 두 배, UI는 클럭 주기의 절반이다.

프리페치: 느린 코어, 빠른 I/O

DDR의 데이터율은 세대마다 두 배씩 올라갔지만, DRAM 셀 어레이의 속도는 거의 그대로였다. 긴 비트라인에 매달린 작은 커패시터를 센스 앰프로 읽는 동작(4장)은 물리적으로 수 ns가 걸리고, 코어 동작 주파수는 20년 동안 대략 100~400 MHz 범위에 머물러 있다. 이 격차를 메우는 기술이 프리페치(prefetch)다. 한 번의 컬럼 접근에서 DQ 핀 하나당 \(n\)비트를 병렬로 읽어 두고, I/O 쪽의 직렬화기(serializer, MUX)가 이를 \(n\)배 빠른 속도로 한 줄로 내보낸다.

DRAM 셀 어레이 (뱅크 · 센스 앰프) 느림: ~ns 단위 DQ 1개당 16비트 병렬 코어 400 MHz 직렬화기 16 : 1 MUX + 드라이버 CK 3.2 GHz, 양 에지 DQ 핀 6.4 Gb/s UI = 156 ps 코어 400 MHz × 16비트 = 6.4 Gb/s/핀 (DDR5-6400, BL16)
그림 6-2. 16n 프리페치(DDR5). 셀 어레이는 한 번의 컬럼 접근으로 DQ당 16비트를 병렬로 내놓고, 직렬화기가 이를 16 UI에 걸쳐 내보낸다. 한 번 접근한 데이터를 몇 UI 동안 내보내는지가 버스트 길이(BL)다.
$$ f_{CK} = \frac{R_{pin}}{2}, \qquad f_{core} = \frac{R_{pin}}{n_{prefetch}}, \qquad \text{접근당 바이트} = \frac{BL \times W}{8} $$
\(R_{pin}\): 핀당 데이터율, \(n_{prefetch}\): 프리페치 깊이(보통 = BL), \(W\): 채널 폭(비트). DDR4-3200: \(f_{CK}=1600\) MHz, 8n → 코어 400 MHz, BL8 × 64비트 = 64 B. DDR5-6400: 3200 MHz, 16n → 코어 400 MHz, BL16 × 32비트 = 64 B.

SDR(1n) → DDR(2n) → DDR2(4n) → DDR3(8n)로 프리페치가 두 배씩 깊어진 덕분에 코어는 제자리에서 I/O만 빨라질 수 있었다. 그런데 프리페치 깊이는 곧 최소 전송 단위다. 64비트 채널에서 16n을 쓰면 한 번에 128 B가 나와서 CPU 캐시 라인(64 B)의 두 배가 된다. 그래서 DDR4는 8n을 유지하는 대신 뱅크 그룹을 도입해 서로 다른 그룹을 번갈아 접근했고(5장의 tCCD_S/tCCD_L), DDR5는 16n으로 가면서 채널을 32비트 서브채널 2개로 쪼개 64 B 단위를 지켰다.

DQS: 데이터와 함께 달리는 시계

수 GHz에서는 컨트롤러가 보낸 클럭과 DRAM이 돌려보낸 데이터 사이의 비행 시간(flight time)이 UI보다 길어진다. 공통 클럭 하나로는 "언제 샘플할지"를 정할 수 없다. 그래서 DDR은 데이터 옆에 데이터 스트로브(DQS)라는 전용 시계를 같이 보낸다. 보내는 쪽이 데이터와 DQS를 함께 내보내므로(소스 동기(source-synchronous) 방식), 둘은 같은 배선 길이를 같이 달려 도착 시각 차이가 작다. DQS는 보통 바이트(×8) 또는 니블(×4)마다 한 쌍의 차동 신호(DQS_t/DQS_c)로 둔다.

쓰기: DQS가 데이터 중앙 (center-aligned) 읽기: DQS가 데이터 경계 (edge-aligned) DQ DQS 컨트롤러가 DQS를 1/4주기 밀어서 송신 → DRAM은 받은 DQS 에지로 바로 샘플 DQ DQS +90° 컨트롤러 PHY가 DQS를 지연시켜 데이터 눈 중앙에서 샘플
그림 6-3. DQS 정렬. 쓰기에서는 컨트롤러가 DQS를 데이터 중앙에 맞춰 보내고, 읽기에서는 DRAM이 데이터 전이와 같은 시점에 DQS를 토글한다(DRAM 쪽 회로를 단순하게 유지하기 위해). 읽기 데이터의 중앙을 찾아 샘플하는 부담은 컨트롤러 PHY의 지연 회로(DLL)가 진다.

DQS는 양방향이라 버스가 쉬고 있을 때는 아무도 구동하지 않는다. 그래서 버스트 앞에 프리앰블(preamble), 뒤에 포스트앰블을 붙여 수신기가 "이제 진짜 에지가 온다"는 것을 알게 한다. 컨트롤러가 읽기 DQS를 받아들이기 시작하는 창을 정하는 것을 DQS 게이팅이라 하는데, 이 창의 위치도 뒤에서 볼 트레이닝으로 찾는다.

LPDDR5와 GDDR6/7은 한 걸음 더 나아가 명령용 클럭 CK와 별도로 데이터 전용의 고속 클럭 WCK(Write Clock)를 둔다. 예를 들어 LPDDR5-6400은 CK를 800 MHz로 느리게 두고, WCK를 3.2 GHz(CK의 4배)로 돌려 그 양 에지에서 데이터를 옮긴다. 명령 버스는 느리게, 데이터 버스만 빠르게 — 전력을 아끼는 설계다.

SIMULATOR

SDR·DDR 전송 파형과 프리페치

세대
표시 창
데이터율—
I/O 클럭 f_CK—
코어 클럭 (÷ 프리페치)—
UI—
64비트 DIMM 대역폭—
맨 위 줄은 코어가 한 번에 병렬로 내놓는 워드(프리페치 단위), 맨 아래 줄은 핀에 실리는 직렬 비트다. 해볼 것: 세대를 SDR → DDR5로 바꾸며 코어 클럭 수치가 133 → 200 → 200 → 200 → 400 → 400 MHz로 거의 제자리인 반면 데이터율은 48배 뛰는 것을 확인하자. '10 ns 고정'을 고르면 같은 시간 동안 핀에 실리는 비트 수가 얼마나 늘었는지 한눈에 보인다(실제로는 코어 읽기와 직렬 출력 사이에 수 클럭의 파이프라인 지연이 있다).
MT/s와 MHz를 헷갈리지 말 것

제품 스펙의 "DDR5-6400"을 "6400 MHz"로 적는 경우가 흔하지만 정확히는 6400 MT/s다. 실제 CK는 3200 MHz, 코어는 약 400 MHz로, 한 칩 안에 세 가지 '속도'가 공존한다.

세대별 규격과 대역폭 계산

DRAM 인터페이스는 용도에 따라 세 갈래로 진화했다. DDR은 PC·서버의 DIMM용으로 용량과 확장성(슬롯에 꽂는 모듈, 여러 랭크)을 중시한다. LPDDR(Low-Power DDR)은 스마트폰·노트북용으로 SoC 바로 옆에 납땜해 배선을 짧게 하고 전압을 낮춰 전력을 아낀다. GDDR(Graphics DDR)은 GPU용으로 GPU 주위에 칩을 1:1로 배치하고 핀당 속도를 극한까지 올린다. 셋 모두 대역폭은 같은 식으로 계산한다.

$$ BW\ [\text{GB/s}] = \frac{R_{pin}\ [\text{Gb/s}] \times W\ [\text{bit}]}{8} \times N_{ch} $$
\(W\): 채널(모듈·칩) 하나의 데이터 폭, \(N_{ch}\): 채널 수. 예: DDR5-6400 DIMM = 6.4 × 64 / 8 = 51.2 GB/s. RTX 4090(GDDR6X 21 Gb/s, 384비트) = 21 × 384 / 8 = 1008 GB/s. 이 값은 피크이며 실효 대역폭은 리프레시·버스 방향 전환·로우 미스 때문에 보통 그보다 10~30% 낮다(5장).
규격핀당 속도 (Gb/s)채널 구조VDDQ프리페치 / 신호대역폭 예
DDR30.8–2.1364비트 채널 (DIMM)1.5 V (DDR3L 1.35)8n · SSTLDDR3-1600 DIMM: 12.8 GB/s
DDR41.6–3.264비트 채널, 뱅크 그룹1.2 V8n · POD12DDR4-3200 DIMM: 25.6 GB/s
DDR54.8–8.832비트 서브채널 ×21.1 V16n · POD11, DFEDDR5-6400 DIMM: 51.2 GB/s
LPDDR4X~4.2716비트 채널 (패키지당 2~4개)0.6 V16n · LVSTL64비트 @4.27: 34 GB/s
LPDDR5~6.416비트 채널, WCK0.5 V16n · LVSTL64비트: 51.2 GB/s
LPDDR5X~8.5 (최대 ~10.7, 2024~)16비트 채널, WCK0.5 V16n · LVSTL128비트 @8.53: 136 GB/s
LPDDR6~10.7–14.4 (2025 규격)24비트 채널 (12비트 서브채널 ×2)≲0.5 VBL24 · NRZ2026년 양산·탑재 시작
GDDR614–20 (최대 ~24)칩당 32비트 (16비트 채널 ×2)1.35 V16n · POD, NRZ256비트 @20: 640 GB/s
GDDR6X19–24칩당 32비트1.35 VPAM4384비트 @21: 1008 GB/s
GDDR728–32 (로드맵 ~40+)칩당 32비트 (8비트 채널 ×4)1.2 VPAM3512비트 @28: 1792 GB/s
HBM3E (참고, 7장)~8–9.8스택당 1024비트—NRZ, 저속·광폭스택당 ~1.2 TB/s

표에서 두 가지 경향이 보인다. 첫째, 전압이 세대마다 내려간다(DDR3 1.5 V → DDR5 1.1 V, LPDDR5 0.5 V). 뒤에서 보듯 I/O 전력이 \(V^2\)에 비례하기 때문이다. 둘째, 속도가 오를수록 채널이 좁아진다. DDR5는 64비트를 32비트 두 개로, GDDR7은 32비트 칩을 8비트 채널 넷으로, LPDDR6는 24비트 채널을 12비트 둘로 나눴다. 채널이 좁을수록 독립적인 요청을 더 많이 동시에 처리할 수 있고, 긴 버스트로도 64 B 단위를 유지할 수 있다.

DRAMDRAMDRAMDRAMECC DRAMDRAMDRAMDRAMECC x8x8x8x8x8 x8x8x8x8x8 RCD PMIC SPD hub 서브채널 A: 32비트 데이터 + 8비트 ECC 서브채널 B: 32비트 데이터 + 8비트 ECC 명령/주소(CA)는 RCD가 버퍼링해 서브채널마다 따로 분배 — 두 서브채널은 독립적으로 동작 BL16 × 32비트 = 64 B (캐시 라인 1개) · DDR4는 64비트 채널 1개 × BL8 = 64 B
그림 6-4. DDR5 RDIMM(×8 칩, ECC 포함 1랭크 한 면). 모듈 하나가 40비트 서브채널 두 개로 나뉘며, 명령 버퍼(RCD), 전원 관리 IC(PMIC), SPD 허브가 모듈 위에 있다. DDR4 DIMM은 72비트(64+8) 채널 하나였다.

LPDDR은 DIMM이 아니라 패키지 단위로 생각한다. 칩 하나(다이)에 16비트 채널이 두 개 있고, 패키지 하나에 다이를 여러 장 쌓아 32~64비트를 만든다. 스마트폰 SoC는 보통 64비트, 노트북·태블릿용 SoC는 128비트 이상을 쓴다. 배선이 짧고(수 mm~수 cm) 부하가 가벼워 낮은 전압에서도 빠르게 달릴 수 있지만, 모듈처럼 교체하거나 확장하기는 어렵다. GDDR은 GPU 둘레에 32비트 칩 8~16개를 배치해 256~512비트 버스를 만든다. 칩과 GPU가 점대점(point-to-point)으로 짧게 연결되고 칩당 부하가 하나뿐이라 20~30 Gb/s가 가능하다.

SIMULATOR

메모리 대역폭 계산기

프리셋
피크 대역폭—
실효 대역폭 (× 효율)—
총 데이터 핀—
핀 하나의 몫—
막대 그래프는 로그 축이다. 회색 막대는 대표 시스템 구성, 강조 막대가 현재 설정이다. 해볼 것: ① DDR5 프리셋에서 채널 수를 12로 올려 서버 한 소켓(~614 GB/s)을 만들어 보자. ② GDDR7 16칩(512비트)과 HBM3E 1스택을 비교하면, HBM은 핀 속도가 1/3인데도 핀 수로 대역폭을 낸다. ③ 효율을 70%로 낮추면 게임·AI 워크로드에서 실제로 측정되는 수준이 된다.
피크 대역폭의 함정

대역폭 계산식은 "모든 UI에 유효 데이터가 실려 있다"고 가정한다. 실제로는 리프레시(tRFC 동안 뱅크 정지), 읽기↔쓰기 전환(tWTR, 버스 턴어라운드), 로우 미스 시의 PRE+ACT 지연(5장) 때문에 빈 UI가 생긴다. 무작위 접근이 많은 서버 워크로드에서는 실효 대역폭이 피크의 60~70%까지 떨어지기도 한다.

신호 무결성 ①: 전송선과 반사

신호가 배선을 지나는 속도는 유한하다. FR-4 기판 내부(유효 유전율 \(\varepsilon_{eff}\approx 4\))에서 전파 속도는 빛의 절반, 약 15 cm/ns — 1 mm에 약 6.7 ps다. 6.4 Gb/s의 UI 156 ps 동안 신호는 약 2.3 cm밖에 못 간다. 컨트롤러에서 DIMM까지 5~10 cm라면 선 위에 비트가 여러 개 '떠 있는' 상태가 된다. 이렇게 배선 길이가 신호 상승 시간 동안 이동하는 거리의 약 1/6을 넘으면 선을 집중 소자(lumped)가 아닌 전송선으로 다뤄야 한다.

$$ Z_0 = \sqrt{\frac{L'}{C'}}, \qquad t_d = \ell\,\frac{\sqrt{\varepsilon_{eff}}}{c}, \qquad \Gamma = \frac{Z_L - Z_0}{Z_L + Z_0} $$
\(L', C'\): 단위 길이당 인덕턴스·커패시턴스. \(Z_0\)는 선의 특성 임피던스로 메모리 배선은 보통 40~50 Ω(차동 80~100 Ω). \(t_d\): 전파 지연. \(\Gamma\): 부하 \(Z_L\)에서의 반사 계수. \(Z_L = Z_0\)이면 \(\Gamma = 0\)(반사 없음), 개방(\(Z_L\to\infty\))이면 \(+1\), 단락이면 \(-1\).
R_on ≈ 34 Ω 컨트롤러 드라이버 접지면 (귀환 경로) 전송선 Z₀ ≈ 40 Ω · t_d ≈ 6.7 ps/mm 입사파 V⁺ 반사파 V⁻ = Γ_L · V⁺ DRAM 수신기 VDDQ ODT (R_TT) Γ_L = (R_TT − Z₀)/(R_TT + Z₀) → R_TT = Z₀이면 반사 0
그림 6-5. 메모리 채널의 전송선 모델. 드라이버(출력 저항 \(R_{on}\))가 특성 임피던스 \(Z_0\)의 선에 전압파를 실으면, 부하 임피던스가 \(Z_0\)와 다른 곳마다 일부가 반사되어 되돌아온다. DDR4/5는 수신단 종단 저항을 VDDQ에 연결하는 POD(Pseudo Open Drain) 방식이라 '1'을 보낼 때는 종단 전류가 흐르지 않는다.

드라이버가 스텝 전압 \(V_S\)를 내면 선에는 처음에 분압 \(V^+ = V_S\,Z_0/(R_{on}+Z_0)\)만 실린다. 이 파가 \(t_d\) 뒤 수신단에 닿아 \(\Gamma_L V^+\)만큼 반사되고, 반사파가 다시 드라이버로 돌아가 \(\Gamma_S\)만큼 재반사되고…. 이 링잉(ringing)이 가라앉기 전에 다음 비트가 오면 이전 비트의 잔상이 현재 비트에 더해진다. 수신단 입력은 CMOS 게이트라 거의 개방(\(\Gamma_L\approx +1\))이므로, 아무 조치가 없으면 전압이 두 배로 튀었다가 흔들린다.

해법이 ODT(On-Die Termination)다. DRAM 다이 안의 수신기 바로 옆에 \(Z_0\)와 비슷한 종단 저항을 켜서 \(\Gamma_L\to 0\)으로 만든다. DDR2부터 도입되었고, 모드 레지스터로 34~240 Ω 사이에서 고르며, 읽기·쓰기·대기 상태마다 다른 값(RTT_WR, RTT_NOM, RTT_PARK)을 쓸 수 있다. 여러 랭크가 한 버스를 공유하면 데이터를 받지 않는 랭크도 적당한 종단을 켜서 스텁 반사를 줄인다. 드라이버 쪽 \(R_{on}\)도 \(Z_0\) 근처(34 Ω, 40 Ω, 48 Ω)로 맞춰 재반사를 흡수한다.

SIMULATOR

전송선 반사와 ODT

Γ_S / Γ_L—
첫 입사 전압 V⁺—
수신단 오버슈트—
정착 시간 (±5%)—
1.2 V 스텝, 선 길이 약 7.5 cm(t_d = 0.5 ns). 초록 = 수신단(DRAM) 전압, 보라 = 드라이버 출력단 전압. 해볼 것: ① 기본값(ODT 끔, R_on 20 Ω)에서 수신단 전압이 1.6 V까지 튀고 여러 번 흔들린다 — 이 상태로는 UI 156 ps짜리 비트를 보낼 수 없다. ② 'ODT = Z₀'를 누르면 첫 도착에 바로 정착한다(대신 최종 전압이 분압되어 낮아진다). ③ ODT 끔 상태에서 R_on을 Z₀와 같게 하면 소스 종단이 된다: 수신단은 한 번에 정착하지만 드라이버 쪽은 2t_d 동안 절반 전압에 머문다.

크로스토크, 동시 스위칭 노이즈

나란히 달리는 두 배선은 상호 커패시턴스와 상호 인덕턴스로 결합되어, 한 선(공격선, aggressor)의 전이가 옆 선(피해선, victim)에 잡음을 만든다. 이것이 크로스토크(crosstalk)다. 드라이버 쪽에 나타나는 근단(NEXT)과 수신단 쪽의 원단(FEXT)으로 나뉘며, 배선 간격을 넓히고(보통 선폭의 2~3배), 접지 가드를 두고, 층을 바꿀 때 비아 근처 귀환 경로를 확보해 줄인다. 또 64개 DQ가 동시에 0→1로 뒤집히면 전원망에 큰 전류 스파이크가 생겨 전원·접지가 출렁인다(SSN, 동시 스위칭 노이즈). DDR4부터 도입된 DBI(Data Bus Inversion)는 바이트 안에 0이 절반을 넘으면 데이터를 반전해 보내고 DBI 핀으로 알려 준다. POD 종단에서는 '0'을 보낼 때만 전류가 흐르므로 DBI가 SSN과 전력을 동시에 줄인다.

신호 무결성 ②: 아이 다이어그램과 이퀄라이제이션

고속 링크의 건강 상태를 한 장으로 보여 주는 그림이 아이 다이어그램(eye diagram)이다. 무작위 비트열을 보내며 수신 파형을 UI 단위로 잘라 겹쳐 그리면 가운데에 눈 모양의 빈 공간이 생긴다. 수신기는 눈의 한가운데(시간축: 샘플 시점, 전압축: 기준 전압 \(V_{ref}\))에서 '0/1'을 판정하므로, 눈이 넓게 열릴수록 판정 여유가 크다.

지터 지터 V_ref 아이 높이 아이 폭 샘플점 '1' '0' 1 UI = 1 / 데이터율 흐린 선: 이전 비트의 잔상(ISI)으로 레벨이 덜 올라간 경우
그림 6-6. 아이 다이어그램 읽는 법. 세로로 열린 정도(아이 높이)는 노이즈·ISI에 대한 전압 여유, 가로로 열린 정도(아이 폭)는 지터·스큐에 대한 시간 여유다. 규격은 눈 안쪽에 반드시 비어 있어야 하는 영역(초록 점선, 아이 마스크)을 정해 둔다.

눈을 닫는 주범은 셋이다.

노이즈가 가우시안이라면 판정 오류 확률, 즉 BER(Bit Error Rate)은 두 레벨 사이 간격과 노이즈 표준편차의 비 \(Q\)로 정해진다.

$$ Q = \frac{\mu_1 - \mu_0}{\sigma_1 + \sigma_0}, \qquad BER = \frac12\,\mathrm{erfc}\!\left(\frac{Q}{\sqrt2}\right) $$
\(Q = 7\)이면 BER ≈ \(10^{-12}\), \(Q = 8\)이면 ≈ \(6\times10^{-16}\). 메모리 인터페이스는 보통 \(10^{-12}\)~\(10^{-16}\) 수준의 BER을 목표로 아이 마스크를 정한다. 6.4 Gb/s에서 BER \(10^{-12}\)은 핀 하나당 약 2.6분에 한 번의 오류다.

이퀄라이제이션: 채널의 역필터

채널이 고주파를 깎아 먹는다면, 그만큼 고주파를 미리 키우거나(송신측) 나중에 키우면(수신측) 된다. 이것이 이퀄라이제이션(equalization)이다.

$$ \hat y_k = y_k - \sum_{i=1}^{N} h_i\,\hat d_{k-i} $$
\(y_k\): 샘플된 수신 전압, \(h_i\): 채널 펄스 응답의 \(i\)번째 후행 커서(post-cursor), \(\hat d_{k-i}\): 이전 판정값(±1). 판정이 한 번 틀리면 잘못된 값을 빼게 되어 오류가 이어질 수 있다(오류 전파).
SIMULATOR

아이 다이어그램 시뮬레이터

이퀄라이저
나이퀴스트 손실—
아이 높이—
아이 폭—
추정 BER (가우시안)—
EQ 설정—
±200 mV 스윙의 NRZ 신호 320비트를 2극점 저역 통과 채널(나이퀴스트 손실 dB ∝ 데이터율)에 통과시켜 겹쳐 그렸다. BER은 샘플점 분포를 가우시안으로 본 추정치다. 해볼 것: ① 8 Gb/s에서 데이터율만 16 Gb/s로 올리면 나이퀴스트 손실이 4.8 → 9.6 dB로 두 배가 되며 아이가 좁아지고 BER이 10⁻³ 수준으로 무너진다. ② FFE를 켜면 스윙(평탄 구간 레벨)은 줄지만 눈이 다시 열린다. ③ 20 Gb/s(손실 12 dB)에서는 FFE만으로 BER ~10⁻¹¹에 그치고, FFE+DFE로 가야 여유가 생긴다. ④ 그 상태에서 노이즈를 20 mV로 올리면 EQ를 다 켜도 BER이 나빠진다 — ISI는 되돌릴 수 있어도 무작위 노이즈는 되돌릴 수 없다.

트레이닝: 매 부팅마다 링크를 조율한다

UI가 156 ps인데 보드마다, 칩마다, 핀마다 배선 길이와 트랜지스터 특성이 수십 ps씩 다르다. 설계 단계에서 고정한 지연값으로는 눈 한가운데를 맞출 수 없다. 그래서 메모리 컨트롤러는 전원이 켜질 때마다 각 신호의 지연과 기준 전압을 실측해 최적점을 찾는다. 이 과정을 트레이닝(training, calibration)이라 한다. PC의 BIOS/UEFI에서 이를 담당하는 코드를 흔히 MRC(Memory Reference Code)라 부르며, 새 메모리를 꽂은 뒤 첫 부팅이 수십 초씩 걸리는 이유가 바로 이것이다(이후에는 결과를 저장해 두고 재사용한다).

메모리 컨트롤러 R D0D1D2D3D4D5D6D7 +0+1Δ+2Δ+3Δ+4Δ+5Δ+6Δ+7Δ CK·CA: fly-by — 칩을 차례로 지나며 도착이 Δ씩 늦어짐 DQ/DQS 바이트 레인 0–7: 칩마다 직결 (점대점) 쓰기 레벨링: 레인 k의 DQS 송신을 k·Δ만큼 늦춰, 각 DRAM에서 DQS와 CK 에지가 만나게 한다
그림 6-7. DDR3 이후의 fly-by 토폴로지. 클럭·명령·주소는 모듈 위 칩들을 줄지어 지나가며(끝에서 종단) 신호 품질을 지키지만, 칩마다 CK 도착 시각이 다르다(Δ는 칩 간격에 따라 수십 ps). 반면 DQ/DQS는 칩마다 따로 연결되므로 레인별로 지연을 맞춰야 한다.

DDR5 기준으로 트레이닝은 대략 다음 순서로 진행된다.

ZQ 캘리브레이션칩 밖의 정밀 240 Ω 저항과 비교해 드라이버 R_on과 ODT 값을 공정·온도 변동에 맞춰 보정.
CS/CA 트레이닝명령·주소 신호를 CK에 대해 정렬. DDR5는 CA도 고속이라 별도 트레이닝이 필요.
쓰기 레벨링DRAM이 DQS 에지에서 CK 값을 샘플해 DQ로 돌려준다. 0→1로 바뀌는 지연이 정렬점.
읽기 게이트·프리앰블읽기 DQS가 도착하는 시점을 찾아 수신 창을 연다.
읽기 DQ 트레이닝DRAM의 패턴(MPR) 레지스터를 반복해 읽으며 비트별 지연을 스윕해 눈 중앙에 샘플점 배치(비트별 디스큐).
쓰기 DQ · Vref쓰고 다시 읽어 비교하며 DQ 지연과 DRAM 내부 VrefDQ를 2차원으로 스윕. DFE 탭도 이때 조정.

읽기·쓰기 DQ 트레이닝의 핵심은 "통과/실패 경계 찾기"다. 샘플 지연을 한 스텝(수 ps)씩 옮기며 패턴을 비교하면 통과 구간의 왼쪽·오른쪽 끝이 나오고, 그 가운데가 눈의 중앙이다. 여기에 Vref까지 스윕하면 시간×전압 2차원 통과 영역, 즉 실측 아이가 그려진다. DDR4부터 DQ 수신기의 기준 전압(VrefDQ)이 DRAM 내부에서 생성되고 모드 레지스터로 조정되는데, POD 종단에서는 '1' 레벨이 VDDQ이고 '0' 레벨이 분압비로 정해져 신호 중앙이 VDDQ/2가 아니기 때문이다.

트레이닝은 한 번으로 끝나지 않는다

동작 중 온도가 수십 ℃ 변하면 DRAM 내부 DQS 경로 지연(tDQS2DQ)이 수십 ps 표류한다. LPDDR4/5와 DDR5는 DRAM 안에 DQS 인터벌 오실레이터를 두어 컨트롤러가 이 표류를 주기적으로 측정하고 보정할 수 있게 했다. ZQ 캘리브레이션도 주기적으로(예: 수백 ms 간격) 다시 수행한다. 고속 링크는 결국 '정적인 배선'이 아니라 계속 조율되는 제어 시스템이다.

NRZ, PAM4, PAM3: 한 심볼에 더 많은 비트

지금까지는 전압 레벨 두 개로 0과 1을 나타내는 NRZ(Non-Return-to-Zero, = PAM2)를 가정했다. 채널 손실이 주파수에 따라 급격히 커지면 심볼률(Baud)을 더 올리기 어려워진다. 대안은 한 심볼에 여러 비트를 담는 다중 레벨 신호, PAM(Pulse Amplitude Modulation)이다. 레벨이 \(M\)개면 심볼당 \(\log_2 M\)비트를 실을 수 있어, 같은 비트율에서 심볼률과 나이퀴스트 주파수가 그만큼 낮아진다.

NRZ (PAM2) PAM3 PAM4 10 +10−1 3210 레벨 2 · 아이 1개 1 bit/심볼 · 아이 높이 1 DDR5 · LPDDR5 · GDDR6 레벨 3 · 아이 2개 1.5 bit/심볼 · 높이 1/2 GDDR7 (3비트 → 2심볼) 레벨 4 · 아이 3개 2 bit/심볼 · 높이 1/3 GDDR6X · PCIe 6.0
그림 6-8. 같은 전압 범위(스윙)에 레벨을 더 넣으면 심볼당 비트는 늘지만 레벨 사이 간격, 즉 아이 높이가 \(1/(M-1)\)로 줄어든다. 보라 점선은 판정 기준 전압으로, NRZ는 1개, PAM3는 2개, PAM4는 3개가 필요하다.
$$ \text{심볼률} = \frac{R_{bit}}{\log_2 M}, \qquad \text{아이 높이} \propto \frac{1}{M-1}, \qquad \text{SNR 손해} = 20\log_{10}(M-1)\ \text{dB} $$
PAM4: 심볼률 1/2, 아이 높이 1/3 → SNR 약 9.5 dB 손해. PAM3: 심볼률 약 2/3(GDDR7은 3비트를 2심볼에 실어 실효 1.5 bit/심볼), 아이 높이 1/2 → 6 dB 손해. 이 손해를 채널 손실 감소(낮아진 나이퀴스트 주파수)가 만회할 때만 PAM이 이득이다.

GDDR6X(2020, 마이크론)는 PAM4로 핀당 19~21 Gb/s를 10.5 GBaud 수준의 심볼률로 전송했다. 레벨 0↔3처럼 큰 전이를 피하는 인코딩(MTA, Maximum Transition Avoidance)으로 전력과 노이즈를 줄였지만, 판정 기준이 3개라 수신기와 트레이닝이 훨씬 복잡해졌다. GDDR7(JEDEC 규격 2024)은 중간 해법인 PAM3를 택했다. 3개 레벨 심볼 2개로 9가지 조합을 만들고 그중 8가지로 3비트를 표현한다. PAM4보다 아이가 1.5배 크고(1/2 vs 1/3), NRZ보다 심볼률이 2/3로 낮아, 28~32 Gb/s(심볼률 약 19~21 GBaud)에서 균형이 맞는다.

SIMULATOR

NRZ vs PAM3 vs PAM4

신호 방식
심볼률 (32 Gb/s 기준)—
나이퀴스트 주파수—
아이 높이 손해—
유효 SNR—
BER—
비트율을 32 Gb/s로 고정하고 세 방식을 비교한다. 채널 손실(dB)은 주파수에 비례한다고 가정해, 심볼률이 낮은 방식일수록 손실이 줄어든다(이퀄라이저가 손실을 보상하면서 그만큼 노이즈가 커지는 것으로 모델링). 해볼 것: ① 손실 0 dB에서는 같은 SNR에서 NRZ의 BER이 압도적으로 낮다. ② SNR을 40 dB로 두고 손실을 10 → 25 dB로 올려 보자. 약 18~19 dB를 넘으면 BER 곡선의 순서가 뒤집혀 PAM3·PAM4가 앞선다(NRZ의 추가 손실이 PAM의 아이 손해 6~9.5 dB를 넘는 지점). ③ 이 교차가 바로 고속 링크가 NRZ에서 PAM으로 넘어가는 이유다.

모듈과 패키지: UDIMM부터 LPCAMM2까지

DDR 메모리는 칩 여러 개를 모은 DIMM(Dual In-line Memory Module)으로 시스템에 꽂힌다. 한 채널에 칩이 많이 매달릴수록 부하(커패시턴스)가 커져 신호가 느려지므로, 용량과 속도를 모두 잡으려고 모듈 위에 버퍼 칩을 넣는 방향으로 진화했다.

UDIMMRDIMMLRDIMMMRDIMM 호스트호스트호스트호스트 RCDRCDMRCD DBMDB DRAMDRAMDRAM랭크 0 + 1 버퍼 없음데스크톱·노트북 CA만 버퍼서버 표준 CA + DQ 버퍼대용량 서버 두 랭크 다중화~8800 MT/s (2024~)
그림 6-9. DIMM 종류. 보라 점선 = 명령/주소(CA), 초록 실선 = 데이터(DQ). RDIMM은 CA를 RCD(Registering Clock Driver)로 재구동해 호스트가 보는 CA 부하를 칩 하나 수준으로 줄이고, LRDIMM은 데이터 경로에도 버퍼(DB)를 넣는다. MRDIMM은 두 랭크를 동시에 읽어 MDB가 번갈아 내보냄으로써, DRAM은 절반 속도로 돌면서 호스트 쪽에서는 두 배 데이터율을 낸다.
모듈버퍼특징용도
UDIMM / SODIMM없음 (DDR5는 PMIC·SPD 허브 포함)저지연·저가. 채널당 1~2 DIMM데스크톱, 노트북
CUDIMM / CSODIMM클럭 드라이버(CKD)클럭만 재구동해 DDR5-6400 이상 안정화 (2024~)고성능 PC
RDIMMRCDCA 부하 분리, ECC(×72/×80) 표준. 지연 +1 클럭서버
LRDIMMRCD + 데이터 버퍼DQ 부하까지 분리, 많은 랭크·대용량대용량 서버
MRDIMMMRCD + MDB2랭크 다중화, 1세대 8800 MT/s, 로드맵 12800 MT/sAI·HPC 서버
LPCAMM2—LPDDR5X 128비트를 압착식 모듈로, 교체 가능얇은 노트북 (2024~)

DDR5는 DIMM 구조 자체도 바꿨다. PMIC(Power Management IC)가 메인보드 대신 모듈 위에서 12 V(서버) 또는 5 V(PC)를 받아 1.1 V 등으로 변환해, 칩 가까이에서 전원 품질을 지킨다. 온다이 ECC는 DRAM 칩 내부에서 128비트 데이터마다 8비트 패리티를 붙여 셀 단일 비트 오류를 스스로 고친다. 미세 공정에서 늘어난 셀 불량과 가변 리텐션(4장)을 흡수하기 위한 것으로, 호스트에게는 보이지 않는다. 채널 전송 오류나 칩 전체 고장까지 막으려면 여전히 RDIMM의 추가 ECC 칩(사이드밴드 ECC)이 필요하다. 이 둘의 차이는 11장에서 자세히 다룬다.

LPDDR은 모듈 대신 패키지 형태가 핵심이다. 과거 스마트폰은 AP 위에 메모리 패키지를 그대로 얹는 PoP(Package on Package)를 많이 썼고, 최근 고성능 SoC는 메모리 패키지를 SoC 기판 위에 나란히 올리는 온패키지(SiP) 구성을 쓴다(예: 노트북용 Arm SoC). 배선이 수 mm라 종단 없이도, 혹은 약한 종단만으로 8 Gb/s 이상이 가능하다. 단점은 교체·업그레이드 불가였는데, JEDEC CAMM2 규격(2023)에 따른 LPCAMM2는 LPDDR5X를 압착 커넥터 모듈로 만들어 이 문제를 풀었다. 서버에서도 LPDDR5X 모듈(SOCAMM, 약 2025~)이 AI 가속기 옆 CPU 메모리로 쓰이기 시작했다.

I/O 전력: 비트 하나를 옮기는 데 드는 에너지

데이터 센터에서 메모리는 전체 전력의 상당 부분(서버에 따라 20~40%)을 쓰고, 그중 큰 몫이 칩 밖으로 비트를 옮기는 I/O다. 인터페이스의 효율은 pJ/bit(비트 하나 전송에 드는 에너지)로 비교한다. 1 pJ/bit로 1 TB/s(8 Tb/s)를 옮기면 8 W다.

$$ E_{sw} \approx \alpha\,C\,V^2, \qquad E_{term} \approx p_0\,\frac{V_{DDQ}^2}{R_{on}+R_{TT}}\,T_{UI}, \qquad P = E_{bit}\times R_{bit} $$
\(E_{sw}\): 선과 패드 커패시턴스 \(C\)를 충방전하는 스위칭 에너지(\(\alpha\): 0→1 전이 확률, 무작위 데이터에서 약 0.25). \(E_{term}\): 종단 저항으로 흐르는 정적 전류 에너지. POD에서는 '0'을 보내는 동안만 흐르므로 \(p_0\)('0'의 비율, 약 0.5)을 곱한다. 예: \(C = 2\) pF, \(V = 1.1\) V → \(E_{sw}\approx 0.6\) pJ, \(E_{term}\)(74 Ω, 6.4 Gb/s) ≈ 1.3 pJ.

식에서 전력을 줄이는 세 가지 손잡이가 보인다. 전압(\(V^2\): LPDDR4 → LPDDR4X에서 VDDQ를 1.1 V → 0.6 V로 낮춰 I/O 전력을 크게 줄였다), 커패시턴스(배선을 짧게: LPDDR의 온패키지, HBM의 인터포저), 종단(짧은 배선이면 종단을 빼거나 약하게). HBM이 pJ/bit에서 압도적인 이유는 세 가지를 모두 쓰기 때문이다. 수 mm의 실리콘 인터포저 배선, 낮은 전압, 종단 없음, 그리고 핀당 속도를 낮게(~9 Gb/s) 유지해 복잡한 이퀄라이저도 필요 없다(7장).

인터페이스시스템 에너지 (pJ/bit, 대략)배선 길이비고
DDR4/DDR5 DIMM~10–20수~10 cm, 커넥터종단 필수, 다중 랭크 부하
GDDR6/GDDR7~5–8수 cm, 점대점고속 I/O가 에너지의 큰 몫
LPDDR5/5X~4–6수 mm~수 cm저전압, 약한 종단, DVFS
HBM3/HBM3E~3–4수 mm (인터포저)종단 없음, 저속·광폭

표의 값은 DRAM 코어 접근과 컨트롤러 PHY를 포함한 대략적인 범위로, 문헌·세대·동작 조건에 따라 편차가 크다(2020~2025년 공개 자료 기준). I/O 부분만 떼어 보면 이보다 작다.

SIMULATOR

I/O 전력 계산기

시스템 비교 대역폭
스위칭 에너지—
종단 에너지—
핀 하나의 전력—
이 드라이버로 1 TB/s—
위 그래프: 핀 드라이버 한 개의 비트당 에너지(스위칭 + 종단)를 데이터율에 따라 그렸다. 아래 막대: 표의 대표 시스템 에너지로 선택한 대역폭을 낼 때의 전력. 해볼 것: ① VDDQ를 1.1 V → 0.5 V로 낮추면(LPDDR5) 두 성분 모두 약 1/5로 준다. ② 종단을 끄고 C를 0.5 pF로 줄이면(짧은 인터포저 배선) HBM처럼 0.1 pJ/bit 수준까지 내려간다. ③ 4 TB/s를 DDR5 DIMM 방식으로 내면 메모리 I/O만으로 수백 W가 든다 — AI 가속기가 HBM을 쓰는 이유다.

핵심 정리

  1. DDR은 클럭 양 에지에서 데이터를 보내 같은 클럭으로 두 배의 데이터율을 낸다. DDR5-6400 = 6.4 Gb/s/핀, CK 3.2 GHz, UI 156 ps.
  2. 프리페치(1n → 2n → 4n → 8n → 16n)는 코어(~200–400 MHz)와 I/O(수 GHz)를 분리한다. 프리페치 깊이는 최소 전송 단위를 정하므로, DDR5는 32비트 서브채널 ×2로 64 B 단위를 유지했다.
  3. DQS는 데이터와 함께 보내는 소스 동기 스트로브다. 쓰기는 center-aligned, 읽기는 edge-aligned이고 컨트롤러가 90° 지연시켜 샘플한다. LPDDR5·GDDR은 별도의 고속 WCK를 쓴다.
  4. 대역폭 = 핀 속도 × 폭 / 8 × 채널 수. DDR5 DIMM 51.2 GB/s, GDDR7 512비트 ~1.8 TB/s, HBM3E 스택 ~1.2 TB/s. 실효 대역폭은 피크보다 10–30% 이상 낮다.
  5. 배선은 전송선이다. 반사 계수 \(\Gamma = (Z_L - Z_0)/(Z_L + Z_0)\)를 0에 가깝게 하려고 ODT와 드라이버 임피던스를 \(Z_0\)(~40 Ω) 근처로 맞춘다.
  6. 아이 다이어그램의 높이는 노이즈·ISI 여유, 폭은 지터 여유를 나타낸다. 채널 손실로 인한 ISI는 FFE(송신)·CTLE·DFE(수신)로 되돌릴 수 있지만 무작위 노이즈는 되돌릴 수 없다.
  7. 트레이닝(ZQ, CA, 쓰기 레벨링, 읽기/쓰기 DQ, Vref)은 fly-by 토폴로지와 공정·배선 편차를 매 부팅마다 보정하며, 동작 중에도 주기적으로 재조정한다.
  8. PAM4는 심볼당 2비트지만 아이가 1/3(−9.5 dB), PAM3(GDDR7)는 1.5비트에 아이 1/2(−6 dB)다. 채널 손실이 클 때만 NRZ보다 유리하다. I/O 에너지는 \(\alpha CV^2\)과 종단 전류로 정해지며 HBM ~3–4, LPDDR ~4–6, DDR DIMM ~10–20 pJ/bit 수준이다.

확인 퀴즈

1. DDR5-6400에서 16n 프리페치를 쓸 때, DRAM 코어 쪽 동작 주파수는 약 얼마인가?

핀당 6.4 Gb/s를 16비트 병렬 프리페치로 나누면 6400/16 = 400 MHz다. 3200 MHz는 I/O 클럭(CK) 주파수, 6400은 MT/s 단위의 데이터율이다. 프리페치 덕분에 코어는 세대가 바뀌어도 수백 MHz에 머문다.

2. GDDR7 28 Gb/s 칩 16개로 512비트 버스를 구성한 GPU의 피크 메모리 대역폭은?

28 Gb/s × 512 / 8 = 1792 GB/s(약 1.8 TB/s). 14336은 8로 나누지 않은 Gb/s 값이다. 2025년 출시된 최상위 게이밍 GPU가 이 구성이다.

3. Z₀ = 40 Ω 선의 끝에 ODT를 끈 CMOS 수신기(거의 개방)가 달려 있다. 수신단 반사 계수와 첫 도착 전압은?

\(Z_L\to\infty\)이면 \(\Gamma = (Z_L - Z_0)/(Z_L + Z_0) \to +1\). 수신단 전압은 입사파와 반사파의 합 \(V^+(1+\Gamma) \approx 2V^+\)가 되고, 반사파가 드라이버 쪽에서 다시 반사되며 링잉이 생긴다. ODT를 \(Z_0\)에 맞추면 Γ = 0이 된다.

4. DFE(결정 궤환 이퀄라이저)가 CTLE보다 유리한 점으로 옳은 것은?

DFE는 과거 판정값 \(\hat d_{k-i}\)에 탭 계수를 곱해 빼는 구조라, 아날로그 고역 강조처럼 고주파 노이즈를 키우지 않는다. 대신 아직 판정하지 않은 미래 비트의 영향(pre-cursor)은 못 지우고(FFE가 담당), 판정이 틀리면 오류가 전파될 수 있다. DFE는 수신측 회로다.

5. 쓰기 레벨링(write leveling)이 필요한 가장 직접적인 이유는?

DDR3 이후 CK/CA는 모듈 위 칩을 줄지어 지나가므로 칩마다 도착 시각이 Δ씩 늦다. DQ/DQS는 칩마다 직결이라, 컨트롤러가 레인별로 DQS 송신 지연을 조정해 각 DRAM에서 DQS 에지가 CK 에지와 맞도록 한다. Vref 문제는 Vref 트레이닝이 담당한다.

6. 같은 스윙과 같은 노이즈에서 PAM4의 아이 높이는 NRZ 대비 얼마이며, 그럼에도 PAM4를 쓰는 이유는?

레벨 4개가 같은 스윙을 3등분하므로 아이 높이는 1/3, \(20\log_{10}3\approx 9.5\) dB 손해다. 대신 같은 비트율에서 심볼률이 절반이라 고주파 손실이 적다. 채널 손실이 커서 NRZ의 손실 증가분이 9.5 dB를 넘을 때 PAM4가 이득이다.