타이밍 분석과 CDC

비동기 FIFO에서 쓰기 포인터와 읽기 포인터를 그레이 코드로 변환한 후 상대 도메인으로 동기화하는 이유로 올바른 것은?

  1. A그레이 코드로 하면 비트 수가 절반이 되어 동기화기가 적게 들기 때문에
  2. B하나 증가할 때마다 1비트만 바뀌므로, 변화 도중에 캡처하더라도 증가 전이나 후의 올바른 값이 되기 때문에
  3. C그레이 코드 신호는 메타스테이블 상태가 되지 않으므로 동기화가 필요 없어지기 때문에
정답과 해설 보기

정답: B. 하나 증가할 때마다 1비트만 바뀌므로, 변화 도중에 캡처하더라도 증가 전이나 후의 올바른 값이 되기 때문에

바이너리 포인터는 예를 들어 0111에서 1000처럼 여러 비트가 동시에 바뀌므로, 각 비트를 따로 동기화하면 전혀 관계없는 값을 받는 경우가 있습니다. 그레이 코드라면 한 번 증가할 때 바뀌는 것은 1비트뿐이므로, 그 비트가 메타스테이블 상태가 되어 새 값과 이전 값 중 어느 쪽으로 정해지더라도 결과는 증가 전이나 증가 후의 값이 됩니다. 약간 오래된 값을 볼 뿐이므로 FIFO가 망가지지는 않습니다. 비트 수는 변하지 않으며, 메타스테빌리티 자체도 일어날 수 있으므로 동기화기는 필요합니다.

비동기 FIFO의 구성 쓰기 측(wclk) 읽기 측(rclk) 듀얼 포트 RAM 두 클록으로 읽기/쓰기 쓰기 데이터 쓰기 포인터 그레이 코드화 읽기 데이터 읽기 포인터 그레이 코드화 2단 동기화 empty 판정 2단 동기화 full 판정 그레이 코드 포인터 그레이 코드는 1 증가할 때 1비트만 바뀜
비동기 FIFO의 구성 · 도해에서 보기
이 분야 연습하기 분야로 돌아가기

타이밍 분석과 CDC의 다른 문제

  1. 4비트 바이너리 0110(10진수 6)을 그레이 코드로 변환한 것은?
  2. 깊이 16워드인 비동기 FIFO에서 쓰기 포인터와 읽기 포인터를 주소보다 1비트 많은 5비트로 하는 이유로 올바른 것은?
  3. 5비트 그레이 코드 포인터를 사용하는 깊이 16워드의 비동기 FIFO에서, 쓰기 측에서 가득 참(full)을 판정하는 조건으로 올바른 것은?
  4. 비동기 FIFO에서는 상대의 포인터를 동기화해서 사용하므로, 보이는 포인터 값이 2~3사이클 오래된 값이 됩니다. 이 지연이 full/empty 판정에 미치는 영향으로 올바른 것은?
  5. 쓰기 측 100 MHz, 읽기 측 80 MHz인 비동기 FIFO에서 쓰기 측은 100워드의 버스트를 매 사이클 1워드씩 쓰고, 읽기 측은 매 사이클 1워드씩 읽습니다. 버스트 사이에는 충분한 휴지 기간이 있습니다. 넘치지 않기 위해 필요한 최소 깊이는 얼마입니까(동기화로 인한 지연은 무시합니다)?