이전 포스트에서는 FIFO(First-In First Out) 동작을 수행하기 위해서, Pointer가 존재한다는 것을 알아보았다. Pointer는 Counter 형태로 동작을 한다. 그렇기 때문에 Pointer는 Multi-bit 형태를 가진다. Multi-bit CDC를 수행하기 위해서는 Binary Code 보다 Gray Code가 좋다는 것도 알아보았다. Gray Code를 이용한 Counter를 만들면 Multi-bit CDC를 보다 안전하게 수행할 수 있다.
Pointer의 크기가 N-bit이라면 FIFO Memory를 선택하기 위한 address의 bit width(N-1-bit)가 필요하며, 추가적으로 Full/Empty를 판단하기 위하여 1-bit이 더 필요하다. Gray Code Counter를 사용하려면 고려해야 할 점이 있다.
아래 예제로 어떤 점을 주의해야하는 지 살펴보자. 아래 그림은 4-bit Gray Code를 순서대로 나열하였다. Gray Code 왼쪽에는 0~15까지 index가 부여되어있다. Pointer의 크기를 4-bit이면, 하위 3-bit은 address로 쓰인다. index 0 ~ 7까지의 하위 3-Bit의 순서와 index 8 ~ 15까지 하위 3-bit의 순서가 같아야 한다. 그런데 아래 gray code는 index 0 ~ 7 부분과 index 8 ~15 부분이 서로 다르다. 예를 들어 index 7(0100)에서 '+1' 증가하여 index 8(1100)으로 변했다면 address는 100에서 100으로 변하지 않는다. 이렇기 때문에 N-bit Gray Code의 하위 (N-1)-bit을 그래도 Address로 사용할 수 없다.
그런데 자세히 보면 Index 0 ~ 7과 8 ~ 15번의 하위 3-bit은 아래와 같이 서로 대칭이다.
0(0000) - 15(1000)
1(0001) - 14(1001)
2(0011) - 13(1011)
3(0010) - 12(1010)
4(0110) - 11(1110)
5(0111) - 10(1111)
6(0101) - 9 (1101)
7(0100) - 8 (1100)
아래에서 화살표로 표시한 것처럼 '15(1000) --> 7(100)' 변환할 수 있다면 그 값을 address로 사용할 수 있을 것이다.
위에서 표시한 것을 아래와 같이 다시 표시해보면 규칙성이 보인다.
Gray Converted Address Gray Converted Address
0(0000) --> 0(000) <-> 15(1000) --> 7(100)
1(0001) --> 1(001) <-> 14(1001) --> 6(101)
2(0011) --> 2(011) <-> 13(1011) --> 5(111)
3(0010) --> 3(010) <-> 12(1010) --> 4(110)
4(0110) --> 4(110) <-> 11(1110) --> 3(010)
5(0111) --> 5(111) <-> 10(1111) --> 2(011)
6(0101) --> 6(101) <-> 9 (1101) --> 1(001)
7(0100) --> 7(100) <-> 8 (1100) --> 0(000)
'00 -> 0, 01 -> 1, 10 ->1, 11 ->0' 와 같은 연산을 수행할 수 있는 Operator가 바로 XOR 연산이다. 즉, 3번째-Bit과 2번째-BIT을 XOR 연산 수행하여 얻어진 결과를 Address의 MSB로 하며, 나머지 1,0-번째 bit을 그 하위 bit으로 만들면 순차적으로 돌아가는 N-1 Gray Code Counter가 완성된다.
정리하자면 Clock Domain을 넘어가는 Code는 N-bit Gray Code이지만, 하위 (N-1)-bit을 그대로 address로 사용하지 않고, 위와 같은 수식을 통해서 (N-1)-bit Gray code Counter로 변환하여 사용한다.
이를 Block diagram으로 그리면 위와 같이 동작한다.
다음 포스트에서는 N-bit Gray Code Counter 값을 이용하여 FIFO Full, Empty 신호를 생성하는 방법에 대해서 알아보도록 하겠다.
*Reference
[4] Clifford E. Cummings, “Simulation and Synthesis Techniques for Asynchronous FIFO Design,” SNUG 2002 www.sunburst-design.com/papers/CummingsSNUG2002SJ_FIFO1.pdf
'IT_Study > ASIC_Study' 카테고리의 다른 글
[CDC] 10. Asynchronous FIFO(4) (5) | 2022.04.25 |
---|---|
[CDC] 09. Asynchronous FIFO(3) (8) | 2022.04.13 |
[CDC] 07. Asynchronous FIFO(1) (4) | 2022.03.29 |
[CDC] 06. Gray Code vs. Binary Code(2) (5) | 2022.03.28 |
[CDC] 05. Gray Code vs. Binary Code(1) (4) | 2022.03.26 |
댓글