For Good FPGA Design

メタステーブルはどんなときに発生する?

今回は、ビット化けの原因であるメタステーブル(metastable)がどんなときに発生するのかを解説します。FPGAを安定して動作させるために重要な考え方です。

セットアップ時間・ホールド時間が守られないとメタステーブルが発生するわけですが、どんなときにセットアップ時間・ホールド時間が守られなくなるでしょうか。

目次

結論

  • 非同期のクロック間でデータを受け渡すとメタステーブルが発生する
  • 組み合わせ回路が大きいとメタステーブルが発生する

セットアップ時間・ホールド時間

FPGA内で値を保持するフリップフロップ(Flip Flop)は、入力Dを変化させてはいけない時間があります。

  • セットアップ時間:クロックのエッジよりもこの時間だけ前に入力Dを確定し、変化させてはならない
  • ホールド時間:クロックのエッジからこの時間だけ後まで入力Dを変化させてはならない

セットアップ時間、ホールド時間とメタステーブルの波形を図1に示します。メタステーブルは安定するのに時間がかかるため、同図の次のサイクルでQを使いたいフリップフロップがデータを取り損なうことがあります(1を取るはずのところが、0を取ってしまう。またはその逆)。

通常、論理合成ツールがセットアップ時間、ホールド時間が守られるように配置・配線しようとしてくれます。論理合成ツールはIntel→Quartus、Xilinx→Vivadoのことです。

しかし、それでもセットアップ時間、ホールド時間が守られなくなる状況について、代表的な2つを見ていきましょう。

図1 セットアップ時間、ホールド時間、メタステーブル

非同期クロック間のデータ受け渡し

図2のような回路を考えます。前段のフリップフロップFF1はクロックCLK1で動作し、後段のフリップフロップFF2はクロックCLK2で動作します。

CLK1とCLK2は周波数が異なります。2つのクロックの位相差が管理されているときは同期、管理されていなくて、どんな位相差になるかわからないときは非同期といいます。設計する上では、異なるクロックであれば、たとえ周波数が同じでも非同期と考えて扱うのが安全です。

図2 非同期クロック間のデータ受け渡し

図3で、非同期クロック間のデータの受け渡しを見てみましょう。FF1はCLK1の立ち上がりエッジで入力D1を取り込み、D2に出力します。したがって、FF2の入力であるD2は、CLK1の立ち上がりエッジのタイミングで変化します。

FF2はCLK2で動作しているため、CLK2の立ち上がりエッジに対してセットアップ時間、ホールド時間が規定されています。CLK1とCLK2はどんな位相差になるかわからないため、図3の中央のように、FF2のセットアップ時間、ホールド時間が守られないような位相差になる場合があります。

このとき、FF2の出力Q2はメタステーブルとなり、次のサイクルでQ2を使うフリップフロップは正しくデータを取れなくなります。

図3 非同期クロック間のデータ受け渡しの波形

なお、このような異なるクロック間のデータ受け渡しのことをクロック・ドメイン・クロッシング(Clock Domain Crossing: CDC)といいます。

FPGA内をすべて1つのクロックで動作させれば、CDCはありません。しかし、それは難しいのです。理由は、規格によって周波数が決められているためです。例えば、Ethernetなら25MHzの倍数、USBなら6MHzの倍数のクロックで動作させる場合が多いです。FPGAを使って、Ethernet-USB変換みたいなものをつくると、CDCが発生することになります。

大きい組合せ回路

図4の順序回路を考えます。FF1の出力Q1が、組合せ回路に入り、組合せ回路の出力D2がFF2に入力されます。なお、同図中の雲のような図は「何らかの組合せ回路」としてよく使われます。

図4 順序回路

組合せ回路はLUTで実装されますが、論理が複雑であったり、多ビットであったりすると、沢山のLUTを経由することになります。図5のイメージです。このような組合せ回路を大きい組合せ回路と表現します。

図5 大きい組合せ回路のイメージ

関連記事

大きい組合せ回路では、沢山のLUTを経由するため、伝搬遅延が大きくなります。すると、図6のようにセットアップ時間が満足できなくなり、メタステーブルが発生します。

図6 組合せ回路による伝搬遅延

まとめ

  • 非同期のクロック間でデータを受け渡すとメタステーブルが発生する
  • 組み合わせ回路が大きいとメタステーブルが発生する
アバター画像
この記事を書いた人
ジーノ。大手電機メーカーで、基板設計の全般と、FPGAの設計に従事した経験を活かし、FPGAについて情報発信中。
RTL設計、シミュレーション、タイミング・クロージャ、FPGAまわりのハードウェア開発まで、幅広く取り扱っております。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA