クロックスキューとは何ですか。なぜマイナスになるのですか。


10

私のHDLコンパイラ(Quartus II)はタイミングレポートを生成します。その中で、ノードには「クロックスキュー」列があります。私が見つけたクロックスキューの唯一の定義は、TimeQuestのドキュメント(7-24ページを参照)にあります。

クロック間の転送でクロックの不確実性またはスキューを手動で指定するには、set_clock_uncertaintyコマンドを使用します。

それで、スキューが「不確実性」である場合、クロックスキューのいくつかが負になるのはなぜですか(例:-0.048)?正確にはクロックスキューとは何ですか?

回答:


8

ウィキペディアから:

TSkewRRjTCTCj

TSkewj=TCTCj

クロックスキューは正または負にできます。クロック信号が完全に同期している場合、これらのレジスタで観測されるクロックスキューはゼロです。

したがって、1つのレジスタでのクロックスキューの量は、別のレジスタと相対的です。相対的であるため、ポジティブまたはネガティブにできます。

いくつかのイラスト:

正/負のスキュー 先行/遅れスキュー

あなたが提供したTimeQuestドキュメントで定義されているようなイントラクロック転送を例にとります:

レジスター間転送がデバイスのコアで行われ、ソースクロックとデスティネーションクロックが同じPLL出力ピンまたはクロックポートから供給されると、クロック内転送が発生します。

したがって、デスティネーションレジスタがクロック生成回路に物理的に近い場合、クロックはおそらくソースレジスタに到達する前にデスティネーションレジスタに到達するため、実際には正の先行クロックスキューが発生します。デスティネーションレジスタがソースレジスタの後にクロックのエッジを受信した場合、クロックスキューは遅れているか負です。

別の言い方をすると、クロックスキューは、クロックエッジが時間内にどれだけ接近して、レジスター間転送のソースレジスターに関して時間の単位で与えられた2つの別個のレジスターに到達するかについての不確実性です。

その定義を拡張して、クロック転送とセットアップおよびホールドタイムを含めると、少し面倒になります。したがって、エッジまたはホールドタイムが2つのレジスタの間で「どの程度同期している」と考える方がおそらく簡単です。私たちは「同期」を「同時に発生する」と考える傾向があります。しかし、完全に同時に起こることはめったにありません。そのため、その時間に許容範囲を設ける必要があります。また、許容範囲は多くの場合、正と負(つまり、±)で表されます。


10

最新のデジタルロジックデバイスは、通常(*)「同期設計手法」で設計されています。グローバル同期エッジトリガーレジスタ転送デザインスタイル(RTL):すべてのシーケンシャル回路は、グローバルクロック信号CLKに接続されたエッジトリガーレジスタに分割されます。純粋な組み合わせ論理。

その設計スタイルにより、タイミングに関係なくデジタルロジックシステムをすばやく設計できます。それらのシステムは、内部状態が安定するのに十分な時間がクロックエッジから次のエッジまである限り、「正しく動作」します。

このデザインスタイルでは、「このシステムの最大クロックレートはいくつですか」を理解することを除いて、クロックスキューやその他のタイミング関連の問題は関係ありません。

正確にはクロックスキューとは何ですか?

例えば:

...
     R1 - register 1              R3
     +-+                  
   ->| |------>( combinational  )  +-+
...->| |------>(         logic  )->| |--...
   ->|^|------>(                )->|^|
     +-+       (                )  +-+
      |   +--->(                )   |
     CLK  | +->(                )  CLK
          | |
     R2:  | |
     +-+  | |               
...->| |->+ |
   ->|^|->--+
     +-+
      |
     CLK

実際のハードウェアでは、「CLK」信号はすべてのレジスタで正確に同時に切り替わることはありません。スキュークロック Tskewだけ上流クロック(下流クロックの相対的な遅延です)。

Tskew(ソース、宛先)= destination_time-source_time

ここで、source_timeはアップストリームソースレジスタ(この場合はR1またはR2)でのアクティブクロックエッジの時間であり、destination_timeはいくつかのダウンストリームデスティネーションレジスタ(この場合はR3)での「同じ」アクティブクロックエッジの時間です。 。

  • 負のクロックスキュー:R1のクロックのにR3のCLKが切り替わります。
  • 正のクロックスキュー:R3のCLK はR1のクロックのに切り替わります。

クロックスキューの影響は何ですか?

(おそらく、ここのタイミング図はこれをより明確にするでしょう)

物事が適切に機能するためには、最悪の場合でも、R3のセットアップ時間またはホールド時間中にR3の入力が変化してはなりません。さらに悪いことに、物事が適切に機能するためには、次のように物事を設計する必要があります。

Tskew(R1、R3)<Tco-Th。

Tclk_min = Tco + Tcalc + Tsu-Tskew(R1、R3)。

どこ:

  • Tcalcは、システム内の任意の場所にある組み合わせロジックのブロックの最悪の場合の最大整定時間です。(クリティカルパス上にある組み合わせロジックのブロックを再設計したり、部品を上流または下流に押し込んだり、パイプライン処理の別の段階を挿入したりできるため、新しい設計のTcalcが小さくなり、クロックレートを上げることができます) 。
  • Tclk_minは、1つのアクティブクロックエッジから次のアクティブクロックエッジまでの最小時間です。上式から計算します。
  • 津はレジスタのセットアップ時間です。レジスタの製造元は、この要件を常に満たすのに十分遅いクロックを使用することを期待しています。
  • Thはレジスタホールドタイムです。レジスタの製造元は、常にこの要件を満たすのに十分なクロックスキューを制御することを期待しています。
  • Tcoは、クロックから出力への遅延(伝播時間)です。各アクティブクロックエッジの後、R1とR2は、新しい値に切り替える前に、短時間Tcoの間、古い値を組み合わせロジックに駆動し続けます。これはハードウェアによって設定され、製造元によって保証されますが、TsとTh、および製造元が通常の操作に対して指定するその他の要件を満たしている場合に限ります。

正のスキューが多すぎると、軽減できない災害になります。正のスキューが多すぎると(一部のデータの組み合わせにより)、「スニークパス」が発生し、R3がクロックN + 1で「正しいデータ」をラッチするのではなく(クロックNで以前にR1およびR2にラッチされたデータの確定関数) 、クロックN + 1でR1とR2にラッチされた新しいデータはリークし、組み合わせロジックを混乱させ、誤ったデータが「同じ」クロックエッジN + 1でR3にラッチされる可能性があります。

負のスキューは、クロックレートを遅くすることで「修正」できます。R1とR2がクロックエッジNで新しいデータをラッチし、その後にR3をラッチした後、R3の入力に安定する時間を与えるために、システムをより遅いクロックレートで強制的に実行するという意味で「悪い」だけです。 「次の」クロックエッジN + 1で結果をラッチします。

多くのシステムは、スキューをゼロにしようとするクロック分配ネットワークを使用しています。直感に反して、クロックパス(クロックジェネレーターから各レジスターのCLK入力までのパス)に沿って遅延を注意深く追加することにより、クロックエッジの波面が1つのレジスターのCLK入力から物理的に移動する見かけの速度を上げることが可能です。次のレジスタのCLK入力を光速よりも速くします。

アルテラのドキュメントには言及します

「クロックパスで組み合わせロジックを使用することは、クロックスキューの原因となるため避けてください。」

これは、グローバルCLK信号以外の何かが何らかのレジスタのローカルCLK入力を駆動するような方法でFPGAにコンパイルされるHDLを書き込む人が多いことを示しています。(これは、特定の条件が満たされた場合にのみ新しい値がレジスターにロードされる「クロックゲーティング」ロジック、またはNクロックのうち1つだけを通過させる「クロックディバイダー」ロジックなどです)。そのローカルCLKは通常、なんらかの方法でグローバルCLKから派生します-グローバルCLKは刻み、ローカルCLKは変化しないか、または(信号がその「何か他のもの」を介して伝播するためのグローバルCLK後の短い遅延)ローカルCLKは一度変更されます。

その「他の何か」がダウンストリームレジスタ(R3)のCLKを駆動すると、スキューがより正になります。その「何か他のもの」がアップストリームレジスタ(R1またはR2)のCLKを駆動すると、スキューがより負になります。時々、アップストリームレジスタのCLKを駆動するものとダウンストリームレジスタのCLKを駆動するものは、実質的に同じ遅延を持ち、それらの間のスキューを実質的にゼロにします。

一部のASIC内のクロック分配ネットワークは、一部のレジスタで少量の正のクロックスキューを使用して意図的に設計されています。これにより、組み合わせロジックのアップストリームが安定するまでの時間がわずかに増えるため、システム全体をより高速なクロックレートで実行できます。これは「クロックスキュー最適化」または「クロックスキュースケジューリング」と呼ばれ、「リタイミング」に関連しています。

私はまだset_clock_uncertaintyコマンドに戸惑っています-なぜ手動でスキューを「手動で指定」したいのですか?

(*)1つの例外: 非同期システム


遅延を追加してクロックスキューを最小限に抑えることの背後にある考え方には、クロックをほぼ1サイクルだけ遅延させることが含まれる場合があると思います。クロックが稼働したら、フリップフロップAがクロックエッジ1を正確に見るのと同時にフリップフロップBがクロックエッジ2を見るように設定できます。外部から見ると、これらは異なるエッジですが、回路はエッジが完全に揃っていれば問題ありません。
ajs410

1

クロックスキューとは、距離、静電容量などが原因で回路のさまざまな時点にクロックが到達し、誤動作する可能性があることです。時計が基準に到達する前に、クロックがそのポイントに到達したときがマイナスになると思います

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.