트랜지스터에서 동기 회로까지
스마트폰 칩의 프라임 코어는 1초에 약 40억 번 "똑딱"한다. 한 번의 똑딱 사이, 250조 분의 1초 남짓 동안 수억 개의 스위치가 켜지고 꺼지며 신호가 레지스터에서 레지스터로 건너간다. 신호가 제때 도착하지 못하면 계산은 틀린다. 그렇다면 클럭을 더 빠르게 돌리지 못하게 막는 것은 정확히 무엇일까? 이 장에서는 트랜지스터 하나를 손가락으로 켜 보는 데서 출발해, 게이트가 신호를 늦추는 이유, 플립플롭이 시간을 잘게 끊는 방법, 그리고 칩 전체에서 가장 느린 길 하나가 최대 클럭을 정하는 과정까지 차례로 만져 본다.
- MOSFET을 전압으로 조절하는 스위치로 이해하고, CMOS 인버터의 전압 전달 특성을 설명한다.
- 직렬·병렬 스위치로 NAND·NOR를 만들고, 게이트 지연이 RC 충전 시간이라는 것을 FO4로 가늠한다.
- 플립플롭의 setup·hold 조건을 어기면 준안정 상태가 생기는 이유와 동기화기의 원리를 안다.
- 임계 경로로 최대 클럭 주파수를 계산하고, 클럭 스큐가 setup과 hold에 반대로 작용함을 확인한다.
- 파이프라이닝이 주파수와 지연 시간을 맞바꾸는 방식과 스위칭 에너지 \(CV^2\)의 뜻을 익힌다.
전압으로 켜는 스위치, MOSFET
디지털 회로의 원자는 MOSFET(Metal–Oxide–Semiconductor Field-Effect Transistor)이다. 구조는 단순하다. 실리콘에 두 개의 단자 소스(Source)와 드레인(Drain)을 만들고, 그 사이 위에 아주 얇은 절연막을 깔고 게이트(Gate) 전극을 올린다. 게이트에 전압을 걸면 절연막 아래에 전하가 끌려와 소스와 드레인 사이에 얇은 도랑, 즉 채널(Channel)이 생긴다. 채널이 생기면 전류가 흐르고, 없으면 흐르지 않는다. 게이트는 손잡이, 채널은 수도관이다.
아래 그림에서 게이트를 누르거나 슬라이더를 끌어 보자. 게이트 전압이 문턱 전압(Threshold voltage, \(V_t\))을 넘는 순간 채널이 열리고 전자가 흐르기 시작한다. 오른쪽 그래프는 세로축이 로그 눈금이라는 점에 주의하자. 꺼져 있을 때도 전류가 0은 아니다.
nMOS와 pMOS는 서로 거울상이다. nMOS는 게이트가 1일 때 켜지고, pMOS는 게이트가 0일 때 켜진다. 또 하나 중요한 차이가 있다. nMOS는 출력을 0(GND)으로 끌어내리는 데 능하고, pMOS는 1(\(V_{DD}\))로 끌어올리는 데 능하다. 그래서 디지털 회로는 둘을 짝지어 쓴다. 이것이 CMOS(Complementary MOS)다.
교과서 그림의 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)이라 한다.
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)이라 한다. 둘은 언제나 서로의 쌍대(직렬↔병렬)로 만들어 어느 입력 조합에서도 정확히 한쪽만 통하게 한다.
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}\))이다.
공정마다 트랜지스터의 저항과 커패시턴스가 달라서 "게이트 지연 몇 ps"라는 숫자는 공정끼리 비교하기 어렵다. 그래서 설계자들은 공정에 독립적인 잣대를 쓴다. 인버터 하나가 자기와 똑같은 인버터 네 개를 구동할 때의 지연, FO4 지연(Fan-out-of-4 delay)이다. 위 그림의 기본 설정(크기 1, 팬아웃 4, 배선 0)이 정확히 FO4다. 회로의 속도를 "FO4 몇 개"로 말하면 공정이 바뀌어도 설계의 깊이를 비교할 수 있다.
| 공정 노드 | 대략 연도 | FO4 지연 (약) | 공급 전압 (약) | 비고 |
|---|---|---|---|---|
| 180 nm | 1999 | ~65 ps | 1.8 V | "FO4 ≈ 0.36 ps × 게이트 길이(nm)" 경험식이 잘 맞던 시대 |
| 90 nm | 2004 | ~30 ps | 1.1~1.2 V | 누설이 커지며 전압 낮추기가 둔해짐 |
| 45 nm | 2008 | ~15 ps | ~1.0 V | high-k 금속 게이트 도입 |
| 16/14 nm | 2015 | ~9 ps | ~0.8 V | FinFET. 배선 지연 비중이 커짐 |
| 7 nm | 2018 | ~6 ps | ~0.75 V | EUV 도입 시작 |
| 3 nm급 | 2023~ | ~4–6 ps | 0.65~0.8 V | FinFET 마지막 세대 / GAA 시작 |
표의 FO4 값은 공개 논문·발표의 링 오실레이터 측정과 경험식을 바탕으로 한 대략값이다. 배선 부하, 전압, 온도, 문턱 전압 선택(HVT/LVT)에 따라 수십 %씩 달라진다.
게이트를 줄지어 세우면
실제 논리는 게이트 하나가 아니라 여러 게이트의 사슬이다. 사슬의 지연은 각 단 지연의 합이다. 단의 지연은 그 게이트가 얼마나 "굼뜬가"(같은 입력 커패시턴스로 인버터보다 전류를 얼마나 덜 내는가, 논리적 노력(Logical effort, g))와 얼마나 무거운 짐을 지는가(팬아웃 h), 그리고 자기 기생 지연 p로 정해진다. 아래 사슬의 게이트를 눌러 종류를 바꾸고, 입력을 뒤집어 천이가 사슬을 따라 번지는 모습을 보자.
플립플롭: 시간을 잘라 주는 문
조합 논리(Combinational logic)만으로는 계산을 "단계"로 나눌 수 없다. 입력이 바뀌면 출력이 제각각의 지연을 거쳐 출렁이다 결국 자리를 잡을 뿐이다. 칩은 이 출렁임을 일정한 박자로 잘라 낸다. 그 칼이 플립플롭(Flip-flop)이다. D 플립플롭은 클럭이 0에서 1로 올라가는 순간(상승 에지)의 입력 D를 붙잡아 다음 에지까지 출력 Q로 내보낸다. 그 사이에 D가 아무리 출렁여도 Q는 흔들리지 않는다. 칩 전체가 같은 클럭에 맞춰 움직이는 이런 회로를 동기 회로(Synchronous circuit)라 한다.
플립플롭 안에는 인버터 두 개를 고리로 이은 래치가 있다. 고리는 0이나 1 어느 쪽으로든 스스로를 붙잡는 두 개의 안정점을 가진다. 그런데 이 고리에는 위태로운 세 번째 점도 있다. 정확히 가운데, \(V_{DD}/2\)에 공을 올려놓은 상태다. 클럭 에지 바로 근처에서 D가 바뀌면 래치는 이 꼭대기 근처에 걸리고, 조금씩 기울다 결국 한쪽으로 굴러떨어지는데, 언제 떨어질지는 처음 기울기에 달려 있다. 이것이 준안정 상태(Metastability)다.
그래서 플립플롭에는 지켜야 할 시간 규칙이 있다. 데이터는 클럭 에지보다 최소 setup 시간만큼 먼저 도착해 있어야 하고, 에지 후 최소 hold 시간만큼 그대로 있어야 한다. 아래 파형에서 D의 천이(손잡이)를 좌우로 끌어 클럭 에지에 가까이 가져가 보자.
setup·hold 위반과 준안정
D를 에지에서 멀리 떨어뜨리면 Q는 늘 같은 시간(clk→Q 지연) 뒤에 깔끔하게 바뀐다. 그러나 setup·hold 창 안으로 들어가면 Q가 한동안 \(V_{DD}/2\) 근처에서 머뭇거린다. 손잡이를 균형점에 가까이 댈수록 머뭇거림은 길어지고, 원리적으로는 상한이 없다. 머뭇거리는 Q를 다음 회로가 읽으면 어떤 게이트는 0으로, 어떤 게이트는 1로 읽어 시스템이 모순에 빠진다.
같은 클럭을 쓰는 회로 안에서는 설계 도구가 모든 경로의 setup·hold를 검사하므로 준안정이 생기지 않는다. 문제는 버튼 입력, 다른 클럭으로 도는 블록에서 온 신호처럼 박자가 다른 신호다. 그 도착 시각은 클럭과 무관하므로 언젠가는 반드시 창 안에 떨어진다. 해법은 실패를 없애는 것이 아니라 확률을 우주 나이보다 작게 만드는 것이다. 플립플롭을 두세 개 직렬로 이어 첫 단이 준안정에 빠져도 한 클럭 주기를 통째로 줘서 풀리게 하는 동기화기(Synchronizer)가 그것이다. 위 시뮬레이터에서 단 수를 2로 바꾸면 MTBF가 몇 자리나 뛰는지 보자. 클럭 도메인 사이를 건너는 더 많은 기법은 14장에서 다룬다.
임계 경로가 최대 클럭을 정한다
이제 조각을 모으자. 동기 회로에서 데이터는 출발 플립플롭에서 클럭 에지에 맞춰 튀어나와(clk→Q), 조합 논리를 지나, 도착 플립플롭의 다음 에지보다 setup 시간 전에 도착해야 한다. 회로 안에는 이런 경로가 수백만 개 있고, 그중 가장 느린 경로, 즉 임계 경로(Critical path)가 클럭 주기의 하한을 정한다.
아래 회로는 레지스터 세 개에서 출발해 게이트 일곱 개를 지나 레지스터 두 개로 들어가는 작은 조합 논리다. 각 게이트 안의 숫자는 지연(ps)이다. 게이트를 눌러 지연을 바꿔 보면 임계 경로(분홍)가 다른 길로 옮겨 가는 것을 볼 수 있다. 게이트 위의 작은 숫자는 그 지점에 신호가 가장 늦게 도착하는 시각이다. 설계 도구가 하는 정적 타이밍 분석(STA, Static Timing Analysis)이 바로 이 계산을 수억 개 게이트에 대해 반복하는 것이다.
정적 타이밍 분석 놀이터
지금 임계 경로가 135 ps이고 두 번째로 느린 경로가 130 ps라면?
답 보기
그 게이트가 두 경로에 모두 들어 있지 않다면, 첫 번째 경로는 125 ps가 되지만 두 번째 경로(130 ps)가 새 임계 경로가 된다. 이득은 10 ps가 아니라 5 ps뿐이다. 실제 칩에는 임계 경로 근처에 비슷한 길이의 경로가 수천 개 몰려 있어서(이른바 "타이밍 벽"), 한 경로를 고치면 다른 경로가 튀어나온다. 위 시뮬레이터에서 "임계 경로 게이트 키우기"를 여러 번 눌러 확인해 보자.
경로를 잘라 클럭 올리기: 파이프라이닝
임계 경로가 너무 길면 어떻게 할까? 게이트를 키우는 데는 한계가 있다. 더 근본적인 방법은 긴 조합 논리 중간에 플립플롭을 끼워 넣어 경로를 자르는 것이다. 한 덩어리의 일을 여러 단계로 나누는 파이프라이닝(Pipelining)이다. 각 단계의 논리가 짧아지니 클럭을 올릴 수 있다. 대신 일 하나가 처음부터 끝까지 걸리는 시간, 즉 지연 시간(Latency)은 줄지 않고 오히려 늘어난다. 끼워 넣은 플립플롭마다 clk→Q와 setup이라는 "통행세"를 내야 하기 때문이다.
몇 단으로 자를까
단 수를 끝까지 늘려 보면 두 가지 벽을 만난다. 하나는 오버헤드의 벽이다. 로직을 아무리 잘게 잘라도 주기는 레지스터 오버헤드 아래로 내려가지 못하므로, 단이 많아질수록 주기에서 오버헤드가 차지하는 비율이 커지고 향상은 점점 둔해진다. 다른 하나는 균형의 벽이다. 로직은 원하는 곳에서 마음대로 자를 수 없어서 가장 긴 단이 전체 박자를 붙잡는다.
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\)가 모두 열이 된다. 저항 값과 상관없이 늘 정확히 절반씩이라는 점이 흥미롭다.
이 식 하나에 이 장의 모든 것이 연결된다. 게이트를 키우면(빠르게) \(C\)가 늘고, 파이프라인을 깊게 하면 플립플롭이 늘어 \(C\)와 클럭 \(f\)가 함께 오른다. 전압을 올리면 트랜지스터가 빨라져 \(f\)를 올릴 수 있지만 에너지는 제곱으로 는다. 속도와 에너지는 언제나 맞바꾸는 관계다. 이 줄다리기가 다음 장들에서 CPU 코어를 설계할 때(3장, 4장), 그리고 칩 전체의 전력을 관리할 때(12장) 끝없이 되풀이된다.
위 식의 \(\alpha\)가 0이면 동적 전력도 0이다. 일하지 않는 블록의 클럭을 멈추면 그 블록의 플립플롭과 클럭 배선이 전혀 스위칭하지 않는다. 클럭 배선은 칩에서 가장 활동률이 높은(\(\alpha=1\)) 노드라서 동적 전력의 30~40%를 차지하기도 한다. 그래서 거의 모든 플립플롭 묶음 앞에 클럭을 끄는 문(클럭 게이트 셀)이 자동으로 들어간다.
핵심 정리
- MOSFET은 게이트 전압으로 켜는 스위치다. nMOS는 1에서, pMOS는 0에서 켜지며, 꺼져 있어도 누설 전류가 흐른다.
- CMOS 게이트는 직렬·병렬 스위치의 쌍대 구조로, 정지 상태에서 전원과 접지 사이 길이 없고 이득이 커서 신호를 매 단 복원한다.
- 게이트 지연은 부하 커패시턴스를 트랜지스터 저항으로 충전하는 시간(\(\approx 0.69RC\))이며, 공정에 독립적인 잣대로 FO4를 쓴다.
- 플립플롭의 setup·hold를 어기면 준안정이 생기고 풀리는 시간은 상한이 없다. 비동기 신호는 다단 동기화기로 MTBF를 천문학적으로 키운다.
- 최대 클럭은 임계 경로 \(t_{cq}+t_{logic}+t_{setup}-\delta\)가 정한다. 파이프라이닝은 클럭을 올리지만 레지스터 오버헤드와 불균형이 한계를 만들고, 동적 에너지는 \(\alpha CV^2 f\)다.
확인 퀴즈
Q1. CMOS NAND2 게이트의 풀다운 망(nMOS)은 어떻게 연결되어 있는가?
Q2. 어떤 게이트의 구동 저항이 10 kΩ, 부하가 2 fF이다. 전파 지연은 대략?
Q3. clk→Q 30 ps, 최장 로직 220 ps, setup 20 ps, 스큐 0일 때 최대 클럭은?
Q4. hold 위반이 난 칩을 실험실에서 살리려 한다. 가장 효과가 없는 방법은?
Q5. 비동기 입력을 받는 동기화기의 여유 시간 \(t_r\)를 \(\tau\)의 10배만큼 늘리면 MTBF는?
Q6. 공급 전압을 0.8 V에서 0.6 V로 낮추고 클럭은 그대로 둔다면(가능하다고 할 때) 동적 전력은?