joy

joy的数字花园

一直游到海水变蓝
github

静的タイミング解析の基本

前言#

このノートでは、静的タイミング分析に関する基本的な概念のみを紹介します。以下の内容は含まれていません:

  • 非同期、すなわち削除、回復
  • タイミング概念、すなわち偽経路、多サイクル経路など
  • 高度なタイミングドメインの知識
    • POCV、MCMM など

STA とは何か#

クロック周波数が速くなるほど、チップ内の論理ユニットが単位時間内に完了できる操作が増えるため、周波数とチップの性能は正の相関関係にあります。チップ設計では PPA の間でトレードオフが必要ですが、チップが正常に動作する周波数の限界はどのように知ることができるのでしょうか?これが STA(静的タイミング分析)の概念を導入する理由です。

image.png
STA は、設計が与えられたクロック周波数で安全に動作できるかどうか、かつタイミング違反がないかを検証するために使用されます。STA には以下の特徴があります:

  • 利点
    • 入力励起シミュレーションが不要
    • 完全なタイミングチェック
  • 欠点
    • 非同期タイミングを処理できない

STA の適用シーン#

image.png

STA は PD の複数の段階で適用でき、それぞれ異なる特徴を持っています。例えば:

  1. 合成:論理設計段階では、レイアウトに関連する物理情報がないため、相互接続線は理想的な状態であると仮定できます。この段階では、最悪の経路を引き起こす論理を確認することにより、より注目されます。この段階で使用される別の技術は、ワイヤ負荷モデル(wireload model)を使用して相互接続線の長さを推定することです。ワイヤ負荷モデルは論理ユニットのファンアウトに基づいて推定 RC 値を提供します
  2. Pre-CTS:物理設計の初めに、クロックツリーは理想的であると見なされます。つまり、ゼロ遅延を持っています。CTS 後、クロックは実際の伝播遅延を持ちます。
  3. Pre-Route:実際の配線前に、STA は遅延の金属線寄生 RC を推定値として計算します

image.png

セル#

セルは標準セル、IO バッファ、または USB コアのような複雑な IP である可能性があります。タイミング情報の他に、ライブラリセルの記述には、セル面積や機能などの他の属性も含まれています。これらの属性はタイミングとは無関係ですが、RTL 合成(synthesis)プロセスで使用されます。

ピンキャパシタンス#

セルの各入力および出力は、ピン(pin)でキャパシタンスを指定できます。ほとんどの場合、セルの入力ピンにのみキャパシタンスを指定し、出力ピンには指定しません。つまり、ほとんどのセルライブラリの出力ピンキャパシタンスは 0 です。

image.png

上記の例は、入力 INP1 ピンキャパシタンス値の一般的な仕様を示しています。最も基本的な形式では、ピンキャパシタンスは単一の値(上記の例では 0.5 単位)として指定されます。キャパシタンスの単位は通常ピコファラッド(pF)であり、一般的にはライブラリファイルの冒頭で指定されます。セル記述では、rise_capacitance(0.5 単位)およびfall_capacitance(0.45 単位)に対してそれぞれ値を指定することもでき、これらの値は INP1 ピンでのレベルの上昇および下降の変化時の値を指します。また、rise_capacitanceおよびfall_capacitanceの値を範囲として指定し、記述内で下限値と上限値を指定することもできます。

ドライブ強度#

入力ピンキャパシタンスは liberty で定義され、出力ピンキャパシタンスはそのセルが駆動するすべての下位セルによって決まります。CMOS セルがレベル状態を切り替えると、切り替えの速度は出力ピン上のキャパシタンスが充放電される速度に依存します

image.png

一般的に、セルのドライブ強度は駆動できる最大キャパシタンス負荷を決定し、最大キャパシタンス負荷はファンアウトの最大数を決定します。つまり、いくつの他のセルを駆動できるかです。高い出力ドライブは低い出力プルアップ / プルダウン抵抗に対応し、これによりセルは出力ピン上で大きな負荷を充電および放電できます

  • ドライブ強度が大きいほど、セル面積も大きくなり、max_capも大きくなります。
  • ドライブ強度が大きいほど、対応する出力抵抗が小さくなり、遅延も小さくなります。

image.png|500image.png|500

  • 標準セルライブラリに小さなドライブ強度の標準論理セルしかない場合、タイミングにどのような影響がありますか?
    • ライブラリ全体が小ドライブセルのみで構成されている場合、最初に考えられるのは各セルの駆動能力が弱いこと、出力抵抗が大きくなることです。
    • もし反転器のドライブ強度が小さい場合、駆動できる最大負荷キャパシタンスも小さくなります。設計内の特定のノードが大きなキャパシタンスを駆動する必要がある場合、長い線や高ファンアウトネットなど、ドライブ強度の小さいセルでは要求を満たせない可能性があります。これにより、セットアップ時間や保持時間の違反が発生します。

伝播遅延#

セルの伝播遅延(propagation delay)は、レベル切り替え波形上の特定の測定ポイントによって定義されます。これらの閾値の単位は Vdd または電源のパーセンテージであり、ほとんどの標準セルライブラリでは、通常50% の閾値が遅延計算に使用されます。

image.png

ここでの伝播遅延は、出力信号の上昇 / 下降に応じて 2 種類に分かれます(異なる):

  • output rise delay: 入力信号が下降沿閾値ポイントに達してから、出力信号が上昇沿閾値ポイントに達するまでの遅延時間
  • output fall delay:output rise delay の逆

スルー#

スルー(slew rate)の定義は電圧変換速度です。STA では、通常、レベル変換の速さに基づいて上昇波形または下降波形を測定します。スルー(slew)は通常、変換時間(transition time)に基づいて定義され、変換時間は信号が2 つの特定レベル間で変換するのに必要な時間を指します。注意すべきは、変換時間は実際にはスルーの逆数であるため、変換時間が大きいほどスルーは低くなり、その逆もまた然りです。

一般的に、指定された閾値電圧を使用して過渡時間計算の開始点と終了点を定義します。

image.png

スルーとスルーは同じではありません。スルーは transition であり、スルーはその逆数です。

タイミングアーク#

タイミングアークは、信号がセルピン間で伝送される遅延と信号の変化を記述します。

  • AND ゲート、OR ゲート、NAND ゲート、加算器などの組み合わせ論理ユニットでは、各入力ピンから各出力ピンにタイミングアークが存在します
  • フリップフロップのような順序論理ユニットでは、クロックピンから出力ピンへのタイミングアークに加えて、** クロックピンに対するデータピンのタイミング制約(timing constraint)** も存在します。

各タイミングアークには特定の ** タイミング感度(timing sense)** があり、出力が入力の異なる変化タイプに対してどのように変化するかを示します。非単調(non-unate)タイミングアークでは、単一の入力ピンの変化方向から出力ピンのレベルがどのように変化するかを特定することはできず、他の入力ピンの状態にも依存します

image.png

タイミングモデル#

論理ユニットのタイミングモデル(timing model)は、設計内のさまざまなユニットインスタンス(instance)に正確なタイミング情報を提供することを目的としています。

  • 各タイミングアークにはタイミングモデルがあります。
  • タイミングモデルは詳細な回路シミュレーションから得られます。

インバータの場合、2 種類の遅延が存在します:出力上昇沿遅延 $T_{r}$ と出力下降沿遅延 $T_{f}$

image.png

インバータの遅延と出力遷移は主に以下に依存します:

  • 出力負荷、すなわち反転器出力ピン上のキャパシタンス負荷
  • 入力信号の遷移(transition)時間
  • トランジスタレイアウト設計:無視可能

論理ユニットの信号入力は、水槽に水流が流れ込むようなもので、水流が最初に青い水車を回転させ(入力変化時間に似ています)、その後水槽(出力キャパシタンス)が満たされてから、赤い水車の運転を促進します(次の論理ユニット)。

image.png|625

遅延値は負荷キャパシタンスと直接関係しています:負荷キャパシタンスが大きいほど、遅延も大きくなります。ほとんどの場合、遅延は入力信号の遷移時間の増加に伴って増加します。PS:絶対的ではありません。

NLDM#

論理ユニットのタイミングモデルは、入力スルーと出力負荷をパラメータとする関数として単純に理解できますが、単純な線形タイミングモデルはサブミクロン技術に適用すると正確ではありません。したがって、現在ほとんどのユニットライブラリは、より複雑な非線形遅延モデル(non-linear delay model)を使用しています。

ほとんどのユニットライブラリには、ユニットのさまざまなタイミングアークに遅延を指定し、タイミングチェックを行うためのテーブルモデル(table model)が含まれています。これらのテーブルモデルは NLDM(Non-Linear Delay Model)と呼ばれ、遅延、出力スルー計算、または他のタイミングチェックに使用されます。テーブルモデルでは、ユニット入力ピンでの入力遷移時間と出力ピンでの出力負荷キャパシタンスのさまざまな組み合わせに対するユニットの遅延が提供されます。

image.png

遅延テーブルによると、入力下降遷移時間が 0.3ns で出力負荷が 0.16pf のとき、反転器の上昇遅延は 0.1018ns です。入力の下降沿の変化が反転器出力の上昇沿の変化を引き起こすため、入力ピンで下降沿の変化が発生したときには cell_rise 遅延テーブルを参照する必要があります。注意してください、テーブルモデルも 3 次元である可能性があります。例えば、補完出力 Q と QN を持つフリップフロップのように。

NLDM モデルは遅延計算だけでなく、論理ユニット出力ピンの遷移時間を計算するためにも使用できます。この時間も入力遷移時間と出力負荷キャパシタンスによって表されます。

したがって、NLDM モデルを使用して計算できます:

  1. 上昇遅延
  2. 下降遅延
  3. 上昇スルー
  4. 下降スルー

さらに、テーブル内に対応するインデックスがない場合は、補間計算を使用して結果を得ることができます。

減衰#

スキップ

スルー値(slew)は、ライブラリで指定された測定閾値ポイントに基づいており、ほとんどの前世代のライブラリ(0.25um またはそれ以前のライブラリ)は、10% と 90%(波形の線形部分に対応)をスルー(または過渡時間)の測定閾値ポイントとして使用しています。

技術の進歩に伴い、実際の波形で最も線形な部分は通常 30% から 70% の間にあります。したがって、ほとんどの新世代のタイミングライブラリは、スルー測定閾値ポイントを Vdd の 30% と 70% として指定しています。しかし、以前に測定された過渡時間は 10% から 90% の間にあるため、ライブラリを充填する際には、通常、測定された 30% から 70% の過渡時間を倍にします。これはスルー減衰係数(slew derate factor)によって指定され、通常は 0.5 として指定されます。スルー測定閾値ポイントが 30% と 70% で、スルー減衰係数が 0.5 の場合、10% と 90% の測定閾値ポイントに相当します。

組み合わせ論理ユニット#

2 入力 AND ゲートの場合:合計 4 種類の遅延と 4 種類の出力遷移があります。

  • 上昇下降 * 2 つの入力ピン = 4
  • FPGA では、各論理ユニットのすべての遅延情報は基本的に固定されているため、各論理ユニットはそれぞれ固定の遅延(例えば LUT は 0.1ns、DSP は 1.3ns など)をフィッティングします。

image.png

一般的な組み合わせ論理ブロック#

以下の 3 入力 2 出力の一般的な組み合わせ論理ブロックを考えます:

image.png
このような組み合わせ論理ブロックは複数のタイミングアークを持つことができます。通常、ブロックの各入力から各出力にタイミングアークがあります

タイミング論理ユニット#

タイミング論理ユニットのタイミングアークは以下の通りです:

image.png|500

ピン D、SI、SE の同期入力信号には以下のタイミングアークがあります(両方の上昇と下降):

  • セットアップ時間チェックタイミングアーク
  • ホールド時間チェックタイミングアーク

ピン Q の同期出力信号には以下のタイミングアークがあります:

  • CK から Q または QN への伝播遅延アーク

ピン CDN の非同期入力信号には以下のタイミングアークがあります:

  • 削除時間チェックタイミングアーク
  • 回復時間チェックタイミングアーク

さらに、クロックピンと非同期ピンには以下があります:

  • パルス幅タイミングチェック

セットアップとホールド#

セットアップ時間とホールド時間の同期タイミングチェックは、データがタイミングユニットを通じて正しく伝播できることを保証するために使用されます。これらのタイミングチェックは、入力データがクロックの有効エッジで確定した論理状態であるかどうかを検証し、有効エッジで正しいデータがロックされることを確認します

2 次元テーブルモデルは、制約ピン constrained_pin (D) と関連ピン related_pin (CK) での遷移時間に基づいて決定されます。

image.png

セットアップとホールドの詳細は後で紹介します。

非同期タイミングチェック#

スキップ

状態関連のタイミングモデル#

スキップ

入力と出力の間のタイミングアークは、モジュール内の他のピンの論理状態に依存します。

ブラックボックスのインターフェースタイミングモデル#

スキップ

高度なタイミングモデル#

スキップ

非線形遅延モデル(NLDM)のようなタイミングモデルは、出力負荷キャパシタンスと入力遷移時間に基づいてタイミングアークを通過する遅延を表します。実際には、ユニット出力の負荷はキャパシタンスだけでなく、** 相互接続抵抗(interconnect resistance)** も含むべきです。

NLDM メソッドは出力負荷を純粋なキャパシタンスと仮定するため、相互接続抵抗は問題になります。相互接続抵抗がゼロでない場合でも、相互接続抵抗の影響が小さい場合は、これらの NLDM モデルが使用されます。相互接続抵抗が存在する場合、遅延の計算方法は、ユニットの出力端で等価の有効キャパシタンス(effective capacitance)を取得することによって NLDM モデルを改善します。遅延計算ツールで使用される「有効」キャパシタンス法によって得られた等価キャパシタンスは、ユニット出力遅延が RC 相互接続を持つユニット出力遅延と同じであることを保証します

NLDM は相互接続抵抗による誤差をうまく処理できないため、CCS(Composite Current Source)などのより高度なタイミングモデルが提案されました。

クロック#

スキュー#

スキュー(skew)は、2 つまたは複数の信号(データまたはクロック)間のタイミングの違いを指します。例えば、クロックツリー(clock tree)に 500 の終点があり、50ps のスキューがある場合、これは最長のクロックパスと最短のクロックパス間の遅延差が 50ps であることを意味します

クロックツリーの起点は通常、クロックを定義するノードであり、クロックツリーの終点は通常、同期要素(例えばフリップフロップ)のクロックピンです。クロック遅延(clock latency: Source + Insertion)は、クロックソースから終点までにかかる総時間を指し、クロックスキュー(clock skew)は、異なるクロックツリー終点に到達する時間の違いを指します。

image.png

理想的なクロックツリーは、クロックソースが無限の駆動力を持ち、クロックが無遅延で無限の終点を駆動できると仮定されます。さらに、クロックツリー内に存在する任意の論理ユニットは ** ゼロ遅延(zero delay)** を持つと仮定されます。論理設計の初期段階では、STA は通常、理想的なクロックツリーを使用して実行されるため、分析の重点はデータパス(data path)に置かれます。set_clock_latencyを使用して指定されたクロックツリー遅延を表示できます。

不確実性#

set_clock_uncertaintyコマンドは、クロックエッジの出現にウィンドウを指定します。クロックエッジのタイミングの不確実性は、クロック周期のジッター(jitter)やタイミング検証に必要な追加の余裕(slack)など、複数の要因を考慮します。実際には理想的なクロックは存在せず、すべてのクロックには一定のジッター量があります。指定されたクロック不確実性には、クロック周期のジッターを含める必要があります。

クロックツリーが実装(implement)される前に、クロック不確実性は予想されるクロックスキューも含める必要があります。一方、ホールド時間チェックではクロックジッターを含める必要がないため、通常ホールド時間チェックには小さなクロック不確実性を指定します

実際のクロック信号#

実際のクロック信号には上昇エッジと下降エッジが含まれます:

image.png
2 種類のクロック信号を組み合わせて理想的な場合の眼図を得ると、ここでは遷移のみの理想的なクロックになります:

image.png

しかし、実際にはクロック信号には異なる到達時間(jitter)が存在し、この場合の眼図は次のようになります:

image.png

さらに、クロックは電源供給の変動により電圧降下やグラウンドバウンスを引き起こすことがあります。

image.png

最終的に、実際のクロック信号は次のようになります:

image.png

レベルの変動に対して、ノイズマージンを定義し、一定の歪みを許可します:

image.png
クロック信号にジッターのない領域は、データが信頼できるウィンドウと呼ばれます:

image.png

クロック信号にジッターが存在する領域はジッターと呼ばれます:ジッターはタイミングレポートで考慮する必要があります。これを不確実性と呼ばれるもう 1 つのパラメータを使用してモデル化します。

image.png
例:不確実性 = 90ps = 0.09ns

image.png

クロックドメイン#

1 つのクロックは通常、多くのフリップフロップを駆動します。同じクロックによって駆動されるフリップフロップのセットをそのクロックドメイン(clock domain)と呼びます。下の図には 2 つのクロックドメインがあります:

image.png

1 つの問題に注意する必要があります:2 つのクロックドメインは関連しているのか、それとも独立しているのか?答えは、あるクロックドメインから始まり、別のクロックドメインで終了するデータパスが存在するかどうかに依存します。そのようなパスが存在しない場合、これらの 2 つのクロックドメインは互いに独立していると確信できます。これは、あるクロックドメインから始まり、別のクロックドメインで終了するタイミングパスが存在しないことを意味します。

クロックドメインを越えるデータパスが存在する場合(下の図のように)、これらのパスが実際の(real)パスであるかどうかを確認する必要があります。例えば、2 倍の周波数のクロックによって駆動されるフリップフロップがデータを発信し、1 倍の周波数のクロックによって駆動されるフリップフロップがデータをキャッチする場合、このパスは実際のパスです。

偽経路(false path)の 1 つの例は、設計者がクロック同期器(clock synchronizer)ロジックを明示的に 2 つのクロックドメインの間に配置することです。この場合、クロックドメインから次のクロックドメインへのタイミングパスが存在するように見えますが、これは実際のタイミングパスではありません。なぜなら、データが同期器ロジックを通じて 1 クロック周期内に伝播されることが制約されていないからです。このようなパスは偽経路(実際ではない)と呼ばれます。なぜなら、データが 1 つのクロックドメインから別のクロックドメインに正しく伝達されることを保証するのはクロック同期器だからです。

  • 偽経路はタイミング例外に属するため、スキップします。
  • 設計内には存在することが不可能なパスや、発生することが不可能なパスがあり、これらのパスは偽経路と呼ばれます。偽経路は通常、非同期回路やクロックドメインを越える場合、または回路内部のロジックが複雑で、導出後に実際には定数で変化しないことがわかる場合に発生します。

image.png

実際にクロックドメインを越える状況は双方向であることが多く、USBCLK クロックドメインから MEMCLK クロックドメイン、また MEMCLK クロックドメインから USBCLK クロックドメインへの 2 つの状況が存在し、これらは STA で正しく理解し処理する必要があります。

SDC#

正しい制約は STA 結果の分析にとって重要であり、設計環境を正確に指定することで、STA 分析は設計内のすべてのタイミング問題を特定できるようになります。STA の準備作業には、クロックの設定、IO タイミング特性の指定、偽経路や多周期パスの指定が含まれます。

image.png

この設計に対して STA を実行するには、フリップフロップのクロックを指定し、設計に入るすべてのパスと設計から出るすべてのパスのタイミング制約を指定する必要があります

クロックの指定#

クロックを定義するには、以下の情報を提供する必要があります:

  1. クロックソース(Clock source):設計のポートであるか、設計内部ユニットのピン(通常はクロック生成ロジックの一部)である可能性があります。
  2. 周期(Period):クロックの周期。
  3. デューティサイクル(Duty cycle):高レベルの持続時間(正相)と低レベルの持続時間(負相)。
  4. エッジ時間(Edge times):上昇エッジと下降エッジの時刻。

image.png

クロックを作成する例:create_clock -name SYSCLK -period 20 -waveform {0 5} [get_ports SCLK];このクロックは SYSCLK と名付けられ、ポート SCLK 上で定義されます。SYSCLK の周期は 20 単位として指定され、指定されていない場合、デフォルトの時間単位はナノ秒(通常、時間単位は技術ライブラリで指定されます)。waveform の最初の引数は上昇エッジが発生する時刻を指定し、2 番目の引数は下降エッジが発生する時刻を指定します。

クロック不確実性#

set_clock_uncertainty制約を使用して、クロック周期のタイミング不確実性(uncertainty)を指定できます。この不確実性は、有効なクロック周期を減少させる可能性のあるさまざまな要因をモデル化するために使用されます。これらの要因にはジッターや、タイミング分析で考慮する必要がある他の悲観度が含まれる可能性があります。

set_clock_uncertainty -setup 0.2 [get_clocks CLK_CONFIG];注意:セットアップ時間チェックのクロック不確実性は、利用可能な有効クロック周期を減少させます。ホールド時間チェックでは、クロック不確実性は満たす必要のある追加のタイミング余裕として使用されます

image.png

クロック遅延#

クロック遅延は、次のコマンドを使用して設定できます:set_clock_latency 1.8 -rise [get_clocks MAIN_CLK]

クロック遅延には 2 種類のタイプがあります:ネット遅延(network latency)とソース遅延(source latency):フリップフロップのクロックピン上の総クロック遅延はソース遅延とネット遅延の合計です。クロックツリー合成が完了した後、クロックソースからフリップフロップのクロックピンまでの総クロック遅延はソース遅延とクロック定義点からフリップフロップへのクロックツリーの実際の遅延の合計です。

  • ネット遅延は、クロック定義点(create_clock)からフリップフロップのクロックピンまでの遅延を指します。
    • CTS 後は無視されます。
  • ソース遅延は挿入遅延(insertion delay)とも呼ばれ、クロックソースからクロック定義点までの遅延を指します。ソース遅延はチップ内またはチップ外の遅延を表す可能性があります。
    • CTS 後は保持されます。

image.png

ソース遅延とネット遅延の間の重要な違いは、設計のためにクロックツリーが構築されると、ネット遅延は無視できるようになりますset_propagated_clockコマンドが指定されていると仮定します)。

入力パスの制約#

フリップフロップ UFF0 は設計の外部にあり、設計内部のフリップフロップ UFF1 にデータを提供します。データは入力ポート INP1 を介して 2 つのフリップフロップに接続されます。

image.png

CLKA のクロック定義は、クロック周期を指定し、これはフリップフロップ UFF0 と UFF1 の間で利用可能な総時間です。外部ロジックに必要な時間は Tclk2q(データを発信するフリップフロップ UFF0 の CK から Q への遅延)と Tc1(外部組み合わせロジックを通過する遅延)の合計です。したがって、入力ピン INP1 の遅延定義は Tclk2q と Tc1 の外部遅延を指定します

以下は入力遅延の制約です(minmax をそれぞれ定義できます):

  • set Tclk2q 0.9
  • set Tc1 0.6
  • set_input_delay -clock CLKA -max [ expr Tclk2q + Tc1] [ get_ports INP1]

出力パスの制約#

出力パスの制約は入力パスの制約に似ており、コマンドset_output_delayを使用して外部遅延を指定できます:

image.png

タイミングパスグループ#

設計内のタイミングパスは、パスの集合として見ることができ、各パスには開始点と終了点があります。

image.png

タイミングパスはパスの終点に関連するクロックに基づいて異なるタイミングパスグループに分類できます。したがって、各クロックにはそれに関連するタイミングパスのグループがあります。また、すべての非クロック(非同期)パスを含むデフォルトのタイミングパスグループもあります

image.png

外部属性モデリング#

create_clockset_input_delay、およびset_output_delayは、設計内でタイミング分析を実行するために使用されるすべてのパスを制約するには十分ですが、これらだけではモジュール IO ピンでの正確なタイミングを取得するには不十分です

入力に対しては、入力ポートでスルーを指定する必要があります:

  • set_drive
  • set_driving_cell
  • set_input_transition

出力に対しては、出力ピンの負荷キャパシタンスを指定する必要があります:

  • set_load

ドライブ強度モデリング#

要するに、設計者は入力パス内の最初のユニットの遅延を決定するために入力端のスルー値を指定する必要があります。この制約がない場合、理想的な遷移値 0 と仮定され、これは明らかに現実的ではありません。

set_driveおよびset_driving_cell制約は、ドライブモジュールの入力ポートに対する外部ユニットのドライブ強度をモデリングするために使用されます。これらの制約がない場合、デフォルトではすべての入力が無限のドライブ強度を持つと仮定されます。つまり、入力ピンの遷移時間は 0 です

image.png

set_driveは DUA 入力ピン上のドライブ抵抗値を明示的に指定します。この抵抗値が小さいほど、ドライブ強度が高く、抵抗値が 0 は無限のドライブ強度を示します。入力ポートのドライブ強度は、最初のユニットの遅延を計算するために使用されます。指定されたドライブ強度は、RC 相互接続の任意の状況で入力ポートから最初のユニットへの遅延値を計算するためにも使用されます

  • 遅延値 = (ドライブ強度 * ネット負荷) + 相互接続線の遅延

set_driving_cell制約は、ポートのドライブ能力を記述するためのより便利で正確な方法を提供します。set_driving_cellは、ドライブ入力ポートのユニットタイプを指定するために使用されます。ただし、入力ポート上のキャパシタンス負荷によって引き起こされるドライブユニットの増分遅延は、入力上の追加遅延として含まれます。

image.png

上記の方法の代替として、set_input_transition制約は、入力ポートで遷移時間を表す便利な方法を提供し、参照クロックを指定できます。

image.png

負荷キャパシタンスモデリング#

出力上の負荷を指定することは重要です。なぜなら、この値は出力を駆動するユニットの遅延に影響を与えるからです。この制約がない場合、負荷は 0 と仮定され、これは明らかに現実的ではありません。

set_load制約は、出力ポート上にキャパシタンス負荷を設定し、出力ポートが駆動する外部負荷をシミュレートします。デフォルトでは、ポート上のキャパシタンス負荷は 0 です。負荷は明示的にキャパシタンス値または特定のユニットの入力ピンキャパシタンスとして指定できます

image.png

DRV#

STA で一般的に使用される 2 つの設計ルールは、最大遷移時間-max_transitionと最大キャパシタンス-max_capacitanceです。これらのルールは、設計内のすべてのポートとピンが遷移時間とキャパシタンスの指定された制約を満たしているかどうかをチェックします

さらに、設計に他の設計ルールチェックを指定することもできます。例えば、set_max_fanout(設計内のすべてのピンのファンアウト制約を指定)やset_max_area(設計用)などです。しかし、これらのチェックは合成(synthesis)に適用され、STA には適用されません

遅延計算#

遅延計算の基本概念#

上記の内容から、各ユニットの入力ピンにはピンキャパシタンスが存在し、したがって各ネットにはキャパシタンス負荷が存在します。その値はすべてのファンアウトのピン負荷キャパシタンスと相互接続の寄生キャパシタンスの合計です。

次の設計を考えます:

image.png

NET0の場合、相互接続の寄生を考慮しない場合、そのキャパシタンスはUAND1UNOR2の入力ピンキャパシタンスの合計に等しくなります。したがって、上の図は次のように等価化できます:

image.png

出力O1の負荷キャパシタンスは、出力ポート負荷(指定されていない場合、set_loadで指定可能)とUNOR2入力ピン負荷キャパシタンス(ライブラリ内で指定済み)の合計に等しくなります。したがって、この時点で入力I1にスルー(またはset_drive)を指定するだけで、ユニットUAND1のその入力遷移に対する伝播遅延と出力遷移を得ることができます(上位の出力遷移がわかれば、次のユニットの入力遷移も得られます)。

多入力ユニットには異なる入力から出力への複数のタイミングアークが存在するため、出力遷移の値はスルーのマージ結果によって決まります。

有効キャパシタンスによるユニット遅延計算#

ユニット出力端の負荷が相互接続抵抗を含む場合、NLDM モデルは直接使用できません。したがって、「有効」キャパシタンス法を使用して抵抗の影響を処理します

有効キャパシタンス法は、元の設計が等価キャパシタンス負荷を持つ設計と同じタイミング特性を持つように、等価負荷として使用できるキャパシタンスを見つけようとします。この等価キャパシタンスは有効キャパシタンス(effective capacitance)と呼ばれます。

image.png

つまり、実際の状況では、相互接続の寄生は抵抗の影響を無視できないため、この場合、RC 相互接続をより簡略化された PI モデルとしてモデル化できます。NLDM はキャパシタンスのみを受け入れるため、RC を等価の $C_{eff}$ として計算し、NLDM のテーブルを使用してユニット遅延を得ることができます。この $C_{eff}$ を計算する方法には、二次 AWE、アーノルディ法などの異なるアルゴリズムがあります。

注意:近似的なユニット遅延を得ることができるが、出力スルーとユニットの実際の出力波形は一致しない

ネット遅延#

大学で簡単な回路の背景を持つ学生には、配線遅延の本質は導通する回路が抵抗キャパシタンス(R と C)に等価化でき、その上の信号伝達の遅延は RC 遅延として簡略化できることが非常に馴染み深いでしょう。一般的に、配線の遅延は ** 線幅、線長(Wire length)、プロセス、ファンアウト分岐(Fanout)** に依存します。EDA の異なる段階で、異なるモデルを使用して 2 つのピン間の配線遅延を予測できます。

image.png

  1. 論理合成:Synopsys の Design Compiler のように、配線負荷モデル(Wire Load Model、WLM)に基づいて 2 つの信号ピン間の配線遅延を予測します。この設計段階では、チップ設計はレイアウトに達していないため、相対的な位置が具体的な配線経路を持っていません。したがって、WLM はファンアウト数に基づいてネットの長さを推定し、遅延を得ます(誤差は想像できます。ファンアウトが少ない論理パスもレイアウト時に非常に遠く引き伸ばされる可能性があります)。WLM は通常、対応する ASIC/FPGA メーカーによって提供され、設計者は自分の設計に基づいて微調整を行います。1 つの設計内で、異なるレベルの位置、異なる配線は異なる WLM を設定でき、実際の遅延に近づけることができます。
  2. レイアウト:レイアウト中には、各論理ユニットの具体的な位置がわかるため、位置情報を十分に活用してパスを推測できます。最初に接続された論理ユニット間の線長を推定し、その後線長を使用して遅延を推定します。注意すべきは、理論的には配線が長いほど遅延が長くなりますが、必ずしも線形関係ではないことです。広州から北京まで、高速道路を走り始めるのと県道を走るのでは異なります。一般的に、Cadence Innovus の配線前、レイアウト後(Post-placement pre-route)のタイミング推定は、いわゆる TrialRoute(試行配線)や Early Global Route(前期全局配線)に基づいて配線状況を推定し、その後この粗い配線状況に基づいて RC 寄生パラメータを抽出し、これらの寄生パラメータをドライブユニットの入力ピンキャパシタンスに加算して配線遅延を得ます。最も重要なのは、正確な配線推定を得る方法です。正確な推定は、配線前後のタイミングジャンプ(Timing Jump)を非常に小さくすることができます
  3. 配線:この期間には、位置だけでなく、具体的な金属配線もわかります。したがって、RC パラメータを直接抽出し、タイミング分析エンジンを実行できます。

エルモアモデルによる相互接続遅延計算#

エルモアは特定の条件下の RC 相互接続構造におけるネット遅延を計算するための遅延モデルです。

スルーのマージ(TBD)#

パス遅延計算#

タイミングパス、タイミングアークのいくつかの概念を振り返ります。

理論的なタイミングパスは、開始点と終了点を持ちます:

  • 開始点:入力ポートとクロックピン
  • 終了点:d ピンと出力ポート

したがって、合計 4 種類のタイミングパスがあります:r2ri2oi2rr2o

タイミングアークは以下を記述するために使用されます:

  • ピン間の信号伝送関係(伝送遅延およびどのように変化するか)
  • タイミング制約:セットアップ / ホールドなど

したがって、タイミングアークを使用して全体の設計を注釈付けすると、パス遅延の計算はすべてのネットアークとセルアークを合計することになります

I2O#

最初のタイミングパス、すなわち入力ポートから出力ポートへのものです。

image.png

入力ポートから最初の負荷セルまでの遅延は特別な処理が必要であり、最初の反転器入力端の遷移時間(またはスルー)を指定できます。そのような指定がない場合、遷移時間は 0(理想的な状況に相当)と仮定されます。

  • OpenSTA では、指定しない場合、最初のセルの負荷スルーは 0 になります。seedRootSlew 時に root から最初のセルへの負荷遅延と負荷スルーを計算できます。

さらに、最初のセル出力での RC 負荷状況に基づいて、等価キャパシタンスを計算し、次にテーブルを参照して最初のセルの遅延と出力スルーを得ることができます。

最初のセルの出力スルーを計算できたら、次のユニットの入力スルーも得られ、これを繰り返します。

注意:最初の入力と同様に、最後の出力は手動でset_loadを指定する必要があります。そうしないと、ネット N3 の線負荷のみが使用されます。

I2R#

計算は類似しています。

image.png

R2R#

計算は類似しています。

image.png

タイミンググラフ#

STA は設計をタイミングパスに分解し、各パスに沿った信号伝播遅延を計算し、設計内および入力 / 出力インターフェースでのタイミング制約違反をチェックします。

タイミングパス#

タイミングパスには開始点と終了点が存在し、それぞれの定義は以下の通りです:

image.png

開始点と終了点に基づいて、タイミングパスは 4 つのカテゴリに分けられます:

  • 入力ポートから d ピン、I2R
  • クロックピンから出力ポート、R2O
  • クロックピンから d ピン、R2R
  • 入力ポートから出力ポート、I2O

image.png

タイミングパスは一連のタイミングアークの集合であり、開始点と終了点に基づいて分類できるだけでなく、信号タイプやタイミングチェックによっても分類できます:データパスクロックパスクロックゲーティングパス非同期パス

image.png

タイミンググラフ#

次のネットリストを考えます:

image.png

上記の回路を以下の「有向非巡回グラフ(DAG)」に変換します:

image.png

OpenSTA タイミンググラフ#

タイミンググラフはフラット DAG ですが、OpenSTA は完全な階層ネットリストを持っています。

以下のネットリストの例:
image.png|425

image.png

これをタイミンググラフに変換します:

image.png

頂点は次のように定義されます:各頂点は 1 つのネットピンに対応します。

  • 内部ピンを含みます(図には描かれていません)。

エッジは次のように定義されます:タイミングパスが存在するピンのペア間に 1 つのエッジがあります。

各エッジには独自のタイミングロールがあります:このエッジはセル遅延またはワイヤ遅延、またはさまざまなタイプのタイミング分析を表す可能性があります。

image.png|275

さらに、エッジ上には一連のタイミングアークが保存されています:タイミングアークセットは、ピンのペア間の関連するタイミングアークのグループです。ワイヤタイミングアークは、TimingArcSet クラスによって所有される特別なセットです。

タイミング分析方法#

分析の方法によって、Path-BasedBlock-Basedの 2 つに分けられます。これらの主な違いは、特定の論理ユニットの遷移時間(電平変換時間)の処理が異なることです

実際には、回路が動作する過程で、論理ユニットが受け取る入力レベル変換時間は前段の論理ユニットによって影響を受けます

image.png|500

C ピンの入力遷移は、上位の論理ユニットの出力遷移に依存し、異なる入力ピンの変化によって引き起こされる出力遷移が異なり、C の入力遷移に影響を与えます。この C でのレベル変換時間を決定することが、タイミング分析アルゴリズムの違いです。

グラフベース#

グラフベースの静的タイミング分析(GBA)は、ほとんどのツールのデフォルトの分析モードであり、標準論理ユニットライブラリ(Standard Cell Library)からセル遅延を読み取る際に最悪のケースのレベル変換時間に基づいて計算します。例えば、上の例では、A と B がどのように変化しても、C でのレベル遅延が最大のレベル変換時間を取ります。例えば 12ps です。したがって、特定のタイミングパスで A の信号が変わらず、変化が B ピンでのみ発生する場合、後続の青色または非ゲートは B ピンによって引き起こされる 9ps のレベル変換時間を適用しますが、GBA の分析アルゴリズムでは、依然として 12ps を使用します。したがって、GBA モードは悲観的であり、特定のパスでのタイミング違反を引き起こす可能性があります。実際の変化は、各論理ユニットがちょうどピンの変化によって最悪のレベル変換時間を引き起こすことはないからです。悲観性を解決し、精度を向上させるために、パスベースの静的タイミング分析(Path-based Analysis, PBA)が導入されます。

パスベース#

PT はパスベースのタイミング分析方法を採用し、すべてのタイミングパスを分析します。

GBA と比較して、PBA はすべての可能なタイミングパスを遍歴し、(理論的には)すべての可能な入力変化の組み合わせを列挙してタイミング評価を行うため、最も正確なタイミング分析結果を得ることができます。上の図の例では、B ピンでの変化に対して、PBA は実際に B ピンの 9ps の変化を使用して次の青色または非ゲートの遅延を計算します。しかし、GBA と比較して、より多くの状況を遍歴するため、アルゴリズムの実行時間は非常に遅く、複雑なユースケースでは PBA が GBA よりも 1 桁遅くなる可能性があります。

GBA と PBA#

同じ組み合わせ設計に対して、GBA と PBA は以下のようになります:

  • min_delay_in_GBA <= min_delay_in_PBA
  • max_delay_in_GBA >= max_delay_in_PBA

image.png

image.png

GBA(グラフベース分析)では、AND ゲート(1)の遅延の 2 つの組み合わせを選択する代わりに、すなわち(Combination_1: 0.5ns、1.5ns;Combination_2: 0.2ns、1.2ns)極端な境界を選択します。すなわち、最小遅延 = 0.2ns および最大遅延 = 1.5nsです。

**PBA(パスベース分析)** の場合、入力ピンと出力組み合わせ間の実際の遅延を使用します(両方の遅延の組み合わせを選択することを意味します)。

  • Combination_1: 0.5ns、1.5ns
  • Combination_2: 0.2ns、1.2ns

これは正確ではない(なぜ GBA で 2 つの値を見逃したのか)と思うかもしれません。計算に不必要な遅延を追加しています。そして、あなたが正しいと言えることを嬉しく思います。:) これを行う理由は、ツールの観点から、GBA に従って分析または計算を行うことは PBA と比較して非常に速いからですツールの実行時間は非常に短いです。唯一の違いは、計算に悲観性を追加していることです

  • GBA はPBA よりも速いです。
  • GBA はPBA よりも悲観的です。

上記の特性に基づいて、GBA と PBA は静的タイミング分析において異なる用途を持っています。GBA は迅速だが粗い分析を実現でき、違反が検出されなければ、GBA が悲観的であっても違反がないことを意味します。GBA に違反がある場合、PBA を使用できますが、すべてのタイミングパスを再分析する必要はなく、GBA モードで違反を引き起こしたパスのみを分析すればよい(もちろん、グローバルに PBA を実行することもできます)。

GBA 遅延計算#

各セルアークは上昇下降または最小最大に関係なく、極端な値を取ります。これにより、計算が簡単で迅速になりますが、より悲観的で正確ではありません。

image.png

PBA 遅延計算#

PBA は、タイミングパス上のすべてのアークの組み合わせを網羅します。

image.png

グラフベースの静的タイミング分析原理#

すべてのラッチが統一された時間にクロックの上昇エッジを受け取ると仮定します(レイアウトによるクロックスキューを無視します)。この一連の簡略化により、STA の問題は、有向グラフ内のすべてのタイミング終点が最も遠いタイミング起点からどれだけ離れているかを求めることに退化します(理論的には到着時間を指し、信号がソースから特定のノードに到達する遅延)、すなわち最長パス問題です(参考:有向無環グラフ中の単源最長パスの求め方、ここでは多源多汇の最長パスを解決します)。以下の図を参照してください。アルゴリズムの簡単な説明は、すべての起点から開始し、すべてのノードを遍歴し、ノードが起点からの最も遠い距離を更新することです

ArrivalTime[i]=maxArrivalTime[Predessor[i,j]]+CellDelay[j]+NetDelay[i,j]ArrivalTime[i] = max{ArrivalTime[Predessor[i, j]]+CellDelay[j]+NetDelay[i,j]}

ここで i は現在のノード番号、$Predecessor [i, j]$ は i ノードの j 番目の前序ノードの番号を指し、$ArrivalTime [Predecessor [i, j]]$ はソース信号がその前序ノードに到達する時間、$CellDelay [j]$ は前序ノードの論理遅延、$NetDelay [i,j]$ は前序ノードからノード i への遅延を指します。これらの 2 つのノードの座標位置に基づいて取得できます。

image.png|550

ネットリストの階層化#

レイアウトが動くと、タイミング状況を再評価する必要があるため、レイアウトアルゴリズムが実行されている間、マルチソースマルチシンクの最長パスアルゴリズムが頻繁に呼び出されます。上記の再帰式からわかるように、ノード i の $ArrivalTime [i]$ を計算する前に、その前序ノードの ArrivalTime を取得する必要があります。そうでなければ、これらの ArrivalTime の計算は最長であることを保証できません。回路の分割は並列計算を実現するためのものです。つまり、回路内のノードを色分けしてブロック化し、各サブグラフ内のノードは互いに依存しない(すなわち、互いにエッジがない、グラフは必ずしも連結ではない)ため、各サブグラフ内のノードについては並列計算を行うことができます

この特性を満たす回路の分割を実現するための基本的なアルゴリズム原理は、すべてのタイミング起点をキューに格納し、レベル = 0 としてマークします。その後、BFS を開始し、有向グラフ内の各ノードがタイミング起点からの最も遠い距離を更新します。その後、有向グラフがマークされます:

image.png|675

階層化された同期 BFS によるタイミング伝播#

前向き BFS による到達時間の計算#

レベル化後のレベル = i のすべてのノードには次のような特徴があります:(1)レベル = 0 の特例を除いて(レベル = 0 の起点ユニットは強制的に ArrivalTime=0 としてマークされ、計算は行われません)、それらの間には相互にエッジがありません。すなわち、それらのタイミング計算の間に依存関係はありません;(2)レベル = 0 から i の順序で ArrivalTime を計算すると、レベル = i に到達するまでに、レベル = 0 から i-1 のノードの ArrivalTime がすべて計算されていることになります。つまり、レベル = i のすべてのノードは同時に Arrival time の計算を行うことができます。このとき、openmp などの並列化フレームワークを呼び出して加速することができます。すべてのノードの到達時間を 0 に初期化し、上記の最長パスアルゴリズムを実行することで、下図の遅延情報を導出できます(右図の第 3 レベルの最左のノードの到達時間は 10 であるべきです)。

image.png

逆向き BFS による RAT の計算#

前向き遅延分析の後、各終点が起点からどれだけ離れているかがわかります。しかし、設計者は各終点に異なる制約を持つ可能性があり、特定の信号が特定のタイミング終点に早く到達することを望む場合、タイミング余裕(Timing Slack)の概念が生じます:

TimingSlack=RequiredArrivalTime(ユーザー指定)ArrivalTime(実際到達時間)Timing Slack = Required Arrival Time (ユーザー指定) - Arrival Time(実際到達時間)

もし Timing Slack が 0 未満であれば、信号が遅れており、タイミング違反が存在することを示します。ここでの到達時間は前向きタイミング伝播が計算を完了した後に得られます。通常、タイミング終点に対して、Required Arrival Time(RAT)はクロック周期からセットアップ時間(Clock Period - Setup Time)を引いたものです。ただし、中間の各タイミングノードに対して、設計者は通常 RAT を設定しません。したがって、STA では、** 逆向きのタイミング伝播を行

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。