Chapter 01

디지털이라는 약속

전선 위의 전압은 0.75 V와 0 V 사이 어느 값이든 될 수 있다. 그런데 디지털 회로는 이 연속된 값을 딱 두 칸, "낮으면 0, 높으면 1"로만 읽기로 약속한다. 정보를 일부러 버리는 이상한 약속처럼 보이지만, 바로 이 약속 덕분에 잡음 섞인 신호가 게이트를 지날 때마다 깨끗하게 다시 태어나고, 수백억 개의 트랜지스터를 이어 붙여도 계산이 틀리지 않는다. 이 장에서는 그 약속이 어떻게 지켜지는지, 그리고 이 책 전체가 오르내릴 추상화의 사다리를 한 번 훑어본다.

연속을 두 칸으로 나누는 약속

마이크가 만든 전압, 온도 센서의 전압, 라디오 안테나의 전압은 모두 아날로그(Analog) 신호다. 값이 연속적이고, 값 자체가 정보다. 0.412 V와 0.413 V는 다른 뜻이다. 반대로 디지털(Digital) 신호는 값의 구간만 본다. 기준 공정 DG-7(공급 전압 \(V_{DD}\) = 0.75 V)에서라면 대략 "0.3 V보다 낮으면 0, 0.45 V보다 높으면 1"로 읽는다. 0.05 V든 0.12 V든 똑같이 0이다.

이 약속에는 대가가 있다. 전선 하나로 보낼 수 있는 정보가 연속값에서 단 1비트로 줄어든다. 그 대신 얻는 것이 있다. 받는 쪽은 신호가 "얼마나 정확한가"를 따질 필요 없이 "어느 칸에 있는가"만 판정하면 된다. 칸의 경계에서 멀리 떨어져 있는 한 잡음이 조금 섞여도 판정은 바뀌지 않는다. 아래 그림에서 직접 확인해 보자.

잘못 읽은 비트—
판정 불가(X) 비트—
문턱과 레일 사이 거리—
그림 1-1. 해 보기파란 선은 보낸 비트열이 전선을 지나며 무뎌지고 잡음이 섞인 전압이다. 각 비트의 가운데에서 한 번 표본을 떠(점) 문턱보다 높으면 1, 낮으면 0으로 읽는다. 잡음을 키워 보고, 문턱을 한쪽 레일로 치우쳐 보자. 문턱이 가운데(\(V_{DD}/2\))에 있을 때 가장 큰 잡음을 견딘다. "금지 구간"을 고르면 두 문턱 사이에 떨어진 표본을 0도 1도 아닌 X로 처리한다.

잡음이 σ = 50 mV 정도면 오류가 거의 없다. 문턱에서 레일(0 V 또는 0.75 V)까지 375 mV, 곧 σ의 7.5배나 떨어져 있기 때문이다. 정규 분포에서 7.5σ를 넘는 잡음이 나올 확률은 \(10^{-13}\) 남짓이다. 디지털 회로가 "거의 절대" 틀리지 않는 것은 이처럼 신호와 판정 경계 사이에 넉넉한 거리를 두기 때문이다.

디지털은 "아날로그를 대충 읽는 것"이 아니다

디지털 회로 안의 전압도 물리적으로는 언제나 연속값이다. 트랜지스터는 0과 1을 모른다. 디지털이란 회로를 그렇게 해석하기로 하는 약속, 그리고 그 약속이 깨지지 않도록 회로를 설계하는 기술이다. 전환 도중의 전압, 잡음, 지연처럼 약속이 위태로워지는 순간을 다루는 것이 이 책의 대부분을 차지한다.

잡음이 쌓이는 사슬, 지워지는 사슬

한 번 판정하는 것만으로는 디지털의 진짜 힘이 드러나지 않는다. 칩 안의 신호는 게이트 수십 개를 연달아 지나고, 칩 전체로는 수백억 번의 전달이 매초 일어난다. 단을 지날 때마다 잡음이 조금씩 섞인다면 무슨 일이 생길까?

아날로그 사슬을 생각하자. 각 단이 이득 1인 이상적인 증폭기여서 신호를 그대로 전달한다고 해도, 각 단에서 섞인 잡음 역시 그대로 다음 단으로 넘어간다. 서로 독립인 잡음은 분산이 더해지므로 \(N\)단 뒤 잡음의 크기는 \(\sigma\sqrt{N}\)으로 자란다. 증폭기는 신호와 잡음을 구별하지 못한다.

디지털 사슬의 각 단은 버퍼(인버터 두 개)다. 버퍼는 입력이 0.3 V든 0.05 V든 출력을 거의 0 V로 내보낸다. 들어온 잡음을 다음 단에 넘기지 않고 버린다. 판정 경계를 넘을 만큼 큰 잡음만 비트를 뒤집을 수 있고, 그 확률은 단마다 독립적으로 아주 작다. 아래 시뮬레이터에서 두 사슬을 나란히 비교해 보자.

SIMULATOR

N단 사슬: 아날로그 증폭기 vs 디지털 버퍼

동작
아날로그 오류 (3000비트)—
아날로그 이론값—
디지털 오류 (3000비트)—
디지털 이론값—
각 선은 비트 하나가 단을 지나며 겪는 전압이다(초록: 1로 출발, 회색: 0으로 출발). 끝에서 \(V_{DD}/2\)로 판정해 틀린 경로는 빨간 점으로 표시하고, 오른쪽 막대는 3000비트의 최종 전압 분포다. 디지털 경로의 뾰족한 튐은 각 버퍼 입력에 섞인 잡음이며, 버퍼가 곧바로 레일로 되돌려 다음 단에 넘기지 않는다. 디지털 단은 DG-7 인버터 모델(DG.invOut)을 두 번 거친 실제 전달 곡선을 쓴다. 아날로그 단은 출력이 레일을 넘어도 자르지 않는 이상 증폭기다.

잡음 σ = 60 mV, 12단에서 아날로그 사슬은 수 %의 비트를 틀린다. 누적 잡음이 \(60\sqrt{12} \approx 208\) mV로 자라 문턱까지의 거리 375 mV의 절반을 넘기 때문이다. 같은 조건에서 디지털 사슬은 3000비트 중 하나도 틀리지 않는다. 잡음을 키우면 디지털도 결국 틀리기 시작하는데, 그 시점이 아주 갑작스럽다는 점도 눈여겨보자. 이것을 "절벽 효과"라 부른다. 디지털 방송이 잘 나오다가 어느 순간 화면이 통째로 멈추는 것과 같다.

$$\sigma_{\text{아날로그}}(N) = \sigma\sqrt{N}, \qquad P_e^{\text{아날로그}} = Q\!\left(\frac{V_{DD}/2}{\sigma\sqrt{N}}\right), \qquad P_e^{\text{디지털}} \approx N\,Q\!\left(\frac{V_M}{\sigma}\right)$$
\(Q(x)\): 표준 정규 분포가 \(x\)를 넘을 확률(꼬리 확률). \(V_M\): 버퍼의 스위칭 문턱(DG-7에서 약 0.375 V). 디지털 사슬은 단마다 레일로 복원되므로 각 단의 오류 확률이 따로따로 작게 유지되고, 전체 오류는 단 수에 선형으로만 늘어난다. 아날로그 사슬은 잡음 자체가 \(\sqrt{N}\)으로 커져 \(Q\) 함수 안의 인자가 줄어든다. \(Q\)는 인자에 지수적으로 민감하므로 차이는 수십 자릿수가 된다.
단 수를 4배로 늘리면?

σ = 100 mV, N = 10일 때 디지털 사슬의 오류율이 어떤 값 \(p\)였다. N을 40으로 늘리면 디지털 오류율은 대략 몇 배가 될까? 아날로그 사슬의 누적 잡음은 몇 배가 될까?

답 보기

디지털 오류율은 단 수에 비례하므로 약 4배(\(4p\))가 된다. 아날로그의 누적 잡음은 \(\sqrt{4} = 2\)배가 되는데, 이 "고작 2배"가 \(Q\) 함수 안에서는 인자를 절반으로 줄이는 것이어서 오류율은 몇 배가 아니라 몇 자릿수 커질 수 있다. 시뮬레이터에서 σ = 100 mV로 두고 N을 10과 40으로 바꿔 확인해 보자.

재생성: 잡음을 지우는 곡선

디지털 단이 잡음을 버리는 비결은 입력과 출력 사이의 관계, 곧 전압 전달 특성(VTC, Voltage Transfer Characteristic)에 있다. 인버터의 VTC는 양 끝이 납작하고 가운데가 가파르다. 납작한 끝에서는 입력이 크게 흔들려도 출력이 거의 움직이지 않는다(이득이 1보다 훨씬 작다). 가파른 가운데에서는 입력이 조금만 바뀌어도 출력이 크게 바뀐다(이득이 1보다 훨씬 크다). 이 두 성질이 함께 있어야 신호가 매 단 레일로 끌려가는 재생성(Regeneration)이 일어난다.

버퍼를 계속 이어 붙이는 것은 같은 함수 \(g\)를 반복 적용하는 것과 같다. \(x_{k+1} = g(x_k)\). 이런 반복은 거미줄 그림(Cobweb plot)으로 보면 한눈에 보인다. 곡선 위로 올라갔다가(다음 단의 출력) 대각선 \(y=x\)로 옆걸음질해(그 출력이 다음 단의 입력이 된다) 다시 곡선으로 가기를 되풀이한다.

마지막 단 출력—
판정—
가운데 이득 / 끝 이득—
그림 1-2. 해 보기왼쪽 그래프를 좌우로 끌어 첫 입력을 바꾸자. 주황 점선은 단마다 섞이는 잡음(입력이 옆으로 밀리는 양), 파란 선은 곡선과 대각선 사이를 오가는 반복이다. 오른쪽은 단 번호에 따른 전압이다. CMOS 버퍼는 어디서 출발하든 몇 단 만에 0 V나 0.75 V로 붙는다. "이득 < 1 곡선"은 모든 신호를 가운데로 뭉개 버리고, "선형"은 잡음이 그대로 쌓여 떠돈다. 회색 점선은 인버터 한 개의 VTC다.

그림에서 곡선이 대각선과 만나는 점을 고정점(Fixed point)이라 한다. 그 점에서 출발하면 영원히 그 자리에 머문다. CMOS 버퍼에는 고정점이 셋 있다. 0 V 근처, 0.75 V 근처, 그리고 가운데 \(V_M\). 그런데 세 점의 성격이 다르다.

$$g(x^*) = x^*, \qquad \text{안정:}\ |g'(x^*)| < 1, \qquad \text{불안정:}\ |g'(x^*)| > 1$$
고정점 근처에서 작은 어긋남 \(\varepsilon\)은 한 단 뒤 \(g'(x^*)\,\varepsilon\)이 된다. 기울기가 1보다 작으면 어긋남이 매 단 줄어 고정점으로 돌아오고(안정), 1보다 크면 커져서 밀려난다(불안정). CMOS 버퍼는 두 레일에서 기울기가 거의 0이고 \(V_M\)에서 수백~수천이다. 그래서 두 레일만 살아남는 쌍안정 시스템이 된다.

여기서 디지털 회로의 두 가지 필요조건이 나온다. 첫째, 전달 곡선이 비선형이어야 한다. 직선은 고정점이 하나뿐이거나 전부다. 둘째, 가운데에서 이득이 1보다 커야 한다. 이득이 모자라면 모든 신호가 가운데로 녹아 버린다. 초창기 컴퓨터가 진공관과 릴레이로, 지금은 트랜지스터로 만들어지는 것은 이 소자들이 모두 이득을 가진 비선형 소자이기 때문이다. 저항과 커패시터만으로는 디지털 회로를 만들 수 없다.

같은 곡선, 다른 쓰임: 기억

버퍼의 출력을 다시 자기 입력에 이으면 거미줄 그림의 반복이 시간 속에서 저절로 일어난다. 출발점이 \(V_M\)보다 조금이라도 위면 1로, 아래면 0으로 굴러가 거기 머문다. 이것이 1비트를 기억하는 래치(8장)와 SRAM 셀(13장)의 원리다. 출발점이 정확히 \(V_M\) 근처면 한참 동안 어느 쪽으로도 가지 못하는데, 이 위험한 상태를 메타안정성이라 부른다.

논리 레벨과 노이즈 마진

"낮으면 0, 높으면 1"이라는 약속을 수치로 정확히 적어 두어야 서로 다른 게이트, 서로 다른 칩이 함께 일할 수 있다. 약속은 보내는 쪽과 받는 쪽에 각각 두 개씩, 네 개의 전압으로 이루어진다.

보내는 쪽이 보장하는 값과 받는 쪽이 요구하는 값 사이의 여유가 전선 위에서 섞여도 되는 잡음의 최대치, 노이즈 마진(Noise margin)이다.

$$NM_H = V_{OH} - V_{IH}, \qquad NM_L = V_{IL} - V_{OL}$$
\(NM_H\): 1을 보냈을 때 아래쪽으로 섞여도 되는 잡음, \(NM_L\): 0을 보냈을 때 위쪽으로 섞여도 되는 잡음. 인버터의 VTC에서는 기울기가 −1이 되는 두 점을 \(V_{IL}, V_{IH}\)로 잡는 것이 관례다. 계산 방법과 크기 조절에 따른 변화는 4장에서 자세히 다룬다.
\(NM_H = V_{OH} - V_{IH}\)—
\(NM_L = V_{IL} - V_{OL}\)—
판정—
그림 1-3. 끌어 보기네 개의 손잡이(\(V_{OH}, V_{OL}, V_{IH}, V_{IL}\))를 위아래로 끌어 보자. 왼쪽 막대는 보내는 게이트가 보장하는 출력 구간, 오른쪽 막대는 받는 게이트가 확실히 알아듣는 입력 구간이다. 가운데 띠가 노이즈 마진이다. 받는 쪽 구간이 보내는 쪽 구간을 다 덮지 못하면 마진이 음수가 되고, 잡음이 전혀 없어도 통신이 실패할 수 있다.

DG-7 인버터는 \(V_{OL} \approx 0.05\) V, \(V_{IL} \approx 0.33\) V, \(V_{IH} \approx 0.43\) V, \(V_{OH} \approx 0.70\) V로 두 마진이 모두 약 0.27 V, 공급 전압의 약 37 %다. 같은 공정의 게이트끼리 연결할 때는 이처럼 마진이 넉넉하다. 마진이 문제되는 곳은 서로 다른 전압을 쓰는 칩끼리 연결하는 경계, 전압을 극단적으로 낮춘 저전력 회로, 그리고 이웃 배선이 끼어드는 크로스토크(14장)다. 아래 표는 오래 쓰여 온 몇몇 인터페이스 규격의 대략값이다.

규격(공급 전압)\(V_{OL}\)\(V_{IL}\)\(V_{IH}\)\(V_{OH}\)\(NM_L / NM_H\)
TTL (5 V)0.40.82.02.40.4 / 0.4
5 V CMOS (74HC, 4.5 V 공급)~0.331.353.15~3.84~1.0 / ~0.7
LVCMOS 3.3 V0.40.82.02.40.4 / 0.4
LVCMOS 1.8 V0.450.631.171.350.18 / 0.18
DG-7 인버터 (0.75 V, 칩 내부)0.050.330.430.700.27 / 0.27

단위는 V이고, 규격 값은 부하 전류 조건에 따라 조금씩 다르므로 대략값이다. DG-7 행은 이 페이지가 DG.vtcMetrics로 직접 계산해 채운다. 칩 내부 게이트의 마진(공급 전압의 30~40 %)이 칩 사이 인터페이스 규격(공급 전압의 10 % 안팎)보다 비율로는 훨씬 넉넉하다는 점이 흥미롭다. 칩 사이 규격은 서로 다른 회사, 서로 다른 공정, 긴 배선의 손실까지 모두 감싸야 하기 때문이다.

비트로 무엇을 나타내나

전선 하나가 1비트를 나르면 전선 \(n\)개는 \(2^n\)가지 상태를 나른다. 비트 3개면 8가지, 8개(1바이트)면 256가지, 32개면 약 43억 가지다. 이 상태들에 어떤 뜻을 붙일지는 또 하나의 약속이다. 가장 자연스러운 약속은 각 비트에 2의 거듭제곱 무게를 주는 이진수(Binary number)다.

$$U = \sum_{i=0}^{n-1} b_i\,2^i, \qquad S = -b_{n-1}\,2^{n-1} + \sum_{i=0}^{n-2} b_i\,2^i$$
\(U\): 부호 없는 정수(0 ~ \(2^n-1\)). \(S\): 2의 보수(Two's complement) 부호 있는 정수(\(-2^{n-1}\) ~ \(2^{n-1}-1\)). 차이는 맨 왼쪽 비트(MSB)의 무게가 \(+2^{n-1}\)이냐 \(-2^{n-1}\)이냐 하나뿐이다.
부호 없는 값 U—
2의 보수 값 S—
16진수—
그림 1-4. 눌러 보기비트 칸을 눌러 0과 1을 바꿔 보자. 칸 위의 숫자는 그 비트의 무게다. 아래 두 수직선은 같은 비트 패턴을 부호 없는 수와 2의 보수로 읽은 위치다. 0111 1111에서 +1을 누르면 부호 없는 값은 128로 자연스럽게 넘어가지만 2의 보수 값은 +127에서 −128로 뛴다. 이것이 오버플로다. "−x"는 모든 비트를 뒤집고 1을 더하는 2의 보수 부정이다.

2의 보수가 사실상 모든 컴퓨터의 표준이 된 이유는 하드웨어가 싸지기 때문이다. 부호 없는 덧셈기를 그대로 쓰면 부호 있는 덧셈도 맞는 답이 나온다. 뺄셈 \(a-b\)는 \(a + \bar{b} + 1\)이므로 덧셈기에 인버터와 올림 입력 하나만 더하면 된다. 이 덧셈기를 트랜지스터로 어떻게 빠르게 만드는지가 11장의 주제다.

8비트로 −1은 어떻게 생겼나?

2의 보수 8비트에서 −1의 비트 패턴은? 그리고 그 패턴을 부호 없는 수로 읽으면 얼마인가?

답 보기

1111 1111이다. MSB 무게 −128에 나머지 127을 더하면 −1이 된다. 같은 패턴을 부호 없는 수로 읽으면 255다. 비트 자체에는 부호가 없다. 그것을 어떻게 읽을지는 그 비트를 쓰는 회로(명령어)가 정한다. 그림 1-4에서 "0으로"를 누른 뒤 "−x"를 눌러 −0이 다시 0임을, "+1"을 눌러 둘째 칸으로 넘어가는 모습을 확인해 보자.

한 전선에 2비트 이상을 싣는 방법도 있다. 전압 범위를 두 칸이 아니라 4칸, 8칸, 16칸으로 나누는 다중 레벨(Multi-level) 신호다. 낸드 플래시 메모리는 셀 하나의 문턱 전압을 4·8·16단계로 나눠 셀당 2·3·4비트(MLC·TLC·QLC)를 저장하고, 고속 직렬 링크와 최신 GDDR7 메모리는 전압 4단계로 1심볼에 2비트를 보내는 PAM4를 쓴다. 공짜는 아니다.

레벨 간격—
심볼 오류율—
2레벨과 같은 오류율을 위한 잡음 한도—
그림 1-5. 해 보기같은 0~0.75 V 창을 몇 칸으로 나누느냐에 따라 각 레벨의 전압 분포(종 모양)가 얼마나 겹치는지 보자. 점선은 판정 문턱, 빨간 영역은 이웃 칸으로 넘어가 틀리게 읽히는 확률이다. 칸을 \(2^b\)개로 늘리면 레벨 간격은 \(1/(2^b-1)\)로 줄어든다. 4레벨이면 간격이 1/3이 되어 같은 오류율을 지키려면 잡음을 3배 줄여야 한다.

다중 레벨은 비트당 면적이나 대역폭이 귀한 곳에서 잡음 여유를 팔아 밀도를 사는 거래다. 플래시는 그렇게 잃은 신뢰성을 강력한 오류 정정 부호로 메우고, PAM4 링크는 수신기에 정교한 등화기를 둔다. 반면 칩 안의 논리 게이트는 거의 언제나 2레벨을 쓴다. 매 단 재생해야 하는 게이트를 4레벨로 만들려면 고정점이 넷인 전달 곡선이 필요하고, 그런 회로는 크고 느리며 마진이 작기 때문이다.

스위치 두 개로 만드는 인버터

그렇다면 비선형이고 이득이 큰 전달 곡선은 실제로 무엇으로 만드나? 오늘날의 답은 MOSFET이다. 지금 단계에서는 MOSFET을 게이트 전압으로 여닫는 스위치라고만 보자. nMOS는 게이트가 높을 때(1) 닫히고, pMOS는 게이트가 낮을 때(0) 닫힌다. 둘을 위아래로 쌓고 게이트를 묶으면 입력이 무엇이든 둘 중 정확히 하나만 닫힌다. 이것이 CMOS 인버터다.

출력 \(V_{out}\)—
스위치 상태—
\(V_{DD}\)→GND 관통 전류—
그림 1-6. 해 보기입력 전압을 0에서 0.75 V까지 천천히 올려 보자. 왼쪽 회로에서 스위치가 닫힌 정도는 그 트랜지스터에 흐를 수 있는 전류(로그 눈금)로 그렸다(파랑: nMOS, 분홍: pMOS). 오른쪽은 인버터의 VTC와 현재 동작점이다. 입력이 0이나 1일 때는 한쪽 스위치가 완전히 열려 전원에서 접지로 새는 전류가 거의 없다. 입력이 가운데쯤일 때만 두 스위치가 함께 반쯤 닫혀 관통 전류가 흐른다.

이 단순한 회로에 디지털 회로가 원하는 성질이 다 들어 있다. 출력이 \(V_{DD}\)나 GND에 스위치로 직접 연결되므로 출력 레벨이 깨끗하다(\(V_{OH} \approx V_{DD}\), \(V_{OL} \approx 0\)). 가운데에서 두 트랜지스터가 서로 밀고 당기며 큰 이득을 만든다. 정지 상태에서는 전류가 거의 흐르지 않는다. 스위치의 진짜 모습(문턱 전압, 온저항, 꺼져도 새는 전류)은 3장에서, 인버터의 VTC와 크기 조절은 4장에서, 스위치를 직렬·병렬로 엮어 NAND·NOR를 만드는 법은 5장에서 다룬다.

추상화의 사다리

최신 칩에는 트랜지스터가 수백억 개 있다. 이것을 하나하나 생각하며 설계하는 것은 불가능하다. 그래서 디지털 설계는 층을 쌓는다. 아래층의 복잡한 사정을 몇 가지 규칙으로 요약해 숨기고, 위층은 그 규칙만 믿고 일한다. 이것이 추상화(Abstraction)다. 이 책의 각 장 머리말에 있는 사다리가 바로 이 층들이다.

  1. 소자(Device): 트랜지스터와 배선. 숨기는 것: 반도체 물리, 공정. (→ DeviceBook, ProcessBook)
  2. 게이트(Gate): 인버터, NAND, NOR. 숨기는 것: 연속 전압, 전류. 남기는 것: 0/1과 지연.
  3. 순차 회로(Sequential): 플립플롭과 클럭. 숨기는 것: 연속 시간. 남기는 것: 사이클.
  4. 데이터패스(Datapath): 덧셈기, 곱셈기, 시프터. 숨기는 것: 개별 게이트. 남기는 것: 수와 연산.
  5. 블록(Block): 메모리, ALU, 코어. 숨기는 것: 내부 구조. 남기는 것: 인터페이스와 성능 수치.
  6. 칩(System): SoC. 숨기는 것: 블록 내부 전부. 남기는 것: 기능, 전력, 비용. (→ SoCBook)
그림 1-7. 눌러 보기같은 1비트 덧셈 \(A + B + C_{in}\)을 사다리의 각 층에서 본 모습이다. 입력 버튼을 바꾸면 모든 층의 그림이 같은 값으로 따라 바뀐다. 아래로 내려갈수록 부품 수가 늘고, 위로 올라갈수록 1비트 덧셈은 점점 작은 점이 되어 사라진다. 위층은 아래층을 "믿을 수 있을 때"만 존재한다.

추상화는 생산성을 주지만 공짜는 아니다. 각 층의 규칙은 아래층이 특정 조건을 지킬 때만 참이다. "게이트 출력은 0 아니면 1"은 노이즈 마진이 양수일 때만, "값은 클럭 에지에서만 바뀐다"는 타이밍 조건이 지켜질 때만, "덧셈기는 합을 낸다"는 그 둘이 다 지켜질 때만 참이다. 좋은 회로 설계자는 사다리를 오르내리며 어느 층의 약속이 언제 깨지는지 아는 사람이다.

추상화가 새는 순간

"물이 새는 추상화"(Leaky abstraction)라는 말이 있다. 아래층의 사정이 위층으로 스며드는 순간이다. 전원 전압이 순간적으로 떨어져 게이트가 느려지면 타이밍이 깨지고, 우주선 입자가 SRAM 셀 하나를 뒤집으면(16장) 프로그램이 엉뚱하게 동작한다. 공정 미세화가 진행될수록 이런 누수가 늘어, 위층 설계자도 아래층을 점점 더 알아야 한다.

동기식 시스템 한 바퀴

재생성이 전압을 두 칸으로 나누듯, 클럭은 시간을 칸으로 나눈다. 거의 모든 디지털 칩은 동기식(Synchronous) 설계를 따른다. 상태는 레지스터(플립플롭 묶음)에만 저장되고, 레지스터는 클럭의 상승 에지에서만 입력을 받아들인다. 레지스터 사이에는 기억이 없는 조합 논리(Combinational logic)가 놓인다.

한 사이클 동안 일어나는 일은 이렇다. 클럭 에지가 오면 레지스터가 새 값을 내보낸다(\(t_{cq}\) 뒤). 그 값이 조합 논리를 지나며 이리저리 흔들리다 결국 정답에 자리 잡는다(\(t_{logic}\) 뒤). 다음 에지보다 조금 앞서(\(t_{setup}\)) 자리 잡았다면 레지스터가 정답을 받아 간다. 중간의 흔들림은 아무도 보지 않으므로 상관없다. 이 약속 덕분에 설계자는 시간을 "사이클 0, 1, 2 …"라는 정수로만 생각할 수 있다.

SIMULATOR

4비트 누산기: 레지스터 → 덧셈기 → 레지스터

동작
필요한 최소 주기—
최대 클럭 주파수—
여유(slack)—
틀린 사이클—
레지스터 Q가 매 사이클 Q + k로 바뀌는 누산기다. \(t_{cq}\) = 15 ps, \(t_{setup}\) = 10 ps, 조합 논리 지연 = 깊이 × FO4(7.5 ps). 덧셈기는 리플 캐리라서 아래 비트부터 차례로 자리 잡는다고 단순화했다. 시간이 모자라 자리 잡지 못한 비트는 이전 값이 그대로 잡힌다(실제로는 메타안정 위험까지 있다). 파형의 빗금은 값이 아직 정해지지 않은 구간, 빨간 표시는 정답과 다른 사이클이다.

기본값(주기 120 ps, 깊이 10)에서는 덧셈이 매 사이클 맞는다. 필요한 시간은 \(15 + 75 + 10 = 100\) ps이고 20 ps가 남는다. 주기를 100 ps 아래로 줄이면 위쪽 비트가 미처 자리 잡지 못한 채 잡혀 누산기가 엉뚱한 수를 세기 시작한다. 클럭을 무작정 올릴 수 없는 이유, 그리고 칩의 최대 클럭이 가장 느린 경로 하나로 정해지는 이유다.

$$T_{clk} \ge t_{cq} + t_{logic,\max} + t_{setup}, \qquad f_{\max} = \frac{1}{t_{cq} + t_{logic,\max} + t_{setup}}$$
\(t_{cq}\): 클럭 에지에서 레지스터 출력이 바뀌기까지(clock-to-Q), \(t_{logic,\max}\): 가장 느린 조합 경로의 지연, \(t_{setup}\): 에지 전에 입력이 안정되어 있어야 하는 시간. 클럭 스큐와 hold 조건까지 포함한 전체 이야기는 8장과 10장에서 한다.
논리를 둘로 쪼개면?

깊이 16(120 ps)인 조합 논리를 레지스터를 하나 더 넣어 깊이 8짜리 두 단으로 나누면, 최대 클럭은 몇 배가 될까? 정확히 2배일까?

답 보기

나누기 전 최소 주기는 15 + 120 + 10 = 145 ps(약 6.9 GHz), 나눈 뒤는 15 + 60 + 10 = 85 ps(약 11.8 GHz)로 약 1.7배다. 레지스터 오버헤드 \(t_{cq} + t_{setup}\) = 25 ps는 쪼갤 수 없기 때문에 2배에 못 미친다. 이것이 파이프라이닝의 이득과 한계다. 대신 결과가 나오기까지 사이클 수(지연 시간)는 1에서 2로 늘어난다.

디지털 회로의 성적표

같은 기능을 하는 회로라도 좋고 나쁨이 있다. 디지털 회로는 보통 네 가지 지표로 평가한다.

$$E_{\text{스위칭}} = C V_{DD}^2, \qquad P_{\text{동적}} = \alpha\,C\,V_{DD}^2\,f, \qquad t_d \propto \frac{C\,V_{DD}}{I_{on}(V_{DD})}$$
\(\alpha\): 사이클당 0→1 천이 확률(활동도), \(f\): 클럭 주파수, \(I_{on}\): 켜진 트랜지스터의 전류. 공급 전압을 낮추면 에너지는 제곱으로 줄지만 \(I_{on}\)이 더 빠르게 줄어 지연이 늘어난다. 전력의 자세한 분해는 15장, 지연 모델은 6장에서 다룬다.

이 지표들은 서로 줄다리기를 한다. 가장 대표적인 줄이 공급 전압이다. 아래 그림에서 \(V_{DD}\)와 문턱 전압을 바꿔 보자.

FO4 지연—
동적 에너지 / 게이트·사이클—
누설 에너지 / 게이트·사이클—
노이즈 마진 (min)—
그림 1-8. 해 보기세로축은 로그 눈금이고 모두 DG-7 기본점(0.75 V, \(V_t\) = 0.30 V)을 1로 둔 상대값이다. 파랑은 지연, 주황은 동적 에너지 \(\alpha CV^2\), 회색 점선은 누설 에너지(누설 전류 × 전압 × 사이클 시간), 굵은 선은 둘을 더한 연산당 에너지다. 사이클은 40 FO4, 활동도 α = 0.02, 부하 1 fF로 가정했다. 전압을 낮추면 에너지는 줄지만 지연이 폭발하고, 너무 낮추면 느려진 만큼 누설이 쌓여 에너지도 다시 늘어난다. 바닥이 최소 에너지점이다.

속도를 원하면 전압을 올리고 문턱을 낮추지만 에너지와 누설이 늘어난다. 에너지를 아끼려면 전압을 내리지만 느려지고 마진이 줄어 변동에 약해진다. 면적을 아끼려고 트랜지스터를 작게 만들면 느려지고 변동이 커진다. 모든 지표에서 이기는 설계는 없다. 응용에 따라 균형점이 다를 뿐이다. 서버 CPU는 속도를, 스마트폰은 에너지를, 센서 노드는 누설을, 자동차 칩은 견고함을 가장 앞에 둔다. 아래 표는 이 지표들의 대략적인 크기 감각이다.

항목값(약)비고
DG-7 공급 전압 / 문턱 전압0.75 V / 0.30 V이 책의 기준 공정(7 nm급 교육용)
단위 인버터 지연 τ / FO4 지연1.5 ps / 7.5 psFO4 ≈ 5τ
단위 nMOS 켜짐 전류~50 µA\(V_{GS} = V_{DS} = V_{DD}\)
인버터 한 번 충방전 에너지 (FO4 부하 ~1 fF)~0.5 fJ\(CV_{DD}^2\) = 1 fF × (0.75 V)²
고성능 CPU 클럭~5–6 GHz사이클 약 170–200 ps ≈ 25 FO4 안팎 (2024)
32비트 정수 덧셈 에너지~0.1 pJ45 nm 기준 (Horowitz, 2014)
DRAM에서 64비트 읽기 에너지~1–2 nJ덧셈보다 만 배 이상: 계산보다 데이터 이동이 비싸다 (같은 출처)
6T SRAM 셀 면적 (7 nm급)~0.027 µm²고밀도 셀, 2018년경
논리 트랜지스터 밀도 (7 nm급)~0.9억 개/mm²공정사 발표 기준, 실제 칩은 더 낮다
최신 칩 트랜지스터 수~920억 / ~2080억노트북 SoC(2023) / 다이 2개 데이터센터 GPU(2024)
칩 전력~5 W / ~1 kW스마트폰 SoC / 데이터센터 가속기 (2024)
암산용 숫자 셋

"게이트 하나 ~10 ps, 스위칭 한 번 ~1 fJ, 칩 하나 ~100억 개." 이 세 숫자만 기억해도 많은 것을 가늠할 수 있다. 예를 들어 100억 개 게이트 중 2 %가 3 GHz로 매 사이클 1 fJ씩 쓰면 \(10^{10} \times 0.02 \times 3\times10^9 \times 10^{-15} = 600\) W다. 실제 칩이 전부를 동시에 켜지 못하는 이유(다크 실리콘)가 이 한 줄에 들어 있다.

이 책의 지도

이 책은 추상화의 사다리를 아래에서 위로 오른다. 2장에서 0과 1을 다루는 대수를 익힌 뒤, 3~7장에서 트랜지스터로 게이트를 짓고 그 지연을 계산한다. 8~10장에서 기억과 시간(순차 회로)을, 11~12장에서 수를 다루는 데이터패스를, 13~16장에서 메모리·배선·전력·신뢰성이라는 칩 전체의 문제를 다룬다. 마지막으로 17~18장에서 HDL 코드가 게이트가 되는 과정을 보고, 실험실에서 직접 회로를 짜 본다.

시리즈의 다른 책과도 이어진다. 트랜지스터 아래의 물리는 DeviceBook과 ProcessBook, 이 책의 회로가 모여 만드는 코어·캐시·NoC는 SoCBook, RTL에서 마스크까지의 설계 흐름은 DesignBook, DRAM·플래시 같은 메모리 소자는 MemoryBook이 맡는다.

핵심 정리

  1. 디지털은 연속 전압을 두 구간(0과 1)으로만 읽기로 한 약속이다. 정보량을 줄이는 대신 판정 경계와 신호 사이에 큰 거리를 둬 잡음에 강해진다.
  2. 아날로그 사슬에서는 잡음이 \(\sigma\sqrt{N}\)으로 쌓이지만, 디지털 사슬은 매 단 신호를 레일로 복원(재생성)하므로 오류가 단 수에 선형으로만 늘고 그 크기도 지수적으로 작다.
  3. 재생성에는 비선형 전달 곡선과 가운데에서 1보다 큰 이득이 필요하다. 두 레일은 안정 고정점, 스위칭 문턱 \(V_M\)은 불안정 고정점이다.
  4. 논리 레벨은 \(V_{OL}, V_{OH}\)(보내는 쪽 보장)와 \(V_{IL}, V_{IH}\)(받는 쪽 요구)로 정하며, 노이즈 마진은 \(NM_H = V_{OH}-V_{IH}\), \(NM_L = V_{IL}-V_{OL}\)이다.
  5. \(n\)비트는 \(2^n\)가지 상태를 나타내고, 2의 보수는 부호 없는 덧셈기를 그대로 써서 부호 있는 연산을 한다. 다중 레벨 신호는 잡음 여유를 팔아 밀도를 산다.
  6. 소자→게이트→순차→데이터패스→블록→칩의 각 층은 아래층을 규칙으로 요약해 숨기며, 동기식 설계는 \(T \ge t_{cq}+t_{logic}+t_{setup}\)일 때 시간을 사이클로 추상화한다.
  7. 속도·에너지·면적·견고함은 서로 맞바꾸는 지표다. 공급 전압을 낮추면 에너지(\(CV^2\))는 줄고 지연은 늘며, 너무 낮추면 누설 때문에 최소 에너지점이 생긴다.

확인 퀴즈

Q1. 이득이 정확히 1인 이상적 아날로그 증폭기 16단에 각 단마다 σ = 20 mV의 독립 잡음이 더해진다. 마지막 단 출력의 잡음 크기(표준 편차)는?

독립 잡음은 분산이 더해지므로 \(\sigma\sqrt{N} = 20 \times \sqrt{16} = 80\) mV다. 증폭기는 신호와 잡음을 구별하지 못해 둘 다 그대로 전달한다.

Q2. 버퍼 체인이 잡음을 지울 수 있게 하는 전달 곡선의 성질로 가장 알맞은 것은?

끝(레일)의 작은 기울기가 잡음을 줄여 레일로 끌어당기고(안정 고정점), 가운데의 큰 기울기가 신호를 두 레일 중 하나로 밀어낸다(불안정 고정점). 모든 곳에서 기울기가 1보다 작으면 신호가 가운데로 뭉개진다.

Q3. 어떤 게이트의 \(V_{OH}\) = 0.68 V, \(V_{OL}\) = 0.06 V이고, 받는 게이트의 \(V_{IH}\) = 0.45 V, \(V_{IL}\) = 0.30 V이다. \(NM_H\)와 \(NM_L\)은?

\(NM_H = V_{OH} - V_{IH} = 0.68 - 0.45 = 0.23\) V, \(NM_L = V_{IL} - V_{OL} = 0.30 - 0.06 = 0.24\) V.

Q4. 4비트 2의 보수에서 비트 패턴 1010이 나타내는 값은?

MSB 무게가 −8이므로 \(-8 + 2 = -6\)이다. 부호 없는 수로 읽으면 10이다. 확인: 6 = 0110을 뒤집으면 1001, 1을 더하면 1010.

Q5. \(t_{cq}\) = 20 ps, 가장 느린 조합 경로 = 150 ps, \(t_{setup}\) = 15 ps인 동기식 회로의 최대 클럭 주파수는 대략?

최소 주기 = 20 + 150 + 15 = 185 ps, \(f_{\max} = 1/185\,\text{ps} \approx 5.4\) GHz. 6.7 GHz는 조합 논리만, 5.9 GHz는 setup을 빼먹은 값이다.

Q6. 셀당 1비트(2레벨)이던 메모리를 같은 전압 창에서 셀당 3비트(8레벨)로 바꾸면, 같은 오류율을 지키기 위해 허용되는 잡음은 대략 몇 분의 1로 줄어드나?

레벨 간격이 창/(레벨 수 − 1)이므로 2레벨은 창/1, 8레벨은 창/7이다. 간격이 1/7이 되므로 같은 오류율을 위해 잡음도 약 1/7로 줄여야 한다(레벨 수에 따른 계수 차이는 무시).