타이밍 분석과 CDC

5비트 그레이 코드 포인터를 사용하는 깊이 16워드의 비동기 FIFO에서, 쓰기 측에서 가득 참(full)을 판정하는 조건으로 올바른 것은?

  1. A쓰기 포인터와 동기화한 읽기 포인터의 상위 2비트가 각각 반대이고, 하위 3비트가 일치한다
  2. B쓰기 포인터와 동기화한 읽기 포인터의 5비트가 모두 일치한다
  3. C쓰기 포인터와 동기화한 읽기 포인터의 최상위 비트만 반대이고, 하위 4비트가 모두 일치한다
정답과 해설 보기

정답: A. 쓰기 포인터와 동기화한 읽기 포인터의 상위 2비트가 각각 반대이고, 하위 3비트가 일치한다

바이너리에서는 가득 찬 상태가 쓰기 포인터가 읽기 포인터보다 정확히 16 앞서 있는 상태로, 최상위 비트만 다릅니다. 이를 그레이 코드로 바꾸면 최상위 비트는 그대로 반전되고, 두 번째 비트는 최상위 비트와의 XOR로 만들어지므로 함께 반전되며, 하위 3비트는 같아집니다. 예를 들어 읽기가 00000이라면 가득 찼을 때의 쓰기는 11000입니다. 최상위 비트만 반대라는 것은 바이너리일 때의 조건이고, 5비트 모두 일치는 빈 상태(empty)의 조건입니다.

이 분야 연습하기 분야로 돌아가기

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

  1. 비동기 FIFO에서는 상대의 포인터를 동기화해서 사용하므로, 보이는 포인터 값이 2~3사이클 오래된 값이 됩니다. 이 지연이 full/empty 판정에 미치는 영향으로 올바른 것은?
  2. 쓰기 측 100 MHz, 읽기 측 80 MHz인 비동기 FIFO에서 쓰기 측은 100워드의 버스트를 매 사이클 1워드씩 쓰고, 읽기 측은 매 사이클 1워드씩 읽습니다. 버스트 사이에는 충분한 휴지 기간이 있습니다. 넘치지 않기 위해 필요한 최소 깊이는 얼마입니까(동기화로 인한 지연은 무시합니다)?
  3. 쓰기 측은 200 MHz로 매 사이클 1워드씩 120워드의 버스트를 씁니다. 읽기 측은 150 MHz 클럭으로 3사이클 중 2사이클만 1워드씩 읽습니다. 넘치지 않기 위해 필요한 최소 깊이는 얼마입니까(동기화로 인한 지연은 무시합니다)?
  4. 쓰기 측 250 MHz, 읽기 측 200 MHz이며 둘 다 매 사이클 1워드씩 전송합니다. 64워드의 버스트를 받는 FIFO에 계산상 필요한 최소 깊이는 얼마입니까(동기화로 인한 지연은 무시하고, 소수점 이하는 올림합니다)?
  5. 액티브 Low 외부 리셋으로부터 '비동기로 어서트하고 동기로 디어서트하는' 내부 리셋을 만드는 리셋 동기화기의 구성으로 올바른 것은?