본문 바로가기

CDC6

[CDC] 07. Asynchronous FIFO(1) 이번 포스트에서는 CDC(Clock Domain Crossing)를 수행할 때 가장 많이 쓰이는 Asynchronous FIFO에 대해서 알아보도록 하겠다. FIFO는 First In First Out의 약자로 처음 넣은 데이터가 처음 나오는 기능을 수행한다. 즉 순차적으로 입력한 데이터가 순차적으로 출력된다. 이런 동작을 수행하기 위해서 FIFO에서 Write Pointer, Read Pointer가 존재한다. Write를 수행하면 Write Pointer가 '+1' 증가되며, Read를 수행하면 Read Pointer가 '+1' 증가된다. 두 Pointer 간의 비교를 통해서 FIFO 내부에 데이터가 존재하는지(empty) 혹은 꽉 찼는지(full)를 알 수 있다. 예를 들어 Pointer가 0~7까.. 2022. 3. 29.
[CDC] 05. Gray Code vs. Binary Code(1) Multi-bit CDC를 수행할 때, 동시에 여러 Bit이 Clock domain을 넘어가면 skew에 의해 전혀 다른 값이 전달될 수도 있다는 것을 알 수 있었다. 여기에서 살펴봐야 하는 점이 있다. skew에 의해 전혀 다른 값(의도와 다른 값, 예를들어 a를 b로 변경해서 전달하는데 c로 인식한 경우 의도와 다른 값이 전달.)이 전달되려면, 전달되는 Bit 중 2-bit 이상 데이터가 변경되어야 한다. 예를 들어 4-bit CDC를 수행함에 있어서, 1001 -> 1010로 변경되는 경우를 살펴보자. [3]: 1 -> 1 [2]: 0 -> 0 [1]: 0 -> 1 [0]: 1 -> 0 위와 같이 각 BIT의 데이터 변경이 이뤄진다. 각 BIT마다 Skew가 있다고 가정하고, 이전 값을 전달하는 경.. 2022. 3. 26.
[CDC] 04. Multi-bit Clock Domain Crossing(2) 이전 포스트에서는 Multi-bit CDC(Clock domain Crossing)의 해결책 중에 하나로 2-bit 신호를 1-bit 신호로 만들어서 전송하는 예제에 대해서 다뤘다. 그런데 항상 1-bit으로 변경할 수 있는 것은 아니다. 그러면 Multi-bit CDC를 수행할 수 있는 다른 방법을 알아보자. Multi-bit 신호를 전달하는 데 문제점은 Multi-bit 간의 Skew로 인하여 발생하였다. 그렇다면 Clock 2 Domain에서 Multi-bit 간의 Skew가 없는 상태에서 capture 하도록 만들면 해결되지 않을 까? Multi-bit 신호의 Skew가 없다는 말은 일정 값으로 Multi-bit이 유지되고 있는 상황과 같다. Clock 2 Domain에서 일정하게 값을 유지하고 .. 2022. 3. 21.
[CDC] 02. Two Flip-flop Synchronizer Usage Example 지난 Post에서 Metastability를 극복하기 위한 방법으로 Register Chain을 소개하였다. 아래 그림과 같이 Register를 직렬로 연결하면 마지막 Register에서 Metastability에 빠질 확률이 극도록 낮아진다. 이 2-stage Synchronizer를 사용하려면 주의할 사항이 있다. 첫 번째로는 위 그림에서 Clock1 Domain에서 Clock2 Domain으로 전달되는 신호는 중간에 Combination Logic 없이 Register의 출력 값이어야 한다. 그 이유는 Clock 1와 Clock 2의 주파수가 서로 다르기 때문에 Clock1 Domain에서 Clock2 Domain으로 전달되는 신호를 Capture하는 시간이 계속 변할 수 있다. 다시 말하면 Clo.. 2022. 3. 18.