클럭 트리 합성
배치(5장)가 끝나면 칩 위에는 수십만에서 수백만 개의 플립플롭이 흩어져 있다. 동기식 회로는 이 모든 플롭이 “같은 순간” 클럭 에지를 받는다는 약속 위에 서 있다. 그러나 클럭 원천은 PLL 하나뿐이고, 거기서 출발한 신호는 수 mm의 배선과 수천 개의 버퍼를 지나며 RC 지연을 겪는다. 클럭 트리 합성(CTS, Clock Tree Synthesis)은 이 거대한 분배망을 지연이 고르게, 신호 모서리가 날카롭게, 전력은 적게 들도록 짓는 일이다. 이 장은 H-트리에서 영 스큐 병합 알고리즘까지 직접 트리를 만들어 보며, 클럭 게이팅과 클럭 도메인 교차, 온칩 변동까지 다룬다.
- 클럭 지연(latency)·스큐·지터·슬루를 구분하고, 클럭망이 동적 전력의 큰 몫을 쓰는 이유를 설명한다.
- 스큐가 셋업·홀드 슬랙을 어떻게 바꾸는지 식으로 쓰고, 유용한 스큐로 주기를 줄여 본다.
- H-트리·X-트리·버퍼 트리·메시·스파인 구조의 장단점을 비교한다.
- MMM 재귀 분할, 버퍼 삽입, 영 스큐 병합(DME의 기초)으로 트리를 만들고 엘모어 지연으로 스큐를 계산한다.
- 클럭 게이팅(ICG), 동기화기와 메타안정성 MTBF, OCV와 CPPR의 개념을 이해한다.
클럭 분배의 문제
클럭은 칩에서 가장 바쁘고 가장 넓게 퍼진 신호다. 데이터 신호는 한 넷이 보통 몇 개의 핀만 잇지만, 클럭 넷 하나는 수십만 개의 플롭 클럭 핀(싱크, sink)을 잇는다. 한 개 버퍼로는 이 부하를 구동할 수 없으므로 버퍼를 나무처럼 여러 단으로 쌓는다. 이렇게 만들어진 분배망의 품질은 네 가지 양으로 잰다.
| 양 | 정의 | 대표 목표 (1 GHz급, 약) | 왜 중요한가 |
|---|---|---|---|
| 지연 (insertion delay, latency) | 클럭 원천 → 싱크 도착 시간 | 300~800 ps | 길수록 변동(OCV)이 쌓여 스큐 불확실성이 커진다 |
| 스큐 (skew) | 두 싱크 도착 시간 차 (전역: 최대 − 최소) | 주기의 ~5% 이하 (≤ 30~50 ps) | 셋업·홀드 슬랙을 직접 깎는다 |
| 지터 (jitter) | 같은 싱크에서 에지 시점이 주기마다 흔들리는 양 | 주기의 ~1~3% | PLL 잡음·전원 잡음이 원인. 설계로 줄이기 어렵다 |
| 슬루 (transition, slew) | 에지가 10%→90%로 오르는 시간 | ≤ 50~100 ps | 느리면 플롭 tcq·셋업이 나빠지고 단락 전류와 잡음 민감도가 커진다 |
클럭은 전력 면에서도 특별하다. 동적 전력 \(P = \alpha C V^2 f\)(9장)에서 일반 논리의 활동률 α는 0.1~0.2 정도지만, 클럭은 매 주기 반드시 한 번 오르고 한 번 내리므로 α = 1이다. 게다가 클럭망의 커패시턴스는 수백 개 버퍼, 수 m에 달하는 배선, 모든 플롭의 클럭 핀(플롭 내부 클럭 인버터 포함)을 합친 것이다. 그래서 고성능 프로세서에서 클럭망과 플롭이 전체 동적 전력의 약 30~40%를 쓴다는 보고가 흔하다. CTS의 목표가 “스큐 0”만이 아니라 “적은 배선·적은 버퍼”이기도 한 이유다.
스큐가 셋업과 홀드에 주는 영향
데이터가 FFL(발사)에서 조합 논리를 지나 FFC(포획)로 가는 경로를 생각하자. 발사 클럭이 시각 0에, 포획 클럭이 \(\delta\)(스큐 = 포획 도착 − 발사 도착)에 도착한다면, 8장의 셋업·홀드 조건은 다음과 같다.
스큐는 언제나 나쁜 것이 아니다. 긴 경로 뒤의 플롭은 클럭을 조금 늦게, 짧은 경로 뒤의 플롭은 조금 일찍 받게 하면 단 사이에 시간을 빌려 줄 수 있다. 이를 유용한 스큐(Useful skew)라 한다. 현대 CTS 도구는 영 스큐를 목표로 트리를 지은 뒤, 임계 경로 주변 싱크의 지연을 의도적으로 조정하는 “CCOpt(Concurrent clock and data optimization)” 방식을 쓴다.
유용한 스큐: 가운데 플롭의 클럭을 옮겨 주기 줄이기
클럭망의 구조
트리를 어떤 모양으로 지을지는 스큐·전력·배선 자원·설계 노력 사이의 맞바꿈이다. 대표적인 다섯 가지를 비교하자.
H-트리. 자기 닮은 H를 재귀로 반복. 원천에서 모든 끝점까지 길이가 같아 기하적으로 스큐 0. 싱크가 끝점에 고르게 있어야만 성립.
X-트리. 대각선으로 끝점을 이어 H-트리보다 짧다. 하지만 맨해튼(수평·수직) 배선 규칙과 맞지 않아 실제로는 거의 안 쓴다.
균형 버퍼 트리. 실제 싱크 위치를 따라 가지를 나누고, 각 단에 버퍼를 넣어 지연을 맞춘다. ASIC CTS 도구의 기본형.
클럭 메시. 격자를 여러 드라이버가 함께 구동해 지역 차이를 평균낸다. 스큐가 가장 작고 변동에 강하지만 배선·단락 전력이 크다. 고성능 CPU.
스파인(피시본). 굵은 등뼈 배선에서 갈비뼈를 뻗는다. 행 구조와 잘 맞고 단순하다. 등뼈를 따라 지연이 조금씩 늘어난다.
H-트리의 원리는 대칭이다. 원천에서 어떤 끝점까지 가도 같은 길이·같은 모양의 배선과 같은 수의 버퍼를 지나므로 지연이 같다. 레벨이 \(k\)인 H-트리는 \(4^k\)개 끝점을 \(2^k \times 2^k\) 격자에 놓고, 한 변이 \(D\)인 영역에서 총 배선 길이는 레벨마다 약 \(1.5 \cdot 2^{k-1} D\)씩 늘어난다(짧아지는 선분 × 늘어나는 개수). 문제는 실제 플롭이 격자처럼 고르게 놓여 있지 않다는 것이다.
H-트리 생성기: 이상적 스큐 0과 실제 싱크
클럭 트리 합성 알고리즘
실제 CTS는 주어진 싱크 위치에 맞는 트리를 지어야 한다. 이 문제는 크게 두 단계로 나뉜다. 어떤 싱크끼리 묶을지 정하는 토폴로지 생성과, 묶인 가지를 어디서 합칠지 정하는 내장(embedding)이다.
- MMM(Method of Means and Medians, Jackson·Srinivasan·Kuh 1990) — 싱크 집합을 더 넓은 축 방향의 중앙값으로 둘로 나누고, 집합의 평균 위치(무게중심)에서 두 부분 집합의 무게중심으로 배선을 뻗는다. 이를 재귀로 반복하면 균형 이진 트리가 된다. 단순하고 빠르지만 지연을 직접 맞추지는 않는다.
- 영 스큐 병합(Zero-skew merge, Tsay 1991) — 아래에서 위로 두 부분 트리를 합칠 때, 두 뿌리를 잇는 배선 위에서 양쪽 엘모어 지연이 정확히 같아지는 탭 지점을 계산한다. 한쪽이 너무 느려 탭 지점이 배선 밖으로 나가면, 빠른 쪽 배선을 일부러 구불구불하게 늘인다(스네이킹).
- DME(Deferred-Merge Embedding) — 영 스큐를 만족하는 탭 지점은 맨해튼 평면에서 한 점이 아니라 선분(병합 선분)이 된다. 아래에서 위로 병합 선분을 만들어 두고, 위에서 아래로 내려오며 배선이 가장 짧아지는 점을 고른다. 영 스큐를 지키며 배선을 최소화하는 고전 알고리즘이다.
- 버퍼 삽입 — 배선이 길고 부하가 크면 RC 지연이 길이의 제곱으로 늘고 슬루가 나빠진다. 부하가 일정 값을 넘는 가지마다 버퍼를 넣어 구간을 끊는다. 버퍼는 뒤쪽 부하를 앞쪽에서 가려 준다.
트리의 각 싱크 지연은 8장의 엘모어 지연(Elmore delay)으로 계산한다. 원천에서 싱크까지 경로 위의 각 저항에, 그 저항 아래쪽(하류)에 매달린 모든 커패시턴스를 곱해 더한다.
클럭 트리 합성: 스타 · MMM · 버퍼 · 영 스큐 병합
상용 CTS는 여기에 슬루 한계(최대 전이 시간), 버퍼 크기 선택, 배선층·비차폐/차폐 규칙(클럭 넷은 보통 두 배 폭·두 배 간격의 NDR, Non-default rule을 쓴다), 막힌 영역 회피, 여러 PVT 코너에서 동시에 스큐 맞추기를 더한다. 그래도 뼈대는 “분할로 토폴로지 → 지연 균형 병합 → 버퍼링”이다.
클럭 게이팅
클럭의 α = 1이라는 사실은 거꾸로 기회이기도 하다. 레지스터 묶음이 이번 주기에 값을 바꾸지 않는다면(인에이블이 꺼져 있다면) 그쪽 클럭을 아예 멈추면 된다. 이것이 클럭 게이팅(Clock gating)이다. 그런데 클럭을 단순히 AND 게이트로 끊으면, 클럭이 high인 동안 인에이블이 바뀔 때 짧은 펄스(글리치)가 생겨 플롭이 잘못 동작한다. 그래서 표준 셀 라이브러리는 래치와 AND를 붙인 ICG(Integrated clock gating) 셀을 제공한다.
클럭 게이팅 최적화를 활성화하고 지원 ICG 셀·제약을 제공한 흐름에서는 RTL의 if (en) q <= d; 패턴(2장)에서 ICG를 삽입할 수 있다. 그 외에는 데이터 MUX나 enable 플롭으로 구현될 수 있다. 수십 개 플롭이 ICG 하나를 공유하면 그 플롭들의 클럭 핀·로컬 트리 전력이 인에이블이 꺼진 비율만큼 사라진다. 블록 전체를 멈추는 큰 게이트(상위 게이팅)는 클럭 트리 자체의 전력까지 아낀다. CTS 입장에서는 ICG가 트리 중간의 “버퍼”이면서 동시에 셋업·홀드 검사 대상(EN 경로의 클럭 게이팅 검사)이 된다. 전력 효과는 9장의 저전력 기법에서 다시 계산한다.
클럭 도메인 교차와 메타안정성
큰 칩에는 서로 무관한 클럭이 여럿 있다(CPU 코어, 메모리 인터페이스, USB, 오디오…). 한 도메인의 신호가 다른 도메인의 플롭으로 들어가는 클럭 도메인 교차(CDC, Clock domain crossing)에서는 데이터가 언제 바뀔지 포획 클럭이 모르므로, 셋업·홀드 창 안에서 바뀌는 일이 반드시 생긴다. 그러면 플롭은 0도 1도 아닌 중간 전압에 한동안 머무는 메타안정(Metastability) 상태에 빠진다.
메타안정성 MTBF: 동기화 단 수와 클럭 주파수
온칩 변동과 CPPR
지금까지는 같은 버퍼·같은 길이 배선이면 지연이 같다고 가정했다. 실제로는 같은 칩 안에서도 위치에 따라 트랜지스터 문턱 전압(ProcessBook 이온 주입의 도핑 요동), 선폭(노광·CMP 편차), 국소 전압 강하(IR 드롭), 온도가 달라 지연이 수 % 흔들린다. 이를 온칩 변동(OCV, On-chip variation)이라 한다. STA는 이를 비관적으로 다룬다. 셋업 검사에서는 발사 경로를 느리게(×1.05 같은 late 디레이트), 포획 경로를 빠르게(×0.95 early) 계산한다.
CPPR(Common path pessimism removal, CRPR이라고도 함)은 STA 도구가 자동으로 적용하지만, 그 이득은 트리 구조가 만든다. 지연이 긴 클럭 트리는 OCV가 그대로 스큐 불확실성이 되므로, “지연을 짧게”가 “스큐 0” 못지않게 중요하다. 메시 구조가 고성능 칩에서 살아남은 이유도 여러 드라이버가 서로의 변동을 평균내기 때문이다.
핵심 정리
- 클럭망 품질은 지연·스큐·지터·슬루로 잰다. 클럭은 α = 1에 거대한 커패시턴스를 가져 동적 전력의 약 30~40%를 쓴다.
- 스큐 δ는 셋업에 +δ, 홀드에 −δ로 작용한다. 홀드는 주기와 무관해 클럭을 늦춰도 고쳐지지 않는다. 유용한 스큐는 단 사이에 시간을 빌려 준다.
- H-트리는 대칭으로 기하적 스큐 0을 얻지만 싱크가 불균일하면 끝 연결과 부하 차이로 스큐가 생긴다. 실무는 지역 버퍼 트리·메시·스파인을 섞는다.
- CTS = 토폴로지(MMM 등 재귀 분할) + 내장(영 스큐 탭 지점, DME) + 버퍼 삽입. 지연은 엘모어 식으로 계산한다.
- ICG는 래치+AND로 글리치 없이 클럭을 멈춘다. CDC 신호는 동기화기를 거치며, MTBF는 정착 시간에 지수적으로 비례한다.
- OCV 디레이트는 공통 클럭 경로를 이중으로 비관하며, CPPR이 이를 되돌린다. 공통 경로를 길게, 지연을 짧게 짓는 것이 변동에 강한 트리다.
확인 퀴즈
포획 플롭의 클럭이 발사 플롭보다 30 ps 늦게 도착한다(δ = +30 ps). 올바른 설명은?
H-트리가 실제 칩에서 스큐 0을 보장하지 못하는 주된 이유는?
영 스큐 병합에서 계산한 탭 위치 z가 음수가 나왔다. 무엇을 해야 하나?
ICG 셀에 래치가 들어 있는 이유는?
τ = 10 ps인 동기화기에서 정착 시간을 100 ps 늘리면 MTBF는 대략 몇 배가 되나?
공통 클럭 경로 지연이 500 ps, late/early 디레이트가 1.04/0.96일 때 CPPR 보정량은?