패스 트랜지스터와 동적 논리
지금까지 만든 게이트는 모두 정적 CMOS였다. 풀업과 풀다운이 서로 쌍대이고, 입력이 그대로 있는 한 출력이 영원히 유지되며, 정지 상태에서 전류가 흐르지 않는다. 견고하고 아름답지만 값이 있다. 입력마다 트랜지스터가 두 개씩 들고, 느린 pMOS가 입력 커패시턴스를 키운다. 그래서 1990~2000년대 고성능 CPU 설계자들은 다른 길을 찾았다. 트랜지스터를 스위치로만 써서 신호를 통과시키거나(패스 트랜지스터), 풀업을 약하게 늘 켜 두거나(비율 논리), 아예 출력을 미리 1로 충전해 두고 필요할 때만 비우는(동적 논리) 방법이다. 이 장에서는 각 방법이 얻는 것과 잃는 것을 직접 만져 보며, 왜 2020년대의 칩이 다시 대부분 정적 CMOS로 돌아왔는지까지 따라간다.
- nMOS 패스 트랜지스터가 1을 \(V_{DD}-V_t\)까지만 전달하는 이유와, 전송 게이트가 이를 해결하는 방식을 설명한다.
- 의사 nMOS 게이트에서 크기 비가 \(V_{OL}\)·속도·정적 전력을 동시에 정하는 비율 설계의 트레이드오프를 안다.
- 동적 게이트의 프리차지·평가 동작, 누설과 keeper, 최소 클럭 주파수, 단조성과 도미노 논리를 이해한다.
- 전하 공유에 의한 전압 강하 \(\Delta V\)를 계산하고, 네 가지 논리 스타일의 속도·면적·전력·견고함을 비교한다.
정적 CMOS 말고, 왜 다른 스타일인가
5장의 정적 CMOS 게이트는 N개 입력에 트랜지스터 2N개를 쓴다. nMOS N개로 풀다운 망을, pMOS N개로 그 쌍대인 풀업 망을 짓는다. 입력 하나는 nMOS 하나와 pMOS 하나의 게이트를 함께 구동하므로, 앞단 입장에서 보이는 커패시턴스는 두 트랜지스터의 합이다. 그런데 DG-7 공정에서 pMOS는 nMOS보다 약 1.6배 약해서 같은 전류를 내려면 그만큼 넓어야 하고, 직렬로 쌓이면 다시 그 배수만큼 넓어야 한다. 팬인이 큰 NOR는 pMOS 네 개가 직렬이 되어 입력 하나가 nMOS의 7배 넘는 커패시턴스를 짊어진다.
6장의 언어로 말하면 논리적 노력(Logical effort, g)이 크다. 논리적 노력은 "같은 출력 전류를 내기 위해 인버터보다 몇 배의 입력 커패시턴스가 드는가"였다. 다른 논리 스타일들은 대부분 pMOS를 입력에서 떼어 내는 것으로 이 값을 줄인다. 대가는 정적 전력, 잡음 여유, 클럭, 설계 난이도다. 아래 그림에서 팬인을 늘려 가며 네 스타일의 트랜지스터 수와 논리적 노력을 비교해 보자.
그래프가 보여 주는 것은 분명하다. 넓은 NOR(예를 들어 주소 디코더나 비교기의 "하나라도 1이면")를 빠르게 만들고 싶다면 정적 CMOS는 최악의 선택이다. 이 장의 나머지는 그 대안들이 어떻게 동작하고, 무엇을 희생하는지에 관한 이야기다.
| 스타일 | 핵심 아이디어 | N입력 트랜지스터 수 | 무엇을 버리나 |
|---|---|---|---|
| 정적 CMOS | 풀업·풀다운 쌍대 스위치 망 | 2N | 속도(넓은 팬인), 면적 |
| 패스 트랜지스터 / 전송 게이트 | 신호를 스위치로 "통과"시킨다 | 함수에 따라 (MUX에 유리) | 신호 복원, 문턱 손실(nMOS만 쓸 때) |
| 의사 nMOS (비율 논리) | 늘 켜진 약한 pMOS 하나가 풀업 | N+1 | 정적 전력, \(V_{OL}\), 상승 속도 |
| 동적 / 도미노 | 미리 1로 충전, 평가 때만 비운다 | N+2 (+인버터 2) | 클럭 필요, 잡음·누설·전하 공유에 약함 |
패스 트랜지스터: 스위치로 신호를 통과시키기
지금까지 트랜지스터의 소스는 언제나 전원이나 접지에 붙어 있었다. 그런데 MOSFET은 본래 양방향 스위치다. 소스와 드레인 어느 쪽에든 신호를 연결하고 게이트로 열고 닫으면, 게이트가 켜졌을 때 신호가 반대편으로 통과한다. 이렇게 쓰는 트랜지스터를 패스 트랜지스터(Pass transistor)라 한다. 2:1 멀티플렉서라면 nMOS 두 개로 충분하다. 정적 CMOS로 지으면 12개 남짓이 드는 함수다.
문제는 nMOS가 1을 잘 통과시키지 못한다는 데 있다. 게이트에 \(V_{DD}\)를 걸고 한쪽에 \(V_{DD}\)를 주면 반대쪽 노드가 차오른다. 그런데 nMOS의 "소스"는 언제나 더 낮은 쪽 단자, 즉 차오르는 출력 노드다. 출력이 올라갈수록 \(V_{GS}=V_{DD}-V_{out}\)이 줄고, \(V_{out}\)이 \(V_{DD}-V_t\)에 이르면 \(V_{GS}=V_t\)가 되어 트랜지스터가 꺼진다. 출력은 거기서 멈춘다. 이것을 문턱 손실(Threshold drop, \(V_t\) drop)이라 한다. 반대로 0은 문제가 없다. 출력이 내려가면 소스가 입력(0 V) 쪽이 되어 \(V_{GS}=V_{DD}\)가 끝까지 유지된다.
DG.ids의 전류를 \(dV/dt = I/C\)로 적분한 결과다. 1을 전달하면 출력이 \(V_{DD}-V_t\approx0.45\) V 근처에서 급격히 느려지고, 그 뒤로는 부문턱 전류로만 아주 천천히 기어오른다. 0을 전달하면 끝까지 깔끔하게 내려간다. 몸체 효과를 반영하면 소스 전압이 올라갈수록 \(V_t\)가 커져 손실이 더 커진다.0.45 V짜리 "1"이 무엇이 문제일까? 이 신호를 인버터가 받으면 nMOS는 켜지지만 pMOS도 \(|V_{GS}| = 0.75-0.45 = 0.30\) V, 즉 문턱 바로 그 자리에서 반쯤 켜진다. 출력은 0에 가깝게 나오더라도 \(V_{DD}\)에서 접지로 정적 전류가 계속 흐른다. 노이즈 마진도 줄어든다. 패스 트랜지스터를 연쇄하면 상황은 더 나빠질 수 있다. 직렬로 이어 신호가 여러 스위치를 차례로 지나는 것은 괜찮다(손실은 한 번만 생긴다, 대신 느려진다). 그러나 한 패스 트랜지스터의 출력이 다음 패스 트랜지스터의 게이트를 구동하면 손실이 단마다 누적된다.
패스 트랜지스터의 출력이 다음 패스 트랜지스터의 게이트를 구동하는 방식으로 두 단을 이었더니 마지막 노드가 약 0.2 V였다. 세 단을 이으면 어떻게 될까?
답 보기
세 번째 트랜지스터의 게이트가 약 0.2 V로, 문턱 0.30 V보다 낮다. 이 트랜지스터는 사실상 꺼져 있어 부문턱 전류만 흐르므로 마지막 노드는 수십 mV 수준에 머문다. 1을 보냈는데 0이 도착한 것이다. 그래서 패스 트랜지스터 설계 규칙의 첫째 조항은 "패스 트랜지스터의 출력으로 다른 패스 트랜지스터의 게이트를 구동하지 말 것"이다.
평면 벌크 트랜지스터에서는 몸체 효과 계수 \(\gamma\)가 0.4 V1/2 안팎이라 소스가 0.5 V만 올라가도 \(V_t\)가 0.1 V 가까이 올랐다. FinFET과 GAA 나노시트는 얇은 채널이 게이트에 둘러싸여 몸체의 영향이 훨씬 약하다. 그래도 문턱 손실 자체는 사라지지 않는다. \(V_{GS}\)가 \(V_t\)에 다가가면 전류가 줄어드는 것은 트랜지스터라는 스위치의 본성이기 때문이다. 소자 쪽 이야기는 3장과 DeviceBook(devicebook.euiyun.com)을 참고하자.
전송 게이트: nMOS와 pMOS를 나란히
nMOS가 0을 잘 전달하고 1에 약하다면, pMOS는 정확히 반대다. pMOS의 소스는 언제나 더 높은 쪽 단자이므로, 0을 전달할 때 출력이 \(|V_t|\)까지만 내려가고 1은 끝까지 잘 올린다. 그렇다면 둘을 병렬로 놓고 게이트에 서로 반대 신호(\(S\)와 \(\bar S\))를 주면 어떨까? 어느 방향이든 한쪽이 힘이 빠질 때 다른 쪽이 끝까지 끌고 간다. 이것이 전송 게이트(Transmission gate, TG)다. 대가는 트랜지스터 두 개와 반전된 제어 신호 하나다.
TG의 가장 유명한 쓰임은 멀티플렉서(MUX)다. 2:1 MUX는 TG 두 개를 출력에 묶고 하나는 \(S\), 다른 하나는 \(\bar S\)로 연다. 언제나 정확히 하나만 열려 있으므로 출력은 선택된 입력에 "전선으로 이어진" 셈이다. 같은 구조에 데이터로 \(B\)와 \(\bar B\)를 넣고 \(A\)로 고르면 \(Y = A ? \bar B : B = A \oplus B\), 즉 XOR가 된다. 정적 CMOS XOR는 12개 남짓의 트랜지스터와 두 단의 지연이 드는 까다로운 게이트인데, TG로는 인버터를 포함해 8개면 된다.
마지막 문장이 TG 논리의 약점이다. 정적 CMOS 게이트는 매 단 출력을 \(V_{DD}\)나 접지에서 새로 만들어 내므로 신호가 복원된다. TG는 입력 신호를 그저 통과시키므로 저항이 쌓이고 잡음도 그대로 지나간다. TG를 \(n\)개 직렬로 이으면 엘모어 지연(6장)이 \(n^2\)에 비례해 늘어난다. 실무에서는 TG 두세 개마다 인버터 버퍼를 끼워 넣는다.
전송 게이트는 오늘날에도 표준 셀 안에 흔하다. 표준 셀 라이브러리의 MUX2와 XOR2 셀 상당수가 TG 구조이고, 가장 흔한 마스터–슬레이브 D 플립플롭은 래치 입구를 TG로 여닫는다(8장). 단, 셀의 입력과 출력에는 언제나 인버터가 붙어 있어서 셀 밖에서는 정적 CMOS처럼 보인다. 이렇게 "TG를 셀 안에 가둬 두는" 것이 현대 설계의 관행이다.
비율 논리: 의사 nMOS
정적 CMOS의 풀업 망을 통째로 버리고 늘 켜진 pMOS 하나로 바꾸면 어떨까? pMOS의 게이트를 접지에 묶어 두면 출력은 기본적으로 1로 끌려 올라간다. 풀다운 nMOS 망이 켜지면 nMOS가 pMOS와 줄다리기를 해 출력을 끌어내린다. nMOS가 충분히 세다면 출력은 0 근처까지 내려간다. 이것이 의사 nMOS(Pseudo-nMOS) 게이트다. CMOS 이전의 nMOS 공정이 공핍형 부하를 쓰던 방식을 CMOS로 흉내 냈다고 해서 붙은 이름이다.
줄다리기이므로 출력 0의 전압 \(V_{OL}\)은 0이 아니다. 두 전류가 같아지는 점, 즉 두 트랜지스터 크기의 비율이 \(V_{OL}\)을 정한다. 그래서 이런 회로를 비율 논리(Ratioed logic)라 부른다. 정적 CMOS가 크기와 무관하게 0과 \(V_{DD}\)를 내는 비율 없는(Ratioless) 논리였던 것과 대조된다.
교과서적인 설계점은 pMOS의 구동력을 풀다운 nMOS의 약 1/4로 두는 것이다(DG-7에서 \(W_p/W_n\approx0.4\)쯤, 그림의 기본값 0.25는 조금 더 보수적이다). 그러면 \(V_{OL}\)은 수십 mV, 하강은 정적 CMOS와 비슷하게 빠르고, 상승은 몇 배(그림의 기본값에서 약 5배) 느리다. 대신 출력이 0인 동안 게이트 하나가 수 µA를 흘린다. 수 µA는 작아 보이지만 게이트 100만 개면 수 W다. 그래서 의사 nMOS는 칩 전체에 쓰이지 않고, 넓은 NOR가 꼭 필요하고 출력이 대부분 1인 곳, 예를 들어 주소 디코더나 PLA, CAM의 일치선 같은 곳에 국소적으로 쓰였다. 정적 전류를 아끼려고 쓰지 않을 때 pMOS를 끄는 변형도 있다.
동적 논리: 미리 채우고, 필요할 때 비운다
의사 nMOS의 약점은 풀업이 늘 켜져 있다는 것이었다. 풀업을 필요할 때만 켜면 어떨까? 클럭을 써서 시간을 두 단계로 나눈다. 클럭이 0인 프리차지(Precharge) 단계에서는 pMOS 하나가 출력 노드 X를 \(V_{DD}\)로 채운다. 이때 풀다운 아래쪽의 nMOS(foot 트랜지스터)는 꺼져 있어 입력이 무엇이든 접지로 가는 길이 없다. 클럭이 1인 평가(Evaluate) 단계에서는 프리차지 pMOS가 꺼지고 foot이 켜진다. 이제 입력이 풀다운 망을 연결하면 X가 방전되어 0이 되고, 연결하지 않으면 X는 아무것도 붙잡지 않은 채 저장된 전하만으로 1을 유지한다.
이것이 동적 논리(Dynamic logic)다. 입력은 nMOS에만 물리므로 논리적 노력이 작고, 트랜지스터는 N+2개, 정적 전류도 없다. 출력이 1에서 0으로만 바뀌므로(평가 중에는 다시 올라가지 않는다) 프리차지가 끝난 뒤에는 하강 천이 하나만 빠르면 된다. 그런데 "아무것도 붙잡지 않은 1"은 위태롭다. 아래 시뮬레이터에서 직접 확인해 보자.
동적 게이트: 프리차지·평가와 누설
DG.ids), X 노드 3 fF, 프리차지 pMOS 폭 2, 풀다운 nMOS는 직렬 경로 하나가 단위 nMOS와 같은 전류를 내도록 크기를 정했다. keeper는 폭 0.25의 약한 pMOS. 판정은 평가 단계 끝(클럭 하강 직전)에 X가 출력 인버터의 문턱 \(V_M\approx0.37\) V의 올바른 쪽에 있는지로 한다. 애니메이션은 클럭 한 주기를 약 1.6초로 늘려 보여 준다. 주파수를 낮추면 같은 화면 시간에 실제로는 훨씬 긴 시간이 흐르므로 누설이 보인다. 수동 모드에서도 시간은 같은 비율로 흐른다.기본 설정(2 GHz)에서는 아무 문제가 없다. A와 B를 바꿔 가며 NAND의 진리표를 확인해 보자. 이제 주파수를 수 MHz 아래로 내리거나 누설 배수를 올려 보자. 평가 단계에서 X가 1이어야 할 때, 꺼진 풀다운 망을 통해 새는 부문턱 누설이 X의 전하를 조금씩 빼낸다. 평가 단계가 충분히 길면 X가 인버터 문턱 아래로 내려가 출력이 틀린다. 동적 회로에 최소 클럭 주파수가 있는 이유다.
해법은 keeper다. 출력 인버터의 출력(X가 1이면 0)을 약한 pMOS의 게이트로 되먹여, X가 1인 동안 \(V_{DD}\)에서 조금씩 전하를 보충한다. keeper를 켜고 다시 낮은 주파수로 내려 보면 X가 단단히 버틴다. 대가도 있다. 평가 단계에서 X를 방전시킬 때 풀다운 망은 keeper와 줄다리기를 해야 하므로 방전이 느려진다(최대 주파수 읽음값이 줄어든다). keeper는 이 줄다리기에서 지도록, 즉 풀다운의 1/10 정도로 약하게 만든다. 의사 nMOS의 비율 설계가 작은 규모로 돌아온 셈이다.
수동 모드에서 CLK를 1(평가)로 두고 입력을 A=0으로 둔 채, 주파수 슬라이더를 가장 왼쪽(100 kHz, 시간이 가장 빨리 흐름)에 두고 기다리면 keeper가 없는 X는 어떻게 될까? keeper가 있으면?
답 보기
keeper가 없으면 X는 누설로 서서히 내려가 결국 \(V_M\) 아래로 떨어진다. 출력이 1로 뒤집히고, 이 오류는 다음 프리차지까지 그대로 남는다. 저전력 칩이 클럭을 멈추는(클럭 게이팅) 순간 동적 회로가 정보를 잃는 이유다. keeper가 있으면 X는 \(V_{DD}\) 근처에서 무한정 유지된다. keeper는 동적 게이트를 "평가 중에는 사실상 정적인" 게이트로 만든다.
foot 트랜지스터를 빼면 직렬 nMOS가 하나 줄어 평가가 빨라진다. 이런 footless 동적 게이트는 실제로 많이 쓰였다. 하지만 프리차지 동안 입력 중 하나라도 1이면 프리차지 pMOS와 풀다운 망이 직접 맞붙어 큰 전류가 흐르고 X가 다 차지 못한다. 그래서 footless 게이트는 "프리차지 동안 입력이 반드시 0"임이 보장되는 곳, 즉 앞 단도 도미노 게이트여서 프리차지 중 출력이 0인 곳에만 쓴다. 클럭 타이밍 하나로 정확성이 갈리는 설계라 검증이 까다롭다.
단조성 문제와 도미노 논리
동적 게이트 두 개를 그냥 이어 붙이면 어떻게 될까? 첫 게이트의 출력 X1이 두 번째 게이트의 입력이라고 하자. 프리차지가 끝나는 순간 X1은 \(V_{DD}\)다. 평가가 시작되고 첫 게이트가 방전되어 X1이 0이 되기까지는 지연이 걸린다. 그 짧은 시간 동안 두 번째 게이트의 입력은 잘못된 1이고, 두 번째 게이트도 이미 평가 중이므로 X2가 방전되기 시작한다. 한번 빠진 전하는 평가 단계 동안 되돌릴 수 없다. X1이 뒤늦게 0이 되어도 X2는 이미 틀린 값이다.
동적 게이트가 올바르게 동작하려면 평가 중 입력이 0→1로만 바뀌어야 한다. 이를 단조성(Monotonicity) 조건이라 한다. 그런데 동적 게이트의 출력은 평가 중 1→0으로만 바뀐다. 단조 감소 신호다. 그래서 그대로는 다음 동적 게이트에 넣을 수 없다.
DG.ids 전류를 적분한 결과다.해법은 간단하다. 동적 게이트 뒤에 정적 인버터를 하나 붙인다. 프리차지 동안 X는 1이므로 인버터 출력은 0, 평가 중 X가 떨어지면 인버터 출력은 0→1로 올라간다. 단조 증가다. 이 "동적 게이트 + 인버터" 묶음을 도미노 논리(Domino logic)라 한다. 이름 그대로, 평가가 시작되면 첫 단이 넘어지고, 그 출력이 다음 단을 넘어뜨리고, 다시 다음 단을 넘어뜨린다. 한번 넘어진 도미노는 다음 프리차지가 세워 줄 때까지 다시 서지 않는다.
도미노 논리에는 대가가 하나 더 있다. 모든 출력이 비반전(AND·OR 꼴)이라 반전 함수를 직접 만들 수 없다. XOR처럼 반전이 필요한 곳에서는 신호와 그 반전을 둘 다 도미노로 계산하는 이중 레일(Dual-rail) 도미노를 써서 면적을 두 배로 쓰거나, 반전이 필요한 지점에서 도미노를 끊고 정적 논리로 넘긴다. 출력 인버터는 상승 천이만 빠르면 되므로 pMOS를 키운 HI-skew 인버터로 만들어, 스위칭 문턱을 올려 잡음에도 조금 더 강하게 한다.
도미노 단 하나는 같은 기능의 정적 CMOS보다 약 1.5~2배 빠르다고 알려져 있다. 입력 커패시턴스가 작고, 출력이 한 방향으로만 움직이며, 프리차지 시간은 평가와 겹치지 않게 다른 반주기에 숨길 수 있기 때문이다. 2000년 무렵의 고성능 CPU는 ALU와 덧셈기, 디코더의 임계 경로를 도미노로 지었고, 일부 설계는 ALU를 코어 클럭의 두 배로 돌리기도 했다(약 2000~2004년). 그러나 공급 전압이 1 V 아래로 내려가고 누설이 커지면서 동적 노드의 잡음 여유가 줄었고, keeper를 키우면 속도 이득이 사라졌다. 클럭이 늘 토글하는 프리차지 노드는 활동률이 높아 전력도 많이 먹는다. 설계 자동화(합성·STA)와도 잘 맞지 않는다. 2010년대 이후 대부분의 논리는 다시 정적 CMOS가 맡았다.
전하 공유: 숨어 있던 커패시터
동적 게이트에는 단조성 말고도 함정이 하나 더 있다. 풀다운 망의 직렬 nMOS 사이에는 내부 노드가 있고, 이 노드에도 확산·배선 커패시턴스 \(C_Y\)가 붙어 있다. 예를 들어 동적 NAND3의 맨 위 트랜지스터 A만 켜지고 B는 꺼진 경우를 생각하자. 논리적으로 X는 1이어야 한다. 그런데 A가 켜지는 순간 X와 내부 노드 Y가 연결된다. 이전 사이클에 Y가 0으로 방전되어 있었다면, X에 저장된 전하가 Y로 나뉘어 흘러간다. 전하는 보존되지만 커패시턴스가 늘었으니 전압이 떨어진다. 이것이 전하 공유(Charge sharing)다.
기본 설정은 A=B=1, C=0이다. 논리적으로 X는 1이어야 하지만, A와 B가 켜지면서 X는 두 내부 노드와 전하를 나눈다. \(C_Y\)를 키우거나 \(C_X\)를 줄이면 X가 인버터 문턱 아래로 떨어져 출력이 틀린다. 문턱까지 가지 않더라도 X가 0.5 V쯤으로 내려앉은 상태는 잡음 여유가 거의 없어 다른 배선의 결합 잡음 한 번에 무너진다.
B만 꺼져 있고(A=1), 내부 노드 하나(\(C_Y = C_X\))가 X와 전하를 나눈다. X는 몇 V가 될까? \(V_{DD}=0.75\) V, \(V_t=0.30\) V.
답 보기
완전히 나누면 \(V_f = 0.75\times\frac{1}{2} = 0.375\) V다. 이것은 \(V_{DD}-V_t = 0.45\) V보다 낮으므로 A가 꺼지기 전에 평형에 이르고, 첫 번째 식이 맞는다. 0.375 V는 인버터 문턱 \(V_M\approx0.37\) V와 거의 같다. 출력이 맞을지 틀릴지 모르는, 최악의 상태다. 시뮬레이터에서 C_X = C_Y = 2 fF, A=1, B=0으로 확인해 보자.
대책은 세 가지다. 첫째, keeper가 잃은 전하를 천천히 보충한다(되돌리는 데 시간이 걸린다). 둘째, 프리차지 동안 내부 노드도 작은 pMOS로 미리 채우는 내부 노드 프리차지로 \(V_{Y0}\)를 \(V_{DD}\)로 만들어 나눌 전하 차이를 없앤다(트랜지스터와 클럭 부하가 는다). 셋째, 회로 배치로 \(C_X\)를 \(C_Y\)보다 충분히 크게 하거나, 자주 바뀌는 입력을 접지 쪽(아래)에 두어 위쪽 내부 노드가 X와 연결될 일을 줄인다. 시뮬레이터에서 각 대책을 켜 보자.
정적 게이트의 출력은 언제나 켜진 트랜지스터가 붙잡고 있어서, 옆 배선이 잡음을 결합시켜도 곧 제자리로 돌아간다. 평가 중 1인 동적 노드는 keeper 외에는 아무도 붙잡지 않는다. 전하 공유, 옆 배선과의 결합 커패시턴스(Crosstalk), 누설, 입력의 작은 글리치, 접지 바운스, 알파 입자가 내려놓은 전하까지 모두 X를 깎는다. 깎인 전하는 평가가 끝날 때까지 돌아오지 않는다. 동적 회로 설계가 "회로 전문가의 영역"으로 남은 이유이고, 잡음 검사 도구가 따로 필요한 이유다.
네 가지 스타일 비교와 오늘의 칩
지금까지 본 스타일을 한 표에 모으자. 아래 수치는 DG-7에서 4입력 NOR를 각 스타일로 지었을 때의 교육용 추정이다. 속도는 하강·상승 평균, 전력은 동적 + 정적을 함께 본 상대적 평가다.
| 4입력 NOR, DG-7 | 정적 CMOS | 전송 게이트 (TG) | 의사 nMOS | 도미노 (footed) |
|---|---|---|---|---|
| 트랜지스터 수 | 8 | 함수에 따라 (MUX2 6, XOR2 8) | 5 | 8 (동적 6 + 인버터 2) |
| 입력 하나의 논리적 노력 g (하강) | ≈ 2.8 | — (스위치) | ≈ 0.5 | ≈ 0.8 |
| 상대 속도 | 느림 (넓은 팬인) | 짧은 체인은 빠름, \(n^2\)로 느려짐 | 하강 빠름, 상승 수 배 느림 | 가장 빠름 (1.5~2배) |
| 정적 전류 (출력 0일 때) | 누설만 (~0.3 nA) | 누설만 | ≈ 8 µA (\(W_p/W_n=0.25\)) | 누설만 |
| 동적 전력 | 낮음 (\(\alpha\)가 작음) | 낮음 | 중간 | 높음 (매 주기 프리차지, 클럭 부하) |
| \(V_{OL}\) / \(V_{OH}\) | 0 / \(V_{DD}\) | 0 / \(V_{DD}\) (복원 없음) | ≈ 60 mV / \(V_{DD}\) | 0 / \(V_{DD}\) |
| 견고함 (잡음·변동·누설) | 매우 강함 | 버퍼가 있으면 강함 | 비율 설계에 민감 | 약함 (전하 공유, 누설, 결합 잡음) |
| 클럭 필요 | 아니오 | 아니오 | 아니오 | 예 |
| 자동 합성·STA 친화성 | 완전 | 셀 안에 감추면 완전 | 특수 셀 | 수작업·특수 검증 |
g는 그림 7-1과 같은 방식(하강 천이, 단위 인버터 입력 커패시턴스 \(1+1.6=2.6\) 기준)으로 계산했다. 정적 전류 8 µA는 그림 7-6의 기본값이다.
그렇다면 오늘날 이 스타일들은 어디에 남아 있을까? 정답은 "칩의 대부분에는 없고, 몇몇 특별한 자리에는 반드시 있다"이다.
| 쓰이는 곳 | 스타일 | 왜 거기에 | 시기·비고 (약) |
|---|---|---|---|
| 일반 논리 (합성되는 거의 모든 회로) | 정적 CMOS | 견고함, 자동화, 저전압 동작 | 2010년대 이후 사실상 전부 |
| 표준 셀 MUX·XOR·플립플롭 내부 | 전송 게이트 | 트랜지스터 수 절약, 셀 입출력은 인버터로 복원 | 현재도 널리 쓰임 |
| SRAM 비트라인 | 프리차지 + 평가 (동적) | 비트라인을 \(V_{DD}\)로 미리 채우고 셀이 한쪽을 조금 끌어내림 | 현재도 표준. MemoryBook 참고 |
| 레지스터 파일 읽기 포트 | 도미노 (로컬·글로벌 비트라인) | 넓은 OR(수십 개 셀 중 하나)를 빠르게 | 고성능 코어에서 여전히 쓰임 |
| CAM 일치선, 디코더 | 동적 NOR / 의사 nMOS | 아주 넓은 NOR | TLB, 캐시 태그 비교 등 |
| ALU·덧셈기 임계 경로 | 도미노 | 속도 | 약 1995~2005년 고성능 CPU의 전성기, 이후 크게 감소 |
흐름을 정리하면 이렇다. 공급 전압이 높고 누설이 작던 시절에는 동적 논리의 속도 이득이 위험을 이길 만했다. 공급 전압이 0.7 V대로 내려오고, 트랜지스터 변동과 누설이 커지고, 전력이 성능의 첫째 제약이 되면서 저울이 기울었다. 오늘의 설계자는 대부분의 논리를 정적 CMOS 표준 셀로 짓고, 메모리 배열처럼 구조가 규칙적이고 손으로 다듬을 가치가 있는 곳에서만 동적 기법을 쓴다. 이 장에서 배운 개념, 즉 프리차지·평가, keeper, 전하 공유, 단조성은 SRAM과 레지스터 파일을 다루는 13장에서 그대로 다시 만난다.
메모리 설계자가 "비트라인 프리차지"라고 부르는 것은 동적 논리의 프리차지와 같다. "센스 앰프가 감지하기 전에 비트라인이 충분히 벌어져야 한다"는 것은 전하 공유와 평가 시간의 이야기다. 디코더의 "워드라인 활성화"는 넓은 AND이고, 고성능 디코더는 여기에 도미노를 쓴다. 회로 스타일은 사라진 것이 아니라 가장 잘 맞는 자리로 옮겨 갔다.
핵심 정리
- 정적 CMOS는 견고하지만 입력마다 pMOS를 달아 넓은 팬인에서 논리적 노력이 크다. 대안 스타일은 대부분 입력에서 pMOS를 떼어 내 속도와 면적을 얻고, 정적 전력·잡음 여유·클럭을 대가로 치른다.
- nMOS 패스 트랜지스터는 0은 잘, 1은 \(V_{DD}-V_t\)까지만 전달한다(몸체 효과로 더 나빠진다). 패스 트랜지스터 출력으로 다른 패스 트랜지스터의 게이트를 구동하면 손실이 단마다 쌓인다.
- 전송 게이트는 nMOS와 pMOS를 병렬로 써서 양쪽 레벨을 모두 강하게 전달하고, MUX와 XOR를 적은 트랜지스터로 짓는다. 단, 신호를 복원하지 않으므로 몇 단마다 버퍼가 필요하다.
- 의사 nMOS는 늘 켜진 약한 pMOS로 풀업을 대신한다. \(W_p/W_n\) 비율이 \(V_{OL}\), 상승 속도, 정적 전류를 함께 정한다(DG-7, 비 0.25에서 약 60 mV, 8 µA).
- 동적 게이트는 프리차지에서 X를 채우고 평가에서 조건부로 비운다. 누설 때문에 최소 클럭 주파수가 있고, 약한 keeper가 이를 막는 대신 평가를 늦춘다.
- 동적 게이트의 입력은 평가 중 0→1로만 바뀌어야 한다(단조성). 동적 게이트 + 인버터인 도미노 논리가 이를 만족하며 비반전 함수만 만든다.
- 전하 공유는 X의 전하를 내부 노드와 나눠 \(\Delta V = (V_{DD}-V_{Y0})\,C_Y/(C_X+C_Y)\)만큼 깎는다. keeper, 내부 노드 프리차지, 입력 배치로 막는다. 2020년대 칩은 대부분 정적 CMOS이고, 동적 기법은 SRAM·레지스터 파일·CAM 같은 곳에 남아 있다.
확인 퀴즈
Q1. 게이트가 \(V_{DD}=0.75\) V인 nMOS 패스 트랜지스터로 1을 전달할 때(DG-7, \(V_t=0.30\) V, 몸체 효과 무시) 출력은 대략 어디서 멈추는가?
Q2. 전송 게이트가 nMOS 패스 트랜지스터보다 나은 점으로 가장 알맞은 것은?
Q3. 의사 nMOS 게이트에서 pMOS 폭을 두 배로 키우면 일어나는 일이 아닌 것은?
Q4. 동적 게이트에 keeper를 달면 좋아지는 것과 나빠지는 것의 짝으로 옳은 것은?
Q5. 동적 게이트의 출력 X를 다른 동적 게이트의 입력에 직접 연결하면 안 되는 이유는?
Q6. \(C_X = 3\) fF인 동적 노드가 처음 0 V였던 내부 노드 \(C_Y = 1\) fF와 전하를 나눈다(\(V_{DD}=0.75\) V, \(V_t=0.30\) V). X는 대략 몇 V가 되는가?