タイミング解析とCDC
非同期FIFOで、書き込みポインタと読み出しポインタをグレイコードに変換してから相手のドメインに同期化する理由として正しいものはどれか。
- Aグレイコードにするとビット数が半分になり、同期化回路が少なくて済むから
- B1つ進むごとに1ビットだけが変わるので、変化の途中で取り込んでも、進む前か後の正しい値になるから
- Cグレイコードの信号はメタステーブルにならないので、同期化が不要になるから
答えと解説を見る
正解:B. 1つ進むごとに1ビットだけが変わるので、変化の途中で取り込んでも、進む前か後の正しい値になるから
バイナリのポインタは、例えば 0111 から 1000 のように複数のビットが同時に変わるので、各ビットを別々に同期化すると、まったく関係のない値を受け取ることがあります。グレイコードなら1回の増加で変わるのは1ビットだけなので、そのビットがメタステーブルになって新旧どちらに決まっても、結果は進む前か進んだ後の値になります。少し古い値を見るだけなので、FIFOが壊れることはありません。ビット数は変わらず、メタステーブル自体も起こりうるので同期化回路は必要です。