For Good FPGA Design

メタステーブルとセットアップ時間・ホールド時間

今回は、FPGAのフリップフロップ(Flip Flop: FF)で発生する、メタステーブル(metastable)について解説します。また、これに関連して、セットアップ時間(setup time)とホールド時間(hold time)について解説します。FPGAを安定して動作させるために非常に重要です。

目次

結論

  • クロックのエッジ付近でフリップフロップへの入力データが変化するとメタステーブルが発生
  • メタステーブルはビット化けの原因になる

Dフリップフロップの構造と動作

まずは、FPGAに組み込まれているDフリップフロップ(D-FF)の構造を図1に示します。

トランスファゲートはCLKの状態によってONまたはOFFになるスイッチです。ループ回路が前段、後段と2段になった構成をしています。

図1 Dフリップフロップの構造

次に、Dフリップフロップの動作を図2に示します。

CLK = 0のときは、前段に入力Dが入り、後段では前サイクルの値をループし保持します。このとき、前段と後段の間のトランスファゲートがOFFなので、入力Dは後段には伝わりません。

CLK = 1になったとき、入力Dが取り込まれて後段に伝わるとともに、前段でループし保持します。その後、CLK = 1の状態では入力直後のトランスファゲートがOFFとなるので、入力を変化させても伝わりません。

以上のようにして、クロックの立ち上がりエッジ(CLK = 0 → 1の変化時)に入力Dを取り込み、次のクロックの立ち上がりまで保持するという動作を実現します。

図2(a) CLK = 0 のとき
図2(b) CLK = 1のとき

メタステーブル

CLK = 0 → 1のとき、信号が前段のループを1周していないと、信号が0と1の間を揺れる中間電位状態になってしまいます(図3)。これがメタステーブルです。この状況を防ぐため、クロックエッジよりもある程度前に入力Dを固定し、変化させてはいけない時間があります。これがセットアップ時間です。

また、CLK = 1にしたとき、入力のトランスファゲートがOFFになる直前に入力Dが変化すると、その値を取り込んでしまいメタステーブルが発生します(図4)。この状況を防ぐため、クロックエッジからある程度後まで入力Dを固定しておく必要があります。この時間がホールド時間です。

セットアップ時間、ホールド時間とメタステーブルの波形を図5に示します。メタステーブルからデータが0または1に確定するのは時間がかかります。通常、クロックエッジからQ出力までの伝搬遅延の規格値をオーバーします(安定までにとっても時間がかかるということ)。これにより、データを取り損なうことがあり、ビット化けが発生します。

図5の例では、図中のクロックエッジの次のサイクルで1を取りたいわけですが、次のサイクルまでメタステーブル状態が続くため、1を取り損なうことになります。

図3 前段のループを1周できず(セットアップ時間)
図4 ゲートOFFの瞬間に次のデータが入る(ホールド時間)
図5 セットアップ時間、ホールド時間、メタステーブル

FPGAの設計では、メタステーブルが発生しないように、またはメタステーブルが発生しても問題ないようにする必要があります。どんなときににメタステーブルが発生するのかは、別途解説します。

関連記事

まとめ

  • クロックのエッジ付近でフリップフロップへの入力データが変化するとメタステーブルが発生
  • メタステーブルはビット化けの原因になる
  • セットアップ時間、ホールド時間を守り、クロックエッジ付近で入力データが変化しないようにする
アバター画像
この記事を書いた人
ジーノ。大手電機メーカーで、基板設計の全般と、FPGAの設計に従事した経験を活かし、FPGAについて情報発信中。
RTL設計、シミュレーション、タイミング・クロージャ、FPGAまわりのハードウェア開発まで、幅広く取り扱っております。

コメントを残す

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

CAPTCHA