Chapter 05

정적 CMOS 게이트

4장의 인버터는 pMOS 하나와 nMOS 하나로 된, 가장 작은 정적 CMOS 게이트였다. 이제 트랜지스터를 더 늘려 본다. 스위치를 직렬로 이으면 AND, 병렬로 이으면 OR가 된다. 이 규칙 하나와 "풀업과 풀다운은 서로의 거울상"이라는 원칙 하나만 있으면 NAND, NOR, 그리고 AOI·OAI 같은 복합 게이트를 기계적으로 설계할 수 있다. 하지만 기계적으로 만든 회로가 곧 좋은 회로는 아니다. 직렬로 쌓인 트랜지스터는 느리고, 입력 순서에 따라 지연이 달라지며, 실리콘 위에 어떤 순서로 늘어놓느냐에 따라 면적이 바뀐다. 이 장에서는 스위치를 눌러 보는 데서 출발해, 식 하나를 넣으면 트랜지스터 회로와 레이아웃이 튀어나오는 도구까지 직접 만져 본다.

직렬은 AND, 병렬은 OR

3장에서 우리는 MOSFET을 전압으로 여닫는 스위치로 보기로 했다. nMOS는 게이트가 1일 때 닫히고(통하고), pMOS는 게이트가 0일 때 닫힌다. 스위치 여러 개를 엮으면 두 단자 사이가 통하는지가 입력의 논리 함수가 된다. 규칙은 두 가지뿐이다.

이 두 규칙을 겹겹이 쓰면 직렬 안에 병렬, 병렬 안에 직렬이 들어간 직병렬 네트워크(Series-parallel network)가 된다. 이런 네트워크가 통하는 조건은 언제나 AND와 OR만으로 된 식, 즉 괄호 구조가 회로 구조와 똑같은 식으로 쓸 수 있다. 1938년 섀넌(Claude Shannon)이 석사 논문에서 계전기 회로와 불 대수가 같은 것임을 보인 바로 그 관찰이다.

네트워크
그림 5-1. 해 보기스위치를 직접 누르거나 아래 버튼으로 여닫아 보자. 왼쪽 단자에서 오른쪽 단자까지 닫힌 스위치만으로 길이 이어지면 그 길이 초록색(논리 1)으로 밝아지고 램프가 켜진다. A·(B+C)에서 A를 열어 두면 B, C를 어떻게 해도 길이 없다는 것을 확인하자. 직렬은 "모두", 병렬은 "하나라도"다.

스위치 네트워크 하나는 "통한다/안 통한다"만 알려 준다. 하지만 논리 게이트의 출력은 1 또는 0이라는 전압이어야 한다. 그래서 CMOS 게이트는 네트워크를 두 개 쓴다. 하나는 출력을 \(V_{DD}\)로 끌어올리고, 다른 하나는 GND로 끌어내린다. 둘이 언제 통하는지를 잘 맞춰 주는 것이 이 장 전체의 주제다.

스위치 모델의 범위

여기서는 트랜지스터를 이상적인 스위치로 본다. 켜지면 저항 \(R\), 꺼지면 무한대. 이 모델로 논리 기능과 대략의 지연(6장)까지 설명할 수 있다. 정확한 전압 파형은 3장의 알파 전력 법칙이나 SPICE가 필요하다. 그리고 nMOS는 0을 잘 전달하지만 1은 \(V_{DD}-V_t\)까지만 전달하고, pMOS는 반대라는 점(3장)이 곧 중요해진다.

풀업·풀다운 네트워크의 쌍대성

정적 CMOS 게이트는 출력 노드 하나에 두 네트워크를 매단다.

원하는 출력이 \(Y = \overline{F}\)라고 하자. 출력이 0이어야 하는 조건이 \(F=1\)이므로 PDN은 \(F\)가 1일 때 통해야 한다. nMOS는 입력이 1일 때 켜지므로 \(F\)의 식을 그대로 직렬(AND)·병렬(OR)로 옮기면 된다. 반대로 PUN은 \(F=0\), 즉 \(\overline{F}=1\)일 때 통해야 한다. pMOS는 입력이 0일 때 켜지므로 PUN이 통하는 조건은 반전된 입력들의 식이다. 드모르간 법칙을 쓰면 이것은 같은 식에서 AND와 OR를 맞바꾼 것이 된다.

$$ \text{PDN 통함} \iff F(A,B,\dots)=1, \qquad \text{PUN 통함} \iff F^{D}(\overline{A},\overline{B},\dots)=1 \iff F=0 $$
\(F^{D}\)는 \(F\)의 쌍대(Dual): AND↔OR를 맞바꾼 식. 예: \(F=A\cdot B\)면 \(F^D = A+B\), 따라서 PUN 통함 \(\iff \overline{A}+\overline{B} = \overline{A\cdot B}\). 회로로는 직렬 ↔ 병렬을 맞바꾼다.

그러니 규칙은 단순하다. PDN을 \(F\)대로 짓고, PUN은 그 직렬·병렬을 맞바꿔 pMOS로 짓는다. NAND2는 \(F = A\cdot B\)이므로 nMOS 둘이 직렬, pMOS 둘이 병렬이다. NOR2는 \(F=A+B\)이므로 그 반대다. 아래 그림에서 입력을 바꾸며 어느 쪽 네트워크가 출력을 붙잡는지 보자.

그림 5-2. 해 보기입력 버튼, 회로의 트랜지스터, 진리표의 행을 눌러 입력을 바꿔 보자. 켜진 트랜지스터는 채널이 칠해진다(nMOS 파랑, pMOS 분홍). 출력에서 레일까지 이어진 길은 굵게 표시되고, 그 레일의 값(1=초록, 0=회색)으로 칠해진다. 어떤 입력 조합에서도 길은 정확히 한쪽에만 생긴다.

쌍대 구조가 주는 선물은 두 가지다. 첫째, 어느 입력 조합에서도 두 네트워크 중 정확히 하나만 통한다. 둘 다 통하면 \(V_{DD}\)에서 GND로 곧장 전류가 흐르는 단락이 생기고 출력은 중간 어딘가(X)가 된다. 둘 다 안 통하면 출력은 아무 데도 연결되지 않고 떠 있는(Z) 상태가 되어, 커패시터에 남은 전하에 기대 값을 겨우 유지하다가 누설로 흐려진다. 쌍대 구조는 수학적으로 \(F\)와 \(\overline{F}\)를 나눠 갖으므로 이 두 사고가 원천적으로 생기지 않는다. 둘째, 정지 상태에서 \(V_{DD}\)–GND 사이에 길이 없으므로 정적 전력이 (누설을 빼면) 0이다. 출력은 항상 레일 하나에 낮은 저항으로 묶여 있어 잡음에 강하고, 4장의 인버터처럼 매 단마다 신호를 0 V와 \(V_{DD}\)로 되살린다. 이것이 "정적"(Static) CMOS라는 이름의 뜻이다.

NAND3의 PUN에 pMOS 하나가 고장 나 늘 꺼져 있다면?

NAND3의 PUN은 pMOS 세 개가 병렬이다. 입력 A에 달린 pMOS가 끊겼다(늘 꺼짐). 진리표의 어느 행에서 문제가 생기고, 출력은 어떻게 될까?

답 보기

A=0이고 B=C=1인 한 행에서만 문제가 생긴다. 이때 PDN은 A가 꺼져 있어 안 통하고, PUN에서 켜져야 할 pMOS는 A의 것 하나뿐인데 끊겨 있으니 PUN도 안 통한다. 출력은 떠 있는 Z가 되어 직전 값을 잠시 기억한다. 직전에 0이었다면 0이 남아 틀린 값이 나온다. 조합 회로가 기억을 갖게 되는 이 고장을 고착 개방 고장(Stuck-open fault)이라 하며, 두 패턴을 연달아 넣어야 잡을 수 있어 테스트가 까다롭다(16장).

복합 게이트: 식 하나에서 트랜지스터 회로로

쌍대 규칙은 NAND·NOR에서 멈출 이유가 없다. \(F\)가 AND와 OR의 어떤 조합이든 PDN을 그 모양대로, PUN을 직렬·병렬을 맞바꾼 모양대로 지으면 한 단짜리 게이트가 된다. 이런 게이트를 복합 게이트(Complex gate)라 하고, 특히 AND들의 OR를 반전하는 것을 AOI(AND-OR-Invert), OR들의 AND를 반전하는 것을 OAI(OR-AND-Invert)라 부른다. 이름 뒤 숫자는 각 묶음의 입력 수다. AOI21은 \(\overline{A\cdot B + C}\), OAI22는 \(\overline{(A+B)\cdot(C+D)}\)다.

AOI21을 NAND·NOR로 따로 만들면 AND2(6개) + NOR2(4개) = 트랜지스터 10개에 두 단이지만, 복합 게이트로는 6개에 한 단이다. 아래 시뮬레이터에 프리셋을 고르거나 식을 직접 써 넣으면 PDN과 PUN이 자동으로 지어진다. 식에서 AND는 ·, *, & 또는 붙여 쓰기, OR는 +나 |, 입력 이름은 A~F다. 식은 반전 전의 \(F\)이고, 출력은 언제나 \(Y=\overline{F}\)다.

SIMULATOR

복합 게이트 생성기: \(Y=\overline{F}\)의 PDN·PUN

식 F 직접 쓰기 (Y = !F)
풀업 네트워크
트랜지스터 폭 표시 (단위 인버터와 같은 구동력)
입력 (누르면 반전)
출력 Y—
트랜지스터 수—
최장 직렬 (PDN / PUN)—
충돌 X / 떠 있음 Z 행—
입력별 논리적 노력 g—
—
PDN은 \(F\)를 그대로(AND=직렬, OR=병렬) nMOS로, PUN은 직렬·병렬을 맞바꿔 pMOS로 짓는다. "실수: 같은 구조"를 고르면 PUN을 PDN과 같은 모양으로 지어, 단락(X)과 떠 있는 출력(Z)이 어느 행에서 생기는지 진리표로 보여 준다. 폭은 각 트랜지스터를 지나는 가장 긴 직렬 경로의 길이에 비례하게 정했고(pMOS는 \(\mu=\)1.6배), 논리적 노력은 그 입력이 보는 게이트 폭의 합을 단위 인버터 입력 \(1+\mu\)로 나눈 값이다.

시뮬레이터에서 확인할 수 있는 성질을 정리해 보자.

입력에 반전이 있는 식은 한 단으로 안 된다

\(Y=\overline{A\cdot\overline{B}}\)처럼 입력 리터럴 자체가 반전되어 있으면, 그 반전을 만들 인버터가 앞에 필요하다. 한 단짜리 정적 CMOS 게이트는 모든 입력에 대해 단조 감소(Negative unate)한다. 입력 하나를 0→1로 올리면 nMOS는 켜지기만 하고 pMOS는 꺼지기만 하므로 출력은 내려가거나 그대로일 뿐 올라갈 수 없다. XOR처럼 단조가 아닌 함수는 그래서 한 단 정적 CMOS로 바로 만들 수 없고, 반전 입력을 함께 받거나(트랜지스터 12개 정도) 7장의 전송 게이트를 쓴다. 시뮬레이터에 !나 '를 넣으면 이 이유로 거절한다.

왜 CMOS 게이트는 반전형인가

앞 절의 성질을 뒤집어 말하면, 한 단 정적 CMOS 게이트는 반전형이다. NAND와 NOR는 트랜지스터 4개로 한 단에 되지만, AND와 OR는 NAND·NOR 뒤에 인버터를 붙여 6개, 두 단이 된다. 그렇다면 nMOS를 위에, pMOS를 아래에 두어 반전 없이 AND를 바로 만들 수는 없을까? 회로로는 그릴 수 있다. 위쪽에 nMOS 직렬(A·B일 때 통함), 아래쪽에 pMOS 병렬(A나 B가 0이면 통함). 논리는 맞다. 문제는 전압이다.

출력 전압—
다음 단이 읽는 값—
트랜지스터 / 단—
그림 5-3. 해 보기두 구현을 오가며 A, B를 바꿔 보자. 오른쪽 막대는 출력 전압이고, 점선은 단위 인버터의 \(V_{IL}\), \(V_{IH}\)다. 직접 AND에서 위쪽 nMOS는 출력을 \(V_{DD}-V_t\)까지만 올리고, 아래쪽 pMOS는 \(|V_{tp}|\)까지만 내린다. 0.75 V 공정에서 문턱이 0.30 V이면 남는 노이즈 마진이 거의 없다(체 효과를 넣으면 더 나쁘다).

nMOS가 1을 넘기려 하면, 출력이 \(V_{DD}-V_t\)에 이르는 순간 \(V_{GS}\)가 \(V_t\)로 줄어 스스로 꺼진다. 그래서 nMOS는 약한 1, pMOS는 약한 0만 전달한다(3장). DG-7에서 그 값은 0.45 V와 0.30 V로, 0.75 V의 60%와 40%다. 다음 단 인버터는 이 애매한 전압을 받아 pMOS와 nMOS가 함께 반쯤 켜진 채로 정적 전류를 흘리고, 몇 단을 거치면 논리값이 사라진다. 이것이 nMOS를 풀다운에만, pMOS를 풀업에만 쓰는 이유이고, 그 결과 입력이 오르면 출력이 내리는 반전이 피할 수 없게 된다.

그래서 설계자는 반전을 적이 아니라 재료로 쓴다. 합성 도구는 AND-OR 식을 NAND-NAND로 바꾸고(드모르간), 두 단마다 반전이 상쇄되게 짝을 맞춘다. 11장의 덧셈기는 캐리 사슬에서 단마다 극성을 번갈아 뒤집어 인버터를 아예 없앤다. 표준 셀 라이브러리에 AND2가 있어도, 그 안을 열어 보면 NAND2와 인버터가 들어 있다.

비반전이 공짜인 경우: 전송 게이트

nMOS와 pMOS를 나란히 붙인 전송 게이트(Transmission gate)는 양쪽이 약한 값을 서로 보완해 0과 1을 모두 온전히 전달한다. 그래서 MUX나 XOR는 전송 게이트로 비반전 구조를 만들 수 있다. 다만 신호를 되살리지(재생하지) 않아 여러 단을 이어 붙이면 지연이 길이의 제곱으로 늘어난다. 7장에서 다룬다.

크기 조절: 스택을 넓혀 구동력 맞추기

트랜지스터는 켜졌을 때 저항이다. 폭이 \(W\)인 nMOS의 저항은 \(R/W\)이고, 같은 폭 pMOS는 정공 이동도가 낮아 \(\mu R/W\)다. DG-7에서 \(\mu \approx 1.6\)이다(오래된 평면 공정에서는 2~3, 핀펫에서는 1에 가까워지는 추세). 4장의 단위 인버터는 nMOS 폭 1, pMOS 폭 \(\mu\)로 위아래 저항을 모두 \(R\)로 맞췄다. 게이트의 지연을 예측 가능하게 하려면, 모든 게이트가 최악의 입력 조합에서도 단위 인버터만큼의 구동력을 내도록 크기를 정하는 것이 출발점이다.

직렬로 \(k\)개가 쌓이면 저항이 \(k\)배가 된다. 그러니 각 트랜지스터를 \(k\)배 넓힌다. 병렬은 최악의 경우 하나만 켜지므로 넓힐 필요가 없다.

$$ W_n = k_n, \qquad W_p = \mu\,k_p, \qquad g = \frac{C_{in}}{C_{inv}} = \frac{W_n + W_p}{1+\mu} $$
\(k_n, k_p\): 그 트랜지스터를 지나는 가장 긴 직렬 경로의 길이. \(g\): 논리적 노력(Logical effort) — 같은 구동력을 내는 데 인버터보다 입력 커패시턴스가 몇 배 필요한가. NAND2: \(W_n=2, W_p=\mu\) → \(g=(2+\mu)/(1+\mu)\). NOR2: \(W_n=1, W_p=2\mu\) → \(g=(1+2\mu)/(1+\mu)\).
게이트
이동도 비 μ
 
최악 풀다운 저항—
최악 풀업 저항—
입력 커패시턴스—
유효 논리적 노력—
그림 5-4. 해 보기슬라이더로 직렬 nMOS와 pMOS 폭을 바꿔, 오른쪽 막대의 최악 저항을 단위 인버터 기준선(1 R)에 맞춰 보자. "유효 논리적 노력"은 입력 커패시턴스 × 최악 저항을 인버터 기준으로 나눈 값이다. 너무 좁게 만들면 입력 커패시턴스는 줄어도 느려져서 노력은 줄지 않는다. NOR3를 μ=2로 맞추면 pMOS 폭이 6이 되는 것을 확인하자.

결과는 교과서의 유명한 숫자들이다. μ=2일 때 NAND2는 nMOS 2·pMOS 2로 \(g=4/3\), NOR2는 nMOS 1·pMOS 4로 \(g=5/3\)이다. DG-7(μ=1.6)에서는 NAND2가 nMOS 2·pMOS 1.6으로 \(g\approx1.38\), NOR2는 nMOS 1·pMOS 3.2로 \(g\approx1.62\)다. 같은 일을 하는데 NOR가 더 비싸다. pMOS가 약한데 그 pMOS를 직렬로 쌓기 때문이다. 그래서 회로 설계자와 합성 도구는 NAND를 NOR보다 선호하고, 4입력 이상의 NOR는 라이브러리에 아예 없는 경우가 많다.

대칭이 언제나 최선은 아니다

위 크기는 "상승과 하강이 똑같이 단위 인버터만큼"이라는 기준이다. 실제로는 pMOS를 조금 덜 넓혀 면적과 입력 커패시턴스를 아끼는 편이 평균 지연에 유리한 경우가 많다(인버터에서 \(W_p/W_n\approx\sqrt{\mu}\)가 평균 지연 최소). 또 핀펫 공정에서는 폭이 핀 개수로 양자화되어 1.6배 같은 값을 정확히 만들 수 없다. 이런 미세 조정과 경로 전체의 최적화는 6장의 논리적 노력에서 다룬다.

스택 효과와 팬인

앞 절의 크기 조절은 직렬 스택의 저항을 보상했다. 하지만 스택에는 공짜로 생기는 것이 또 있다. 트랜지스터 사이의 내부 노드다. 각 내부 노드에는 위아래 트랜지스터의 확산 영역 커패시턴스가 달려 있고, 출력이 내려갈 때 이 노드들도 함께 방전되어야 한다. 6장에서 자세히 다룰 엘모어 지연(Elmore delay)을 미리 써 보자. RC 사다리의 지연은 각 커패시터에 "그 노드에서 접지까지의 저항"을 곱해 더한 것이다.

$$ t_{pd} \approx \sum_{i} R_{i\to \text{GND}}\, C_i = \underbrace{\sum_{i=1}^{N-1} \frac{i\,R}{N}\,\gamma N C}_{\text{내부 노드: } \propto N^2} \;+\; \underbrace{R\,\big(C_{out,par} + C_L\big)}_{\text{출력 노드: } \propto N} $$
NAND-N, nMOS 폭 \(N\)(저항 \(R/N\)), 내부 노드 커패시턴스 \(\gamma N C\), \(\gamma \approx 0.75\)(확산/게이트 커패시턴스 비, DG-7의 \(c_d/c_g\)). 첫 항이 \(\gamma R C\,N(N-1)/2\)로 팬인의 제곱에 비례한다.

팬인(Fan-in) \(N\)을 늘리면 세 가지가 함께 나빠진다. 내부 노드 항이 \(N^2\)으로 늘고, 출력 노드에 붙는 병렬 pMOS의 드레인이 \(N\)으로 늘고, 각 입력이 보는 커패시턴스 \(N+\mu\)도 늘어 앞 단을 느리게 한다. 그래서 큰 팬인 게이트는 작은 게이트의 트리로 쪼개는 것이 빠르다. NAND8 하나 대신 NAND2→NOR2→NAND2 세 단으로 만드는 식이다.

단일 NAND-N—
2입력 트리—
내부 노드(∝N²) 비중—
그림 5-5. 해 보기팬인 N을 끌어 보자. 파란 곡선은 단위 인버터 구동력으로 크기를 맞춘 단일 NAND-N의 엘모어 지연, 주황 곡선은 같은 입력 커패시턴스와 부하에서 NAND2/NOR2를 번갈아 쌓은 트리의 최적 지연(논리적 노력으로 각 단 크기를 맞춤)이다. 아래 막대는 단일 게이트 지연을 내부 노드·출력 기생·부하 몫으로 나눈 것이다. 단위는 τ(DG-7에서 약 1.5 ps), FO4 인버터가 5τ다.

교육용 모델로는 N=3~4 근처에서 트리가 단일 게이트를 따라잡는다. 실제 라이브러리도 비슷해서 NAND는 4입력, NOR는 3입력 정도에서 멈춘다(NOR는 pMOS 스택 때문에 더 일찍). 더 큰 팬인은 합성 도구가 알아서 트리로 쪼갠다.

NAND4를 NAND2 두 개 + NOR2 하나로 바꾸면 트랜지스터 수는?

NAND4는 트랜지스터 8개다. (A·B)와 (C·D)를 NAND2로 만들고, 두 결과를 NOR2로 합치면 무엇이 나오고, 트랜지스터는 몇 개가 될까?

답 보기

NOR2(\(\overline{AB}, \overline{CD}\)) \(= AB\cdot CD\), 즉 AND4가 나온다. NAND4를 원하면 인버터 하나(2개)를 더 붙여야 한다. 4+4+4+2 = 14개로 단일 NAND4(8개)보다 많다. 대신 단마다 스택이 2로 짧아 큰 부하를 구동할 때 더 빠르다. 극성이 AND로 충분한 곳이라면 12개 두 단으로 끝난다. 면적과 속도를 맞바꾸는 전형적인 예다.

스택에는 좋은 면도 있다. 직렬로 쌓인 트랜지스터가 모두 꺼져 있으면, 누설 전류가 흐르면서 중간 노드 전압이 살짝 올라간다. 그러면 위쪽 트랜지스터는 \(V_{GS}\)가 음수가 되고 \(V_{DS}\)가 줄어 DIBL(Drain-induced barrier lowering)까지 약해지므로, 누설이 단일 트랜지스터보다 몇 배에서 열 배 이상 줄어든다. 이것을 스택 효과(Stack effect)라 한다.

직렬로 꺼진 nMOS 수
그림 5-6. 해 보기꺼진 트랜지스터 개수를 바꿔 보자. 왼쪽은 각 노드의 전압, 오른쪽은 단일 트랜지스터 대비 누설 전류(로그 눈금)다. 부문턱 모델 \(I\propto 10^{(V_{GS}-V_t+\eta V_{DS})/S}\,(1-e^{-V_{DS}/v_T})\), \(S\)=75 mV/dec. DIBL η를 0으로 하면 2-스택의 이득이 줄어드는 것을 보자. 이득의 일부는 음의 \(V_{GS}\), 일부는 줄어든 \(V_{DS}\)에서 온다.

스택 효과는 누설 전력 관리의 중요한 도구다. 대기 상태에서 NAND 게이트의 입력을 모두 0으로 만드는 입력 벡터 제어, 일부러 트랜지스터를 둘로 나눠 쌓는 스택 강제(Stack forcing), 그리고 극단적으로는 전원 자체에 큰 트랜지스터를 직렬로 넣는 전원 게이팅이 모두 같은 원리다. 15장에서 다시 만난다.

입력 순서와 패턴 의존 지연

논리적으로 NAND3의 세 입력은 완전히 대칭이다. A·B·C = C·B·A. 하지만 회로에서 스택의 어느 자리에 있느냐에 따라 지연이 다르다. 출력이 1에서 0으로 떨어지는 순간을 생각해 보자. 마지막으로 도착한 입력이 켜지기 전에, 나머지 두 트랜지스터는 이미 켜져 있다.

늦게 도착하는 입력의 자리
이 자리의 지연—
위 / 가운데 / 아래—
위 대비 아래—
그림 5-7. 해 보기늦은 입력의 자리를 바꿔 보자. 왼쪽 스택에서 각 노드의 커패시터 채움이 시간에 따라 방전되는 모습이 반복 재생되고, 오른쪽은 출력 전압 파형이다(굵은 선이 선택한 경우, 옅은 선이 나머지). 출력 부하를 줄이면 내부 노드의 몫이 커져 자리에 따른 차이가 커진다. 선형 RC 사다리 모델(각 nMOS 폭 3)로 계산했다.

그러니 설계 규칙은 가장 늦게 도착하는 임계 신호를 출력에 가장 가까운 트랜지스터에 연결하는 것이다. 표준 셀 라이브러리는 같은 NAND3라도 핀마다 지연 표를 따로 갖고 있고(A 핀이 보통 출력 쪽), 정적 타이밍 분석은 핀별 지연을 쓴다. 합성·배치 도구는 논리적으로 대칭인 핀을 서로 바꿔 임계 경로를 빠른 핀에 다는 핀 교환(Pin swapping)을 한다.

같은 게이트의 지연이 다른 입력들의 과거 값에 따라서도 달라진다는 점에 주의하자. 출력이 올라갈 때도 마찬가지다. NAND의 pMOS 병렬에서 입력 하나만 0으로 떨어지면 pMOS 하나가 출력을 끌어올리지만, 둘 다 떨어지면 두 개가 함께 끌어올려 더 빠르다. 이렇게 입력 패턴에 따라 달라지는 지연을 패턴 의존 지연(Data-dependent delay)이라 하고, 타이밍 분석은 그중 최악을 가정한다.

레이아웃: 스틱 다이어그램과 오일러 경로

회로도는 연결만 말해 준다. 실리콘 위에서는 트랜지스터를 어떤 순서로 늘어놓느냐가 면적을 정한다. 표준 셀의 전형적인 배치는 이렇다. 위에 \(V_{DD}\) 레일, 아래에 GND 레일, 그 사이에 pMOS가 놓일 p형 확산 띠 하나와 nMOS가 놓일 n형 확산 띠 하나를 가로로 깔고, 폴리실리콘 게이트를 세로로 지나가게 한다. 세로 폴리 하나가 p 띠와 n 띠를 동시에 가로지르면, 같은 입력을 받는 pMOS와 nMOS가 한 번에 만들어진다. 이렇게 층을 선으로만 그린 그림을 스틱 다이어그램(Stick diagram)이라 한다.

이웃한 두 트랜지스터가 노드 하나를 공유하면, 그 사이 확산 영역을 끊지 않고 이어 쓸 수 있다. 끊으면 확산 간격 규칙 때문에 폴리 피치 하나만큼 폭이 늘고 커패시턴스도 커진다. 그래서 질문은 이렇게 바뀐다. 모든 트랜지스터를 한 번씩 지나가면서, 지나가는 순서마다 이웃끼리 노드를 공유하는 길이 있는가? 네트워크를 노드는 꼭짓점, 트랜지스터는 변인 그래프로 보면, 이것은 모든 변을 한 번씩 지나는 오일러 경로(Euler path) 문제다. 그리고 폴리가 위아래를 함께 지나가므로 PUN과 PDN 그래프에서 입력 순서가 같은 오일러 경로를 찾아야 한다.

$$ \text{오일러 경로 존재} \iff \text{연결 그래프에서 차수가 홀수인 꼭짓점이 0개 또는 2개} $$
1736년 오일러가 쾨니히스베르크 다리 문제에서 보인 조건. 공통 경로는 두 그래프가 각각 이 조건을 만족하는 것만으로는 보장되지 않아 순서를 찾아봐야 한다(우에하라–반 클리먼 방법, 1981).
SIMULATOR

오일러 경로로 셀 레이아웃 짓기

트랜지스터 순서
최적 순서가 여럿일 때
—
폴리 순서—
확산 끊김—
셀 폭 (폴리 피치)—
트랜지스터—
—
위: 스틱 다이어그램(분홍 띠 p 확산, 파랑 띠 n 확산, 붉은 세로선 폴리, 보라선 금속, 검은 네모 접점). 아래: PUN·PDN 그래프와 선택한 순서(변 위 번호). 도구는 입력 리터럴의 모든 순서와 각 트랜지스터의 좌우 방향을 다 시도해, p 띠와 n 띠 중 어느 한쪽이라도 끊기는 자리의 수가 가장 적은 배치를 찾는다. 끊김 하나마다 폴리 피치 하나가 늘어난다고 보았다.

AOI22를 "식에 쓴 순서 그대로"(A, B, C, D)로 놓으면 PDN에서 B 다음의 GND와 C의 OUT이 이어지지 않아 n 띠가 끊긴다. A, B, D, C로 바꾸면 PDN은 OUT–A–B–GND–D–C–OUT, PUN은 같은 순서로 한 줄에 이어져 끊김이 사라진다. 반면 AOI221(\(\overline{AB+CD+E}\))은 도구가 모든 순서를 시도해도 한 번은 끊긴다. PUN 그래프에서 OUT의 차수가 1이라 E가 반드시 경로의 한쪽 끝에 와야 하고, 홀수 차수인 다른 꼭짓점이 반대쪽 끝을 정해 버린다. 각 그래프에 오일러 경로는 따로 있지만, 이 제약을 만족하는 순서가 PDN 쪽에서는 이어지지 않는다. 이럴 때는 끊김을 받아들이거나, 트랜지스터를 둘로 나누거나, 식을 다른 등가형으로 바꾼다.

표준 셀의 높이와 트랙

표준 셀은 모두 높이가 같아서 한 줄로 이어 붙이면 전원 레일이 저절로 이어진다. 높이는 가로 금속(보통 M2) 배선 피치의 배수로 재며 "7.5트랙 셀", "6트랙 셀"처럼 부른다. 7 nm급에서 M2 피치가 약 36~40 nm이면 7.5트랙 셀의 높이는 약 0.27 µm다. 폭은 폴리 피치(CPP, 약 54~57 nm, 2018년경)의 배수로 정해진다. 트랙 수를 줄이면 셀은 작아지지만 핀 수(트랜지스터 폭)가 줄고 셀 안 배선 자원이 모자라 배선이 어려워진다. 이 위에 셀을 배치하고 배선하는 흐름은 DesignBook에서 다룬다.

실제 수치: 표준 셀 라이브러리 들여다보기

표준 셀 라이브러리에는 이 장에서 만든 게이트들이 여러 구동 세기(×1, ×2, ×4 …)로 들어 있다. 아래 표는 각 게이트의 트랜지스터 수, 7 nm급 공개 교육용 라이브러리(ASAP7 계열, 2016년~)에서의 대략적인 셀 폭(폴리 피치 수), 그리고 이 장의 크기 규칙으로 계산한 논리적 노력이다. DG-7 열은 \(\mu=\)1.6으로 스크립트가 직접 계산한 값이다.

셀기능 Y트랜지스터셀 폭 (CPP, 약)g (μ=2)g (DG-7)기생 p (μ=2, 대략)
INV\(\overline{A}\)2311
NAND2\(\overline{AB}\)444/32
NAND3\(\overline{ABC}\)655/33
NAND4\(\overline{ABCD}\)8624
NOR2\(\overline{A+B}\)445/32
NOR3\(\overline{A+B+C}\)657/33
AOI21\(\overline{AB+C}\)65A,B: 2 · C: 5/37/3
OAI21\(\overline{(A+B)C}\)65A,B: 2 · C: 4/37/3
AOI22\(\overline{AB+CD}\)8624
XOR2\(A\oplus B\)8~128~10≈4—4~6
MUX2\(S?B:A\)10~128~10≈2—4
D 플립플롭\(Q\leftarrow D\)≈20~24≈18~22———

표에서 읽을 감각은 세 가지다. 첫째, 셀 폭은 트랜지스터 수보다 천천히 는다. 오일러 경로 덕분에 트랜지스터 한 쌍이 폴리 피치 하나를 차지하고, 셀 경계와 출력 접점 몫만 더해진다. 둘째, NOR는 같은 팬인의 NAND보다 논리적 노력이 크고, 그 차이는 μ가 클수록 벌어진다. 핀펫으로 μ가 1에 가까워지면서 NOR의 불리함이 다소 줄었다. 셋째, XOR·MUX·플립플롭처럼 한 단 정적 CMOS로 바로 안 되는 셀은 트랜지스터가 훨씬 많다. 이 g와 p 값이 6장의 논리적 노력 계산의 재료다.

표의 숫자는 감각용이다

셀 폭은 라이브러리와 구동 세기, 트랙 높이에 따라 크게 다르고, 실제 라이브러리는 핀 접근성 때문에 일부러 폭을 늘리기도 한다. 기생 지연 p는 확산 공유 여부와 배치에 따라 달라 교과서는 보통 "입력 수 × 인버터 기생" 정도로 근사한다(Weste & Harris). 실제 설계에서는 라이브러리의 Liberty 타이밍 표를 쓴다.

핵심 정리

  1. 스위치를 직렬로 이으면 AND, 병렬로 이으면 OR다. 정적 CMOS 게이트는 nMOS 풀다운 네트워크와 pMOS 풀업 네트워크 두 개로 출력을 정한다.
  2. \(Y=\overline{F}\)를 만들려면 PDN을 \(F\)대로, PUN을 직렬·병렬을 맞바꾼 쌍대로 짓는다. 그러면 모든 입력 조합에서 정확히 한 네트워크만 통해 단락(X)도 떠 있는 출력(Z)도 없고, 정적 전력은 누설뿐이다.
  3. nMOS는 약한 1, pMOS는 약한 0을 전달하므로 한 단 정적 CMOS 게이트는 반전형(단조 감소)이다. NAND·NOR는 4개 한 단, AND·OR는 6개 두 단이며, AOI·OAI 복합 게이트는 한 단에 여러 논리를 담는다.
  4. 직렬 \(k\)개는 폭을 \(k\)배로 넓혀 단위 인버터의 구동력을 맞춘다(pMOS는 추가로 μ배). 그 결과 논리적 노력은 NAND2 \((2+\mu)/(1+\mu)\), NOR2 \((1+2\mu)/(1+\mu)\)로 NAND가 유리하다.
  5. 팬인이 늘면 내부 노드 방전 때문에 지연이 \(N^2\)으로 늘어 큰 팬인은 트리로 쪼갠다. 직렬로 모두 꺼진 스택은 누설이 몇~수십 배 줄어든다(스택 효과).
  6. 임계(가장 늦은) 입력은 출력에 가장 가까운 트랜지스터에 단다. 지연은 핀과 입력 패턴에 따라 다르다.
  7. PUN과 PDN 그래프의 공통 오일러 경로 순서로 폴리를 늘어놓으면 확산이 끊기지 않아 셀 폭이 최소가 된다. 표준 셀은 높이(트랙 수)가 같고 폭은 폴리 피치의 배수다.

확인 퀴즈

Q1. \(Y=\overline{(A+B)\cdot C}\)인 OAI21의 풀업 네트워크(pMOS)는 어떤 구조인가?

PDN은 \(F=(A+B)\cdot C\) 그대로 (A‖B)와 C의 직렬이다. PUN은 쌍대이므로 직렬·병렬을 맞바꿔 (A–B 직렬)‖C가 된다.

Q2. 한 단 정적 CMOS 게이트로 바로 만들 수 없는 함수는?

한 단 정적 CMOS는 모든 입력에 대해 단조 감소(반전형)다. AND는 입력이 오르면 출력도 오르므로 NAND 뒤에 인버터를 붙여 두 단으로 만든다.

Q3. μ=2인 공정에서 단위 인버터(nMOS 1, pMOS 2)와 같은 구동력을 내도록 NOR3의 크기를 정하면 각 pMOS의 폭은?

NOR3의 pMOS는 3개 직렬이므로 각각 3배로 넓혀야 하고, pMOS 자체가 μ=2배 넓어야 하므로 2×3=6이다. nMOS는 병렬이라 폭 1. 논리적 노력은 (1+6)/3 = 7/3이다.

Q4. NAND3에서 가장 늦게 도착하는 신호는 어느 트랜지스터에 연결해야 출력 하강 지연이 가장 짧은가?

늦은 입력이 맨 위에 있으면 아래 내부 노드는 이미 켜진 트랜지스터로 방전되어 있어, 마지막에는 출력 노드만 방전하면 된다. 맨 아래에 있으면 내부 노드들까지 함께 방전해야 한다.

Q5. 팬인 N인 NAND의 지연에서 N²에 비례해 늘어나는 항은 주로 무엇에서 오는가?

엘모어 지연에서 i번째 내부 노드의 커패시턴스는 \(iR/N\)의 저항을 거쳐 방전된다. 노드 커패시턴스도 폭 N에 비례하므로 합은 \(N(N-1)/2\)에 비례한다.

Q6. 레이아웃에서 PUN과 PDN 그래프의 공통 오일러 경로를 찾는 목적은?

폴리 게이트가 p 띠와 n 띠를 같은 순서로 가로지르므로, 두 그래프에서 같은 입력 순서로 모든 변을 한 번씩 지나는 경로가 있으면 확산이 한 줄로 이어진다. 끊김마다 폴리 피치 하나가 늘어난다.