Clock domain crossing 란, 서로 다른 clock domain들 끼리 신호를 주고 받을 때 주는 쪽(TX)에서 주는 신호를 받는 쪽(RX)에서 사용하는 clock과 동기화를 해주는 작업을 의미합니다. 흔히 앞글자를 따와 "CDC 처리한다" 라고 얘기합니다.

어떤 시스템은 단일 clock, 즉 하나의 clock으로 전체 디자인을 동작시킬 수도 있고 목적에 따라서는 여러 clock을 사용해, 즉 Multi clock 으로 디자인을 돌릴 수도 있습니다.
만약 본인이 설계하고 있는 시스템이 단일 clock domain 경우에는 CDC 처리를 해줄 필요가 없습니다. 물론 약간의 clock net의 physical delay가 있어 edge가 정확히 맞지 않겠지만 FPGA back-end tool에서 알아서 모든 f/f의 sync를 잘 맞추어 줍니다.

그러나 시스템이 조금이라도 커지게 되거나 저전력 설계를 목표를 하게 된다면 clock domain이 두 개 이상으로 늘어나게 됩니다. 그렇게 되면 Clock sync를 맞추기 위한 추가 작업이 필요가 없게 됩니다. Clock sync를 맞춘다는 것은 root clock에서 모든 f/f의 clock pin에 도달하는 시간 차(=clock skew)를 최소한으로 줄이는 작업을 말하는데, 그렇게 되면 back-end 작업 시 clock net에 buffer가 들어가게 되어 resource, area, power consumption 면에서 손해일 수 밖에 없습니다. 따라서 clock domain을 여러개 두어 설계하게 되는 것이지요.

본론으로 돌아와 서로 다른 clock을 사용하는 블록끼리 clock edge의 sync가 같음을 보장할 수가 없음에도 불구하고 sync를 맞추어 자기 블록에서 사용하도록 하는 작업을 CDC 처리라고 합니다.

만약 서로 다른 clock domain인데도 불구하고 CDC 처리를 하지 않고 바로 사용하게 되면 어떻게 될까요? 결론부터 얘기하자면 출력 값을 보장할 수 없고 그로 인해 system failure 를 초래하게 됩니다.
위의 그림에서 Clock domain 1에서 사용하는 신호를 Clock domain 2에서 사용 해야하는 상황일 때를 가정해봅시다. Domain 1에서 2로 주는 신호가 0->1 혹은 1->0 으로 변하고 난 뒤에 domain 2의 clock edge 로 값을 채게 된다면 시스템에 문제가 없을 수 있습니다. 그러나 만약 신호가 변하는 시점에 clock edge 로 값을 채게 된다면 어떤 일이 발생할까요? 답은 "0"과 "1" 둘 중에서 확실하게 보장되지 않은 값을 출력하게 됩니다. 이러한 현상을 값이 "meta-stable" 한 상황이라고 하고 "meta-stability failure" 라고 합니다. Meta-stable 에 대한 개념은 추가적으로 자료를 올리도록 하겠습니다.

어쨌든 system failure 가 발생하지 않도록 clock이 다른 domain들끼리는 CDC 처리가 필수적으로 필요합니다.


설령 meta-stable 한 상황에서도 원하는 값을 출력하게 된다고 하더라도 그 상황을 빠져나올 때까지 얼마나 오랜 시간이 걸릴지 확률적으로 아무도 장담하지 못합니다. 이를 MTBF(Mean Time Between Failure) 라는 개념이라 하고, meta-stability failure 발생 후 값이 "0" 또는 "1"이 출력될 때까지 걸리는 평균 시간을 의미합니다.

'[1] RTL Design' 카테고리의 다른 글

Meta-stability의 개념  (0) 2021.02.15
Clock skew의 개념  (0) 2021.02.15

디지털 설계를 하다보면 metastable의 개념을 들어보았을 것입니다. 보통 단일 clock domain이 아니라 multi clock domain의 구조로 시스템을 설계하게 되면 반드시 고려하고 해결해야만 하는 개념입니다.

Metastable이란 의미 그대로 meta적으로 stable한 상황, 즉 stable하지도 unstable 하지도 않은 애매한 상황을 의미한다. 흔히 디지털 시스템에서는 flip-flop의 출력(Q)값이 0인지 1인지 확실히 gurantee 하지 못하는 불명확한 상태를 의미합니다. 조금 더 정확히 말하자면 f/f 의 clock edge가 변하는 시점에 입력(D)로 들어오는 Asynchronous signal 변하면 출력(Q)값은 기능적으로 의도한 값을 gurantee 하지 못하게 됩니다.




출처: Metastability and Synchronizers: A Tutorial, Ran Ginosar Technion, Israel Institute of Technology


metastability.pdf
0.76MB

'[1] RTL Design' 카테고리의 다른 글

Clock domain crossing(CDC)의 개념  (0) 2021.02.15
Clock skew의 개념  (0) 2021.02.15

Clock skew 란, root clock 에서부터 시작하여 source f/f clock pin과 destination f/f clock pin 까지 도달하는 둘 사이의 시간 차(difference)라고 할 수 있다.

Flip-flop & combinational logic environment in digital system


Digital design 시 반드시 숙지해야할 개념이 있는데, 모든 Digital signal들은 f/f 의 출력(Q)단에서 시작해 Combinational logic 연산 후 f/f의 입력(D)단으로 입력된다.

위 그림을 보면 동일한(같은) clock을 사용하는 두 f/f A와 B가 있다. 사용하는 용어는 조금 다르겠지만 개인적으로 편한용어로는 f/f A를 source f/f, B를 destination f/f 이기에 이렇게 정의하겠다. 두 f/f 이 사용하는 clock 이 동일하다(같다)라고 한다면 두 f/f 간 clock edge의 sync를 맞춰주어야 한다는 것을 뜻하고, back-end 에서는 true path 라는 용어(false path와 반대되는 개념)로 timing violation error가 발생하지 않도록 해주어야 한다는 것을 의미한다.

Root clock에서 시작하여 source f/f과 destination f/f의 clock pin에 도착하는 시간(=delay)은 물리적으로 다를 수 밖에 없고, 그로 인한 시간 차(=skew)는 필연적으로 발생한다. 일반적으로 두 f/f 간의 skew가 크면 hold violation error가 발생할 수 있기에 반드시 skew를 줄이는 작업이 필요하다. 물리적으로 시간이 늘어난 것을 줄일 수 없기 때문에 상대적으로 시간이 짧은 clock net에 clock net 전용 buffer를 back-end 작업 시 추가하여 skew를 줄이는 작업을 한다.

'[1] RTL Design' 카테고리의 다른 글

Clock domain crossing(CDC)의 개념  (0) 2021.02.15
Meta-stability의 개념  (0) 2021.02.15