Chapter 02

트랜지스터에서 동기 회로까지

스마트폰 칩의 프라임 코어는 1초에 약 40억 번 "똑딱"한다. 한 번의 똑딱 사이, 250조 분의 1초 남짓 동안 수억 개의 스위치가 켜지고 꺼지며 신호가 레지스터에서 레지스터로 건너간다. 신호가 제때 도착하지 못하면 계산은 틀린다. 그렇다면 클럭을 더 빠르게 돌리지 못하게 막는 것은 정확히 무엇일까? 이 장에서는 트랜지스터 하나를 손가락으로 켜 보는 데서 출발해, 게이트가 신호를 늦추는 이유, 플립플롭이 시간을 잘게 끊는 방법, 그리고 칩 전체에서 가장 느린 길 하나가 최대 클럭을 정하는 과정까지 차례로 만져 본다.

전압으로 켜는 스위치, MOSFET

디지털 회로의 원자는 MOSFET(Metal–Oxide–Semiconductor Field-Effect Transistor)이다. 구조는 단순하다. 실리콘에 두 개의 단자 소스(Source)와 드레인(Drain)을 만들고, 그 사이 위에 아주 얇은 절연막을 깔고 게이트(Gate) 전극을 올린다. 게이트에 전압을 걸면 절연막 아래에 전하가 끌려와 소스와 드레인 사이에 얇은 도랑, 즉 채널(Channel)이 생긴다. 채널이 생기면 전류가 흐르고, 없으면 흐르지 않는다. 게이트는 손잡이, 채널은 수도관이다.

아래 그림에서 게이트를 누르거나 슬라이더를 끌어 보자. 게이트 전압이 문턱 전압(Threshold voltage, \(V_t\))을 넘는 순간 채널이 열리고 전자가 흐르기 시작한다. 오른쪽 그래프는 세로축이 로그 눈금이라는 점에 주의하자. 꺼져 있을 때도 전류가 0은 아니다.

스위치 상태—
드레인 전류—
켜짐/꺼짐 전류비—
그림 2-1. 만져 보기단면도의 게이트(회색 막대)를 누르면 0 V와 0.8 V 사이를 오간다. nMOS는 게이트가 높을 때 전자 채널이 생기고, pMOS는 게이트가 낮을 때 정공 채널이 생긴다. 문턱 아래에서도 전류는 10 mV마다 몇십 %씩 지수적으로 줄어들 뿐 0이 되지 않는다. 이것이 12장에서 다룰 누설 전류다. 수치는 3 nm급 공정을 닮게 만든 교육용 모델(\(V_t\)=0.25 V, 부문턱 기울기 70 mV/decade).

nMOS와 pMOS는 서로 거울상이다. nMOS는 게이트가 1일 때 켜지고, pMOS는 게이트가 0일 때 켜진다. 또 하나 중요한 차이가 있다. nMOS는 출력을 0(GND)으로 끌어내리는 데 능하고, pMOS는 1(\(V_{DD}\))로 끌어올리는 데 능하다. 그래서 디지털 회로는 둘을 짝지어 쓴다. 이것이 CMOS(Complementary MOS)다.

평면에서 핀, 그리고 GAA로

교과서 그림의 MOSFET은 평평하지만, 22 nm 이후의 트랜지스터는 채널을 지느러미처럼 세운 FinFET이고, 3 nm급부터는 채널을 얇은 판 여러 장으로 쌓고 게이트가 사방을 감싸는 GAA(Gate-All-Around, 나노시트)로 넘어가고 있다. 목적은 하나다. 게이트가 채널을 더 꽉 쥐어 꺼졌을 때 새는 전류를 줄이는 것. 공정의 자세한 이야기는 시리즈의 ProcessBook에 있다. 이 책에서는 "전압으로 켜는 스위치"라는 추상화로 충분하다.

CMOS 인버터: 가장 작은 논리 게이트

pMOS 하나를 \(V_{DD}\)와 출력 사이에, nMOS 하나를 출력과 GND 사이에 놓고 두 게이트를 묶어 입력으로 쓰면 인버터(Inverter, NOT 게이트)가 된다. 입력이 0이면 pMOS가 켜지고 nMOS가 꺼져 출력이 1이 된다. 입력이 1이면 반대다. 정지 상태에서는 둘 중 하나가 늘 꺼져 있으므로 \(V_{DD}\)에서 GND로 곧장 흐르는 전류가 (누설을 빼면) 없다. CMOS가 반세기 동안 살아남은 이유가 바로 이 정적 전력 0이다.

그렇다면 입력이 0과 1 사이 어중간한 값이면 어떻게 될까? 오른쪽 그래프의 점을 좌우로 끌어 입력 전압을 바꿔 보자. 출력 곡선을 전압 전달 특성(VTC, Voltage Transfer Characteristic)이라 한다.

출력 \(V_{out}\)—
이득 |dVout/dVin|—
스위칭 문턱 \(V_M\)—
관통 전류—
그림 2-2. 끌어 보기그래프 위 아무 곳이나 좌우로 끌면 입력 전압이 바뀐다. 왼쪽 회로도에서 트랜지스터의 밝기는 얼마나 강하게 켜졌는지, 가운데 화살표 굵기는 \(V_{DD}\)에서 GND로 곧장 새는 관통 전류다(그래프의 점선). 관통 전류는 입력이 중간쯤일 때만 흐른다. pMOS를 약하게 만들면 문턱 \(V_M\)이 왼쪽으로 움직인다.

VTC에서 두 가지를 읽을 수 있다. 첫째, 가운데 부분의 기울기가 매우 가파르다. 입력이 조금만 바뀌어도 출력이 크게 바뀌는, 즉 이득이 1보다 큰 구간이 있다. 덕분에 잡음이 섞여 0.1 V쯤 어긋난 신호도 인버터를 한 번 지나면 다시 깨끗한 0이나 1로 복원된다. 아날로그 신호는 단을 거칠수록 잡음이 쌓이지만 디지털 신호는 매 단마다 다시 "정답"으로 끌려간다. 이것이 디지털이 수십억 개의 게이트를 이어 붙여도 망가지지 않는 근본 이유다.

둘째, 입력이 \(V_M\) 근처를 지나는 짧은 순간에는 두 트랜지스터가 동시에 반쯤 켜져 관통 전류가 흐른다. 입력 신호가 천천히 바뀔수록 이 시간이 길어져 에너지를 낭비한다. 설계 도구가 신호의 천이 시간(Slew)에 상한을 두는 이유다.

인버터 두 개를 이어 붙이면 이득은 어떻게 될까?

인버터 하나의 가운데 이득이 약 15라면, 두 개를 직렬로 이은 버퍼의 가운데 이득은?

답 보기

이득은 곱해지므로 약 15 × 15 = 225가 된다. 출력은 \(V_{DD}\)와 0 사이에 갇혀 있으니 VTC는 거의 계단 모양이 된다. 그래서 칩 안의 긴 배선 중간에는 버퍼(인버터 두 개)를 넣어 신호를 날카롭게 되살린다. 이를 리피터라 부른다.

스위치를 엮어 논리 만들기: NAND와 NOR

인버터의 pMOS와 nMOS를 여러 개로 늘리면 입력이 둘 이상인 게이트가 된다. 규칙은 하나다. 스위치를 직렬로 이으면 AND, 병렬로 이으면 OR. 직렬은 둘 다 켜져야 통하고, 병렬은 하나만 켜져도 통한다. 출력을 GND로 끌어내리는 nMOS 무리를 풀다운 망(Pull-down network), \(V_{DD}\)로 끌어올리는 pMOS 무리를 풀업 망(Pull-up network)이라 한다. 둘은 언제나 서로의 쌍대(직렬↔병렬)로 만들어 어느 입력 조합에서도 정확히 한쪽만 통하게 한다.

그림 2-3. 눌러 보기입력 버튼, 회로도의 A·B 글자, 진리표의 행을 눌러 입력을 바꿔 보자. 켜진 스위치는 닫힌 선, 꺼진 스위치는 열린 선이다. 출력에서 \(V_{DD}\)까지 길이 이어지면 출력은 1(분홍), GND까지 이어지면 0(파랑)이다. NAND는 nMOS가 직렬이라 두 입력이 모두 1일 때만 출력이 0으로 끌려 내려간다.

CMOS 게이트는 본질적으로 반전한다. 입력이 올라가면 nMOS가 켜져 출력이 내려가기 때문이다. 그래서 트랜지스터 4개로 만드는 가장 싼 2입력 게이트는 AND가 아니라 NAND와 NOR다. AND가 필요하면 NAND 뒤에 인버터를 붙여 6개로 만든다. NAND 하나만 있으면 어떤 논리 함수든 만들 수 있으므로(함수적 완전성) 실제 칩의 표준 셀 라이브러리(Standard cell library)에는 NAND·NOR·인버터를 기본으로, AOI·OAI 같은 복합 게이트, 멀티플렉서, 플립플롭까지 수백~수천 종의 셀이 크기별로 준비되어 있다. 합성 도구는 설계자가 쓴 하드웨어 기술 언어(Verilog 등)를 이 셀들의 그물로 바꾼다.

NAND와 NOR가 같은 트랜지스터 4개를 쓰는데도 실제 칩에서는 NAND를 더 좋아한다. NOR는 pMOS 두 개가 직렬인데, pMOS는 전통적으로 nMOS보다 약해서(정공의 이동도가 낮다) 직렬로 이으면 출력을 끌어올리는 힘이 크게 떨어진다. 같은 속도를 내려면 pMOS를 키워야 하고, 그만큼 입력 커패시턴스가 커진다. 다음 절에서 보듯 이것이 곧 지연이다.

게이트 지연: 커패시터를 채우는 시간

스위치가 켜지는 순간 출력이 곧바로 바뀌지는 않는다. 출력에는 다음 게이트들의 입력(게이트 전극은 작은 커패시터다), 배선, 자기 자신의 드레인이 매달려 있고, 이 부하 커패시턴스(Load capacitance)를 켜진 트랜지스터의 저항을 통해 채우거나 비워야 한다. 물통을 호스로 채우는 것과 같다. 호스가 가늘수록(저항 \(R\)이 클수록), 물통이 클수록(\(C\)가 클수록) 오래 걸린다. 출력 전압은 지수적으로 움직이고, 절반에 이르는 시간이 게이트의 전파 지연(Propagation delay, \(t_{pd}\))이다.

$$V_{out}(t) = V_{DD}\,e^{-t/RC}, \qquad t_{pd} = RC\ln 2 \approx 0.69\,RC$$
\(R\): 켜진 트랜지스터의 등가 저항(폭에 반비례), \(C\): 출력에 매달린 전체 커패시턴스(다음 게이트 입력 + 배선 + 자기 기생).
구동 저항 R—
부하 C—
지연 tpd—
FO4 몇 개분—
그림 2-4. 만져 보기구동 게이트를 키우면 저항이 줄어 빨라지지만, 그만큼 앞 게이트가 보는 입력 커패시턴스가 커진다(공짜가 아니다). 팬아웃을 늘리거나 배선을 길게 하면 물통이 커진다. 배선 1 µm는 약 0.2 fF로, 최소 게이트 입력(약 0.15 fF)보다 크다. 회로도 오른쪽의 물통 높이는 그래프 위를 지나는 시간 커서의 출력 전압이다.

공정마다 트랜지스터의 저항과 커패시턴스가 달라서 "게이트 지연 몇 ps"라는 숫자는 공정끼리 비교하기 어렵다. 그래서 설계자들은 공정에 독립적인 잣대를 쓴다. 인버터 하나가 자기와 똑같은 인버터 네 개를 구동할 때의 지연, FO4 지연(Fan-out-of-4 delay)이다. 위 그림의 기본 설정(크기 1, 팬아웃 4, 배선 0)이 정확히 FO4다. 회로의 속도를 "FO4 몇 개"로 말하면 공정이 바뀌어도 설계의 깊이를 비교할 수 있다.

공정 노드대략 연도FO4 지연 (약)공급 전압 (약)비고
180 nm1999~65 ps1.8 V"FO4 ≈ 0.36 ps × 게이트 길이(nm)" 경험식이 잘 맞던 시대
90 nm2004~30 ps1.1~1.2 V누설이 커지며 전압 낮추기가 둔해짐
45 nm2008~15 ps~1.0 Vhigh-k 금속 게이트 도입
16/14 nm2015~9 ps~0.8 VFinFET. 배선 지연 비중이 커짐
7 nm2018~6 ps~0.75 VEUV 도입 시작
3 nm급2023~~4–6 ps0.65~0.8 VFinFET 마지막 세대 / GAA 시작

표의 FO4 값은 공개 논문·발표의 링 오실레이터 측정과 경험식을 바탕으로 한 대략값이다. 배선 부하, 전압, 온도, 문턱 전압 선택(HVT/LVT)에 따라 수십 %씩 달라진다.

게이트를 줄지어 세우면

실제 논리는 게이트 하나가 아니라 여러 게이트의 사슬이다. 사슬의 지연은 각 단 지연의 합이다. 단의 지연은 그 게이트가 얼마나 "굼뜬가"(같은 입력 커패시턴스로 인버터보다 전류를 얼마나 덜 내는가, 논리적 노력(Logical effort, g))와 얼마나 무거운 짐을 지는가(팬아웃 h), 그리고 자기 기생 지연 p로 정해진다. 아래 사슬의 게이트를 눌러 종류를 바꾸고, 입력을 뒤집어 천이가 사슬을 따라 번지는 모습을 보자.

$$d_{\text{단}} = g\,h + p \quad [\tau], \qquad g_{\text{INV}}=1,\; g_{\text{NAND2}}=\tfrac{4}{3},\; g_{\text{NOR2}}=\tfrac{5}{3}$$
\(\tau\)는 공정의 기본 시간 단위(3 nm급에서 약 1.2 ps, 그래서 FO4 ≈ 6 ps). 인버터는 \(p=1\), 2입력 NAND·NOR는 \(p=2\). FO4 = \(1\cdot4+1 = 5\tau\). (Sutherland·Sproull·Harris의 논리적 노력 모델)
사슬 전체 지연—
시간으로 (τ≈1.2 ps)—
FO4로 환산—
그림 2-5. 눌러 보기위쪽 게이트를 누를 때마다 인버터 → NAND2 → NOR2로 바뀐다(나머지 입력은 통과값으로 고정). "입력 뒤집기"를 누르면 아래 파형에서 천이가 한 단씩 늦게, 그리고 0과 1을 번갈아 가며 번지는 모습을 슬로 모션으로 보여 준다. 각 파형의 기울어진 부분 길이가 그 단의 지연이다.

플립플롭: 시간을 잘라 주는 문

조합 논리(Combinational logic)만으로는 계산을 "단계"로 나눌 수 없다. 입력이 바뀌면 출력이 제각각의 지연을 거쳐 출렁이다 결국 자리를 잡을 뿐이다. 칩은 이 출렁임을 일정한 박자로 잘라 낸다. 그 칼이 플립플롭(Flip-flop)이다. D 플립플롭은 클럭이 0에서 1로 올라가는 순간(상승 에지)의 입력 D를 붙잡아 다음 에지까지 출력 Q로 내보낸다. 그 사이에 D가 아무리 출렁여도 Q는 흔들리지 않는다. 칩 전체가 같은 클럭에 맞춰 움직이는 이런 회로를 동기 회로(Synchronous circuit)라 한다.

플립플롭 안에는 인버터 두 개를 고리로 이은 래치가 있다. 고리는 0이나 1 어느 쪽으로든 스스로를 붙잡는 두 개의 안정점을 가진다. 그런데 이 고리에는 위태로운 세 번째 점도 있다. 정확히 가운데, \(V_{DD}/2\)에 공을 올려놓은 상태다. 클럭 에지 바로 근처에서 D가 바뀌면 래치는 이 꼭대기 근처에 걸리고, 조금씩 기울다 결국 한쪽으로 굴러떨어지는데, 언제 떨어질지는 처음 기울기에 달려 있다. 이것이 준안정 상태(Metastability)다.

그래서 플립플롭에는 지켜야 할 시간 규칙이 있다. 데이터는 클럭 에지보다 최소 setup 시간만큼 먼저 도착해 있어야 하고, 에지 후 최소 hold 시간만큼 그대로 있어야 한다. 아래 파형에서 D의 천이(손잡이)를 좌우로 끌어 클럭 에지에 가까이 가져가 보자.

SIMULATOR

setup·hold 위반과 준안정

동기화기 플립플롭 단 수
비동기 입력 10만 번 무작위로 넣기
—
판정—
실제 clk→Q 지연—
실패 확률 (입력 천이 1회당)—
평균 고장 간격 MTBF—
교육용 모델: setup 20 ps, hold 10 ps, 정상 clk→Q 25 ps, 래치의 재생 시정수 \(\tau\)=6 ps. 래치 내부 전압은 처음 기울기 \(\delta_0\)에서 \(\delta_0 e^{t/\tau}\)로 벌어진다. 클럭 2 GHz, 비동기 데이터의 천이율 200 MHz 가정. 여유 시간이 \(\tau\) 하나 늘 때마다 실패 확률이 \(e\)배(약 2.7배) 줄어든다.

D를 에지에서 멀리 떨어뜨리면 Q는 늘 같은 시간(clk→Q 지연) 뒤에 깔끔하게 바뀐다. 그러나 setup·hold 창 안으로 들어가면 Q가 한동안 \(V_{DD}/2\) 근처에서 머뭇거린다. 손잡이를 균형점에 가까이 댈수록 머뭇거림은 길어지고, 원리적으로는 상한이 없다. 머뭇거리는 Q를 다음 회로가 읽으면 어떤 게이트는 0으로, 어떤 게이트는 1로 읽어 시스템이 모순에 빠진다.

$$\text{MTBF} = \frac{e^{\,t_r/\tau}}{T_0\, f_{clk}\, f_{data}}$$
\(t_r\): 준안정을 풀 여유 시간, \(\tau\): 래치의 재생 시정수, \(T_0\): 위험 창의 유효 폭, \(f_{clk}\)·\(f_{data}\): 클럭과 데이터 천이 빈도.

같은 클럭을 쓰는 회로 안에서는 설계 도구가 모든 경로의 setup·hold를 검사하므로 준안정이 생기지 않는다. 문제는 버튼 입력, 다른 클럭으로 도는 블록에서 온 신호처럼 박자가 다른 신호다. 그 도착 시각은 클럭과 무관하므로 언젠가는 반드시 창 안에 떨어진다. 해법은 실패를 없애는 것이 아니라 확률을 우주 나이보다 작게 만드는 것이다. 플립플롭을 두세 개 직렬로 이어 첫 단이 준안정에 빠져도 한 클럭 주기를 통째로 줘서 풀리게 하는 동기화기(Synchronizer)가 그것이다. 위 시뮬레이터에서 단 수를 2로 바꾸면 MTBF가 몇 자리나 뛰는지 보자. 클럭 도메인 사이를 건너는 더 많은 기법은 14장에서 다룬다.

임계 경로가 최대 클럭을 정한다

이제 조각을 모으자. 동기 회로에서 데이터는 출발 플립플롭에서 클럭 에지에 맞춰 튀어나와(clk→Q), 조합 논리를 지나, 도착 플립플롭의 다음 에지보다 setup 시간 전에 도착해야 한다. 회로 안에는 이런 경로가 수백만 개 있고, 그중 가장 느린 경로, 즉 임계 경로(Critical path)가 클럭 주기의 하한을 정한다.

$$T_{clk} \;\ge\; t_{clk\to Q} + t_{logic,\max} + t_{setup} - \delta_{skew}, \qquad f_{\max} = \frac{1}{T_{clk,\min}}$$ $$\text{hold 조건:}\quad t_{clk\to Q} + t_{logic,\min} \;\ge\; t_{hold} + \delta_{skew}$$
\(\delta_{skew}\): 도착 플립플롭의 클럭이 출발 플립플롭보다 늦게 도착한 정도(클럭 스큐). setup에는 도움이 되지만 hold에는 해가 된다.

아래 회로는 레지스터 세 개에서 출발해 게이트 일곱 개를 지나 레지스터 두 개로 들어가는 작은 조합 논리다. 각 게이트 안의 숫자는 지연(ps)이다. 게이트를 눌러 지연을 바꿔 보면 임계 경로(분홍)가 다른 길로 옮겨 가는 것을 볼 수 있다. 게이트 위의 작은 숫자는 그 지점에 신호가 가장 늦게 도착하는 시각이다. 설계 도구가 하는 정적 타이밍 분석(STA, Static Timing Analysis)이 바로 이 계산을 수억 개 게이트에 대해 반복하는 것이다.

SIMULATOR

정적 타이밍 분석 놀이터

게이트 지연 일괄
최장 경로 (로직만)—
최대 클럭 fmax—
setup 여유 (목표 클럭)—
hold 여유 (최단 경로)—
게이트를 누르면 지연이 10 → 20 → … → 60 ps로 돌아간다. hold 시간은 8 ps로 고정했다. 스큐를 크게 양수로 주면 setup 여유는 늘지만 R3 → R5의 짧은 경로에서 hold가 깨진다. hold 위반은 클럭을 늦춰도 고쳐지지 않는다는 점에 주의하자(식에 \(T_{clk}\)이 없다). 그래서 실제 칩에서는 짧은 경로에 일부러 버퍼를 넣어 늦춘다.
임계 경로의 게이트 하나를 10 ps 빠르게 하면 fmax는 얼마나 오를까?

지금 임계 경로가 135 ps이고 두 번째로 느린 경로가 130 ps라면?

답 보기

그 게이트가 두 경로에 모두 들어 있지 않다면, 첫 번째 경로는 125 ps가 되지만 두 번째 경로(130 ps)가 새 임계 경로가 된다. 이득은 10 ps가 아니라 5 ps뿐이다. 실제 칩에는 임계 경로 근처에 비슷한 길이의 경로가 수천 개 몰려 있어서(이른바 "타이밍 벽"), 한 경로를 고치면 다른 경로가 튀어나온다. 위 시뮬레이터에서 "임계 경로 게이트 키우기"를 여러 번 눌러 확인해 보자.

최대 클럭을 정하는 것은 회로만이 아니다

STA는 가장 나쁜 조건(낮은 전압, 높은 온도, 느린 공정 편차)에서 검사한다. 같은 칩도 전압을 높이면 트랜지스터가 빨라져 fmax가 오른다. 스마트폰이 성능 모드에서 전압과 클럭을 함께 올리는 이유다(12장의 DVFS). 또 클럭 자체도 완벽하지 않아서 주기마다 조금씩 흔들리는 지터(Jitter)와 위치마다 다른 스큐만큼 여유를 남겨야 한다(14장).

경로를 잘라 클럭 올리기: 파이프라이닝

임계 경로가 너무 길면 어떻게 할까? 게이트를 키우는 데는 한계가 있다. 더 근본적인 방법은 긴 조합 논리 중간에 플립플롭을 끼워 넣어 경로를 자르는 것이다. 한 덩어리의 일을 여러 단계로 나누는 파이프라이닝(Pipelining)이다. 각 단계의 논리가 짧아지니 클럭을 올릴 수 있다. 대신 일 하나가 처음부터 끝까지 걸리는 시간, 즉 지연 시간(Latency)은 줄지 않고 오히려 늘어난다. 끼워 넣은 플립플롭마다 clk→Q와 setup이라는 "통행세"를 내야 하기 때문이다.

SIMULATOR

몇 단으로 자를까

로직을 자르는 방식
클럭 주파수—
처리량 향상 (N=1 대비)—
지연 시간 (일 하나)—
주기 중 오버헤드 비율—
위 막대는 로직을 이루는 12개의 덩어리(더 쪼갤 수 없는 게이트 묶음)이고, 세로선이 끼워 넣은 플립플롭이다. "게이트 덩어리 단위"에서는 덩어리 경계에서만 자를 수 있어 단의 길이가 고르지 않다. 가장 긴 단이 클럭을 정하므로, 단을 늘려도 이득이 계단처럼 띄엄띄엄 생긴다. 아래 그래프의 점선은 오버헤드가 0일 때의 이상적 향상이다.

단 수를 끝까지 늘려 보면 두 가지 벽을 만난다. 하나는 오버헤드의 벽이다. 로직을 아무리 잘게 잘라도 주기는 레지스터 오버헤드 아래로 내려가지 못하므로, 단이 많아질수록 주기에서 오버헤드가 차지하는 비율이 커지고 향상은 점점 둔해진다. 다른 하나는 균형의 벽이다. 로직은 원하는 곳에서 마음대로 자를 수 없어서 가장 긴 단이 전체 박자를 붙잡는다.

$$T_{clk} = \frac{t_{logic}}{N} + t_{o}, \qquad \text{처리량 향상} = \frac{t_{logic} + t_o}{t_{logic}/N + t_o} \;\xrightarrow{N\to\infty}\; 1 + \frac{t_{logic}}{t_o}$$

CPU에서 이 이야기는 그대로 3장의 파이프라인이 된다. 명령어 처리라는 긴 로직을 인출·해독·실행·메모리·기록 다섯 단계로 자르면 클럭을 다섯 배 가까이 올릴 수 있다. 2000년대 초 펜티엄 4는 이것을 20~31단까지 밀어붙였다가, 단이 깊어질수록 분기 예측이 틀렸을 때 버려야 하는 일이 많아지고 전력도 치솟는 문제에 부딪혔다. 오늘날 고성능 코어는 대략 10~20단 사이에서 균형을 잡는다.

스위칭 한 번의 값: \(CV^2\)

마지막으로 에너지를 보자. 출력이 0에서 1로 바뀔 때 전원은 부하 커패시터 \(C\)를 \(V_{DD}\)까지 채운다. 이때 전원이 내놓는 에너지는 \(CV_{DD}^2\)인데, 그중 절반만 커패시터에 저장되고 나머지 절반은 pMOS의 저항에서 열로 사라진다. 출력이 다시 1에서 0으로 떨어질 때는 저장된 절반이 nMOS를 통해 GND로 흘러가며 열이 된다. 결국 0→1→0 한 바퀴에 \(CV_{DD}^2\)가 모두 열이 된다. 저항 값과 상관없이 늘 정확히 절반씩이라는 점이 흥미롭다.

0→1 한 번 전원이 낸 에너지—
노드 하나 평균 전력 αCV²f—
이런 노드 2천만 개 (큰 코어 하나쯤)—
그림 2-6. 만져 보기왼쪽 회로에서 출력이 주기적으로 0과 1을 오간다. 충전할 때는 pMOS가, 방전할 때는 nMOS가 달아오른다. 오른쪽 그래프는 전압에 따른 에너지로, 전압을 0.9 V에서 0.6 V로 낮추면 에너지는 (0.6/0.9)² ≈ 0.44배가 된다. 전압이 전력 관리의 가장 강력한 손잡이인 이유다. 단, 전압을 낮추면 트랜지스터가 느려져 클럭도 함께 내려야 한다.
$$E_{0\to1\to0} = C V_{DD}^2, \qquad P_{dyn} = \alpha\, C\, V_{DD}^2\, f$$
\(\alpha\): 활동률(한 주기에 그 노드가 0→1로 바뀌는 확률). 칩 전체로는 \(\alpha C\)를 "실효 스위칭 커패시턴스"로 묶어 말한다. 큰 코어 하나는 대략 nF 수준이다.

이 식 하나에 이 장의 모든 것이 연결된다. 게이트를 키우면(빠르게) \(C\)가 늘고, 파이프라인을 깊게 하면 플립플롭이 늘어 \(C\)와 클럭 \(f\)가 함께 오른다. 전압을 올리면 트랜지스터가 빨라져 \(f\)를 올릴 수 있지만 에너지는 제곱으로 는다. 속도와 에너지는 언제나 맞바꾸는 관계다. 이 줄다리기가 다음 장들에서 CPU 코어를 설계할 때(3장, 4장), 그리고 칩 전체의 전력을 관리할 때(12장) 끝없이 되풀이된다.

어디에 쓰이는가: 클럭 게이팅

위 식의 \(\alpha\)가 0이면 동적 전력도 0이다. 일하지 않는 블록의 클럭을 멈추면 그 블록의 플립플롭과 클럭 배선이 전혀 스위칭하지 않는다. 클럭 배선은 칩에서 가장 활동률이 높은(\(\alpha=1\)) 노드라서 동적 전력의 30~40%를 차지하기도 한다. 그래서 거의 모든 플립플롭 묶음 앞에 클럭을 끄는 문(클럭 게이트 셀)이 자동으로 들어간다.

핵심 정리

  1. MOSFET은 게이트 전압으로 켜는 스위치다. nMOS는 1에서, pMOS는 0에서 켜지며, 꺼져 있어도 누설 전류가 흐른다.
  2. CMOS 게이트는 직렬·병렬 스위치의 쌍대 구조로, 정지 상태에서 전원과 접지 사이 길이 없고 이득이 커서 신호를 매 단 복원한다.
  3. 게이트 지연은 부하 커패시턴스를 트랜지스터 저항으로 충전하는 시간(\(\approx 0.69RC\))이며, 공정에 독립적인 잣대로 FO4를 쓴다.
  4. 플립플롭의 setup·hold를 어기면 준안정이 생기고 풀리는 시간은 상한이 없다. 비동기 신호는 다단 동기화기로 MTBF를 천문학적으로 키운다.
  5. 최대 클럭은 임계 경로 \(t_{cq}+t_{logic}+t_{setup}-\delta\)가 정한다. 파이프라이닝은 클럭을 올리지만 레지스터 오버헤드와 불균형이 한계를 만들고, 동적 에너지는 \(\alpha CV^2 f\)다.

확인 퀴즈

Q1. CMOS NAND2 게이트의 풀다운 망(nMOS)은 어떻게 연결되어 있는가?

NAND는 A와 B가 모두 1일 때만 출력이 0이어야 하므로 nMOS 두 개를 직렬로 잇는다. 풀업은 그 쌍대인 pMOS 병렬이다.

Q2. 어떤 게이트의 구동 저항이 10 kΩ, 부하가 2 fF이다. 전파 지연은 대략?

\(RC = 10^4 \times 2\times10^{-15} = 20\) ps, \(t_{pd} \approx 0.69 RC \approx 14\) ps.

Q3. clk→Q 30 ps, 최장 로직 220 ps, setup 20 ps, 스큐 0일 때 최대 클럭은?

\(T = 30+220+20 = 270\) ps → \(f = 1/270\,\text{ps} \approx 3.7\) GHz.

Q4. hold 위반이 난 칩을 실험실에서 살리려 한다. 가장 효과가 없는 방법은?

hold 조건 \(t_{cq}+t_{min} \ge t_{hold}+\delta\)에는 클럭 주기가 들어 있지 않다. 그래서 hold 위반은 클럭을 늦춰도 고쳐지지 않는 치명적 버그다.

Q5. 비동기 입력을 받는 동기화기의 여유 시간 \(t_r\)를 \(\tau\)의 10배만큼 늘리면 MTBF는?

MTBF는 \(e^{t_r/\tau}\)에 비례한다. \(e^{10} \approx 22{,}000\). 동기화기에 플립플롭을 한 단 더 넣어 한 주기를 통째로 주면 \(\tau\)의 수십 배가 늘어나므로 MTBF가 수십 자리 뛴다.

Q6. 공급 전압을 0.8 V에서 0.6 V로 낮추고 클럭은 그대로 둔다면(가능하다고 할 때) 동적 전력은?

\(P \propto V^2\)이므로 \((0.6/0.8)^2 = 0.5625\). 실제로는 전압을 낮추면 게이트가 느려져 클럭도 내려야 하므로 전력은 더 줄고 성능도 준다.