タイミング解析とCDC
4ビットのデータの各ビットに、それぞれ2段の同期化回路を付けて別のクロックドメインに渡した。データが 0111 から 1000 に変わるときに起こりうる問題として正しいものはどれか。
- Aビットごとに取り込まれるサイクルがずれ、1111 や 0000 のような途中の値を受け取ることがある
- B同期化回路を通すと、すべてのビットが同じサイクルでそろうので問題は起きない
- C4ビットすべてがメタステーブルになり、そのまま0にも1にも戻らなくなる
答えと解説を見る
正解:A. ビットごとに取り込まれるサイクルがずれ、1111 や 0000 のような途中の値を受け取ることがある
2段同期化回路は1ビットごとに、変化を取り込むのが今回のエッジか次のエッジかが確定しません。0111 から 1000 への変化では4ビットすべてが変わるので、一部のビットだけが新しい値になった 1111 や 0000、0100 などを1サイクル受け取ることがあります。受け側がその値を使うと誤動作します。メタステーブルは時間がたてば0か1に収まります。カウンタの値ならグレイコードに変換して1ビットだけが変わるようにし、任意のデータならハンドシェイクや非同期FIFOを使います。