前言#
このノートでは、静的タイミング分析に関する基本的な概念のみを紹介します。以下は含まれていません:
- 非同期、すなわち削除、回復
- タイミング概念、すなわち偽経路、多サイクル経路など
- 高度なタイミングドメイン知識
- POCV、MCMM など
STA とは何か#
クロック周波数が速くなるほど、チップ内の論理ユニットが単位時間内に完了できる操作が増えるため、周波数とチップの性能は正の相関があります。チップ設計では PPA の間でトレードオフが必要ですが、チップが正常に動作する周波数の限界がどれくらいかを知るにはどうすればよいのでしょうか?これが STA(静的タイミング分析)の概念を導入します。
STA は、設計が与えられたクロック周波数で安全に動作し、タイミング違反がないかどうかを検証するために使用されます。STA には以下の特徴があります:
- 利点
- 入力励起シミュレーションが不要
- 完全なタイミングチェック
- 欠点
- 非同期タイミングを処理できない
STA の適用シーン#
STA は PD の複数の段階で適用でき、それぞれ異なる特徴を持ちます。例えば:
- 合成:論理設計段階では、レイアウトに関連する物理情報がないため、相互接続線は理想的な状態であると仮定できます。この段階では、最悪の経路を引き起こす論理を確認することにより、より注目されます。この段階で使用される別の技術は、ワイヤ負荷モデル(wireload model)を使用して相互接続線の長さを推定することです。ワイヤ負荷モデルは、論理ユニットのファンアウトに基づいて推定 RC 値を提供します。
- Pre-CTS:物理設計の最初に、クロックツリーは理想的であると見なされ、すなわちゼロ遅延を持っています。しかし、CTS 後、クロックは実際の伝播遅延を持ちます。
- Pre-Route:実際の配線前に、STA は遅延の金属線寄生 RC を推定値として計算します。
セル#
セルは標準セル、IO バッファ、または USB コアのような複雑な IP である可能性があります。タイミング情報の他に、ライブラリセルの記述には、セル面積や機能などの他の属性も含まれます。これらの属性はタイミングとは無関係ですが、RTL 合成(synthesis)プロセスで使用されます。
ピンキャパシタンス#
セルの各入力および出力は、ピン(pin)でキャパシタンスを指定できます。ほとんどの場合、セルの入力ピンにのみキャパシタンスを指定し、出力ピンには指定しません。つまり、ほとんどのセルライブラリの出力ピンキャパシタンスは 0 です。
上記の例は、入力 INP1 ピンキャパシタンス値の一般的な仕様(specification)を示しています。最も基本的な形式では、ピンキャパシタンスは単一の値(上記の例では 0.5 単位)として指定されます。キャパシタンスの単位は通常ピコファラッド(pF)であり、一般的にはライブラリファイルの冒頭で指定されます。セル記述では、rise_capacitance(0.5 単位)およびfall_capacitance(0.45 単位)にそれぞれ値を指定することもでき、これらの値は INP1 ピンでのレベルの上昇および下降の変化時の値を指します。また、rise_capacitanceおよびfall_capacitanceの値を範囲として指定し、記述内で下限値および上限値を指定することもできます。
ドライブ強度#
入力ピンキャパシタンスは liberty 内で定義され、出力ピンキャパシタンスはそのセルが駆動するすべての下位セルによって決定されます。CMOS セルがレベル状態を切り替えると、切り替えの速度は出力ピン上のキャパシタンスが充放電される速度に依存します。
一般的に、セルのドライブ強度は駆動可能な最大キャパシタンス負荷を決定し、最大キャパシタンス負荷はファンアウトの最大数を決定します。すなわち、いくつの他のセルを駆動できるかです。高い出力ドライブは低い出力プルアップ / プルダウン抵抗に対応し、これによりセルは出力ピン上で大きな負荷を充電および放電することができます。
- ドライブ強度が大きいほどセル面積も大きく、
max_cap
も大きくなります。 - ドライブ強度が大きいほど、対応する出力抵抗は小さく、遅延も小さくなります。
- 標準セルライブラリに小ドライブ強度の標準論理セルしかない場合、タイミングにどのような影響がありますか?
- ライブラリ全体が小ドライブセルのみで構成されている場合、最初に考えられるのは各セルの駆動能力が弱いことです。出力抵抗が大きくなります。
- もし反転器のドライブ強度が小さい場合、駆動可能な最大負荷キャパシタンスも小さくなります。設計内の特定のノードが大きなキャパシタンスを駆動しなければならない場合、例えば長い線や高ファンアウトネットワークの場合、小ドライブセルでは要求を満たせない可能性があります。これにより、セットアップ時間やホールド時間の違反が発生します。
伝播遅延#
セルの伝播遅延(propagation delay)は、レベル切り替え波形上の特定の測定ポイントによって定義されます。これらの閾値の単位は Vdd または電源のパーセンテージであり、ほとんどの標準セルライブラリでは、通常50% 閾値が遅延計算に使用されます。
ここでの伝播遅延は出力信号の上昇 / 下降に応じて 2 種類(異なる)に分かれます:
- output rise delay: 入力信号が下降エッジ閾値ポイントに達してから、出力信号が上昇エッジ閾値ポイントに達するまでの遅延時間
- output fall delay:output rise delay とは逆
スルー#
スルー(slew rate)の定義は電圧変換速度です。STA では、通常、レベル変換の速さに基づいて上昇波形または下降波形を測定します。スルー(slew)は通常、変換時間(transition time)に基づいて定義され、変換時間は信号が2 つの特定のレベル間で変換するのに必要な時間を指します。注意すべきは、変換時間は実際にはスルーの逆数であるため、変換時間が大きいほどスルーは低くなり、その逆もまた然りです。
一般的に、指定された閾値電圧を使用して遷移時間計算の開始点と終了点を定義します。
スルーとスルー率は異なるものです。スルーは変換であり、スルー率はその逆数です。
タイミングアーク#
タイミングアークは、信号がセルピン間で伝送される遅延と信号の変化を記述します。
- AND ゲート、OR ゲート、NAND ゲート、加算器などの組み合わせ論理ユニットでは、各入力ピンから各出力ピンにタイミングアークがあります。
- フリップフロップのような順序論理ユニットでは、クロックピンから出力ピンへのタイミングアークに加えて、クロックピンに対するデータピンのタイミング制約(timing constraint)があります。
各タイミングアークは特定の ** タイミング感度(timing sense)** を持ち、すなわち出力が入力の異なる変化タイプに対してどのように変化するかを示します。非単調(non-unate)タイミングアークでは、単一の入力ピンの変化方向から出力ピンのレベルがどのように変化するかを決定することはできず、他の入力ピンの状態にも依存します。
タイミングモデル#
論理ユニットのタイミングモデル(timing model)は、設計内のさまざまなユニットインスタンスに正確なタイミング情報を提供することを目的としています。
- 各タイミングアークにはタイミングモデルがあります。
- タイミングモデルは詳細な回路シミュレーションから得られます。
インバータの場合、2 種類の遅延が存在します:出力上昇エッジ遅延 $T_{r}$ と出力下降エッジ遅延 $T_{f}$
インバータの遅延と出力遷移は主に以下に依存します:
- 出力負荷、すなわち反転器出力ピン上のキャパシタンス負荷
- 入力信号の遷移(transition)時間
- トランジスタレイアウト設計:無視可能
論理ユニットの信号入力は、水槽に水流が来るようなもので、水流が最初に青い水車を回し(入力変化時間に似ています)、その後水槽(出力キャパシタンス)を満たしてから、赤い水車の運転を開始します(次の論理ユニット)。
遅延値は負荷キャパシタンスに直接関係しています:負荷キャパシタンスが大きいほど、遅延も大きくなります。ほとんどの場合、遅延は入力信号の遷移時間の増加に伴って増加します。PS:絶対的ではありません。
NLDM#
論理ユニットのタイミングモデルは、入力スルーと出力負荷をパラメータとする関数として簡単に理解できますが、単純な線形タイミングモデルはサブミクロン技術に適用すると正確ではありません。そのため、現在ほとんどのセルライブラリは、より複雑な非線形遅延モデル(non-linear delay model)を使用しています。
ほとんどのセルライブラリには、セルのさまざまなタイミングアークに遅延を指定し、タイミングチェックを行うためのテーブルモデル(table model)が含まれています。これらのテーブルモデルは NLDM(Non-Linear Delay Model)と呼ばれ、遅延、出力スルー計算、または他のタイミングチェックに使用されます。テーブルモデルには、セル入力ピンでの入力遷移時間と出力ピンでの出力負荷キャパシタンスのさまざまな組み合わせに対するセルの遅延が提供されています。
遅延テーブルによると、入力の下降遷移時間が 0.3ns で出力負荷が 0.16pf の場合、反転器の上昇遅延は 0.1018ns です。入力の下降エッジの変化が反転器出力の上昇エッジの変化を引き起こすため、入力ピンで下降エッジの変化が発生したときは、cell_rise 遅延テーブルを参照する必要があります。注意:テーブルモデルも 3 次元である可能性があります。例えば、補完出力 Q と QN を持つフリップフロップのように。
NLDM モデルは遅延計算にのみ使用できるだけでなく、論理ユニット出力ピンの遷移時間を計算するためにも使用できます。この時間も入力遷移時間と出力負荷キャパシタンスによって特徴付けられます。
したがって、NLDM モデルを使用して計算できます:
- 上昇遅延
- 下降遅延
- 上昇スルー
- 下降スルー
さらに、テーブル内に対応するインデックスがない場合は、補間を使用して結果を計算できます。
減衰#
スキップ
スルー値(slew)は、ライブラリ内で指定された測定閾値ポイントに基づいています。ほとんどの前世代のライブラリ(0.25um またはそれ以前のライブラリ)は、スルー(または遷移時間)の測定閾値ポイントとして 10% と 90% を使用しています。
技術の進歩に伴い、実際の波形の最も線形な部分は通常 30% から 70% の間にあります。したがって、ほとんどの新世代のタイミングライブラリは、スルー測定閾値ポイントを Vdd の 30% と 70% として指定しています。しかし、以前に測定された遷移時間は 10% から 90% の間にあるため、ライブラリを充填する際には、通常、測定された 30% から 70% の遷移時間を 2 倍にします。これはスルー減衰係数(slew derate factor
)によって指定され、通常は 0.5 として指定されます。スルー測定閾値ポイントが 30% と 70% で、スルー減衰係数が 0.5 の場合、これは測定閾値ポイントが 10% と 90% であることに相当します。
組み合わせ論理ユニット#
2 入力 AND ゲートの場合:合計 4 種類の遅延と 4 種類の出力遷移があります。
- 上昇下降 * 2 つの入力ピン = 4
- FPGA では、各論理ユニットのすべての遅延情報は基本的に固定されているため、各論理ユニットはそれぞれ固定の遅延(例えば LUT は 0.1ns、DSP は 1.3ns など)をフィッティングします。
一般的な組み合わせ論理ブロック#
以下のような 3 入力 2 出力の一般的な組み合わせ論理ブロック(General Combinational Block)を考えます:
このような組み合わせ論理ブロックは複数のタイミングアークを持つことができます。通常、ブロックの各入力から各出力にタイミングアークがあります。
タイミング論理ユニット#
タイミング論理ユニットのタイミングアークは以下の通りです:
ピン D、SI、SE の同期入力信号には以下のタイミングアークがあります(両方の上昇と下降):
- セットアップ時間チェックタイミングアーク
- ホールド時間チェックタイミングアーク
ピン Q の同期出力信号には以下のタイミングアークがあります:
- CK から Q または QN の伝播遅延アーク
ピン CDN の非同期入力信号には以下のタイミングアークがあります:
- 削除時間チェックタイミングアーク
- 回復時間チェックタイミングアーク
さらに、クロックピンと非同期ピンには以下があります:
- パルス幅タイミングチェック
セットアップとホールド#
セットアップ時間とホールド時間の同期タイミングチェックは、データがタイミングユニットを通じて正しく伝播できることを保証するために使用されます。これらのタイミングチェックは、クロックの有効エッジでデータが確定した論理状態であるかどうかを検証し、有効エッジで正しいデータをロックします。
2 次元テーブルモデルは、制約ピン constrained_pin (D) と関連ピン related_pin (CK) での遷移時間に基づいて決定されます。
セットアップとホールドの詳細は後で紹介します。
非同期タイミングチェック#
スキップ
状態関連のタイミングモデル#
スキップ
入力と出力間のタイミングアークは、モジュール内の他のピンの論理状態に依存します。
ブラックボックスのインターフェースタイミングモデル#
スキップ
高度なタイミングモデル#
スキップ
非線形遅延モデル(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)は、異なるクロックツリー終点に到達する時間差を指します。
理想的なクロックツリーは、クロックソースが無限の駆動力を持ち、クロックが遅延なしで無限の終点を駆動できると仮定します。さらに、クロックツリー内に存在する任意の論理ユニットは ** ゼロ遅延(zero delay)** を持つと仮定します。論理設計の初期段階では、STA は通常、理想的なクロックツリーを使用して実行されるため、分析の重点はデータパス(data path)にあります。set_clock_latency
を使用して、指定されたクロックツリー遅延を表示できます。
不確実性#
set_clock_uncertainty
コマンドは、クロックエッジの出現にウィンドウを指定します。クロックエッジのタイミングの不確実性は、クロック周期のジッター(jitter)やタイミング検証に必要な追加のマージン(slack)など、複数の要因を考慮します。実際には理想的なクロックは存在せず、すべてのクロックには一定のジッター量があります。指定されたクロック不確実性には、クロック周期のジッターを含める必要があります。
クロックツリーが実装(implement)される前に、クロック不確実性は予想されるクロックスキューを含む必要があります。ホールド時間チェックでは、クロックジッターを含める必要はないため、通常、ホールド時間チェックには小さなクロック不確実性を指定します。
実際のクロック信号#
実際のクロック信号には上昇エッジと下降エッジが含まれます:
2 つのクロック信号を組み合わせて理想的な場合の眼図を得ます。この時点では、遷移のみの理想的なクロックです:
しかし、実際にはクロック信号には異なる到達時間(jitter)が存在し、この時点での眼図は次のようになります:
さらに、クロックは電源供給の変動によって電圧降下やグラウンドバウンスを引き起こすことがあります。
最終的に、実際のクロック信号は次のようになります:
レベルの変動に対して、ノイズマージンを定義し、一定の歪みを許可します:
クロック信号にジッターのない領域は、データが信頼できるウィンドウと呼ばれます:
クロック信号にジッターが存在する領域はジッターと呼ばれます:ジッターはタイミングレポートで考慮する必要があります。これを不確実性というもう 1 つのパラメータを使用してモデル化します。
例:不確実性 = 90ps = 0.09ns
クロックドメイン#
1 つのクロックは通常、多くのフリップフロップを駆動します。同じクロックによって駆動されるフリップフロップのグループをそのクロックドメイン(clock domain)と呼びます。下図には 2 つのクロックドメインがあります:
1 つの問題に注意する必要があります:2 つのクロックドメインは関連しているのか、それとも独立しているのか?答えは、あるクロックドメインから始まり、別のクロックドメインで終わるデータパスが存在するかどうかに依存します。そのようなパスがない場合、これらの 2 つのクロックドメインは互いに独立していると確信できます。これは、あるクロックドメインから始まり、別のクロックドメインで終わるタイミングパスが存在しないことを意味します。
もしクロックドメインを越えるデータパスが存在する場合(下図のように)、これらのパスが実際の(real)パスであるかどうかを確認する必要があります。例えば、2 倍の周波数のクロックが駆動するフリップフロップがデータを発信し、1 倍の周波数のクロックが駆動するフリップフロップがデータをキャッチする場合、このパスは実際のパスです。
偽経路(false path)の一例は、設計者がクロック同期器(clock synchronizer)ロジックを明示的に 2 つのクロックドメインの間に配置することです。この場合、クロックドメインから次のクロックドメインへのタイミングパスが存在するように見えても、これは実際のタイミングパスではありません。なぜなら、データが同期器ロジックを通じて 1 クロック周期内に伝播されるように制約されていないからです。このようなパスは偽経路(実際のものではない)と呼ばれます。なぜなら、データが正しく 1 つのクロックドメインから別のクロックドメインに伝達されることを保証するのはクロック同期器だからです。
- 偽経路はタイミング例外に属するため、スキップします。
- 設計内には存在し得ない、または発生し得ないパスがあり、このようなパスは偽経路と呼ばれます。偽経路は通常、非同期回路やクロックドメインを越える場合に発生します。また、回路内部のロジックが複雑で、導出後に実際には定数であり、変化しないことがわかる場合にも発生します。
実際にクロックドメインを越える状況は双方向であることが多いです。すなわち、USBCLK クロックドメインから MEMCLK クロックドメインへの、また MEMCLK クロックドメインから USBCLK クロックドメインへの両方の状況を STA で正しく理解し、処理する必要があります。
SDC#
正しい制約は STA 結果の分析にとって重要です。設計環境を正確に指定することで、STA 分析は設計内のすべてのタイミング問題を特定できるようになります。STA の準備作業には、クロックの設定、IO タイミング特性の指定、偽経路および多周期パスの指定が含まれます。
この設計に対して STA を実行するには、フリップフロップのクロックを指定し、設計に入るすべてのパスと設計から出るすべてのパスのタイミング制約を指定する必要があります。
クロックの指定#
クロックを定義するには、以下の情報を提供する必要があります:
- クロックソース(Clock source):設計のポートであるか、設計内部ユニットのピン(通常はクロック生成ロジックの一部)である可能性があります。
- 周期(Period):クロックの周期。
- デューティサイクル(Duty cycle):高レベル持続時間(正相)と低レベル持続時間(負相)。
- エッジ時間(Edge times):上昇エッジと下降エッジの時刻。
クロックを作成する例: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]
;注意:セットアップ時間チェックのクロック不確実性は、利用可能な有効クロック周期を減少させます。ホールド時間チェックの場合、クロック不確実性は満たす必要がある追加のタイミングマージンとして使用されます。
クロック遅延#
クロック遅延は、次のコマンドを使用して設定できます。set_clock_latency 1.8 -rise [get_clocks MAIN_CLK]
クロック遅延には 2 種類のタイプがあります:ネット遅延(network latency)とソース遅延(source latency):フリップフロップのクロックピン上の総クロック遅延は、ソース遅延とネット遅延の合計です。クロックツリー合成が完了した後、クロックソースからフリップフロップのクロックピンまでの総クロック遅延は、ソース遅延とクロック定義点からフリップフロップまでのクロックツリーの実際の遅延の合計です。
- ネット遅延は、クロック定義点(create_clock)からフリップフロップのクロックピンまでの遅延を指します。
- CTS 後は無視されます。
- ソース遅延は挿入遅延(insertion delay)とも呼ばれ、クロックソースからクロック定義点までの遅延を指します。ソース遅延は、オンチップまたはオフチップの遅延を表す可能性があります。
- CTS 後は保持されます。
ソース遅延とネット遅延の間の重要な違いは、設計のためにクロックツリーが構築されると、ネット遅延は無視できるようになります(set_propagated_clock
コマンドが指定されていると仮定します)。
入力パスの制約#
フリップフロップ UFF0 は設計の外部にあり、設計内部のフリップフロップ UFF1 にデータを提供します。データは入力ポート INP1 を介して 2 つのフリップフロップに接続されます。
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
を使用して外部遅延を指定できます:
タイミングパスグループ#
設計内のタイミングパスは、パスの集合として見ることができ、各パスには開始点と終了点があります。
タイミングパスは、パスの終点に関連するクロックに基づいて異なるタイミングパスグループに分類できます。したがって、各クロックにはそれに関連するタイミングパスのグループがあります。また、すべての非クロック(非同期)パスを含むデフォルトのタイミングパスグループもあります。
外部属性モデリング#
create_clock
、set_input_delay
、およびset_output_delay
は、設計内でタイミング分析を実行するために使用されるすべてのパスを制約するには十分ですが、これだけではモジュール IO ピン上の正確なタイミングを取得するには不十分です。
入力に対しては、入力ポートでスルーを指定する必要があります:
set_drive
set_driving_cell
set_input_transition
出力に対しては、出力ピンの負荷キャパシタンスを指定する必要があります:
set_load
ドライブ強度モデリング#
要するに、設計者は入力端のスルー値を指定して、入力パス内の最初のユニットの遅延を決定する必要があります。この制約がない場合、理想的な遷移値 0 と仮定されますが、これは明らかに現実的ではありません。
set_drive
およびset_driving_cell
制約は、ドライブモジュール入力ポートの外部ユニットのドライブ強度をモデリングするために使用されます。これらの制約がない場合、デフォルトでは、すべての入力が無限のドライブ強度を持つと仮定され、すなわち入力ピンの遷移時間は 0 です。
set_drive
は DUA 入力ピン上のドライブ抵抗値を明示的に指定します。この抵抗値が小さいほど、ドライブ強度が高く、抵抗値が 0 であることは無限のドライブ強度を示します。入力ポートのドライブ強度は、最初のユニットの遷移時間を計算するために使用されます。指定されたドライブ強度は、RC 相互接続のいかなる場合でも、入力ポートから最初のユニットへの遅延値を計算するためにも使用されます。
- 遅延値 = (ドライブ強度 * ネット負荷) + 相互接続線の遅延
set_driving_cell
制約は、ポートのドライブ能力を記述するためのより便利で正確な方法を提供します。set_driving_cell
は、ドライブ入力ポートのセルタイプを指定するために使用できます。ただし、入力ポート上のキャパシタンス負荷によって引き起こされるドライブユニットの増分遅延は、入力上の追加遅延として含まれます。
上記の方法の代替として、set_input_transition
制約は、入力ポートで遷移時間を表す便利な方法を提供し、参照クロックを指定できます。
負荷キャパシタンスモデリング#
出力上の負荷を指定することは重要です。なぜなら、この値は出力を駆動するユニットの遅延に影響を与えるからです。この制約がない場合、負荷は 0 と仮定されますが、これは明らかに現実的ではありません。
set_load
制約は、出力ポート上にキャパシタンス負荷を設定し、出力ポートが駆動する外部負荷をシミュレートします。デフォルトでは、ポート上のキャパシタンス負荷は 0 です。負荷は明示的にキャパシタンス値または特定のセルの入力ピンキャパシタンスとして指定できます。
DRV#
STA で一般的に使用される 2 つの設計ルールは、最大遷移時間-max_transition
と最大キャパシタンス-max_capacitance
です。これらのルールは、設計内のすべてのポートとピンが遷移時間とキャパシタンスの規定制約を満たしているかどうかをチェックします。
さらに、設計に他の設計ルールチェックを指定することもできます。例えば、set_max_fanout
(設計内のすべてのピンのファンアウト制約を指定)やset_max_area
(設計用)などです。しかし、これらのチェックは合成(synthesis)に適用され、STA には適用されません。
遅延計算#
遅延計算の基本概念#
上記の内容から、各ユニットの入力ピンにはピンキャパシタンスが存在するため、各ネットには容性負荷が存在します。その値はすべてのファンアウトのピン負荷キャパシタンスと相互接続線の寄生キャパシタンスの合計です。
以下の設計を考えます:
NET0
について、相互接続寄生を考慮しない場合、そのキャパシタンスはUAND1
とUNOR2
の入力ピンキャパシタンスの合計に等しくなります。したがって、上記の図は次のように等価化できます:
出力O1
の負荷キャパシタンスは、出力ポート負荷(指定されていない場合、set_load
で指定)とUNOR2
の入力ピン負荷キャパシタンス(ライブラリで指定済み)の合計に等しくなります。したがって、入力I1
にスルー(またはset_drive
)を指定するだけで、ユニットUAND1
のこの入力遷移に対する伝播遅延と出力遷移を得ることができます。
多入力ユニットには、出力への複数のタイミングアークが存在するため、出力遷移の値はスルーのマージ結果によって決定されます。
有効キャパシタンス計算ユニット遅延#
ユニット出力端の負荷が相互接続抵抗を含む場合、NLDM モデルは直接使用できません。したがって、抵抗の影響を処理するために「有効」キャパシタンス法を使用します。
有効キャパシタンス法は、元の設計が等価キャパシタンス負荷を持つ設計と同じタイミング特性を持つように、等価負荷として使用できるキャパシタンスを見つけることを試みます。この等価キャパシタンスは有効キャパシタンス(effective capacitance)と呼ばれます。
つまり、実際の状況では、相互接続寄生は抵抗の影響を無視できないため、この場合、RC 相互接続をより簡略化された PI モデルとしてモデル化できます。NLDM はキャパシタンスのみを受け入れるため、RC を等価の $C_{eff}$ として計算し、その後 NLDM を使用して遅延を得ることができます。この $C_{eff}$ を計算する方法には、二次 AWE、Arnoldi アルゴリズムなどの異なるアルゴリズムがあります。
注意:近似的なユニット遅延を得ることができるが、出力スルーとユニットの実際の出力波形は一致しない。
ネット遅延#
大学で簡単な回路の背景を持つ学生は、配線遅延の本質は導通回路が抵抗キャパシタンス(R と C)として等価化でき、その上で信号伝達の遅延は RC 遅延として簡略化できることをよく知っているでしょう。一般的に、配線の遅延は ** 線幅、線長(Wire length)、プロセス、ファンアウト分岐(Fanout)** に依存します。EDA の異なる段階で、異なるモデルを使用して 2 つのピン間の配線遅延を予測できます。
- 論理合成:Synopsys の Design Compiler のように、配線負荷モデル(Wire Load Model、WLM)に基づいて 2 つの信号ピン間の配線遅延を予測します。この設計段階では、チップ設計はまだレイアウトに達していないため、相対的な位置が具体的な配線パスにありません。したがって、WLM はファンアウト数に基づいてネットの長さを推定し、遅延を得ます(誤差は想像に難くありません。ファンアウトが少ない論理パスもレイアウト時に非常に遠く引き伸ばされる可能性があります)。WLM は通常、対応する ASIC/FPGA メーカーによって提供され、設計者は自分の設計に基づいて微調整を行います。1 つの設計内で、異なる階層の位置や異なる配線は異なる WLM を設定でき、実際の遅延に近づけることができます。
- レイアウト:レイアウト中には、各論理ユニットの具体的な位置がわかるため、位置情報を十分に活用してパスを推測できます。最初に接続された論理ユニット間の線長を推定し、その後線長を使用して遅延を推定します。注意すべきは、理論的には配線が長いほど遅延が長くなるが、必ずしも線形関係ではないことです。広州から北京まで、高速道路を走り始めるのと県道を走るのでは異なります。一般的に、Cadence Innovus のレイアウト前、レイアウト後(Post-placement pre-route)のタイミング推定は、いわゆる TrialRoute(試行配線)や Early Global Route(前期全局配線)に基づいて配線状況を推定し、その後この粗い配線状況に基づいて RC 寄生パラメータを抽出し、これらの寄生パラメータをドライブユニットの入力ピンキャパシタンスに加算して配線遅延を得ます。最も重要なのは、正確な配線推定を得る方法です。正確な推定は、配線前後のタイミングジャンプを非常に小さく実現できます。
- 配線:この期間には、位置だけでなく、具体的な金属配線もわかります。したがって、この時点で RC パラメータを直接抽出し、タイミング分析エンジンを実行できます。
Elmore モデルによる相互接続遅延計算#
Elmore は、特定の条件下の RC 相互接続構造におけるネット遅延を計算するための遅延モデルです。
スルーのマージ(TBD)#
パス遅延計算#
タイミングパス、タイミングアークのいくつかの概念を振り返ります。
理論的なタイミングパスは、開始点と終了点を持ちます:
- 開始点:入力ポートとクロックピン
- 終了点:d ピンと出力ポート
したがって、合計 4 種類のタイミングパスがあります:r2r
、i2o
、i2r
、r2o
タイミングアークは以下を記述するために使用されます:
- ピン間の信号伝送関係(伝送遅延およびどのように変化するか)
- タイミング制約:セットアップ / ホールドなど
したがって、タイミングアークを使用して全体の設計を注釈付けすると、パス遅延を計算するにはすべてのネットアークとセルアークを合計するだけです。
I2O
#
最初のタイミングパス、すなわち入力ポートから出力ポートへのものです。
入力ポートから最初の負荷セルに到達するには特別な処理が必要です。すなわち、最初の反転器の入力端の遷移時間(またはスルー)を指定できます。そのような指定がない場合、遷移時間は 0 と仮定されます(理想的な状況に相当します)。
- OpenSTA では、指定しない場合、最初のセルの負荷スルーは 0 です。seedRootSlew 時に、ルートから最初のセルへの負荷遅延と負荷スルーを計算できます。
さらに、最初のセル出力の RC 負荷状況に基づいて等価キャパシタンスを計算し、次にテーブルを参照して最初のセルの遅延と出力スルーを得ることができます。
最初のセルの出力スルーが計算できたら、次のユニットの入力スルーを得ることができ、これを繰り返します。
注意:最初のレベルの入力と同様に、最後のレベルの出力には手動でset_load
を指定する必要があります。そうしないと、ネット N3 の線負荷のみが使用されます。
I2R
#
同様に計算します。
R2R
#
同様に計算します。
タイミンググラフ#
STA は設計をタイミングパスに分解し、各パスに沿った信号伝播遅延を計算し、設計内および入力 / 出力インターフェースでのタイミング制約違反をチェックします。
タイミングパス#
タイミングパスは開始点と終了点が存在し、それぞれ以下のように定義されます:
開始点と終了点に基づいて、タイミングパスは 4 つのカテゴリに分けられます:
- 入力ポートから d ピン、
I2R
- クロックピンから出力ポート、
R2O
- クロックピンから d ピン、
R2R
- 入力ポートから出力ポート、
I2O
タイミングパスは一連のタイミングアークの集合であり、起点と終点に基づいて分類できるだけでなく、信号タイプやタイミングチェックによっても分類できます:データパス、クロックパス、クロックゲーティングパス、非同期パス。
タイミンググラフ#
以下のネットリストを考えます:
上記の回路を「有向非巡回グラフ(DAG)」に変換すると、次のようになります:
OpenSTA タイミンググラフ#
タイミンググラフはフラットな DAG ですが、OpenSTA は完全な階層ネットリストを持っています。
以下のネットリストの例:
これをタイミンググラフに変換します:
頂点は次のように定義されます:各頂点は 1 つのネットピンに対応します。
- 内部ピン(図には描かれていません)を含みます。
エッジは次のように定義されます:タイミングパスがあるピン間には 1 つのエッジがあります。
各エッジには独自のタイミングロールがあります:このエッジはセル遅延またはワイヤ遅延、またはさまざまなタイプのタイミング分析を表す可能性があります。
さらに、エッジ上には一連のタイミングアークが保存されています:タイミングアークセットは、ピン間の関連するタイミングアークのグループです。ワイヤタイミングアークは、TimingArcSet クラスが所有する特別なセットです。
タイミング分析方法#
分析の方法によって、Path-Based
とBlock-Based
の 2 種類に分けられます。これらの主な違いは、特定の論理ユニットの遷移時間(電平変換時間)の処理が異なることです。
実際には、回路が動作する過程で、論理ユニットが受け取る入力レベル変換時間は前段の論理ユニットによって影響を受けます。
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
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 がこれほど悲観的であっても違反がないことを意味します。PBA 分析の結果は、違反がないはずです。GBA に違反がある場合、PBA を使用できますが、すべてのタイミングパスを再分析する必要はなく、GBA モードで違反が発生したパスのみを分析すればよいです(もちろん、全体で PBA を実行することもできます)。
GBA 遅延計算#
各セルアークは上昇下降または最小最大に関係なく、極端な値を取ります。これにより、計算が簡単で迅速になりますが、より悲観的で正確性に欠けます。
PBA 遅延計算#
PBA は、タイミングパス上のすべてのアークの組み合わせを網羅します。
グラフベースの静的タイミング分析原理#
すべてのラッチが統一された時間にクロックの上昇エッジを受け取ると仮定します(すなわち、レイアウトによって引き起こされるクロックスキューを無視します)。この一連の簡略化により、STA 問題は、すべてのタイミング終点が最も遠いタイミング起点からどれくらい離れているかを求めることに退化します(理論的には、到着時間を指します。信号がソースから特定のノードに到達するまでの遅延)、すなわち最長パス問題です(参考:有向無環グラフ中の単源最長パスの求め方、ここでは多源多汇の最長パスを解決します)。以下の図のように、アルゴリズムの簡単な説明は、すべての起点から開始し、すべてのノードを遍歴し、ノードの起点からの最も遠い距離を更新することです:
ここで i は現在のノード番号、$Predecessor [i, j]$ は i ノードの j 番目の前序ノードの番号を指し、$ArrivalTime [Predecessor [i, j]]$ はソース信号がその前序ノードに到達する時間、$CellDelay [j]$ は前序ノードの論理遅延、$NetDelay [i,j]$ は前序ノードからノード i に到達するための遅延であり、これらの 2 つのノードの座標位置から取得できます。
ネットリストの階層化#
レイアウトが動くと、タイミング状況を再評価する必要があるため、レイアウトアルゴリズムが実行されている間、マルチソースマルチシンクの最長パスアルゴリズムが頻繁に呼び出されます。上記の再帰的な公式からわかるように、ノード i の $ArrivalTime [i]$ を計算する前に、その前序ノードの ArrivalTime をすでに取得しておく必要があります。そうでなければ、これらの ArrivalTime の計算は最長であることを保証できません。回路の分割は並列計算を行うためのものです。すなわち、回路内のノードを色分けしてブロックに分け、各ブロックのサブグラフ内のノードは互いに依存しない(すなわち、互いにエッジがない、グラフは必ずしも連結ではない)ため、各ブロックのサブグラフ内のノードについては、並列計算を行うことができます。
このような特性を満たす回路の分割を実現するための基本的なアルゴリズム原理は、すべてのタイミング起点をキューに保存し、レベル = 0 としてマークします。その後、BFS を開始し、有向グラフ内の各ノードがタイミング起点からの最も遠い距離を更新します。これにより、有向グラフがマークされます:
階層化同期 BFS によるタイミング伝播#
前方 BFS による到達時間の計算#
レベル化されたレベル = i のすべてのノードには、(1)レベル = 0 の特例を除いて(レベル = 0 の起点ユニットは強制的に ArrivalTime=0 としてマークされ、計算は行われません)、それらの間に相互にエッジがないため、タイミング計算間に依存関係がありません;(2)レベル = 0 から i の順に ArrivalTime を計算すると、レベル = i に到達するまでに、レベル = 0 から i-1 のノードの ArrivalTime がすべて計算されていることになります。すなわち、レベル = i のすべてのノードは同時に Arrival time を計算できます。この時、openmp などの並列化フレームワークを呼び出して加速することができます。すべてのノードの到達時間を 0 に初期化し、上記の最長パスアルゴリズムを実行することで、下図の遅延情報を導出できます(右図の第 3 レベルの最左ノードの到達時間は 10 であるべきです)。
逆 BFS による RAT の計算#
前方遅延分析の後、各終点が起点からどれくらい離れているかがわかります。しかし、設計者は各終点に異なる制約を持つ可能性があり、特定の信号が特定のタイミング終点に早く到達することを望む場合、タイミングマージン(Timing Slack)の概念が生じます:
もし Timing Slack が 0 未満であれば、信号が遅れており、タイミング違反が存在します。ここでの Arrival Time は前方タイミング伝播が計算された後に得られます。通常、タイミング終点に対して、Required Arrival Time(RAT)はクロック周期からセットアップ時間(Clock Period - Setup Time)を引いたものです。ただし、中間の各タイミングノードに対して、設計者は通常 RAT を設定しません。したがって、STA では、** 逆のタイミング伝播を行い、終点以外のすべてのノードが実際に信号をどれくらい早く取得する必要があるかを知