타이밍 분석과 CDC
비동기 FIFO에서 쓰기 포인터와 읽기 포인터를 그레이 코드로 변환한 후 상대 도메인으로 동기화하는 이유로 올바른 것은?
- A그레이 코드로 하면 비트 수가 절반이 되어 동기화기가 적게 들기 때문에
- B하나 증가할 때마다 1비트만 바뀌므로, 변화 도중에 캡처하더라도 증가 전이나 후의 올바른 값이 되기 때문에
- C그레이 코드 신호는 메타스테이블 상태가 되지 않으므로 동기화가 필요 없어지기 때문에
정답과 해설 보기
정답: B. 하나 증가할 때마다 1비트만 바뀌므로, 변화 도중에 캡처하더라도 증가 전이나 후의 올바른 값이 되기 때문에
바이너리 포인터는 예를 들어 0111에서 1000처럼 여러 비트가 동시에 바뀌므로, 각 비트를 따로 동기화하면 전혀 관계없는 값을 받는 경우가 있습니다. 그레이 코드라면 한 번 증가할 때 바뀌는 것은 1비트뿐이므로, 그 비트가 메타스테이블 상태가 되어 새 값과 이전 값 중 어느 쪽으로 정해지더라도 결과는 증가 전이나 증가 후의 값이 됩니다. 약간 오래된 값을 볼 뿐이므로 FIFO가 망가지지는 않습니다. 비트 수는 변하지 않으며, 메타스테빌리티 자체도 일어날 수 있으므로 동기화기는 필요합니다.