전력과 저전력 설계
스마트폰 칩은 손바닥만 한 판 위에서 수십억 개의 트랜지스터를 돌리지만, 오래 쓸 수 있는 전력은 고작 몇 와트다. 그보다 많이 쓰면 배터리가 금방 닳고, 무엇보다 열을 내보낼 곳이 없다. 그래서 오늘날 디지털 설계에서 전력은 속도와 면적과 같은 무게의 1급 제약이다. 이 장에서는 커패시터 하나를 충전하는 데서 시작해 CMOS가 에너지를 쓰는 세 가지 길, 즉 스위칭, 단락, 누설을 하나씩 떼어 만져 보고, 설계자가 쥔 손잡이(전압, 주파수, 문턱 전압, 게이팅, 병렬화)로 그 셋을 어떻게 줄이는지 블록 하나를 놓고 직접 조절해 본다.
- 출력 하나를 0→1→0으로 바꿀 때 전원이 \(CV_{DD}^2\)를 내놓고 그 전부가 열이 된다는 것을 에너지 장부로 확인한다.
- \(P = \alpha C V_{DD}^2 f\)에서 활동도 \(\alpha\)를 신호 확률로 계산하고, 글리치가 헛된 천이를 얼마나 만드는지 센다.
- 단락 전력과 누설 전력(부문턱·게이트 누설, 스택 효과)이 입력 경사, 문턱 전압, 온도에 어떻게 반응하는지 설명한다.
- 클럭·전원 게이팅, 다중 Vt, DVFS, 병렬화를 조합해 블록의 전력을 줄이고, 최소 에너지 전압이 왜 문턱 근처에 생기는지 이해한다.
에너지는 어디로 가나
디지털 회로가 하는 일은 결국 전선 끝에 달린 커패시터를 채우고 비우는 것이다. 게이트의 출력 노드에는 다음 게이트의 입력 게이트 커패시턴스, 자기 드레인의 확산 커패시턴스, 그 사이 배선의 커패시턴스가 모두 매달려 있다. 이것을 하나로 묶어 부하 커패시턴스 \(C_L\)이라 부른다(6장). 출력이 0에서 1로 바뀌려면 pMOS가 \(V_{DD}\)에서 전하를 퍼 와 \(C_L\)을 채워야 하고, 1에서 0으로 바뀌려면 nMOS가 그 전하를 GND로 버려야 한다.
여기서 물어볼 것은 하나다. 이 과정에서 에너지는 어디로 가는가? 아래 인버터를 지켜보자. 입력이 0이 되면 pMOS를 통해 전류가 흘러 커패시터가 차고, 입력이 1이 되면 nMOS를 통해 커패시터가 빈다. 오른쪽 장부는 전원이 내준 에너지, 커패시터에 들어 있는 에너지, 그리고 두 트랜지스터에서 열로 사라진 에너지를 실시간으로 적는다.
장부를 몇 주기 지켜보면 규칙이 보인다. 0→1 천이 한 번에 전원이 내준 에너지는 정확히 \(C_LV_{DD}^2\)이고, 그 순간 커패시터에는 \(\tfrac12 C_LV_{DD}^2\)만 남는다. 나머지 절반은 충전 전류가 pMOS의 온저항을 지나며 열로 바뀐 것이다. 1→0 천이 때는 전원에서 아무것도 가져오지 않는다. 커패시터에 남아 있던 \(\tfrac12 C_LV_{DD}^2\)가 nMOS에서 열로 바뀔 뿐이다. 결국 한 주기(0→1→0)에 \(C_LV_{DD}^2\)가 전원에서 나와 전부 열이 된다.
저항이 작으면 \(i^2R\)의 \(R\)이 작아지니 손실도 줄 것 같다. 정말 그럴까? 위 그림에서 크기를 바꿔 보기 전에 예측해 보자.
답 보기
변하지 않는다. 저항이 반이 되면 전류는 두 배로 커지고 시간은 반으로 줄어, \(i^2R \cdot t\)는 \(4 \times \tfrac12 \times \tfrac12 = 1\)배로 그대로다. 손실이 \(R\)에 무관하게 \(\tfrac12CV^2\)인 것은 RC 충전의 일반적인 성질이다. 그래서 트랜지스터를 키우면 빨라질 뿐 천이당 에너지는 줄지 않고, 오히려 자기 게이트·드레인 커패시턴스가 늘어 앞 단의 \(C_L\)이 커진다. 천이당 에너지를 줄이려면 \(C\)나 \(V_{DD}\)를 줄이는 수밖에 없다.
손실이 \(\tfrac12CV^2\)인 것은 커패시터를 단번에 전체 전압 \(V_{DD}\)에 연결했기 때문이다. 공급 전압을 계단처럼 \(N\)단으로 나눠 천천히 올리면 각 단의 전압 차가 \(V_{DD}/N\)이라 손실이 약 \(1/N\)로 준다. 공급 전압 자체를 느린 램프로 만드는 이것이 단열 회로(Adiabatic logic)다. 원리상 손실을 0에 가깝게 할 수 있지만 그만큼 느려지고, 에너지를 회수하는 공진 전원이 필요해 주류 디지털 설계에서는 거의 쓰지 않는다. 클럭 분배망처럼 큰 커패시턴스를 일정하게 흔드는 곳에서 공진 클럭으로 일부 응용된 예가 있다.
동적 전력 \(P = \alpha C V_{DD}^2 f\)
칩에는 이런 노드가 수억 개 있고, 그중 일부만이 매 클럭 바뀐다. 한 클럭 주기 동안 노드가 0→1로 바뀔 확률을 활동도(Activity factor, \(\alpha\))라 하면, 노드 하나의 평균 스위칭 전력은 \(\alpha\)에 천이당 에너지 \(CV_{DD}^2\)와 초당 클럭 수 \(f\)를 곱한 것이다. 칩 전체로는 모든 노드의 \(\alpha_i C_i\)를 더한 유효 스위칭 커패시턴스 \(C_{\text{eff}} = \sum \alpha_i C_i\)로 묶는다.
네 손잡이가 모두 곱으로 들어가지만 무게는 다르다. \(V_{DD}\)만 제곱이다. 전압을 10 % 낮추면 전력이 19 % 준다. 주파수를 낮추면 전력은 같은 비율로 줄지만 일도 그만큼 느려지므로 작업 하나당 에너지 \(\alpha C V_{DD}^2\)는 그대로다. 에너지를 줄이는 것은 \(\alpha\), \(C\), \(V_{DD}\)뿐이다. 아래에서 네 손잡이를 움직여 보자.
데이터 노드는 평균 0.05~0.2 정도의 활동도를 갖지만 클럭은 매 주기 반드시 한 번 오르내린다(\(\alpha=1\)). 게다가 클럭망은 칩 구석구석의 플립플롭 수십만 개를 모두 구동하므로 커패시턴스도 크다. 그래서 고성능 프로세서에서 클럭망과 플립플롭이 동적 전력의 30~40 %를 차지하는 일이 흔하다(10장). 쓰지 않는 블록의 클럭을 끄는 클럭 게이팅이 가장 먼저, 가장 널리 쓰이는 저전력 기법인 이유다.
활동도와 글리치
\(\alpha\)는 어디서 오는가? 노드가 어떤 주기에 1일 확률을 \(p\)라 하자. 연속한 두 주기의 값이 서로 독립이라면, 0→1 천이가 일어나려면 앞 주기가 0(확률 \(1-p\))이고 이번 주기가 1(확률 \(p\))이어야 한다. 그래서
\(p(1-p)\)는 \(p=0.5\)에서 최대 0.25다. 무작위 데이터를 받는 노드조차 네 주기에 한 번꼴로만 오른다. 그런데 게이트를 지날수록 확률은 한쪽으로 쏠린다. 입력이 넷인 AND의 출력은 \(0.5^4 = 1/16\)의 확률로만 1이라 \(\alpha \approx 0.06\)이고, 반대로 XOR은 확률을 0.5 쪽으로 되돌린다. 아래 회로에서 입력 확률을 바꿔 노드마다 \(\alpha\)가 어떻게 전파되는지 보자.
실제 설계 도구도 같은 일을 한다. 시뮬레이션에서 얻은 입력 확률과 천이율(또는 VCD 파형)을 넣으면, 넷리스트를 따라 확률을 전파해 노드마다 \(\alpha\)를 추정하고 \(\sum \alpha_i C_i V^2 f\)로 전력을 계산한다. 다만 위 계산에는 큰 가정이 하나 더 숨어 있다. 노드가 한 주기에 많아야 한 번 바뀐다는 가정이다. 현실의 게이트는 지연이 있고, 입력들이 서로 다른 시각에 도착하면 출력이 최종값에 자리 잡기 전에 잠깐 엉뚱한 값으로 튀었다 돌아온다. 이 짧은 펄스를 글리치(Glitch, 스퓨리어스 천이)라 한다. 글리치도 커패시터를 한 번 채우고 비우므로 \(CV^2\)를 고스란히 태운다. 논리적으로는 아무 일도 하지 않은 채.
글리치가 가장 심한 곳은 신호가 서로 다른 깊이의 경로로 도착하는 회로다. 리플 캐리 덧셈기(11장)에서 상위 비트의 합은 캐리가 아래에서부터 한 단씩 도착할 때마다 다시 계산되며 여러 번 뒤집힌다. 배열 곱셈기(12장)는 리플 덧셈기를 여러 줄 쌓은 것이라 더 심하다. 아래 시뮬레이터는 이 책의 게이트 수준 시뮬레이터 DG.Circuit(전송 지연 모델이라 글리치가 그대로 보인다)으로 실제 회로를 돌리며 천이를 센다.
글리치 세기: 리플 덧셈기와 배열 곱셈기
무작위 입력과 비교해 예측한 뒤 "카운터"로 바꿔 100개를 넣어 보자.
답 보기
벡터당 천이 수가 무작위 입력의 약 3분의 1로 줄고, 글리치 천이의 절대 수도 그만큼 준다(글리치 비율 자체는 비슷하거나 오히려 조금 높게 나올 수 있다). 카운터는 대부분 하위 몇 비트만 바뀌므로 캐리가 멀리 퍼지는 일이 드물고, 상위 비트는 거의 조용하다. 입력의 통계가 활동도를 정한다는 좋은 예다. 같은 이유로 실제 데이터(영상의 이웃 픽셀, 천천히 변하는 센서 값)는 무작위 데이터보다 전력을 덜 쓰며, 버스에서는 이를 더 줄이려고 값이 많이 바뀔 때 비트를 뒤집어 보내는 버스 반전 부호화(Bus-invert coding)를 쓰기도 한다.
(1) 경로 균형: 게이트의 입력들이 비슷한 시각에 도착하도록 깊이를 맞춘다. 트리 구조의 덧셈기·곱셈기(월리스 트리, 접두사 덧셈기)가 리플 구조보다 글리치가 적은 이유다. (2) 파이프라인 레지스터: 레지스터는 매 주기 한 번만 값을 넘기므로 그 뒤로 글리치가 퍼지지 않는다. (3) 입력을 묶어 바꾸기: 쓰지 않는 연산기의 입력을 래치로 붙잡아 두는 오퍼랜드 격리(Operand isolation). 곱셈기처럼 깊은 조합 회로에서는 글리치가 동적 전력의 절반 가까이 되는 일도 있다.
단락 전력: 입력이 느리면 새는 길
지금까지는 입력이 순간적으로 바뀐다고 가정했다. 실제 입력은 일정한 기울기로 오르고 내린다. 입력이 \(V_{tn}\)을 넘은 뒤부터 \(V_{DD}-|V_{tp}|\)를 넘기 전까지는 nMOS와 pMOS가 동시에 켜져 \(V_{DD}\)에서 GND로 곧장 흐르는 길이 열린다(4장의 관통 전류). 이 전류는 부하를 충전하는 데 쓰이지 않고 그대로 열이 되므로 단락 전력(Short-circuit power)이라 한다.
아래는 입력이 0→1로 오르는 순간의 인버터를 수치 적분한 것이다. 출력이 떨어지는 천이에서는 원래 전원이 할 일이 없으므로, 이때 pMOS로 흘러나온 전류는 모두 단락 전류다.
경험칙은 간단하다. 입력과 출력의 천이 시간을 비슷하게 맞추면 단락 전력은 스위칭 전력의 10 % 안쪽에 머문다. 설계 도구가 모든 넷에 최대 천이 시간(Max transition) 제약을 거는 데는 타이밍만이 아니라 이 이유도 있다. 또 전원 전압이 문턱 전압의 두 배 근처까지 내려온 오늘날 공정에서는 단락 전력의 비중이 대체로 작아서, 전력 분석에서는 흔히 내부 전력(Internal power)이라는 이름으로 셀 내부 커패시턴스 충전과 함께 묶어 라이브러리 표에서 읽는다.
누설 전력: 꺼진 스위치로 새는 전류
동적 전력과 단락 전력은 무언가 바뀔 때만 쓴다. 회로가 가만히 있으면 0이어야 한다. 그러나 3장에서 보았듯 꺼진 트랜지스터도 완전히 꺼지지 않는다. 게이트 전압이 문턱 아래여도 채널에는 확산으로 흐르는 부문턱 전류(Subthreshold current)가 있고, 이 전류는 게이트 전압이 부문턱 기울기 \(S\)만큼 낮아질 때마다 10분의 1로 줄 뿐이다.
식에서 두 지수가 눈에 띈다. \(V_t\)를 \(S\)만큼(75 mV) 낮추면 누설이 10배가 된다. 그리고 온도는 \(S\)와 \(V_t\)를 동시에 건드려 누설을 두 방향에서 키운다. 아래 그림에서 직접 확인하자.
스택 효과는 공짜 누설 감소다. NAND의 nMOS 풀다운처럼 직렬로 쌓인 트랜지스터가 모두 꺼진 상태라면 누설이 크게 준다. 그래서 회로를 오래 쉬게 할 때 입력을 일부러 스택이 모두 꺼지는 값으로 맞춰 두는 입력 벡터 제어나, 트랜지스터 하나를 길이를 늘인 두 개의 직렬로 바꾸는 스택 강제 같은 기법이 있다.
부문턱 누설 말고도 새는 길이 둘 더 있다. 게이트 산화막이 1~2 nm로 얇아지자 전자가 절연막을 터널링해 지나가는 게이트 누설(Gate leakage)이 커졌다. 90~65 nm 무렵에는 부문턱 누설과 맞먹을 정도였지만, 45 nm 이후 유전율이 높은 high-k 절연막으로 물리적 두께를 늘려 크게 줄였다. 소스·드레인 접합의 역방향 누설과 강한 전계에서의 밴드 간 터널링(GIDL)도 있으나 오늘날 논리 회로에서는 부문턱 누설이 대부분을 차지한다.
\(V_t\) = 0.30 V, 하나짜리 트랜지스터에서 먼저 어림해 보고 그림의 온도 슬라이더로 확인하자.
답 보기
이 모델로는 10배를 훌쩍 넘는다. 온도가 75 K 오르면 \(V_t\)가 약 60 mV 내려가고(그것만으로 6배쯤), 기울기 \(S\)도 75 → 94 mV/dec로 무뎌져 남은 문턱 아래 구간에서 덜 줄어든다. 실제 칩에서도 고온 누설은 상온의 수 배~수십 배다. 이것이 열 폭주(Thermal runaway)의 씨앗이다. 뜨거워지면 누설이 늘고, 누설이 열을 더 내고, 다시 뜨거워진다. 그래서 칩의 전력 예산과 냉각 설계는 늘 최고 온도에서의 누설로 검토한다.
속도는 \(V_{DD}-V_t\)에 달려 있으므로 \(V_{DD}\)를 낮추려면 \(V_t\)도 함께 낮춰야 한다. 1990년대까지는 실제로 둘이 같이 내려갔다(Dennard 스케일링). 그런데 \(S\)는 상온에서 60 mV/dec 아래로 내려갈 수 없는 물리 한계(볼츠만 분포)가 있어, \(V_t\)를 낮출 때마다 누설이 지수로 불어난다. 2000년대 중반 이후 \(V_t\)가 약 0.3 V 근처에 멈추고 \(V_{DD}\)도 0.7~0.9 V대에서 거의 내려가지 못한 까닭이다. 이것이 클럭 주파수가 4~5 GHz에서 멈추고 멀티코어와 전력 관리가 중요해진 출발점이다. FinFET과 GAA는 게이트가 채널을 더 꽉 쥐어 \(S\)를 60 mV/dec에 가깝게 붙이려는 노력이다(소자 이야기는 DeviceBook).
전력을 줄이는 손잡이들
세 가지 전력을 한 식으로 모으면 블록 하나의 전력이 된다.
설계자가 쥔 손잡이를 항별로 정리하면 이렇다.
- 클럭 게이팅(Clock gating): 일이 없는 레지스터 묶음의 클럭을 멈춰 클럭망과 플립플롭의 \(\alpha\)를 0으로 만든다. 클럭이 멈추면 뒤따르는 로직의 입력도 바뀌지 않아 로직의 스위칭까지 함께 멈춘다. 글리치 없이 클럭을 끄기 위해 래치와 AND를 묶은 ICG 셀(Integrated clock gating cell)을 쓴다. 누설은 그대로다.
- 전원 게이팅(Power gating): 블록과 전원 사이에 큰 슬립 트랜지스터(보통 고문턱 pMOS 헤더)를 넣어 쉬는 동안 전원을 통째로 끊는다. 누설까지 거의 없애지만 상태가 날아가고, 다시 켤 때 가상 전원 레일을 충전하는 에너지와 시간이 든다. 상태를 지키려면 작은 상시 전원으로 버티는 상태 유지 플립플롭(Retention flip-flop)을, 꺼진 블록의 떠 있는 출력이 이웃을 망치지 않게 격리 셀(Isolation cell)을 둔다.
- 다중 문턱 전압(Multi-Vt): 같은 칩에 LVT·SVT·HVT 세 종류(또는 그 이상)의 트랜지스터를 섞는다. 타이밍이 빠듯한 임계 경로에만 빠르고 새는 LVT를 쓰고, 여유가 있는 대부분의 경로에는 느리지만 누설이 적은 HVT를 쓴다. 보통 셀의 대부분을 HVT·SVT로 채운다.
- 전압·주파수: 필요한 성능만큼만 \(f\)를 내고 그에 맞춰 \(V_{DD}\)를 낮춘다(다음 절의 DVFS). 블록마다 전압을 따로 주는 다중 전압 영역(Multi-VDD, voltage island)과 그 경계의 레벨 시프터가 함께 따라온다.
이제 이 손잡이들을 한 블록에 모두 달아 보자. 아래 시뮬레이터는 DG-7 공정으로 만든 모바일 프로세서 코어 하나다. 작업량을 고르면 그 일을 하는 데 필요한 초당 사이클 수와, 일 사이사이 쉬는 구간의 빈도가 정해진다. 주파수를 높이면 일을 빨리 끝내고 오래 쉬고, 낮추면 오래 일하고 짧게 쉰다. 모든 선택의 결과는 같은 일을 하는 데 드는 평균 전력과 사이클당 에너지로 나온다.
코어 하나의 전력 예산 짜기
몇 가지 실험을 권한다. "대기"에서는 일이 거의 없으므로 누설과 멈추지 않는 클럭이 전부다. 클럭 게이팅을 올리면 클럭 몫이, 전원 게이팅을 올리면 누설 몫이 사라진다. "게임"으로 바꾸면 쉬는 시간이 짧고 잦아서 전원 게이팅의 깨어나기 비용이 이득을 갉아먹는다. 여기서는 "메모리에 저장" 방식이 보존 FF보다 손해다. 반대로 한 번 쉬면 오래 쉬는 "대기"에서는 잔류 누설이 더 적은 저장 방식이 이긴다. 이처럼 전원 게이팅이 이득이 되는 최소 휴식 시간을 손익분기 시간(Break-even time)이라 한다. 다중 Vt는 LVT를 0 %로 두고 HVT를 늘려 보면 효과가 분명하다. 대부분을 HVT로 채워도 임계 경로 몫이 SVT로 남아 있으면 fmax가 떨어지지 않는다. 반대로 고온에서 LVT를 많이 쓰면 누설이 순식간에 예산을 잡아먹는다.
RTL 설계자가 클럭 게이팅을 일일이 쓰지는 않는다. 합성 도구가 if (en) q <= d; 꼴의 레지스터 묶음을 찾아 ICG 셀을 자동으로 넣는다. 전원 영역, 슬립 스위치, 격리·보존 셀, 레벨 시프터는 UPF(Unified Power Format, IEEE 1801) 같은 별도 전력 의도 파일에 적고 도구가 이를 따라 배치·검증한다. 다중 Vt 배정도 배치·배선 뒤 타이밍 여유를 보며 자동으로 셀을 바꾸는 누설 최적화 단계에서 이루어진다. 흐름 전체는 DesignBook에서 다룬다.
DVFS와 최소 에너지점
전압을 낮추면 에너지가 제곱으로 준다. 공짜는 아니다. 전압이 낮아지면 트랜지스터의 구동 전류 \(I_{on}\)이 줄어 게이트가 느려지고, 같은 클럭을 낼 수 없다. 그래서 전압과 주파수는 한 쌍으로 움직인다. 일이 많을 때는 높은 전압·높은 클럭으로, 적을 때는 낮은 전압·낮은 클럭으로 바꾸는 것이 DVFS(Dynamic Voltage and Frequency Scaling)다. 운영 체제의 거버너가 사용률을 보고 미리 정한 전압-주파수 쌍(동작점, P-state) 가운데 하나를 고르고, 전원 관리 IC가 수십 µs 안에 전압을 바꾼다(시스템 쪽 이야기는 SoCBook).
전압을 계속 낮추면 어떻게 될까? 동적 에너지는 \(V^2\)로 계속 준다. 그런데 문턱 근처와 그 아래(근문턱·부문턱 영역)로 들어가면 \(I_{on}\)이 지수적으로 줄어 연산 시간이 폭발적으로 길어진다. 누설 전류도 조금 줄기는 하지만 시간이 늘어나는 속도를 따라가지 못해 누설 에너지는 오히려 커진다. 두 곡선이 엇갈리는 곳에 연산당 에너지가 가장 작은 최소 에너지점(Minimum energy point, MEP)이 생긴다.
에너지-지연 곡선과 최소 에너지점
활동도를 낮춰 보자. 활동도가 낮다는 것은 대부분의 게이트가 놀면서 새기만 한다는 뜻이라 누설의 몫이 커지고, 최소 에너지점이 높은 전압 쪽으로 움직인다. 온도를 올리거나 \(V_t\)를 낮춰도 마찬가지다. 반대로 활동도가 높은 회로는 더 낮은 전압까지 내려가는 것이 이득이다. 어느 경우든 최소 에너지점의 속도는 공칭 전압의 수십~수백 분의 1이다. 그래서 근문턱·부문턱 동작은 센서 노드, 웨어러블, 의료용 칩처럼 느려도 되지만 배터리 하나로 몇 년을 버텨야 하는 곳에서 쓰인다. 스마트폰 코어는 성능을 위해 최소 에너지점보다 훨씬 위, 0.5~1.0 V 범위를 오간다.
병렬화로 전압 낮추기, 데이터를 덜 움직이기
성능을 그대로 지키면서 전압을 낮추는 방법이 있다. 같은 회로를 \(N\)개 두고 일을 나눠 맡기면, 각 회로는 \(1/N\)의 클럭으로 돌아도 전체 처리량은 그대로다. 각 회로가 \(N\)배 느려도 되니 그만큼 전압을 낮출 수 있다. 동적 전력은 \(N \cdot C V^2 \cdot f/N = C V^2 f\)라 커패시턴스와 주파수는 상쇄되고 전압의 제곱만큼만 남는다. Chandrakasan과 Brodersen이 1992년에 정리한 이 원리는 오늘날 GPU와 NPU가 수천 개의 느린 연산기를 늘어놓는 이유이기도 하다. 파이프라이닝도 같은 효과를 낸다. 한 단의 논리 깊이가 줄어 같은 클럭에서도 게이트가 느려도 되기 때문이다(10장).
전압과 병렬화 다음으로 큰 손잡이는 의외로 계산이 아니라 데이터의 이동이다. 아래 표는 Horowitz가 ISSCC 2014 기조연설에서 정리한 45 nm 공정의 대략적인 에너지다. 32비트 덧셈 한 번이 0.1 pJ인데, 그 피연산자를 바깥 DRAM에서 가져오는 데는 그 1만 배가 넘게 든다. 칩 안의 SRAM도 크기가 커질수록 비싸진다. 데이터가 긴 배선을 지나며 커패시턴스를 충전하기 때문이다(14장).
| 동작 (45 nm, 약 0.9 V) | 에너지 (약) | 32비트 덧셈 대비 |
|---|---|---|
| 8비트 정수 덧셈 | 0.03 pJ | 0.3× |
| 32비트 정수 덧셈 | 0.1 pJ | 1× |
| 8비트 정수 곱셈 | 0.2 pJ | 2× |
| 32비트 정수 곱셈 | 3.1 pJ | 31× |
| 16비트 부동소수점 덧셈 / 곱셈 | 0.4 / 1.1 pJ | 4× / 11× |
| 32비트 부동소수점 덧셈 / 곱셈 | 0.9 / 3.7 pJ | 9× / 37× |
| 32비트 SRAM 읽기 (8 KB 배열) | 5 pJ | 50× |
| 32비트 SRAM 읽기 (32 KB) | 10 pJ | 100× |
| 32비트 SRAM 읽기 (1 MB) | ~50 pJ | 500× |
| DRAM 접근 (64비트) | 1.3~2.6 nJ | 1만~2.6만× |
절대값은 공정이 바뀌며 줄었지만(7 nm급에서는 연산이 대략 수 분의 1), 비율은 거의 그대로이고 오히려 배선과 메모리 쪽이 덜 줄었다. 그래서 저전력 가속기 설계의 첫 원칙은 "계산을 데이터 가까이"다. 가중치를 연산기 옆 레지스터에 오래 붙잡아 재사용하는 시스톨릭 배열, 작은 정밀도(8비트, 4비트)로의 양자화, 메모리 안에서 계산하는 PIM이 모두 같은 방향이다(MemoryBook).
이 모든 것이 모여 하나의 제품 예산이 된다. 스마트폰의 전형적인 전력 예산은 대략 다음과 같다.
| 항목 (플래그십 스마트폰, 약 2024년) | 전력 (약) | 비고 |
|---|---|---|
| 기기 전체 지속 가능 전력 | 3~5 W | 손에 쥘 수 있는 표면 온도(약 40~45 °C)가 정하는 한계 |
| SoC 순간 최대 | 10 W 이상 | 몇 초 동안만. 그 뒤 열 관리로 클럭이 내려간다 |
| CPU 고성능 코어 1개 (최고 클럭) | 2~4 W | 동작점 하나 차이로 전력이 수십 % 바뀐다 |
| CPU 고효율 코어 1개 | 0.1~0.5 W | 같은 일을 느리게, 훨씬 적은 에너지로 |
| GPU (게임) | 2~5 W | 병렬화로 낮은 클럭·전압에서 동작 |
| 디스플레이 | 0.5~2 W | 밝기에 따라. 칩 밖이지만 예산을 나눠 쓴다 |
| 모뎀·RF (데이터 통신 중) | 0.5~2 W | 신호 세기에 따라 크게 달라진다 |
| LPDDR DRAM | 0.3~1 W | 대역폭에 비례. 데이터 이동의 값 |
| 화면 꺼진 대기 (SoC) | 수 mW | 대부분 전원 게이팅. 상시 켜진 작은 영역만 깨어 있다 |
배터리는 에너지(줄, 또는 Wh)를 담는다. 4,500 mAh·3.85 V 배터리는 약 17 Wh, 즉 약 62 kJ다. 전력을 반으로 줄여도 일이 두 배 오래 걸리면 배터리에는 아무 도움이 안 된다. 그래서 저전력 설계의 성적표는 작업당 에너지(J/op, pJ/cycle)이고, 성능까지 함께 보려면 에너지와 지연의 곱 EDP를 쓴다. 이 장의 시뮬레이터들이 전력보다 사이클당·연산당 에너지를 먼저 보여 주는 이유다.
핵심 정리
- 출력을 0→1로 올릴 때 전원은 \(CV_{DD}^2\)를 내놓고, 절반은 pMOS에서 열이, 절반은 커패시터에 저장되었다가 1→0에서 nMOS에서 열이 된다. 이 손실은 트랜지스터의 저항과 무관하다.
- 동적 전력은 \(P=\alpha C V_{DD}^2 f\). 전압이 제곱으로 들어가고, 주파수만 낮추면 전력은 줄어도 작업당 에너지는 그대로다. 클럭망은 \(\alpha=1\)이라 동적 전력의 큰 몫을 차지한다.
- 활동도는 신호 확률에서 \(p(1-p)\)로 어림하고 게이트를 따라 전파한다. 다시 만나는 팬아웃은 독립 가정을 깨고, 경로 지연 차이가 만드는 글리치는 아무 일도 하지 않으면서 에너지를 태운다.
- 단락 전력은 두 트랜지스터가 함께 켜진 시간, 즉 입력 경사에 비례한다. 입출력 천이 시간을 맞추면 스위칭의 10 % 안쪽이고, \(V_{DD} < 2V_t\)이면 사라진다.
- 누설은 \(V_t\)가 \(S\)(약 75 mV)만큼 낮아질 때마다 10배가 되고 온도에 지수적으로 는다. 꺼진 트랜지스터를 쌓은 스택은 누설을 몇 분의 1로 줄인다.
- 클럭 게이팅은 쉬는 블록의 스위칭을, 전원 게이팅은 누설까지 없애지만 깨어나기 비용이 있어 손익분기 시간보다 길게 쉴 때만 이득이다. 다중 Vt는 임계 경로에만 LVT를 써서 속도와 누설을 함께 잡는다.
- 전압을 낮추면 에너지는 줄지만 지연이 늘어 누설 에너지가 커지므로 문턱 근처에 최소 에너지점이 있다. 병렬화·파이프라이닝은 같은 처리량에서 전압을 낮추고, 데이터를 덜 움직이는 것이 연산을 줄이는 것보다 더 큰 이득일 때가 많다.
확인 퀴즈
Q1. 부하 10 fF인 인버터 출력이 0.8 V 전원에서 0→1→0으로 한 번 오르내렸다. 이 한 주기 동안 열로 사라진 에너지는?
Q2. 어떤 블록의 \(V_{DD}\)를 0.9 V에서 0.6 V로, 클럭을 2 GHz에서 1 GHz로 낮췄다. 동적 전력은 대략 몇 배가 되는가?
Q3. 두 입력이 각각 0.5의 확률로 1인 독립 신호일 때, 2입력 AND 게이트 출력의 활동도 \(\alpha_{0\to1}\)은?
Q4. 꺼진 nMOS 두 개를 직렬로 쌓았을 때 누설이 하나일 때보다 크게 줄어드는 주된 이유는?
Q5. 전원 게이팅이 오히려 에너지를 더 쓰게 만드는 경우는?
Q6. 공급 전압을 계속 낮추면 연산당 에너지가 어느 지점부터 다시 늘어나는 이유는?