タイミング解析とCDC

非同期FIFOで、書き込みポインタと読み出しポインタをグレイコードに変換してから相手のドメインに同期化する理由として正しいものはどれか。

  1. Aグレイコードにするとビット数が半分になり、同期化回路が少なくて済むから
  2. B1つ進むごとに1ビットだけが変わるので、変化の途中で取り込んでも、進む前か後の正しい値になるから
  3. Cグレイコードの信号はメタステーブルにならないので、同期化が不要になるから
答えと解説を見る

正解:B. 1つ進むごとに1ビットだけが変わるので、変化の途中で取り込んでも、進む前か後の正しい値になるから

バイナリのポインタは、例えば 0111 から 1000 のように複数のビットが同時に変わるので、各ビットを別々に同期化すると、まったく関係のない値を受け取ることがあります。グレイコードなら1回の増加で変わるのは1ビットだけなので、そのビットがメタステーブルになって新旧どちらに決まっても、結果は進む前か進んだ後の値になります。少し古い値を見るだけなので、FIFOが壊れることはありません。ビット数は変わらず、メタステーブル自体も起こりうるので同期化回路は必要です。

非同期FIFOの構成 書き込み側(wclk) 読み出し側(rclk) デュアルポートRAM 2つのクロックで読み書き 書き込みデータ 書き込みポインタ グレイコード化 読み出しデータ 読み出しポインタ グレイコード化 2段同期化 emptyの判定 2段同期化 fullの判定 グレイコードのポインタ グレイコードなら1つ進むときに変わるのは1ビットだけ
非同期FIFOの構成 · 図解集で見る
この分野を解く 分野ページへ

タイミング解析とCDCの参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

タイミング解析とCDCのほかの問題

  1. 4ビットのバイナリ 0110(10進数の6)をグレイコードに変換したものはどれか。
  2. 深さ16語の非同期FIFOで、書き込みポインタと読み出しポインタをアドレスより1ビット多い5ビットにする理由として正しいものはどれか。
  3. 5ビットのグレイコードのポインタを使う深さ16語の非同期FIFOで、書き込み側で満杯(full)を判定する条件として正しいものはどれか。
  4. 非同期FIFOでは相手のポインタを同期化して使うので、見えるポインタの値が2〜3サイクル古くなる。この遅れがfull/emptyの判定に与える影響として正しいものはどれか。
  5. 書き込み側 100 MHz、読み出し側 80 MHz の非同期FIFOで、書き込み側は100語のバーストを毎サイクル1語ずつ書き込み、読み出し側は毎サイクル1語ずつ読み出す。バーストの間には十分な休みがある。あふれないために必要な最小の深さはいくらか(同期化による遅れは無視する)。