あまりよくわかっていないので(今更)まとめた.いずれもチップ内ばらつきを取り扱うための手法.
Static Timing Analysis (STA)
STAではパス中の論理セルの遅延を積算していく事で回路遅延を求めていく.以下の図の右側の Flip-Flopの セットアップ制約 T_setup は
T_setup > T_clk - ( T_launch - T_capture )
である.ここで T_clk はクロック周期,T_lauch はlauch path 遅延(データパス遅延),T_capture は capture path 遅延(クロックパス遅延)である.なお共通項は取り除かれる(Common Path Pessimism Removal).
On-Chip Variation (OCV)
OCV では derate factor を用いて回路遅延の平均からのずれを表現する.例えば回路中の論理ゲートが 3σ 遅延で ±5% ばらつくとする.OCV では,オンチップばらつきによって T_launch が 5% 悪化し,T_capture が 5% 改善すると考える.するとセットアップ制約は
T_setup > T_clk - ( T_launch * 1.05 - T_capture * 0.95)
と悪化する.各セルが Nσ でどの程度ばらつくか予測がつけばよいため,極端な話 Monte-Carlo シミュレーションは不要かもしれない.ただし段数効果が入っていないこの解析結果はかなり悲観的である.
Advanced OCV (AOCV)
AOCV (a.k.a SBOCV: Stage Based OCV) ではパスの段数と距離をパラメータとして持つ.パスの段数はランダムばらつきの影響力に寄与し,段数が多いほどばらつきは減る.距離はシステマティックばらつきの影響力に寄与し,距離が長いほどシステマティックばらつきが多い.この二つのパラメータを得るために,キャラクタライザは同じ論理ゲートのチェーンを作成し,Montecalro Simulation もしくは感度シミュレーションを用いてばらつきモデルを作成する.ばらつきモデルは,段数あたりの derate factor のテーブルで,early (改善方向)と late (悪化方向) の2つを持つ.
具体的には異なる論理段数のチェーンに対して
[early derate factor] = ([nom. delay] - 3σ)/ [nom. delay]
[late derate factor] = ([nom. delay] + 3σ)/ [nom. delay]
で各 derate factor を計算し,それをテーブルとして
object_type: lib_cell
delay_type: cell
rf_type: rise
object_spec: */INV
derate_type: early
depth: 1 2 3 4 5
distance: 0
table: 0.87 0.91 0.92 0.93 0.94
object_type: lib_cell
delay_type: cell
rf_type: rise
object_spec: */INV
rf_type: rise
derate_type: late
depth: 1 2 3 4 5
distance: 0
table: 1.17 1.12 1.09 1.08 1.07
の様に保持する.(fallも同様)
パス遅延の計算は,通常の STA 同様各論理ゲート遅延の和を取れば良い.段数効果を考慮するため OCV に対してより現実的であるが,同一の論理ゲートのチェーンで評価しているため,論理回路の遅延評価には不向きである.そのためクロックの様な同じ論理素子のチェーンの評価で使われる.距離の情報も必要なので,ネットリストから各素子の X-Y 座標のデータを取り込む必要がある.
Liberty Variation Format (LVF)
POCV: Parametric OCV (a.k.a SOCV: Statistical OCV) は derate factor そのものを持つのでは無く,POCV Coefficient と呼ぶばらつきの相対値 (σ/μ) を利用する.プロセスパラメータを Sweep して POCV Coefficient を計算する.そのため以下のような POCV モデルが生成される.
ocvm_type: pocvm
object_type: lib_cell
delay_type: cell
derate_type: early
rf_type: rise
object_spec: */INV_coefficient: 0.04
coefficient: 0.04
ocvm_type: pocvm
object_type: lib_cell
delay_type: cell
derate_type: late
rf_type: rise
object_spec: */INV_coefficient: 0.04
coefficient: 0.04
POCV の結果は,個々のセルごとのばらつき情報として出力するか, LVF (Liberty Variation Format) として出力する.slew-load 依存伝搬遅延,遷移遅延,slew-slew 依存ばらつきをモデル化している.LVF では μ に加えて σ のテーブルを持つ.
遅延の計算では,各論理ゲートを通過するごとに以下の遅延 (Incr) を足し合わせていく.
Incr = Mean ± K * (Sensit_cell)^2/ (Sensit_slack)
ここで,Mean はパス中の一つの論理ゲートの遅延の平均,K はtiming_pocvm_report_sigma という変数(KσのK?),Sensit_cell は論理ゲートの 1σ ばらつき,Sensit_slack はパス Slack の 1σ ばらつき,と思われる.
(PrimeTime の説明だが,これ合ってるのか?)
こちらの Youtube動画 だともうちょっとシンプルに
Total_delay = (μ_1+ ...+μ_n) + sqrt(σ^2_1+...+σ^2_n) * N
であった.(NはNσ?)
この LVF は遅延の平均(μ)と標準偏差(σ)を利用しているので,分布が正規分布である事を想定しており,Regular-LVF と呼ばれる.さらに微細なプロセスではパス分布がガウス分布に従わないので,平均(μ)と標準偏差(σ)に加え,平均のシフト量,スキュー,尖度を考慮した,Moment-Based LVF を利用する必要があるそうだ.
なんかここまで来ると SSTA と変わらなくない?と思ってしまう.SSTA と違いパス単位の検証しかせず Max, Min 演算をしないのがミソなのかな...