SRAM과 캐시
CPU 다이 면적의 상당 부분은 연산기가 아니라 SRAM이다. 레지스터 파일, L1·L2·L3 캐시, TLB, 분기 예측기 — 모두 트랜지스터 6개짜리 셀 수억~수십억 개로 만든다. 이 장에서는 두 인버터가 서로를 붙잡는 '쌍안정 래치'에서 출발해, 읽기와 쓰기가 왜 서로 반대 방향의 설계를 요구하는지, 안정성을 어떻게 숫자(SNM)로 재는지, 그리고 그 셀들이 모여 어떻게 캐시가 되는지까지 따라간다.
- 교차 결합 인버터가 두 개의 안정점을 갖는 이유와 6T 셀의 풀업·풀다운·패스게이트 역할을 설명할 수 있다.
- 읽기 동작(프리차지 → WL 활성 → 차동 방전 → 센스 앰프)과 읽기 교란, 셀 비 \(\beta = (W/L)_{PD}/(W/L)_{PG}\)의 의미를 안다.
- 쓰기 동작에서 풀업비(PR)가 왜 작아야 하는지, 읽기 안정성과 쓰기 능력이 왜 상충하는지 설명할 수 있다.
- 버터플라이 곡선에서 정적 잡음 여유(SNM)를 최대 정사각형으로 읽어 내고, Vdd·β·변동이 SNM에 주는 영향을 안다.
- SRAM 어레이 구성, 셀 면적 스케일링 둔화, 8T 셀과 Vmin, 몬테카를로 기반 수율 추정을 이해한다.
- 캐시의 사상 방식, 태그/인덱스/오프셋 분해, 교체·쓰기 정책을 계산하고 히트/미스를 추적할 수 있다.
왜 SRAM인가: 빠르지만 비싼 메모리
1장에서 본 메모리 계층의 맨 위, 프로세서 코어 바로 옆에는 SRAM(Static Random-Access Memory)이 있다. '정적(static)'이라는 이름은 전원이 켜져 있는 한 리프레시 없이 데이터를 유지한다는 뜻이다. 4장의 DRAM이 커패시터에 담긴 전하를 저장하고 그 전하가 새어 나가기 전에 주기적으로 다시 써 줘야 하는 것과 대조적이다. SRAM은 전하를 '담아 두는' 대신, 두 인버터가 서로의 출력을 끊임없이 되먹이며 논리값을 '붙잡아' 둔다.
그 대가로 셀 하나에 트랜지스터가 6개 필요하다. DRAM 셀(트랜지스터 1개 + 커패시터 1개)보다 면적이 10배 이상 크다. 대신 로직과 같은 공정으로 만들 수 있어 CPU·GPU 다이 안에 그대로 넣을 수 있고, 셀이 비트라인을 능동적으로 구동하므로 읽기가 빠르며(수백 ps~수 ns), 읽어도 데이터가 파괴되지 않는다.
| 항목 | SRAM (6T) | DRAM (1T1C) |
|---|---|---|
| 저장 원리 | 교차 결합 인버터(래치) | 커패시터 전하 |
| 셀 면적 (최신 공정) | 약 0.02 µm² (≈ 100 F² 이상) | 약 0.0012~0.0013 µm² (6 F² 수준, 2024년 1b급) |
| 리프레시 | 불필요 | 필요 (64 ms / 32 ms) |
| 읽기 | 비파괴, 셀이 BL을 방전 | 파괴적 전하 공유 → 재기록 |
| 공정 | 로직 공정과 동일 (임베디드) | 전용 공정 (별도 칩) |
| 접근 시간 | L1 ~1 ns, L3 ~10 ns 수준 | 수십 ns (tRCD + CL ≈ 30 ns) |
| 주 용도 | 레지스터 파일, 캐시, 버퍼 | 메인 메모리, HBM |
요즘 고성능 프로세서는 코어당 수십 KB의 L1, 1~3 MB의 L2, 칩 전체로 수십~수백 MB의 L3를 가진다. AMD의 3D V-Cache처럼 SRAM 다이를 따로 만들어 위에 쌓아(7장의 하이브리드 본딩) L3를 64 MB 더 얹는 제품까지 나왔다. SRAM은 이제 칩 면적과 전력 예산의 주인공 중 하나다.
쌍안정 래치와 6T 셀
인버터 두 개를 고리 모양으로 연결해 보자. 인버터 A의 출력이 인버터 B의 입력이 되고, B의 출력이 다시 A의 입력이 된다. 한쪽 노드 Q가 0이면 A가 QB를 1로 만들고, QB = 1은 B를 거쳐 다시 Q = 0을 만든다. 스스로 모순 없이 유지되는 상태다. Q = 1, QB = 0도 마찬가지로 자기 일관적이다. 이렇게 두 개의 안정 상태를 가진 회로를 쌍안정 회로(bistable circuit), 또는 래치(latch)라고 한다.
가운데 교점이 불안정한 이유는 인버터의 이득 때문이다. 전이 영역에서 인버터의 소신호 이득 \(|A_v|\)는 1보다 훨씬 크다. Q가 준안정점에서 \(\delta\)만큼 올라가면 QB는 \(|A_v|\delta\)만큼 내려가고, 이것이 다시 Q를 \(|A_v|^2\delta\)만큼 올린다. 루프 이득이 1보다 크면 교란은 기하급수적으로 커져 결국 한쪽 레일에 붙는다. 반대로 양 끝 안정점에서는 인버터가 포화되어 이득이 1보다 작으므로 교란이 줄어든다. 언덕 꼭대기(준안정)와 두 골짜기(안정)에 놓인 공을 떠올리면 된다. 이 '재생(regeneration)' 성질은 나중에 센스 앰프에서도 그대로 쓰인다.
6T 셀: 래치 + 문 두 개
래치만으로는 값을 읽거나 바꿀 수 없다. 여기에 NMOS 스위치 두 개를 달아 저장 노드 Q, QB를 각각 비트라인(BL, BLB)에 연결한 것이 표준 6T SRAM 셀이다. 스위치의 게이트는 행 방향으로 달리는 워드라인(WL)에 묶인다.
세 종류 트랜지스터의 역할을 정리하면 이렇다.
- PU (Pull-Up, PMOS): '1'인 노드를 VDD 쪽으로 붙잡는다. 누설로 조금씩 빠지는 전하를 계속 보충한다. 가장 약하게 만든다.
- PD (Pull-Down, NMOS): '0'인 노드를 접지로 붙잡는다. 읽기 때 비트라인 방전 전류가 이 트랜지스터를 통해 흐르므로 가장 강하게 만든다.
- PG (Pass-Gate, NMOS): 셀과 바깥 세계를 잇는 문. 읽기 때는 약해야 하고(노드를 흔들지 않게), 쓰기 때는 강해야 한다(노드를 뒤집을 수 있게). 이 모순이 SRAM 설계의 핵심 긴장이다.
WL이 꺼져 있는 홀드(hold) 상태에서 셀은 바깥과 차단된 채 래치로 값을 유지한다. 이때 흐르는 전류는 트랜지스터의 서브문턱 누설뿐이다(2장). 셀당 수 pA~수십 pA라도 수억 개가 모이면 L3 캐시 하나의 대기 전력이 수십 mW에 이를 수 있어, 저전력 칩은 대기 중에 SRAM 전원을 낮추는(retention voltage) 기법을 쓴다.
읽기 동작과 읽기 교란
읽기는 네 단계로 진행된다. 셀이 Q = 0, QB = 1을 저장하고 있다고 하자.
- 프리차지: 비트라인 BL과 BLB를 둘 다 VDD로 충전하고 등화(equalize)한다. 두 선의 전압을 정확히 같게 맞춰야 작은 차이를 감지할 수 있다.
- WL 활성: 행 디코더가 한 워드라인을 올린다. 그 행의 모든 셀에서 PG가 켜진다.
- 차동 방전: Q = 0인 쪽에서 BL → PG1 → PD1 → 접지로 전류가 흘러 BL이 천천히 내려간다. QB = 1인 쪽은 양 끝이 모두 VDD라 전류가 흐르지 않는다. 결과적으로 BL과 BLB 사이에 작은 차 \(\Delta V\)가 생긴다.
- 센싱: \(\Delta V\)가 50~100 mV 정도 되면 센스 앰프를 켜(SAE) 이 차이를 풀 스윙 디지털 값으로 증폭한다. 곧바로 WL을 끄고 다시 프리차지한다.
비트라인 전압이 얼마나 빨리 벌어지는지는 셀 읽기 전류 \(I_{read}\)와 비트라인 커패시턴스 \(C_{BL}\)의 비로 정해진다.
예를 들어 비트라인에 셀 256개가 붙어 \(C_{BL} \approx 35\ \text{fF}\), \(I_{read} = 30\ \mu A\), \(\Delta V_{SA} = 80\ \text{mV}\)라면 \(t_{BL} \approx 35\text{f}\times0.08/30\mu \approx 93\ \text{ps}\)다. 셀 전류는 작고 비트라인은 길기 때문에, 비트라인을 끝까지 방전시키지 않고 작은 차이만 만든 뒤 센스 앰프에 맡기는 것이 SRAM 속도의 비결이다.
읽기 교란과 셀 비 β
문제는 3단계에서 생긴다. BL에서 흘러든 전류는 PG1을 통과해 Q 노드에 들어온 뒤 PD1로 빠져나간다. PG1과 PD1은 VDD(BL)와 접지 사이의 전압 분배기처럼 동작하므로 Q는 정확히 0 V에 머물지 못하고 \(\Delta V_Q\)만큼 떠오른다. 이 전압이 반대편 인버터(PU2/PD2)의 스위칭 문턱 \(V_M\)을 넘으면 QB가 내려가기 시작하고, 루프 이득 때문에 셀이 통째로 뒤집힌다. 읽다가 데이터를 지워 버리는 읽기 교란(read disturb, destructive read)이다.
교란의 크기를 정하는 것은 두 트랜지스터의 상대적 세기, 즉 셀 비(cell ratio, β ratio)다.
전통적인 평면 공정 설계 규칙은 \(\beta \gtrsim 1.2\sim2\)였다. PD 폭을 PG보다 넓혀 PD를 강하게 만드는 것이다. 그런데 β를 키우면 셀이 커지고, 뒤에서 볼 쓰기 능력은 PG의 세기에 달려 있으므로 PG를 마냥 약하게 할 수도 없다.
FinFET·GAA에서는 트랜지스터 폭을 연속적으로 바꿀 수 없고 핀(또는 나노시트) 개수로만 정한다. 가장 작은 고밀도(HD) 셀은 PU:PG:PD = 1:1:1 핀(흔히 '111 셀')이라 기하학적 β가 1이다. 그래서 PG와 PD의 문턱 전압을 달리 주거나, 읽기 때 WL 전압을 살짝 낮추는(WL underdrive) 어시스트 회로(read/write assist)로 안정성을 확보한다. 고성능(HC) 셀은 PD 핀을 2개로 늘린 1:2:2 같은 구성을 쓴다.
WL은 한 행의 모든 셀을 동시에 연다. 컬럼 먹스로 일부 열만 쓰는 경우에도 같은 행의 나머지 셀들은 사실상 '읽기' 상태가 되어 읽기 교란을 똑같이 겪는다. 그래서 쓰기 동작 중에도 셀의 읽기 안정성이 필요하며, 이것이 8T 셀에서도 해결하기 까다로운 문제로 남는다.
쓰기 동작과 풀업비
Q = 1을 저장한 셀에 0을 쓴다고 하자. 쓰기 드라이버가 BL을 0 V로, BLB를 VDD로 강하게 구동한 뒤 WL을 올린다. 이제 Q 노드에서는 PU1(QB = 0이므로 켜져 있음)이 VDD로 끌어올리고, PG1이 BL = 0으로 끌어내린다(그림 3-4 오른쪽). PG1이 이겨서 Q를 반대편 인버터의 문턱 \(V_M\) 아래로 끌어내리면 QB가 올라가기 시작하고, 그 순간부터 래치의 재생이 도와 QB = 1, Q = 0으로 확정된다.
이 경쟁의 승패를 가르는 것이 풀업비(pull-up ratio, PR)다. 이 책에서는 PU의 세기를 PG로 나눈 값으로 정의한다(문헌에 따라 역수 PG/PU를 쓰기도 하니 방향을 꼭 확인하자).
정리하면 SRAM의 트랜지스터 세기 순서는 PD > PG > PU다. 읽기 안정성은 PD가 PG보다 강해야(β 큼), 쓰기 능력은 PG가 PU보다 강해야(PR 작음) 확보된다. PMOS는 정공 이동도가 낮아 같은 크기라도 약하므로 전통적으로 PR 조건을 맞추기 쉬웠다. FinFET에서는 PMOS 성능이 크게 좋아져(스트레인 SiGe 등) 오히려 PU가 너무 강해지는 문제가 생겼고, 음의 비트라인(negative BL) 같은 쓰기 어시스트가 표준이 됐다.
쓰기 마진(write margin)은 셀을 뒤집기 위해 BL을 얼마나 낮춰야 하는지(또는 WL을 얼마나 올려야 하는지)로 정의하는 경우가 많다. 예를 들어 BL 전압을 VDD에서 서서히 낮추며 셀이 뒤집히는 순간의 BL 전압을 쓰기 마진으로 삼는다. 이 값이 클수록 쓰기가 쉽다. 아래 시뮬레이터에서 PR을 키우거나 VDD를 낮추면 쓰기 시간이 길어지다가 결국 실패하는 것을 볼 수 있다.
6T 셀 읽기/쓰기 과도 응답
버터플라이 곡선과 정적 잡음 여유
'이 셀은 얼마나 안정한가?'를 하나의 숫자로 답하는 표준 지표가 정적 잡음 여유(SNM, Static Noise Margin)다. 그림 3-1의 두 곡선을 겹친 그림은 나비 날개처럼 생겨서 버터플라이 곡선(butterfly curve)이라 부른다. 두 날개(로브) 안에 들어가는 가장 큰 정사각형의 한 변이 SNM이다(Seevinck, 1987).
왜 정사각형일까? 두 저장 노드에 크기가 같은 직류 잡음 전압 \(V_n\)이 반대 방향으로 직렬로 끼어든다고 하자. 이는 한 곡선을 오른쪽으로, 다른 곡선을 위쪽으로 \(V_n\)만큼 평행 이동시키는 것과 같다. 이동이 커져 두 곡선이 한 로브 안에서 서로 접하면 그 로브의 안정점이 사라지고 셀은 반대 상태로 넘어간다. 두 곡선이 접할 때까지 버틸 수 있는 최대 \(V_n\)이 바로 그 로브에 내접하는 정사각형의 변 길이다. 두 로브 중 작은 쪽이 셀의 SNM이다.
그림에서 보듯 SNM은 상태에 따라 세 가지로 나눠 본다.
- 홀드 SNM: WL이 꺼진 상태. 순수한 두 인버터의 곡선이라 날개가 넓다. 대기 전압을 얼마까지 낮출 수 있는지(데이터 보존 전압, DRV)를 정한다.
- 읽기 SNM: WL이 켜지고 비트라인이 VDD인 상태. PG가 '0' 노드를 끌어올려 날개가 좁아진다. 보통 셀 안정성의 한계를 정하는 값이다.
- 쓰기 마진(쓰기 SNM): 한쪽 비트라인이 0인 상태. 쓰기가 성공하려면 오히려 날개 하나가 사라져야 한다(단안정). 곡선이 한 점에서만 만나면 셀은 원하는 값으로 강제로 옮겨 간다.
곡선 좌표를 45° 회전시키면 정사각형 찾기가 간단해진다. 기울기 1인 직선 \(V_{QB} = V_Q + c\) 위에서 두 곡선과의 교점 사이 가로 거리 \(d(c)\)를 재면, 정사각형의 두 꼭짓점은 항상 이런 대각선 위에 놓이므로
버터플라이 곡선과 SNM
SNM은 전압만 보는 지표라, 셀을 뒤집는 데 필요한 전류에 대한 정보가 없다. 그래서 저전압 설계에서는 노드에 전압을 강제로 인가하며 흘러드는 전류를 재는 N-곡선(N-curve)을 함께 쓴다. N-곡선의 최대 전류(SINM)와 전압 폭(SVNM)은 읽기 안정성을, 쓰기 쪽 전류(WTI)는 쓰기 능력을 나타낸다. 측정도 단일 스윕으로 가능해 실리콘 특성화에 편리하다.
센스 앰프: 작은 차이를 디지털로
셀이 비트라인에 만든 수십 mV의 차이를 0 V / VDD의 디지털 값으로 바꾸는 회로가 센스 앰프(Sense Amplifier, SA)다. SRAM에서 가장 흔한 형태는 래치형 센스 앰프(latch-type SA)로, 구조가 SRAM 셀과 똑같은 교차 결합 인버터에 꼬리(tail) 트랜지스터를 단 것이다. 먼저 격리 스위치(ISO)를 통해 BL, BLB 전압을 내부 노드에 옮기고, 격리한 뒤 SAE로 꼬리 트랜지스터를 켜면 루프 이득이 작은 차이를 기하급수적으로 키운다. 그림 3-1에서 본 준안정점 근처의 '굴러떨어짐'을 일부러 이용하는 것이다.
재생 초기에는 두 노드가 준안정점 근처에서 선형 증폭기처럼 동작하므로 차이 전압은 다음처럼 자란다.
SA 오프셋은 트랜지스터 불일치에서 오는 확률 변수라, 칩의 수만 개 SA 모두가 올바로 판정하려면 \(\Delta V_{in}\)이 오프셋 표준편차 \(\sigma_{os}\)(보통 10~20 mV)의 5~6배는 되어야 한다. 그래서 50~100 mV가 전형적인 목표가 된다. ΔV를 키우려면 SAE를 늦춰야 하고(속도 손해), 오프셋을 줄이려면 SA 트랜지스터를 키워야 한다(면적 손해). 4장의 DRAM 비트라인 센스 앰프도 같은 교차 결합 구조지만, 셀이 스스로 비트라인을 구동하지 못하고 전하 공유만 하므로 신호가 훨씬 작다.
센스 앰프 차동 증폭과 오프셋
SRAM 어레이와 스케일링 둔화
셀들을 행과 열로 배열하고 주변 회로를 붙인 단위를 SRAM 매크로(macro)라 한다. 주소가 들어오면 상위 비트는 행 디코더로 가서 한 WL을 고르고, 하위 비트는 컬럼 먹스를 제어해 한 행의 여러 열 가운데 일부만 센스 앰프나 쓰기 드라이버에 연결한다.
배열 크기는 속도·전력·면적의 절충이다. 비트라인을 짧게(행 수를 적게) 하면 빠르지만 주변 회로 비율이 늘어 면적 효율(array efficiency)이 떨어진다. WL을 길게 하면 WL 지연과 RC가 커지고, 반선택 셀이 늘어 전력이 증가한다. 그래서 L1은 작은 서브어레이로 빠르게, L3는 큰 서브어레이로 조밀하게 만든다. 매크로 밀도는 셀 면적의 70% 수준이 보통이다.
SRAM 스케일링의 벽
오랫동안 SRAM 셀은 로직과 함께 세대마다 약 0.5배씩 줄었다. 그러나 FinFET 이후 감소폭이 급격히 줄었고, 3nm급에서는 사실상 멈췄다.
| 공정 (TSMC 기준) | HD 6T 셀 면적 (µm²) | 이전 세대 대비 | 비고 |
|---|---|---|---|
| 16nm FinFET (2015) | ≈ 0.074 | — | 첫 FinFET |
| N7 (2018) | ≈ 0.027 | (10nm 0.042 대비) ≈ 0.64× | |
| N5 (2020) | ≈ 0.021 | ≈ 0.78× | EUV 본격 도입 |
| N3E (2023) | ≈ 0.021 | ≈ 1.0× (축소 없음) | 로직은 약 1.6× 조밀 |
| N2 (2025~) | ≈ 0.0175 (발표치) | ≈ 0.83× | GAA 나노시트, 약 38 Mb/mm² (2024 IEDM) |
이유는 세 가지다. 첫째, 셀은 이미 금속 배선·게이트 피치의 최소 규칙으로 꽉 차 있어 '빈 공간'이 없다. 둘째, 핀 개수가 1개인 트랜지스터는 더 줄일 폭이 없고, 핀 하나에 몰린 무작위 변동(σVt)이 셀 안정성을 위협한다. 셋째, 셀이 작아질수록 비트라인·워드라인 배선 저항이 커져 성능이 떨어진다. 결과적으로 칩에서 SRAM이 차지하는 면적 비중이 커졌고, 이것이 L3 캐시를 별도 다이로 떼어 쌓는(3D V-Cache) 설계나, 캐시를 구형 공정 칩렛으로 옮기는 설계가 등장한 배경이다.
N5의 0.021 µm²를 최소 금속 피치의 절반(약 14 nm) 기준 F²로 환산하면 100 F²가 넘는다. DRAM의 6 F²와 비교하면 비트당 면적이 한 자릿수 이상 크다. 같은 면적에 DRAM이 훨씬 많은 비트를 담을 수 있어도 캐시에 SRAM을 쓰는 것은, 로직 공정과 통합되고 몇 사이클 만에 응답하기 때문이다.
저전압 동작: 8T 셀, Vmin, 변동성
동적 전력은 \(P \propto C V_{DD}^2 f\)라서 전압을 낮추는 것이 가장 강력한 전력 절감 수단이다. 로직은 0.5 V 근처까지 문제없이 내려가지만, SRAM은 대개 그보다 먼저 실패한다. 칩이 정상 동작하는 최저 전압을 Vmin이라 하며, 많은 SoC에서 Vmin은 SRAM이 결정한다.
원인은 무작위 변동이다. 트랜지스터 채널에 들어 있는 도펀트 원자 수, 게이트 금속의 결정립, 핀 폭 편차 때문에 같은 설계라도 트랜지스터마다 문턱 전압이 조금씩 다르다. Pelgrom 법칙에 따르면 그 표준편차는 게이트 면적의 제곱근에 반비례한다.
캐시 하나에는 셀이 수천만~수십억 개 있으므로, '평균적인 셀'이 아니라 가장 나쁜 셀이 설계를 결정한다. 32 MB L3라면 약 2.7×108비트다. 수율 99%를 얻으려면 셀 실패 확률이 약 \(3.7\times10^{-11}\) 이하, 정규분포로 치면 평균에서 약 6.5σ 떨어진 꼬리까지 안전해야 한다. 이런 확률은 직접 셀 수 없으므로, 수천 번의 몬테카를로(Monte Carlo) 시뮬레이션으로 SNM 분포의 평균 μ와 표준편차 σ를 구한 뒤 가우시안으로 꼬리를 외삽하거나, 중요도 샘플링(importance sampling) 같은 기법을 쓴다.
8T 셀: 읽기 경로를 떼어 내다
6T 셀의 근본 약점은 읽기 전류가 저장 노드를 거쳐 흐른다는 것이다. 8T 셀은 트랜지스터 두 개로 된 별도 읽기 포트를 붙여 이 문제를 없앤다. 읽기 때는 읽기 워드라인(RWL)만 켜고, 저장 노드 QB는 읽기 트랜지스터의 게이트만 구동한다. 게이트로는 전류가 흐르지 않으므로 읽기가 셀을 교란하지 않는다. 읽기 SNM이 홀드 SNM과 같아지는 셈이다.
8T는 면적 부담 때문에 L1 캐시나 레지스터 파일처럼 작고 저전압·다중 포트가 중요한 곳에 주로 쓰인다. 대용량 L2·L3는 여전히 6T에 WL 언더드라이브, 음의 비트라인, 셀 전원 낮추기(cell supply collapse) 같은 어시스트를 조합해 Vmin을 낮춘다. HD 6T 셀의 Vmin은 공정과 어시스트에 따라 대략 0.6~0.7 V 수준이며, 어시스트로 0.5 V대까지 끌어내린 발표도 있다.
Vmin 몬테카를로
SRAM으로 만드는 캐시
캐시는 SRAM 배열 두 개로 이루어진다. 실제 데이터를 담는 데이터 배열과, 그 데이터가 메인 메모리의 어느 주소에서 왔는지 기록하는 태그 배열이다. 캐시는 데이터를 캐시 라인(cache line, 블록) 단위(보통 64 B)로 옮긴다. 1장에서 본 공간 지역성을 활용하기 위해서다.
사상 방식: 블록이 들어갈 수 있는 자리
용량 \(C\), 라인 크기 \(B\), 연관도 \(A\)인 캐시의 세트 수와 주소 필드 폭은 다음과 같다.
흥미로운 점: 32 KB·8-way·64 B L1에서 인덱스+오프셋은 12비트로, 4 KB 페이지 오프셋과 정확히 같다. 그래서 가상 주소로 세트를 고르면서 동시에 TLB에서 물리 태그를 얻는 VIPT(Virtually Indexed, Physically Tagged) 구조가 앨리어싱 없이 가능하다. L1 용량을 늘리려면 연관도도 함께 늘려야 하는 이유다(48 KB 12-way 등).
주소 분해기: tag / index / offset
교체 정책과 쓰기 정책
세트가 가득 찬 상태에서 미스가 나면 한 라인을 쫓아내야 한다. LRU(Least Recently Used)는 가장 오래 쓰지 않은 라인을 버린다. 시간 지역성이 있는 대부분의 프로그램에서 잘 동작하지만, way 수보다 딱 조금 큰 작업 집합을 순환하면 매번 곧 쓸 라인을 버려 히트율이 0%가 되는 병적인 경우가 있다. 실제 하드웨어는 정확한 LRU 대신 비트 수가 적은 트리 PLRU나, 스캔에 강한 RRIP 계열을 쓴다. FIFO와 무작위 교체는 구현이 간단하다.
쓰기에는 두 가지 선택이 있다. 라이트 스루(write-through)는 쓸 때마다 하위 계층에도 쓰고, 라이트 백(write-back)은 캐시에만 쓰고 dirty 비트를 세운 뒤 라인이 쫓겨날 때 한꺼번에 내려보낸다. 쓰기 미스에서는 라인을 가져와서 쓰는 write-allocate와 그냥 아래로 보내는 no-write-allocate가 있다. 현대 CPU의 L1D·L2·L3는 대부분 write-back + write-allocate다.
미스는 원인에 따라 세 가지로 나눈다. 강제 미스(compulsory): 처음 접근하는 블록이라 무조건 나는 미스. 용량 미스(capacity): 같은 크기의 완전 연관 캐시에서도 나는 미스, 즉 작업 집합이 캐시보다 크다. 충돌 미스(conflict): 완전 연관이라면 히트였을 텐데 세트가 좁아서 난 미스. 연관도를 높이면 충돌 미스가, 용량을 늘리면 용량 미스가, 라인을 키우거나 프리페치하면 강제 미스가 준다. 아래 시뮬레이터는 같은 용량의 완전 연관 LRU 캐시를 그림자로 함께 돌려 이 분류를 계산한다.
세트 연관 캐시 시뮬레이터
캐시 성능은 결국 1장의 평균 메모리 접근 시간으로 요약된다. \(AMAT = t_{hit} + m \cdot t_{miss}\). 연관도를 높이면 \(m\)이 줄지만 \(t_{hit}\)이 늘어난다. 그래서 L1은 작고 빠르게(4~5 사이클, 8~12-way), L2는 중간(약 12~16 사이클), L3는 크고 연관도가 높게(수십 사이클, 12~16-way) 만드는 계층 구조가 자리 잡았다. 캐시와 DRAM을 합친 시스템 수준 설계는 13장에서 다시 다룬다.
핵심 정리
- SRAM 셀은 교차 결합 인버터(쌍안정 래치)로 값을 붙잡는다. 두 안정점과 하나의 준안정점이 있고, 루프 이득 > 1이 재생을 만든다.
- 6T 셀 = PU 2 + PD 2 + PG 2. 세기 순서는 PD > PG > PU. 로직과 같은 공정이라 임베디드가 쉽고, 리프레시가 필요 없으며 읽기가 비파괴적이다.
- 읽기: 프리차지 → WL → 차동 방전(\(\Delta V = I_{read}t/C_{BL}\)) → 센스 앰프. PG–PD 분배로 '0' 노드가 들뜨는 읽기 교란을 막으려면 셀 비 β = PD/PG가 커야 한다.
- 쓰기: 쓰기 드라이버가 한 BL을 0으로 끌고 PG가 PU를 이겨야 한다. 풀업비 PR = PU/PG가 작아야 하며, 읽기 안정성과 쓰기 능력은 상충한다.
- SNM은 버터플라이 곡선의 두 날개에 내접하는 최대 정사각형의 한 변이다. 읽기 SNM ≪ 홀드 SNM이며, VDD·β·문턱 전압 변동에 민감하다.
- 래치형 센스 앰프는 \(e^{t/\tau}\)로 차이를 키우며, ΔV는 SA 오프셋 σ의 수 배(50~100 mV)가 필요하다.
- SRAM 셀 면적은 N5 ≈ 0.021 µm²에서 N3E에서 정체되어 스케일링이 둔화됐다. Vmin은 무작위 변동과 최악의 셀이 정하며, 8T 셀·어시스트·몬테카를로 기반 6σ 설계로 대응한다.
- 캐시: \(S = C/(B\cdot A)\), 주소 = tag | index | offset. 연관도는 충돌 미스를 줄이고, 교체(LRU 등)·쓰기(write-back) 정책과 3C 분류로 성능을 분석한다.
확인 퀴즈
1. 6T 셀의 읽기 교란(읽기 중 '0' 노드가 들떠 셀이 뒤집힘)을 줄이는 가장 직접적인 방법은?
2. Q = 1인 셀에 0을 쓰려 한다. 쓰기가 성공하려면 어느 트랜지스터가 어느 트랜지스터를 이겨야 하는가?
3. 버터플라이 곡선에서 SNM은 무엇으로 정의하는가?
4. 32 KB, 8-way 세트 연관, 64 B 라인, 48비트 주소 캐시의 태그 비트 수는?
5. 8T 셀이 6T 셀보다 저전압에서 유리한 가장 큰 이유는?
6. 4-way 세트 하나에 매핑되는 블록 5개를 A, B, C, D, E, A, B, … 순서로 반복 접근한다. LRU 교체 시 정상 상태의 히트율은?