| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 티스토리챌린지
- Metastability
- c++ 기초
- STM32
- Dither
- IOT
- 아두이노
- SystemVerilog
- tkinter
- 임베디드시스템
- CDC
- 군산가볼만한곳
- 오블완
- Clock Domain Crossing
- systemverilog assertions
- 파이참
- 자료구조
- ADsP
- arduino
- 디더링
- 임베디드레시피
- Dithering
- 인덕터
- data structure
- SVA
- openpyxl
- BeautifulSoup4
- Bash
- git
- assertion
- Today
- Total
리미창고
[CDC] 2_Single Bit CDC: Toggle Synchronizer 본문
복습
이전 글에서 2-FF Synchronizer, Pulse Streching, Handshake CDC 기법을 공부했다.
2-FF Synchronizer는 CDC의 가장 기본적인 기법으로, 설계가 단순하고 효율적이다. Metastability 격리가 핵심 목표이며, Single Bit Level Control 신호를 처리할 때 주로 사용된다. 수신 클럭이 즉시 올바른 데이터를 받지 못하더라도, 레벨 신호인 경우 1~2 클럭 내에 올바른 값을 capture할 확률이 높다.
하지만 Fast → Slow Clock Domain의 Pulse 신호는 2-FF만으로는 감지되지 않고 사라질 수 있다. 이를 해결하기 위한 방법으로 (Pulse) Stretching과 Handshake 기법이 존재하며, 이 기법의 컨셉은 필요에 따라 Single Bit뿐 아니라 Multi Bit 신호에서도 적용할 수 있다. 다만 Single Bit에서는 경우에 따라 불필요하게 복잡해질 수 있다.
Toggle Synchronizer
다음으로 살펴볼 Toggle Synchronizer는 Fast → Slow Pulse 전달 문제를 해결하기 위해 고안된 기법이다. Level signal 처리에는 2-FF만으로 충분하지만, Fast → Slow Pulse 전달에서는 토글 변화를 감지하여 안전하게 이벤트를 전달할 수 있다.


송신 도메인에서 신호를 토글시키고(A_q), 수신 도메인에서는 토글 변화를 감지하여 이벤트를 인식(Sig_sync)한다.
동작 원리
- 송신 도메인(Fast Clock)
- 이벤트가 발생하면 토글 신호를 1→0 또는 0→1로 바꿈.
- 토글 신호는 계속 유지되며, 다음 이벤트 발생 시 다시 토글.
- 수신 도메인(Slow Clock)
- 2-FF synchronizer를 통해 토글 신호를 안정화.
- 이전 값과 현재 값을 비교(XOR 등)하여 토글이 발생했는지 감지.
- 토글이 감지되면 이벤트가 발생했다고 인식.
핵심 아이디어는 신호가 펄스가 아니라 변화(0→1 또는 1→0)로 전달되기 때문에, 짧은 펄스가 느린 클럭 도메인에서 샘플링되지 않고 사라지는 문제를 해결할 수 있다.
특징
- Pulse 신호 소실 방지: Fast → Slow Clock Domain에서 짧은 펄스가 사라지지 않고 감지 가능.
- Single Bit 이벤트에 적합: IRQ, Done, Ready 등.
- Level Signal에는 부적합: 단순 level signal에는 토글 변화가 의미가 없거나 불필요.
- Fast → Slow에 유리: Slow → Fast로 전달할 때는 일반 2-FF synchronizer로도 충분.
- 백투백 펄스 처리 제한: 한 이벤트가 처리 중일 때, 바로 다음 토글이 들어오면 누락 가능.
- 추가 로직 필요: 토글 변화를 감지하는 XOR 또는 Edge 감지 회로 필요.
Single Bit CDC 기법 정리
| CDC 기법 | 장점 | 단점 | 주요 사용처 |
| 2-FF Synchronizer | - 가장 단순하고 효율적: 면적, 전력 소모, Latency 최소 - Metastability 격리: MTBF를 시스템 수명 이상으로 크게 증가시켜 안전성 확보 - 대부분의 CDC 기법들의 Base Layer |
- Pulse Signal 손실 위험: Fast → Slow 전송 시 펄스가 캡처되지 않고 사라질 수 있음. - Multi-bit 사용 불가: 비트 스큐(Skew) 문제로 데이터 무결성 보장 불가 |
- 단일 비트 Level Control 신호: Enable, Flag, Status 등 - 변화 속도가 느리고, 1~2클럭 지연이 기능에 영향 없는 경우 |
| Pulse Stretching | - Fast → Slow 안전 - 2-FF 대비 신호 손실 방지: 펄스를 강제로 늘려 느린 도메인에서 최소 1회 샘플링 보장 - 단순한 로직 추가로 구현 가능 |
- Clock Ratio 의존성: 클럭 주파수 비율이 고정되어야 하며, 변경 시 재설계 필요 - 안전성 취약: 클럭 비율 변화에 유연하게 대처하기 어려움 |
- Pulse Signal 전송: 클럭 비율이 고정되어 있고, 최소한의 펄스라도 반드시 전달되어야 하는 경우 |
| Handshake | - Fast → Slow 안전 - 가장 안전하고 강력함: 클럭 비율 F_fast/F_slow 관계없이 신호 손실 없음 - Metastability 격리 및 데이터 무결성 완벽 보장 |
- Latency 증가: REQ ↔ ACK 왕복 지연 발생 - 추가 로직 필요: FF 외에 제어 FSM 및 REQ/ACK 신호 필요 |
- Pulse Signal 전송: 반드시 놓쳐서는 안 되는 중요한 1-bit 이벤트 신호 - Multi-bit CDC의 기반: Multi-bit Handshake 구현 시 근본 원리 |
| Toggle Synchronizer | - Pulse 신호 전달에 적합: Pulse 폭과 무관 | - 단순 레벨 신호에는 부적합 | - Pulse Signal 전송: 반드시 놓쳐서는 안 되는 중요한 1-bit 이벤트 신호 |
표로 구분은 해놨지만, 이 CDC 기법들이 독립적인 것은 아니다. 대부분의 CDC 기법들은 2-FF Synchronizer를 기반으로 하며, 서로 조합해서 사용할 수 있다.
장점만 존재하는 CDC 기법은 없기 때문에, 적재적소에 사용하는 능력이 중요하다.
Reference
https://www.edn.com/synchronizer-techniques-for-multi-clock-domain-socs-fpgas/
Clock Domain Crossing Techniques & Synchronizers - EDN
Discover The Most Popular Clock Domain Crossing (CDC) Techniques & Synchronizers Including 2 Flip-Flop, Pulse, Toggle, Handshake, MUX, FIFO & More.
www.edn.com
https://www.youtube.com/watch?v=ovQ5VYlEc8o&list=PLZrXAuM5hwx5CNygbEjf992B2itYc06tP&index=3
'VLSI > Design' 카테고리의 다른 글
| [CDC] 3_Single Bit CDC: Simulation Result (0) | 2025.12.07 |
|---|---|
| [CDC] 1_Single Bit CDC: 2-FF Synchronizer (0) | 2025.12.07 |
| [CDC] 0_CDC(Clock Domain Crossing)와 Metastability (0) | 2025.12.06 |
| [SystemVerilog] generate-for loop와 for loop의 차이 (0) | 2024.10.18 |
| 인코더와 디코더(Encoder and Decoder) (1) | 2022.07.26 |