본문 바로가기

binary code3

[CDC] 09. Asynchronous FIFO(3) 이전 포스트에서는 Gray Code를 FIFO의 Pointer로 사용하기 위한 방법에 대해서 알아보았다. 이번 포스트에서는 이 Gray Code를 이용하여 FIFO의 Empty/Full 상태를 알아보는 방법에 대해서 이야기하고자 한다. 일반 Binary Counter를 Pointer로 사용하는 FIFO의 Empty와 Full 상태는 아래와 같은 방법으로 알 수 있다. 1. Empty Condition if(Write Pointer == Read Pointer) Empty = 1; else Empty = 0; 2. Full Condition if((Write Pointer[MSB] != Read Pointer[MSB]) & (Write Pointer[MSB-1:0] == Read Pointer[MSB-1:.. 2022. 4. 13.
[CDC] 06. Gray Code vs. Binary Code(2) 이전 포스트에서는 Gray Code와 Binary Code에 대해서 살펴보았다. Binary Code는 일반적으로 숫자를 세기 위해서 사용된다. 예를 들어 Binary Code에서는 '0001(1)'에 +1을 할 경우, 직관적으로 '0010(2)'이 됨을 알 수 있다. 그러나 Gray Code는 해당 값이 직관적으로 어떤 숫자를 나타낸다는 걸 알기 어렵다. 예를 들어 Gray Code는 순서에 따라서 '0001' 다음 '0011'이기 때문에, '0001'에 다음 값(+1)이 바로 '0011'이라고 생각하기 쉽지 않으며, 2라는 값을 생각하기 어렵다. 물론 Table 형태로 관리하여 '0001' 1, '0011' 2로 매칭해서 생각해도 된다. 그런데 Table로 관리하기 어렵다면, Gray Code를 Bi.. 2022. 3. 28.
[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.