본문 바로가기

gray code6

[CDC] 10. Asynchronous FIFO(4) 이전 포스트들을 통해서 Asynchronous FIFO를 설계하기 위한 기본적인 사항들을 알아보았다. Meta-stability 상태를 제거하기 위하여 2-Stage Synchronizer, Multi-bit CDC를 하기 위한 Gray Code, FIFO의 Empty, Full 상태를 알아보기 위한 Pointer 연산까지 살펴보았다. 이 사항들을 조합하여 Asynchronous FIFO를 설계해보도록 하자. Asynchronous FIFO를 이해함에 있어서 가장 중요한 점은 Asynchronous FIFO에 저장되는 데이터가 아니라 Write Domain과 Read Domain의 Pointer에 CDC(Clock Domain Crossing) 기법을 적용한다는 것이다. Asynchronous FIFO에.. 2022. 4. 25.
[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] 08. Asynchronous FIFO(2) 이전 포스트에서는 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 Cou.. 2022. 3. 31.
[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.