クロックドメインクロッシングの概要:ダブルフロッピング

この記事では、二つのクロックドメイン間でシングルビット制御信号を転送するための”ダブルフロッピング”と呼ばれるよく知られた技術について説明します。

デジタルシステムでは複数のクロック信号を使用するのが一般的です。 一般に、異なるクロックドメインのクロック信号は独立しているため、異なるクロックドメイン間でデータを転送することは困難な作業です。 この記事では,二つのクロックドメイン間でシングルビット制御信号を転送するための”ダブルフロッピング”と呼ばれるよく知られた技術について論じた。

なぜ複数の時計が必要なのですか?

一般的なデジタル設計手法では、主に設計手順とシステムタイミング解析の両方を簡素化するため、システム全体に1つのクロック信号を使用することを推奨しています。 しかし、この方法論は常に最も効率的な解決策を提供するとは限らず、システム全体に単一のクロックを持たせることさえできない場合もあります。 たとえば、20MHzで動作するFPGA設計で、100MHzと150MHzで動作するインターフェイスを使用して2つの外部デバイスと通信しているとします。 ここでは、3つの異なるクロック周波数を扱う必要があります。 インターフェイスのクロック周波数は事前に定義することができ、FPGA内で使用されるクロックに基づいて選択できない場合があります。

システムの異なる部分のクロック周波数を選択できる場合がありますが、この場合でも、システム全体を特定のクロック周波数で動作させることはお勧めできない場合があります。 たとえば、100MHzクロックを必要とするサブシステムを除いて、システム全体を20MHzで動作できると仮定します。 システム全体に1つのクロック信号を使用することにした場合、システムで利用可能な最高のクロックレートに対応するために、システムを100MHzで 明らかに、システムの大部分(20MHzで動作可能な部分)を過剰設計しただけでなく、システムの動的消費電力を不必要に増加させたため、これは合理的で ご覧のように、システムのさまざまな部分に異なるクロックレートを使用する必要がある多くの状況があります。

フリップフロップやRamなどのすべての同期素子が同じクロック信号を使用する設計のセクションをクロックドメインと呼びます。 異なるクロックドメインを持つことは有益ですが、それがそうであるように簡単ではありません。 次のセクションでは、複数クロックシステムを使用するときに直面する可能性のある問題のいくつかについて説明します。

メタスタビリティ問題

は、それぞれ50MHzと100MHzで動作するロジックaとBの二つのセクションがあると仮定します。 これを図1に示します。

図1

この簡単な例では、Bセクションには入力En_Inがあり、これはAセクションのEn_Out出力に接続されています。 この接続は、aによって特定の動作が行われた後にBでアルゴリズムを開始するアクティブ-ハイ-イネーブル信号に対応します。図1は、aでイネーブル信号を生成するレジスタとBでそれを受信するレジスタを示しています。

クロック波形が図2に示すとおりで、システムが立ち上がりエッジ-トリガされていると仮定します。 En_Out信号はaクロック-ドメインによって生成されるため、図に示すように、clk1の立ち上がりエッジの後にローからハイへの遷移が発生する可能性があ Clk1の立上がりエッジとEn_Out遷移の間の遅延は、aロジックセクションのフリップフロップのクロックからQへの遅延($ $T_{CLK-TO-Q,DFF1}$ $)に対応します。 ここで、BドメインのDFF2レジスタは、clk2の次の立ち上がりエッジでenable t=t_2.でイネーブル信号をサンプリングすることを期待しています。 サンプリングは、DFF2のタイミング要件が満たされていれば、すなわち$ $T_1+T_{clk-to-q、\;DFF1}\leq t_2-T_{setup、\;DFF2}.で正常に行われます。

図2では、条件t T_1+T_{clk-to-q、\;DFF1}\leq t_2-T_{setup、\;DFF2}satisfiedは満たされていますが、これは必ずしもそうではありません。 異なるクロックドメインのクロック信号は、一般に独立していることに注意してください。 それらの位相関係はわかりませんが、波形は図3に示すようになります。 この場合、イネーブル信号のローからハイへの遷移はclk2の立ち上がりエッジに非常に近く、条件t T_1+T_{CLK-to-Q、\;DFF1}\leq t_2-T_{setup、\;dff2}satisfiedは満たされません。

図3

セットアップ時間内にDFF2の入力データが変化したため、レジスタの動作は予測できません。 セットアップ時間違反のため、レジスタ出力電圧はロジック-ハイ、ロジック-ロー、またはロジック-ハイとロジック-ローの間の値を表す値になる可能性があ これらの3つのケースは、入力データが実際には対応するクロック-エッジでロジック-ハイになっていたときに可能です。 同様に、レジスタ-ホールド-タイムに違反した場合、すなわち、レジスタ-ホールド-タイムで定義されたアクティブ-クロック-エッジの後に時間ウィンドウ内でEn_Outが変化すると、レジスタの出力値は予測不可能になります。 レジスタの出力がロジック-ハイ電圧とロジック-ロー電圧の間の電圧で中断されると、フリップフロップは準安定状態に入ったと言います。

図3のタイミング違反から三つの可能なケースを個別に調べてみましょう:

  • 最初のケースとして、clk2の立ち上がりエッジがlogic t=t_2.でdff2の出力値がロジック-ハイになると仮定します。 この場合、エラーはなく、フリップフロップには有効なデータが含まれていますが、セットアップ時間違反がありました。 データはエラーなしで期待どおりに遷移します。
  • 2番目のケース:clk2の立ち上がりエッジがlogic t=t_2.でdff2出力がロジックlowになると仮定します。 この場合、イネーブル信号はBクロック領域で正常にサンプリングされません。 ただし、En_Outはaクロックドメインから来ており、図3に示すようにclk1の少なくとも1つの期間ハイになるため、これは問題になりません。 したがって、cl t=t_3.のclk2の次の立ち上がりエッジは、en_Out値を正しくサンプリングします。 このクロック-エッジでは、En_Outがclk2の複数の期間にわたって変更されていないため、DFF2のタイミング要件が満たされます。 この場合、En_Outを実際に遷移するよりも約一クロック周期後にサンプリングしています。 しかし、二つのクロックドメインのクロックは独立していると仮定されており、En_Out信号の到着時間については何の仮定もしていないため、これは問題ではありません。 実際、Bクロック領域の回路は、clk2周期の余分な遅延でAクロック領域の計算を終了することを実現します。
  • 次に、DFF2レジスタが準安定状態に入ると仮定します。 この場合、レジスタ出力はロジック-ハイ電圧とロジック-ロー電圧の間の電圧で中断されますが、これは一時的なものになります。 フリップフロップは最終的に準安定状態を終了し、ロジックハイまたはロジックローになります。 準安定状態を終了するのに必要な時間は、解決時間t T_R.として知られています。 これを図4に示します。 この図では、セットアップ時間違反が発生しており、フリップフロップはtime t_R.の時間間隔で準安定状態に入りました。 後$$T_r$$,のフリップフロップの出力には論理($$Q2_{meta-to-1}$$)またはロジックの低い($$Q2_{meta-to-0}$$).

図4

分解能時間は決定論的ではなく、確率分布関数

p P(T_R)=e^{\frac{-t_R}{\tau}}pとして記述されています。}}$$

ここで、tau\tau.は「減衰時定数」であり、フリップフロップの電気的特性によって決定されます。 このパラメータの典型的な値は、約一ナノ秒の割合になります。

上の式は、サンプリングクロックエッジの後にtime t_R.に等しい時間間隔で準安定状態に残る確率を与えます。 方程式の指数関数的特性のために、probability T_R.の値を増加させると確率は急速に減少します。 例えば、$$\tau=0.5$$ns$$T_r=5$$ns取得していますの確率$$\約4.5\times10^{-5}$$.

要約すると、二つのクロックドメインのクロック信号は互いに独立しているため、メタスタビリティが発生するのを防ぐことはできません。 しかし、十分に大きな分解能時間を持つフリップフロップを提供すると、高い確率で安定した状態に解決されます。 したがって、メタスタビリティ状態に入る可能性のあるフリップフロップが設計に含まれている場合は、メタスタビリティを終了するのに十分な時間をフリップフロップに与える必要があります。 次に、フリップフロップの値を下流のロジックセルに安全に伝播できます。 準安定値を使用すると、システム全体が不明な状態になる可能性があることに注意してください。 これは、最悪の場合、大電流の流れやチップバーンアウトにつながる可能性があります。 したがって、不安定なデータをシステムに供給しないようにする必要があります。

ダブルフロップ

フリップフロップに十分な時間を与えると、準安定状態に残る可能性が大幅に減少することがわかりました。 これを使用して、システム内で準安定データが伝播しないようにする方法を見てみましょう。 図5のブロック図を考えてみましょう。 これは、En_In信号を受信して処理する図1のBクロックドメインの典型的なパスを示しています。

図5

この回路を動作させるために使用できる最小クロック周期は

$ $t_{clk,\;min}=t_{clk-to-q}+T_{comb}になります, \; max}+T_{設定}$$

が$$T_{clk-to-Q}$$と$$T_{ッ}$$いての最小最大単位clock-to-Qをセットアップ時間のフリップフロップや$$T_{くし、\;max}$と$を最大限に遅れることの組み合わせ回路”Comb.”、展示。 この式は、DFF2の出力データが安定であると仮定することによって得られます。 そうでない場合は、次の式のように分解能時間を考慮する必要があります。

$ $t_{clk、\;min}=t_{clk-to-q}+T_R+T_{comb}, \; max}+T_{セットアップ}$$

解決時間の値は、準安定状態から出る確率を決定します。 Clk2の周期がt T_{CLK2}.であると仮定します。 次に、利用可能な解像度時間の値は

t T_R=T_{clk2}-\big(T_{clk-to-q}+T_{comb,\;max}+T_{setup}\big)$$

準安定状態に残る確率を減らすために、t T_R.を増やす必要があります。 与えられたクロック周期t T_{clk2}.では、唯一の設計オプションはパラメータt t_{Comb、\;max}.を最小化することになります。 したがって、我々はより良い”櫛を置くと思います。 図6に示すように、DFF3フリップフロップの後の”ブロック。 このようにして、d T_{comb、\;max}dは、dff2とDFF3の間のパスで理論的にはゼロになります。 したがって、可能な限り最大の解像度時間があります。

図6

この手法はダブルフロッピングと呼ばれ、上記のイネーブル信号のような制御信号を二つのクロックドメイン間で転送するときに広く使用され 余分なレジスタは、Bクロック-ドメインによって捕捉されたイネーブル信号に、あるクロック周期の別の遅延を導入することに注意してくださ ただし、この遅延は、システム内の準安定状態を回避することの利点に値します。

この記事では、低速クロックドメインから高速クロックドメインにイネーブル信号を渡すことについて説明しました。 Fastからslowクロックドメインへの制御信号の渡し、ハンドシェイク技術、クロックドメイン間のFIFOベースのデータ転送など、他のいくつかの技術に精通する必 詳細については、”VHDLを使用したRTLハードウェア設計:効率、移植性、スケーラビリティのためのコーディング”の第16章と”高度なFPGA設計”の第6章を参照してくださ: アーキテクチャ、実装、および最適化。

概要

  • システムの異なる部分に異なるクロックレートを使用する必要がある多くの状況があります。
  • 異なるクロックドメインのクロック信号は一般に独立しているため、異なるクロックドメイン間でデータを転送することは困難な作業になる可能性があります。
  • セットアップ時間違反またはホールド時間違反が発生すると、レジスタの出力値は予測できません。 これは、論理high、論理low、または論理highと論理low電圧の間のさらに悪い値を表す値を保持することができます。
  • 準安定状態を終了するのに必要な時間は、解決時間t t_R.として知られています。
  • メタスタビリティ状態に入る可能性のあるフリップフロップが設計に含まれている場合、メタスタビリティを終了するのに十分な時間をフリップフロップに与える必要があります。
  • “ダブルフロッピング”技術は、二つのクロックドメイン間でシングルビット制御信号を転送するために広く使用されています。

私の記事の完全なリストを見るには、このページをご覧ください。

コメントを残す

メールアドレスが公開されることはありません。