SDCによるASICタイミング制約:多重化クロックを正しく指定する方法


10

前書き

SDC形式でタイミング制約を作成する方法について、インターネットおよび一部のトレーニングクラスで複数の、時には矛盾する、または不完全な情報を見つけた正しく、EEコミュニティに、私が遭遇した一般的なクロック生成構造の助けを求めたいと思います。

ASICまたはFPGAに特定の機能を実装する方法には違いがあることを知っています(私は両方で作業しました)、タイミングを制約する一般的で正しい方法があるはずだと思います特定の構造のは、基礎となるテクノロジー-私がそれについて間違っているかどうか私に知らせてください。

異なるベンダーの実装とタイミング分析のためのさまざまなツールの間にもいくつかの違いがあります(SynopsysがSDCパーサーソースコードを提供しているにもかかわらず)。

質問

これは、次のクロックマルチプレクサー構造についてです。これは、clkgenモジュールの一部であり、これもより大きなデザインの一部です。 クロックマルチプレクサの回路図

ext_clk入力はデザインの外部で生成される(入力ピンを介して入力される)と想定されていますが、clk0およびclk4信号も生成され、clkgenモジュールによって使用されます(詳細については、関連するリップルクロックの質問を参照してください)。baseclkdiv4clk、それぞれ。

問題は、タイミングアナライザが

  1. 扱いcpu_clkのいずれかのソースクロックのいずれかとすることができる多重化クロックとして(fast_clkまたはslow_clkまたはext_clkアカウントに異なるANDとORゲートを介して遅れを取って、)
  2. 同時に、デザインの他の場所で使用されているソースクロック間のパスを切断しません。

オンチップ・クロック・マルチプレクサの最も簡単な場合は、必要とするように思えますが、単にset_clock_groupsSDC文

set_clock_groups -logically_exclusive -group {baseclk} -group {div4clk} -group {ext_clk}

...与えられた構造では、これは、(出力clk0を介してfast_clk)およびclk4(を介してslow_clk)がアサートされた場合のみにcpu_clk設定されているext_clk場合でも、デザインで引き続き使用されるという事実によって複雑になりますuse_ext

ここで説明するように、上記のset_clock_groupsコマンドを実行すると、次のようになります。

このコマンドは、すべてのグループの各クロックから他のすべてのグループの各クロックへ、またはその逆にset_false_pathを呼び出すのと同じです。

...他のクロックが他の場所でまだ使用されているため、これは正しくありません。

追加情報

use_clk0use_clk4そしてuse_ext入力はそれらの一方のみが任意の時点で高くなるように生成されます。これは、すべてのuse_*入力が低い場合にすべてのクロックを停止するために使用できますが、この質問の焦点は、この構造のクロック多重化プロパティにあります。

回路図のX2インスタンス(単純なバッファー)は、自動配置配線ツールが通常どこでも(ピンand_cpu_1/zor_cpu1/in2ピンの間など)バッファーを自由に配置できるという問題を強調するための単なるプレースホルダーです。理想的には、タイミング制約はその影響を受けないはずです。


非常に具体的で非常に狭い質問に絞り込んで、これをより簡潔にしてみてください。重要な情報とは何か、そしてあなたがここで本当に何をしているのかを理解するのは難しいです。
travisbartley 2013

@ trav1s:質問を再構成しました。説明が必要な場合はお知らせください。
FriendFX 2013

回答:


3

and_ *ネットで1クロックによる分周を定義し、それらを物理的に排他的であると宣言します。Cadence RTLコンパイラは、cpu_clkによってクロック供給されるレジスタの3つのタイミングパス(1つのクロックごとに1つのパス)を生成することにより、状況を正しく処理します。clk0、clk4、およびclk_extによって直接駆動されるレジスタには、独自のタイミングアークがあります。

create_generated_clock -source [get_ports clk0] \
-divide_by 1 -name and_clk0    [get_pins and_cpu_1/Y]

create_generated_clock -source [get_ports clk4] \
-divide_by 1 -name and_clk4    [get_pins and_cpu_2/Y]

create_generated_clock -source [get_ports clk_ext] \
-divide_by 1 -name and_clk_ext [get_pins and_cpu_ext1/Y]

set_clock_groups \
-physically_exclusive \
-group [get_clocks and_clk0] \
-group [get_clocks and_clk4] \
-group [get_clocks and_clk_ext]

あなたの提案をありがとう。残念ながら、現在これを確認することはできませんが、あなたのコンセプトはかなり有望に見えます。あなたは間のパスかどうかを確認することができcast_clkcpu_clkそしてslow_clk同時に、それぞれの入力クロックによって制約されながら、まだ(による排他的クロック・グループに、すなわちない例外)をチェックしていますか?最終的に、私はこの質問に対する信頼できる回答を探しています。
FriendFX 2017年

@FriendFX RTLコンパイラでコードをテストしたところ、パスが正しく推論されました。
Revanth Kamaraj 2017

ただお知らせするために、シングルセルクロックマルチプレクサーとソリューションに関する情報を追加しました(少なくとも一部のツールについて)。
FriendFX 2018年

1

これは未回答の古いスレッドですが...同期クロックと非同期クロックのいくつかの基本的な理解をカバーしています

  • 基本的に、同期クロックは、Muxがグリッチを発生させないように、追加された最小限の遅延で同相のままでなければなりません。
    • これは多くの場合、すべてのゲーテッドクロックソースをフルスピードクロックでリサンプリングすることによって実現されます。
  • 非同期クロックはタイミングにとって重要ではないため、遅延は許容されます。リップルカウンターなど。

ここに画像の説明を入力してください


この古い質問をご覧いただきありがとうございます。私の場合、回路に示されているように、クロックをフルスピードクロックに再同期することは(したくありません)。上記のサンプルリンクが誤ってカットすると主張しているため、依然として不足しているのは私の質問の主要部分、つまり、ソースクロックの同期性と同じ同期デザインで使用さているクロックを考慮してこの回路を制約する正しいSDCステートメントですset_clock_groupsこれらのクロック間のパス。
FriendFX 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.