상세 컨텐츠

본문 제목

CDC(Clock Domain Crossing)

카테고리 없음

by 썽심 2024. 4. 10. 20:22

본문

728x90

CDC?

서로 다른 Clock으로 동작하는 Clock Domain 끼리 data를 전송하는것으로,

서로 다른 clock domain에 있는 FF(Flip Flop)끼리 data를 주고 받기 때문에 문제가 발생한다.

하나의 Clock Domain에서 data를 주고 받을 때 발생하지 않는 문제들이다.

속도가 느린 clock domain과 속도가 빠른 clock domain이 data를 주고 받을 때,

속도가 느린 clock domain에서 data를 변경하는 동안 속도가 빠른 clock domain의 Clock이 rising edge가 되어 data를 받게 되면 이 상태로 metastable에 빠지게 된다. 따라서 CDC를 피해야하는 것이다.

 

avalon bus model을 예로 들면

해당 부분과 같이 data를 불안정하게 받을 때

matastable 구성에 되며, 이 때 data를 제대로 파악하지 못하여 오류가 발생한다.

이 문제를 해결하기 위해 두 가지 방법을 사용한다.

 

1. FF(Flip Flop) Chain

Clock domain 사이에 2개 이상의 FF(Flip Flop)을 엮어 data를 안정적으로 받는것이다.

FF을 통해 1Clock을 보장 받아 출력을 맞추는 방법으로 옛 clock domain이 새로운 clock domain보다 느린 동작 주파수를 가질 때 사용된다.

 

2. Asynchronous Reset Assertion, Synchrous Release

비동기 reset을 사용하여, 비 동기 reset 신호와 함께 데이터를 전송시켜 옛 clock domain과 새로운 clock domain 사이에 data를 동기적으로 전송을 맞추도록 하는것이다.

 

 

두 가지 방법을 사용 시 문제점이 있다.

New Clock domain에서 Old Clock Domain으로 부터의 출력이 수신되었는지 확인할 수 없다.

data를 알려지지 않은 속도의 한 clock에서 문제없이 이동시킬 수 있어야 한다.

 

여기서 HandShaking signal을 사용하면 된다.

 

3. Handshake signal 이용 방법

-시간 순서대로 주고받는것

 

수신부에서 data를 받을 준비가 되지 않았을 때, 이를 모르고 송신부에서 data를 보냈을 때,

data가 유실된다. 따라서 data를 보내기 전 상호간의 약속에 기반하여 data를 전송해야한다.

 

 

ex) AXI - VALID/READY

- AXI의 VALID/READY Handshake는 VALID = 1 / READY = 1 인 구간에서 data 변화가 이루어진다.

(Valid, Ready의 순서는 중요치 않음, 동시에도 가능)

 

Source 단 에서 data를 송신 시, VALID 신호를 1로 값을 전송, Destination에서 값을 받았을 때

ready를 1로 띄우게 된다.

이때 Source는 Destination으로 부터 입력되는 ready 신호가 1이고, 출력시 VALID가 1일 때 해당 주기에서 DATA 전송 됐음을 알게 된다.

 

3가지 방식(VALID-선, READY-선, 동시에 출력)

 

 

 

 

- 참고자료

 

위키백과

https://wikidocs.net/135556


맛비 - 설계독학(유튜브)

https://www.youtube.com/watch?v=Bvj2CyhRe7s

 

 

728x90