클럭 전환의 함정: 글리치와 Glitch-Free Mux

클럭 Mux의 글리치 현상과 Glitch-Free 아키텍처

🔧 IT·과학 · SoC / RTL 설계

멀티 클럭(multi-clock) SoC에서 동작 주파수를 동적으로 바꾸려면 여러 클럭 소스 중 하나를 골라 시스템에 공급하는 클럭 멀티플렉서(Clock Mux)가 필요하다. 그런데 이 전환을 잘못 설계하면 글리치(glitch)라는 비정상 펄스가 출력에 끼어들고, 이는 단순한 데이터 오류를 넘어 칩 전체를 멈춰 세우는 치명적 결함으로 이어진다. 이 글은 글리치가 무엇이고 왜 발생하며 어떤 파형으로 나타나는지, 그리고 이를 원천 차단하는 Glitch-Free Clock Mux의 핵심 개념과 아키텍처, 나아가 실무 제약과 최신 연구의 보완책까지 정리한다.

클럭에 단순 Mux를 쓰면 안 되는 이유

데이터 경로에서 신호 두 개 중 하나를 고를 때는 assign out = sel ? a : b; 같은 단순 조합 논리(combinational) Mux를 쓴다. 데이터는 다음 클럭 에지에서 다시 샘플링되므로, 전환 순간에 잠깐 흔들려도 큰 문제가 없다.

문제는 클럭 자체를 이 단순 Mux로 고를 때 발생한다. 클럭은 “샘플링되는 대상”이 아니라 “샘플링하는 기준”이기 때문에, 클럭에 단 한 번의 비정상 펄스만 섞여도 그 클럭으로 동작하는 모든 플립플롭이 오작동한다. 핵심 원인은 비동기성(asynchronicity)이다. 어떤 클럭을 고를지 정하는 선택 신호(SEL)가, 입력 클럭들의 위상과 무관하게 임의의 시점에 바뀌기 때문이다.

글리치(런트 펄스)란?
이상적인 디지털 신호는 0→1, 1→0으로 깔끔하게 전환되어야 한다. 그러나 전환 타이밍이 어긋나면 의도한 펄스 폭을 다 채우지 못한 비정상적으로 짧은 펄스가 출력에 나타난다. 이를 글리치(glitch) 또는 런트 펄스(runt pulse), 잘린 펄스(chopped pulse)라고 부른다.

발생 시나리오 — 현재 출력 중인 CLK0이 High(1)를 유지하는 도중 SEL이 CLK1 쪽으로 바뀌고, 그 순간 CLK1이 Low(0)였다고 하자. Mux 출력은 CLK0의 남은 High 구간을 채우지 못하고 즉시 0으로 추락한다. 결과적으로 정상 주기보다 폭이 극단적으로 좁아진 런트 펄스가 출력단을 타고 흘러간다.

아래 파형은 단순 Mux에서 비동기 SEL이 인가될 때, CLK0의 High 펄스가 전환 지점에서 잘려 나가는(런트) 모습이다. SEL 전환 직후 MUX_OUT이 CLK0의 마지막 High를 끝까지 유지하지 못하고 일찍 떨어지는 구간이 글리치다.

wavedrom diagram

📊 다이어그램 요약: CLK0가 High를 유지하던 중 비동기 SEL이 CLK1로 바뀌자 MUX_OUT이 마지막 High를 끝까지 채우지 못하고 일찍 0으로 떨어진다 — 이 잘린 펄스가 바로 글리치(런트 펄스)다.

글리치가 칩을 멈추는 3단계

클럭에 글리치가 섞이면 피해는 한 번에 끝나지 않고 단계적으로 증폭된다. 작은 펄스 하나가 어떻게 시스템 셧다운까지 번지는지 그 연쇄를 따라가 보자.

mermaid diagram

🔁 다이어그램 요약: 클럭 글리치 한 번이 셋업·홀드 위반 → 메타스테빌리티(준안정 상태) → FSM 오천이·시스템 멈춤으로 단계적으로 증폭된다 — 단일 비트 오류가 아니라 시스템 셧다운으로 번지는 결함이다.

1. 셋업/홀드 타임 위반
플립플롭이 데이터를 정상 캡처하려면 클럭 에지를 기준으로 전후 일정 시간 동안 데이터가 안정적으로 유지되어야 한다(셋업·홀드 타임). 글리치로 펄스 폭이 너무 좁아지면 이 물리적 제약을 충족할 수 없다.
2. 메타스테빌리티(Metastability)
타이밍이 위반되면 플립플롭은 명확한 0도 1도 아닌 중간 전압에서 헤매는 준안정 상태에 빠진다. “산 정상에 올려둔 공”처럼 언제 어느 쪽으로 결정될지 알 수 없다.
3. 기능적 실패(Functional Failure)
한 플립플롭의 오작동이 데이터 경로 전체로 파급되고, 유한 상태 기계(FSM)가 엉뚱한 상태로 천이하면서 시스템 멈춤(deadlock)이나 치명적 결함으로 이어진다.
🧠 요컨대 글리치는 단일 비트 오류가 아니라 시스템 셧다운으로 번질 수 있는 결함이다. 그래서 클럭 전환은 “데이터를 고르는 문제”가 아니라 “안전하게 끊고 잇는 문제”로 다뤄야 한다.

Glitch-Free Clock Mux의 세 가지 원리

업계 설계자들은 단순히 선을 잇는 Mux 대신, 내부에 안전장치를 내장한 Glitch-Free Clock Mux를 쓴다. 이 아키텍처는 다음 세 원칙을 결합한다.

① 하강 에지 샘플링 (Negative-edge triggering)
글리치는 클럭이 High일 때 전환이 일어나며 펄스가 깎여 생긴다. 따라서 클럭이 0으로 완전히 떨어진 하강 에지 시점에만 인에이블(EN) 상태가 바뀌도록 설계해, High 구간이 잘리는 일을 막는다.
② 동기화기 (Synchronizer)
비동기 SEL이 메타스테빌리티를 일으키지 않도록, 각 클럭 도메인마다 2단 플립플롭 체인(2-stage DFF)을 두어 SEL을 해당 클럭 타이밍에 안정적으로 정렬한다.
③ 교차 피드백 인터락 (Break-before-make)
“이전 클럭을 완전히 끊었다(Break)”는 사실을 논리적으로 확인한 뒤에야 “새 클럭을 연결(Make)”한다. 두 경로의 인에이블 신호를 서로 교차시켜 AND로 묶어, 어떤 경우에도 두 클럭이 동시에 활성화되지 않도록 상호 잠근다.

아키텍처 구조도

2입력 Glitch-Free Clock Mux의 내부 모듈 관계를 도식화하면 다음과 같다. 각 클럭 가지(branch)는 자체 2단 하강-에지 DFF 동기화기와 클럭 게이팅 AND를 갖고, 한 가지의 인에이블 출력이 반대편 가지의 입력 AND로 교차 피드백되어 상호 잠금을 형성한다. 최종 출력은 두 게이팅 결과를 OR로 합친다.

d2 diagram

🔗 다이어그램 요약: 각 클럭 가지는 2단 하강-에지 DFF 동기화기와 클럭 게이팅 AND를 갖고, 한 가지의 인에이블 출력이 반대편 가지로 교차 피드백되어 두 클럭이 절대 동시에 켜지지 않도록 상호 잠근다. 최종 CLK_OUT은 두 게이팅 결과의 OR다.

동작 파형 — Dead Time이 글리치를 차단한다

이 구조를 거치면 비동기 SEL이 중간에 바뀌어도 회로는 즉시 반응하지 않는다. 기존 클럭(CLK0)의 High를 끝까지 마치고 하강 에지에 도달해 0으로 떨어진 뒤 해당 경로를 차단(EN0=0)한다. 그 후 두 클럭이 모두 출력되지 않는 안전 구간(Dead Time / Quiet Period)을 거쳐, 반대편 클럭(CLK1)의 하강 에지에 맞춰 비로소 출력을 개방(EN1=1)한다. 아래 파형에서 CLK_OUT이 중앙에서 한동안 0으로 평탄해지는 구간이 바로 데드 타임이다.

wavedrom diagram

📊 다이어그램 요약: SEL이 바뀌어도 CLK_OUT은 즉시 전환하지 않는다. CLK0를 끊고(EN0=0) 두 클럭 모두 0인 데드 타임을 거친 뒤 CLK1을 개방(EN1=1)하므로, 중앙의 평탄한 0 구간이 글리치가 끼어들 틈을 원천 차단한다.

실무 제약: 두 클럭이 모두 살아 있어야 한다

이 아키텍처는 강력하지만, 동기화기에 의존한다는 사실에서 비롯되는 구조적 제약을 동반한다. 대표적인 두 벤더의 설계 가이드를 보면 그 대가가 분명히 드러난다.

항목 Xilinx / AMD · BUFGMUX Intel / Altera · 설계 지침
글리치-프리 방식 CLK_SEL_TYPE="SYNC" 속성의 내장 상태 머신 교차 결합(cross-coupled) 인터락 구조
전환 조건 현재 클럭이 Low로 떨어진 뒤 새 클럭 에지에 맞춰 출력 동기화·피드백 처리를 모두 거친 뒤 출력 전환
핵심 전제 / 비용 두 클럭이 모두 토글 중이어야 함 느린 클럭 기준 1~2 사이클 전환 지연
주의할 위험 전환 대상 클럭이 멈추면 출력이 영구 hang 지연을 타이밍 예산에 반드시 반영해야 함

Xilinx(AMD) BUFGMUX — “살아 있는 클럭” 전제

Xilinx FPGA의 BUFGMUX 프리미티브는 CLK_SEL_TYPE => "SYNC" 속성으로 글리치-프리 전환을 내장 지원한다. SEL이 바뀌면 즉시 전환하는 대신, 현재 클럭이 Low로 떨어질 때까지 기다린 뒤 새 클럭 에지에 맞춰 출력을 내보내는 상태 머신을 쓴다. 그런데 여기엔 치명적 전제가 있다.

🔴 동기식 전환의 전제
동기식 전환이 완료되려면 두 클럭 소스가 모두 토글(활성화)되고 있어야 한다. 전환하려는 클럭이 멈춰(stuck) 있으면 내부 동기화 로직이 오지 않는 에지를 무한정 기다려, 출력이 영구적으로 멈추는(hang) 현상이 발생한다.

즉, 동기화기 기반 인터락 구조는 “클럭이 살아 있다”는 전제 위에서만 안전하며, 클럭 소스 정지(halt)는 데드락의 직접 원인이 된다.

Intel(Altera) — 피할 수 없는 스위칭 지연

Intel(Altera) 계열의 설계 지침도 같은 교차 결합 인터락 구조를 권장하면서, 그 대가로 전환 지연(latency)이 불가피함을 명시한다. SEL을 바꿔도 동기화·피드백 처리를 거쳐야 하므로, 통상 느린 쪽 클럭 기준 1~2 사이클의 지연이 발생한다. 이는 결함이 아니라 글리치-프리를 보장하기 위해 치르는 설계상의 비용이며, 타이밍 예산에 반드시 반영해야 한다.

멈춘 클럭까지 견디는 최신 연구

“두 클럭이 모두 돌아야 한다”는 제약은 클럭 게이팅이 빈번한 저전력 SoC에서 실제 위험으로 이어진다. 전력을 아끼려 일부 클럭을 꺼두는 일이 흔한데, 하필 꺼진 클럭으로 전환하려다 칩이 멈출 수 있기 때문이다. 학술 문헌에서는 이 한계를 극복하기 위한 확장 아키텍처가 제시되고 있다.

Missing-Pulse Detection (MPD)
기준 클럭(reference clock)을 바탕으로 대상 클럭의 펄스가 누락되었는지, 즉 정지 상태인지를 실시간 감지한다.
Safe-OFF Recovery
클럭이 멈춰 인터락이 무한 대기에 빠질 위험이 감지되면, 내부 노드를 강제 리셋해 강제 전환을 유도한다.

이 둘을 전통적 break-before-make 게이팅과 결합하면, 클럭 소스가 멈춘 상황에서도 한정된 지연(bounded latency) 안에 글리치-프리 전환을 보장할 수 있다는 것이 해당 연구의 요지다. 다만 이는 표준 셀처럼 보편화된 기성 구조라기보다 연구·고급 설계 수준의 보완책으로 이해하는 것이 정확하다.

“This paper presents an architecture that integrates reference-clock-based missing-pulse detection (MPD), interlocked break-before-make gating, and a safe-OFF recovery mechanism to ensure bounded-latency switching and robust operation, even when clock sources halt.”

두 관점은 서로 모순되지 않는다. Xilinx 자료의 “두 클럭이 모두 돌아야 함”(제약)과 학술 자료의 “멈춘 클럭에서도 동작”(그 제약의 극복)은 모순이 아니라 문제 제기와 해결책의 관계로 일관되게 맞물린다.

정리와 실무 권고

글리치는 클럭 전환 시 비동기 SEL이 만드는 런트 펄스로, 셋업·홀드 위반 → 메타스테빌리티 → 기능적 실패로 증폭되는 치명적 결함이다.

✓ 이를 막는 Glitch-Free Clock Mux는 하강 에지 샘플링 + 2단 동기화기 + 교차 피드백 인터락(break-before-make)의 세 원칙으로, 전환 사이에 데드 타임을 삽입해 글리치가 끼어들 틈을 없앤다.

✓ 대가는 둘이다. ① 동기화기가 클럭 에지에 의존하므로 두 클럭이 모두 살아 있어야 안전하고, ② 느린 클럭 기준 1~2 사이클의 전환 지연이 발생한다.

✓ 멈춘 클럭에 대한 취약성은 MPD + Safe-OFF Recovery 같은 확장으로 보완 가능하나, 이는 고급·연구 수준의 접근이다.

💼 실무 권고
DVFS와 동적 클럭 스위칭이 일상화된 현대 SoC에서 글리치-프리 구조는 선택이 아니라 필수다. 가장 안전한 길은 게이트 레벨 로직을 직접 짜기보다 벤더가 검증한 매크로(예: Xilinx/AMD BUFGMUX, ASIC 라이브러리의 전용 클럭 셀)를 쓰는 것이다. 불가피하게 커스텀 설계를 한다면 — ▶ 두 클럭이 모두 토글 중인가, ▶ 전환 지연이 타이밍 예산에 들어갔는가, ▶ 클럭 정지 시 hang 방지 장치가 있는가 — 이 세 가지를 점검하고, CDC 검증 툴과 충분한 시뮬레이션으로 교차 타이밍 이슈를 반드시 확인해야 한다.

📚 참고한 자료: VLSI Tutorials, EE Times, AMD/Xilinx Technical Support & Forums, Intel FPGA Design Guidelines, IEEE Xplore.

이 글은 디지털 설계의 일반 개념을 정리한 교육용 콘텐츠로, 특정 제품·벤더의 최신 데이터시트와 세부 동작이 다를 수 있다. 실제 설계에 적용할 때는 벤더 공식 문서와 CDC 검증 도구로 반드시 확인하기 바란다.

G
GraceMoon
여러 출처로 확인한 리서치

웹 검색과 원문 확인을 거쳐 사실관계를 교차 점검한 뒤 정리합니다. 인용한 출처를 본문에 적습니다.

본 글은 공개된 데이터와 출처를 바탕으로 작성했습니다. 최종 업데이트: 2026-06-16

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤