타이밍 분석과 CDC

비동기 FIFO에서는 상대의 포인터를 동기화해서 사용하므로, 보이는 포인터 값이 2~3사이클 오래된 값이 됩니다. 이 지연이 full/empty 판정에 미치는 영향으로 올바른 것은?

  1. Afull이나 empty의 해제가 늦어질 뿐, 오버플로나 빈 상태에서의 읽기는 일어나지 않는다
  2. Bfull 판정이 늦어지므로 너무 많이 써서 데이터가 넘칠 수 있다
  3. Cempty 판정이 늦어지므로 빈 FIFO에서 읽어 버릴 수 있다
정답과 해설 보기

정답: A. full이나 empty의 해제가 늦어질 뿐, 오버플로나 빈 상태에서의 읽기는 일어나지 않는다

쓰기 측이 보는 읽기 포인터는 오래된 값이므로 실제보다 읽기가 진행되지 않은 것처럼 보이고, FIFO는 실제보다 더 많이 차 있다고 판단됩니다. 즉 full은 정말로 가득 찼을 때는 반드시 나와 있고, 빈 공간이 생긴 후의 해제가 조금 늦어질 뿐입니다. 읽기 측의 empty도 마찬가지로, 새로 쓰인 데이터가 보이는 것이 늦어질 뿐입니다. 둘 다 안전 측(비관적)으로 작용하므로 데이터는 깨지지 않지만, 그 지연만큼 성능을 유지하기 위해 깊이에 여유를 둡니다.

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

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

  1. 쓰기 측 100 MHz, 읽기 측 80 MHz인 비동기 FIFO에서 쓰기 측은 100워드의 버스트를 매 사이클 1워드씩 쓰고, 읽기 측은 매 사이클 1워드씩 읽습니다. 버스트 사이에는 충분한 휴지 기간이 있습니다. 넘치지 않기 위해 필요한 최소 깊이는 얼마입니까(동기화로 인한 지연은 무시합니다)?
  2. 쓰기 측은 200 MHz로 매 사이클 1워드씩 120워드의 버스트를 씁니다. 읽기 측은 150 MHz 클럭으로 3사이클 중 2사이클만 1워드씩 읽습니다. 넘치지 않기 위해 필요한 최소 깊이는 얼마입니까(동기화로 인한 지연은 무시합니다)?
  3. 쓰기 측 250 MHz, 읽기 측 200 MHz이며 둘 다 매 사이클 1워드씩 전송합니다. 64워드의 버스트를 받는 FIFO에 계산상 필요한 최소 깊이는 얼마입니까(동기화로 인한 지연은 무시하고, 소수점 이하는 올림합니다)?
  4. 액티브 Low 외부 리셋으로부터 '비동기로 어서트하고 동기로 디어서트하는' 내부 리셋을 만드는 리셋 동기화기의 구성으로 올바른 것은?
  5. 같은 송신 측 도메인에서 온 두 개의 제어 신호를 각각 별도의 2단 동기화기로 받고, 수신 측에서 AND를 취해 사용하는 설계의 문제점으로 올바른 것은?