클록 트리 합성, 클록 스큐를 줄이는 구조와 원리

클록 트리 합성, 클록 스큐를 줄이는 구조와 원리

본사가 전국 사무실에 “오전 10시 정각에 일제히 업무를 시작합니다”라는 공지를 내려야 한다고 해 보겠습니다. 담당자가 직원 1만 명에게 한 명씩 직접 보내면 마지막 직원은 한참 뒤에 받게 되니, 각 층 팀장이 팀원에게 다시 전달하는 중계 구조를 만들게 됩니다.

칩의 클록도 사정이 같습니다. 클록 신호 하나가 수만에서 수백만 개의 플립플롭에 거의 같은 순간 닿아야 하고, 이를 위해 버퍼를 나무 모양으로 배치하는 단계가 클록 트리 합성(CTS, Clock Tree Synthesis)입니다. 이 글에서는 스큐와 지터의 개념, 트리의 구조, 스큐를 일부러 남기는 유용한 스큐, 클록 전력과의 관계를 차례로 살펴보겠습니다.

사무실 비유와 다른 점이 있습니다. 중계 단계마다 걸리는 시간이 다를 뿐 아니라, 칩에서는 전달 속도가 배선 상태와 전압, 온도에 따라 계속 달라지고 이 공지가 1초에 수억에서 수십억 번 반복된다는 점입니다.

클록 트리 합성이 필요한 이유

논리 합성과 초기 배치 단계에서는 클록을 “모든 플립플롭에 동시에 도착하는 이상적인 신호”로 가정하고 타이밍을 계산합니다. 하지만 클록 포트 하나가 수많은 플립플롭 핀을 직접 구동할 수는 없습니다. 부하가 너무 커서 신호가 둔하게 변하고, 먼 곳까지 가는 배선의 저항과 커패시턴스가 만드는 지연도 크기 때문입니다.

CTS는 플립플롭 배치가 정해진 뒤, 신호 배선에 앞서 클록 포트에서 모든 플립플롭의 클록 핀까지 버퍼와 배선으로 분배망을 만드는 단계입니다. 목표는 도착 시각의 차이를 허용 범위 안으로 줄이고, 신호가 너무 천천히 변하지 않게 하며, 전력을 아끼는 것입니다. 이때부터 클록 지연이 실제 값이 되므로, 홀드 위반 수정은 보통 CTS 이후에 이루어집니다.

가상 계산 예시, 플립플롭 10,000개를 구동하는 데 필요한 버퍼 단수버퍼 하나가 구동할 수 있는 부하를 20개로 가정합니다.

말단에는 10,000 ÷ 20 = 500개, 그 위에는 500 ÷ 20 = 25개, 그 위에는 25 ÷ 20을 올린 2개, 맨 위에는 1개가 필요해 대략 네 단의 트리가 됩니다. 실제로는 버퍼 크기와 배선 길이, 배치 위치에 따라 가지마다 개수와 부하가 불균등합니다.

클록 스큐와 지터는 무엇이 다른가

클록 스큐(Clock skew)는 같은 클록이 서로 다른 두 플립플롭에 도착하는 시각의 차이입니다. 배선 길이, 버퍼 지연, 부하가 위치마다 다르기 때문에 생기고, 사이클이 반복되어도 거의 일정한 값이라는 점이 특징입니다. 타이밍 분석에서는 데이터를 내보내는 플립플롭과 받는 플립플롭의 도착 시각 차이, 즉 받는 쪽 도착 시각에서 보내는 쪽 도착 시각을 뺀 값으로 정의합니다.

지터(Jitter)는 같은 지점에서 클록 에지가 오는 시각이 사이클마다 흔들리는 정도입니다. 클록을 만드는 PLL의 잡음이나 전원 전압의 출렁임이 원인이고, 위치 사이의 차이가 아니라 시간에 따른 변동이라는 점에서 스큐와 구분됩니다.

공지 비유로 말하면 스큐는 층마다 공지를 받는 시각이 다른 것이고, 지터는 같은 층에서도 오늘은 10시 정각, 내일은 10시 1분 하는 식으로 도착이 매번 조금씩 흔들리는 것입니다. 스큐는 설계로 줄이고, 지터는 타이밍 마진으로 따로 확보합니다.

스큐가 셋업과 홀드를 맞바꾸는 방식

스큐는 셋업과 홀드에 정반대로 작용합니다. 받는 쪽 클록이 늦게 도착하면 데이터가 도착할 시간이 늘어 셋업에는 유리하지만, 새 데이터가 이전 값을 덮어쓰는 시점도 상대적으로 빨라져 홀드에는 불리합니다.

가상 계산 예시, 같은 경로에 스큐를 바꿔 보기클록 주기 2.0 ns, 클록-출력 지연 0.2 ns, 논리 최대 지연 1.5 ns, 논리 최소 지연 0.1 ns, 셋업 시간 0.1 ns, 홀드 시간 0.05 ns로 가정합니다. 스큐는 받는 쪽 도착에서 보내는 쪽 도착을 뺀 값입니다.

  • 스큐 0 ns: 셋업 여유 2.0 − (0.2 + 1.5 + 0.1) = +0.2 ns, 홀드 여유 (0.2 + 0.1) − 0.05 = +0.25 ns로 둘 다 통과합니다.
  • 스큐 +0.3 ns: 셋업 여유 +0.5 ns로 커지지만 홀드 여유 0.3 − (0.05 + 0.3) = −0.05 ns로 위반입니다.
  • 스큐 −0.3 ns: 홀드 여유 +0.55 ns로 커지지만 셋업 여유 2.0 − 0.3 − 1.8 = −0.1 ns로 위반입니다.

셋업 위반은 클록 주기를 늘려 해결할 수 있지만, 홀드 위반은 주기와 무관해서 칩이 만들어진 뒤에는 대응하기 어렵다는 점이 더 부담스럽습니다. 그래서 CTS는 스큐를 줄이는 데 그치지 않고 이후 단계에서 홀드를 안정적으로 수정할 수 있도록 여유를 남기는 방향으로 진행합니다.

버퍼 트리, H-트리, 클록 메시

가장 일반적인 구조는 버퍼 트리(Buffer tree)입니다. 루트에서 단계마다 가지를 치고, 배치 정보를 바탕으로 가까운 플립플롭끼리 묶은 뒤 각 가지의 부하와 배선 길이를 맞춰 도착 시각을 균형 있게 만듭니다. 전력과 배선 자원이 비교적 적게 들지만, 가지가 서로 연결되어 있지 않아 한 가지가 공정 변동으로 느려져도 다른 가지가 보정해 줄 방법이 없습니다.

H-트리(H-tree)는 중심에서 시작해 H 모양을 재귀적으로 반복하며 모든 말단까지의 배선 길이와 구조가 같도록 만드는 대칭 구조입니다. 부하가 규칙적으로 깔린 큰 배열에 잘 맞고, 불규칙한 배치에는 적용하기 어려우며 배선 자원을 많이 씁니다.

클록 메시(Clock mesh)는 말단 근처에 격자 모양의 배선을 깔고 여러 버퍼가 같은 격자를 함께 구동하도록 하는 방식입니다. 격자 위 지점 사이의 지연 차이가 평균화되어 변동에 강하지만, 버퍼와 배선이 많이 들어 전력이 크고 분석도 복잡해서 스큐와 변동을 최소로 줄여야 하는 일부 고성능 설계에서 쓰입니다. 상위는 트리, 말단은 메시로 두는 식의 혼합 구조도 있습니다.

유용한 스큐, 일부러 어긋나게 두는 이유

스큐를 0으로 만드는 것이 언제나 최선은 아닙니다. 어떤 경로는 시간이 모자라고 이웃 경로는 남을 때, 모자란 경로의 받는 플립플롭 클록을 일부러 늦추면 그 경로는 시간을 얻고, 그 플립플롭이 보내는 다음 경로는 시간을 잃습니다. 이를 유용한 스큐(Useful skew)라고 합니다.

가상 계산 예시, 시간을 앞뒤 경로로 재분배하기클록 주기 2.0 ns이고, 플립플롭 A에서 B로 가는 경로가 필요로 하는 시간이 2.2 ns, B에서 C로 가는 경로가 1.4 ns라고 가정합니다. 필요한 시간에는 클록-출력 지연, 논리 지연, 셋업 시간이 모두 들어 있습니다.

스큐가 없으면 A에서 B는 여유 −0.2 ns로 위반이고 B에서 C는 +0.6 ns입니다. B의 클록을 0.3 ns 늦추면 A에서 B는 2.0 + 0.3 − 2.2 = +0.1 ns, B에서 C는 2.0 − 0.3 − 1.4 = +0.3 ns로 둘 다 통과합니다.

두 경로의 여유를 합친 값은 0.4 ns로 그대로이고, 앞뒤 경로 사이에서 재분배되었을 뿐입니다. 한 팀의 마감을 늦춰 주면 그 팀이 넘겨받은 일을 처리할 다음 팀의 시간이 줄어드는 것과 같습니다.

대가도 있습니다. 앞 경로에서는 받는 쪽 클록이 늦어졌으므로 홀드가 불리해지고, 클록 트리가 의도적으로 비대칭이 되어 구현과 변동 분석이 복잡해집니다. 파이프라인이 고리를 이루면 한 바퀴 전체의 평균 이상으로는 시간을 빌릴 수 없다는 한계도 있습니다.

클록 게이팅과 클록 전력

클록은 칩 안에서 활동도가 가장 높은 신호입니다. 데이터 신호는 사이클마다 값이 바뀌는 비율이 낮지만, 클록은 매 사이클 한 번씩 올라갔다 내려오면서 모든 플립플롭의 클록 핀과 분배망의 배선과 버퍼를 충전하고 방전합니다.

가상 계산 예시, 클록 분배망의 동적 전력클록 분배망 전체의 커패시턴스를 200 pF, 전원 전압을 0.8 V, 클록 주파수를 1 GHz로 가정합니다. 한 주기에 한 번 충전과 방전을 하는 노드의 동적 전력은 C × V² × f이므로 200 pF × 0.64 × 1 GHz = 약 0.128 W, 즉 128 mW입니다.

실제 칩에서 클록이 차지하는 비중은 설계마다 크게 다르지만, 동적 전력의 상당한 부분을 차지하는 경우가 많습니다.

클록 게이팅은 쓰지 않는 블록의 클록을 끊어 그 아래 트리 전체의 스위칭을 없애는 기법입니다. 개념은 저전력 설계 글에서 다루었으니 여기서는 CTS 관점만 짚으면, 게이팅 셀이 트리 중간에 놓이는 한 단의 버퍼이므로 앞뒤 단의 지연까지 포함해 스큐를 맞춰야 한다는 점이 핵심입니다.

게이팅 셀의 위치는 트레이드오프입니다. 루트에 가깝게 두면 한 번에 많은 플립플롭을 끌 수 있어 절감이 크지만 enable 신호의 타이밍이 빠듯해지고, 말단에 가깝게 두면 enable 타이밍은 쉽지만 게이팅 셀이 많아지고 절감 폭은 작아집니다.

클록 트리 합성 결과를 점검하는 항목

CTS가 끝나면 스큐 하나만 보지 않고 여러 지표를 함께 확인합니다. 아래 항목은 서로 영향을 주고받기 때문에 하나를 줄이면 다른 하나가 늘어나는 일이 흔합니다.

CTS 결과 점검 항목

  • 삽입 지연: 클록 포트에서 플립플롭까지의 평균 지연입니다. 길수록 전압과 온도 변동에 따른 지연 변화의 절댓값이 커지는 경향이 있습니다.
  • 스큐: 전체 최대 스큐와, 서로 데이터를 주고받는 이웃 플립플롭 사이의 로컬 스큐를 함께 봅니다.
  • 전이 시간: 클록 신호가 너무 둔하게 변하면 셋업과 홀드 계산이 불안정해지고 전력도 늘어납니다.
  • 최소 펄스 폭과 듀티 비: 클록이 너무 좁게 찌그러지면 플립플롭이 오동작합니다.
  • 클록 전력: 버퍼 개수와 배선 길이, 게이팅 적용 범위로 정해집니다.
  • 클록 배선의 전자이동: 클록 배선은 전류가 자주 흘러 전류 밀도 점검 대상이며, 더 넓은 폭과 간격으로 그립니다.

변동 분석에서는 보내는 쪽과 받는 쪽이 공통으로 지나는 클록 경로 구간을 구분해 다룹니다. 같은 구간은 두 경로가 함께 겪는 지연이라서, 한쪽은 느리고 다른 쪽은 빠르다고 이중으로 비관적으로 계산하지 않도록 보정하는 방식이 쓰입니다.

클록 분배 구조 비교 표

구분버퍼 트리H-트리클록 메시
구조루트에서 단계별로 분기하는 가지H 모양을 반복하는 대칭 구조말단의 격자에 여러 버퍼가 동시 구동
스큐 균형 방식가지별 부하와 지연을 맞춤배선 길이를 같게 만듦격자가 지연 차이를 평균화
변동에 대한 강건성가지마다 변동이 독립적으로 쌓임대칭이라 중간 수준가장 강함
전력과 자원가장 적게 사용배선 자원을 많이 사용버퍼와 배선이 많아 전력이 큼
잘 맞는 설계일반적인 SoC와 대부분의 블록부하가 규칙적으로 깔린 대형 배열스큐와 변동을 최소화해야 하는 일부 고성능 설계

핵심 정리

클록 트리 합성은 하나의 클록을 수많은 플립플롭에 같은 시각에 닿게 만드는 분배망을 짓는 일입니다. 스큐는 셋업과 홀드를 맞바꾸는 변수이고, 지터는 마진으로 따로 확보하며, 구조는 전력과 변동 강건성 사이에서 버퍼 트리, H-트리, 메시 중에서 고릅니다.

공지 중계 비유로 돌아가면, 팀장 단계를 몇 층으로 둘지, 층마다 도착 시각을 얼마나 맞출지, 일부러 어느 팀의 시작을 늦춰 줄지를 정하는 일입니다. 비유와 달리 칩에서는 같은 공지가 매 사이클 반복되고 쉬는 블록에는 아예 공지를 끊을 수 있어서, 클록 트리 합성은 타이밍과 전력을 동시에 다루는 핵심 단계가 됩니다.

면접 대비 질문

면접 대비 질문클록 스큐가 셋업과 홀드에 미치는 영향을 설명하고, 클록 트리 합성에서 유용한 스큐를 쓰는 이유와 대가를 말해 보세요.

[답변 포인트] 받는 쪽 클록이 늦으면 셋업 여유는 늘고 홀드 여유는 줄며, 반대면 정반대라는 점을 먼저 말하고 간단한 수치 예로 보여 줍니다. 셋업은 주기를 늘려 해결할 수 있지만 홀드는 주기와 무관해 칩 제작 후 고칠 수 없다는 점이 홀드가 더 위험한 이유입니다. 유용한 스큐는 시간이 모자란 경로의 받는 클록을 늦춰 앞 경로에 시간을 주고 뒤 경로에서 그만큼 가져오는 재분배이며, 대가로 홀드 위험, 구현과 변동 분석의 복잡성, 파이프라인 고리에서의 한계가 있다고 덧붙입니다. 클록 게이팅과 전력, 메시와 트리의 선택까지 연결하면 좋습니다.