静的タイミング解析(STA)とセットアップ・ホールド
なぜ入力パターンを1本も流さずに回路の全タイミングを保証できるのか、その仕組みが原理から分かります。セットアップ/ホールド制約、スラック、クロック不確かさまで一気に押さえられます。
- 1.STAは入力ベクトルを与えず、全フリップフロップ間のパスを網羅してタイミングを検証する手法で、シミュレーションと違い最悪ケースを漏れなく保証できます。
- 2.各パスで到着時刻と要求時刻を比較し、その差スラックが負でなければ合格。最小スラックのパスがクリティカルパスで、回路の最高動作周波数を決めます。
- 3.セットアップ違反は周波数を下げれば直りますが、ホールド違反はクロック周期に依存せず遅延を足さないと直らない。スキューとジッタはこの両制約のマージンを削ります。
なぜ入力なしで全タイミングを検証できるのか
数億ゲートの回路が設計周波数で正しく動くかを、論理シミュレーションだけで保証するのは不可能です。入力パターンの組み合わせは指数的に膨れ上がり、最悪のタイミングを引き当てる1本を見逃せば実機で誤動作します。静的タイミング解析(STA, Static Timing Analysis) は、この問題を発想の転換で解きます。論理値を流す代わりに、回路を タイミンググラフ ── ノードがピン、エッジが遅延 ── として扱い、信号の中身ではなく信号が伝わる時刻だけ をグラフ上で伝播させるのです。入力ベクトルが不要なので「静的」と呼ばれます。
論理シミュレーションは「ある入力に対する振る舞い」を確かめる動的手法で、カバレッジは流したパターンに依存します。STA は入力に依存せず、構造的に存在しうる 全パスの最悪/最良の遅延 を一度に評価します。前者は機能の正しさ、後者はタイミングの正しさを担う ── 役割が異なるため両方が必要です。STA は論理設計フロー(/semiconductor/asic-design-flow/)のサインオフ工程の中核を成します。
STA が扱うのは、フリップフロップ(FF)から次の FF までの タイミングパス です。同期式回路は「起点 FF が前縁でデータを送り出し、組み合わせ論理を通り、終点 FF が次の前縁で取り込む」動作の繰り返しで成り立ちます。STA はこの一区間ごとに、データが間に合うか(速すぎないか)を検証します。
到着時刻・要求時刻・スラック
検証の主役は3つの量です。到着時刻(AT, Arrival Time) は、信号が実際にそのノードへ届く時刻。起点からエッジ遅延を累積して前向きに伝播します。要求時刻(RT, Required Time) は、回路が正しく動くために信号がそこへ届いていてほしい締切時刻。終点の制約から逆向きに伝播します。両者の差が スラック(slack) です。
スラックの定義
スラック = 要求時刻(RT) − 到着時刻(AT)
スラック ≥ 0 : 間に合っている(合格)
スラック < 0 : 締切に遅れている(違反)
スラックが正なら余裕、負なら違反です。最小スラックを持つパスが クリティカルパス(最も余裕のない経路) で、その値がそのまま回路の動作周波数の上限を決めます。STA の出力は「最悪スラックがいくつで、それがどのパスか」に集約されます。各ノードの AT・RT はグラフ上を1回ずつ伝播させれば求まるため、計算量はパス数(指数的)ではなく エッジ数に比例(線形) ── これが網羅性と現実的計算時間を両立できる理由です。
セットアップ検証では各ノードに到達しうる「最も遅い AT」を伝播し(max 演算)、ホールド検証では「最も速い AT」を伝播します(min 演算)。同じグラフを最悪・最良の2モードで解くことで、遅すぎる経路と速すぎる経路を同時に押さえます。
セットアップ制約 ── データが間に合うか
FF が正しくデータを取り込むには、クロック前縁の 直前 からデータが安定している必要があります。この「前縁より前に確定していてほしい」最小時間が セットアップ時間(Tsetup) です。起点 FF が時刻ゼロでデータを送り出し、組み合わせ論理の遅延 Tlogic を経て終点 FF に届くとき、それが「次の前縁 − セットアップ時間」までに間に合えば合格します。
セットアップ制約(クロック周期を T とする)
Tclk-q + Tlogic(max) + Tsetup ≤ T + Tskew
Tclk-q : 起点FFのクロックからデータ出力までの遅延
Tlogic : 組み合わせ論理の最大遅延(最遅パス)
Tsetup : 終点FFが要求する確定マージン
Tskew : 終点クロックが起点より遅れて来る量(正なら緩和)
→ セットアップスラック = (T + Tskew) − (Tclk-q + Tlogic(max) + Tsetup)
セットアップ検証には 最遅パス(最大遅延) を使います。論理が遅すぎると次の前縁に間に合わず、誤ったデータを取り込みます。重要なのは、この制約が 周期 T に左右される こと。違反したら T を伸ばす(周波数を下げる)だけで直せます。ゲート遅延は CMOS の充放電時間で決まり(/semiconductor/cmos-inverter/)、長距離では配線の RC 遅延(/semiconductor/interconnect-rc-delay/)も Tlogic に積み上がります。
ホールド制約 ── データが速すぎないか
セットアップと対になるのが ホールド制約 です。FF はクロック前縁の 直後 にも、しばらくデータが安定している必要があります。この最小保持時間が ホールド時間(Thold) です。問題は、起点 FF が 同じ前縁 で出した新しいデータが、終点 FF がまだ古いデータを取り込み終える前に到達してしまうケース。新データが速く届きすぎると、終点が今回取り込むべき値を上書きしてしまいます。
ホールド制約
Tclk-q + Tlogic(min) ≥ Thold + Tskew
Tlogic(min) : 組み合わせ論理の最小遅延(最速パス)
Thold : 終点FFが要求する保持時間
Tskew : 終点クロックの遅れ(正だと制約が厳しくなる)
→ ホールドスラック = (Tclk-q + Tlogic(min)) − (Thold + Tskew)
ホールド検証には 最速パス(最小遅延) を使います。決定的な違いは、この式に クロック周期 T が現れない こと。周波数を下げてもホールド違反は一切直りません。修正は遅延を足す ── 最速パスに バッファ(ディレイセル)を挿入 して新データの到達を遅らせる ── 以外になく、面積と電力を犠牲にします。
セットアップ違反は「速く動かしすぎた」結果なので、クロックを遅くすれば消えます。しかしホールド違反は同一クロック縁内のレースで起こるため、周期 T と無関係。製造後の実機でホールド違反が発覚しても周波数調整では救済できず、チップが恒久的に動かない致命傷になり得ます。だからホールドはサインオフで最優先に潰します。
| 観点 | セットアップ制約 | ホールド制約 |
|---|---|---|
| 守るべきもの | 次の前縁に間に合う | 今の前縁を上書きしない |
| 使うパス | 最遅パス(max遅延) | 最速パス(min遅延) |
| クロック周期 T | 依存する | 依存しない |
| 典型的な修正 | 周波数を下げる/論理を速く | 遅延セルを挿入する |
| スキューの向き | 終点遅れ=緩和 | 終点遅れ=悪化 |
クロック不確かさ ── スキューとジッタ
ここまでクロックを理想化してきましたが、実際のクロックは FF ごとに到達時刻も周期もばらつきます。STA はこれを クロック不確かさ としてマージンに織り込みます。
スキュー(skew) は、同一クロックが配線網を通って各 FF へ届く 到達時刻の空間的なずれ です。終点が起点より遅れて来る(正のスキュー)とセットアップは緩和されますが、ホールドは逆に悪化します ── 上の2式で Tskew の符号が真逆に効くのがその表れです。スキューは設計時に解析可能で、クロックツリー合成(CTS)で均等化を図ります。
ジッタ(jitter) は、クロック源(PLL など)の 周期そのものの時間的な揺らぎ です。前縁が来るタイミングが周期ごとにわずかに前後し、有効周期を縮めます。スキューと違い確率的で事前に値を確定できないため、STA では両者をまとめた 不確かさ(uncertainty) として周期から差し引き、悲観的に検証します。
不確かさを織り込んだ実効的なセットアップ余裕
有効周期 = T − (setup uncertainty)
= T − (ジッタの最悪分 + 追加のマージン)
実効セットアップスラック
= (有効周期 + Tskew) − (Tclk-q + Tlogic(max) + Tsetup)
スキューはこのパス固有の量として上式の Tskew 項で別途扱い、不確かさにはジッタなど確率的な揺らぎ分を入れるのが一般的です(ツールによってはスキュー裕度を不確かさへまとめる流儀もあります)。二重計上を避けるため、どちらの方式で skew を織り込むかを設計全体で統一します。
同じチップ内でもトランジスタ特性は場所ごとに微妙に異なり(オンチップばらつき, OCV)、電圧・温度でも遅延は変動します。STA はこれを PVT コーナー(Process/Voltage/Temperature の組み合わせ)で表現し、セットアップは最遅コーナー(低速・高温・低電圧)、ホールドは最速コーナー(高速・低温・高電圧)で別々に検証します。スキュー・ジッタ・OCV・コーナーを重ねるため、実際の設計マージンは公称値よりかなり厚く積まれます。
まとめ
- STA は入力ベクトルを使わず、回路を タイミンググラフ として遅延だけを伝播させ、全 FF 間パスの最悪/最良タイミングを エッジ数に比例する計算量 で網羅検証する。シミュレーションでは保証できない最悪ケースを構造的に押さえられる。
- 各パスで 到着時刻 と 要求時刻 を比較し、差である スラック が非負なら合格。最小スラックの クリティカルパス が最高動作周波数を決める。
- セットアップ制約 は最遅パスで「次の前縁に間に合うか」を、ホールド制約 は最速パスで「今の前縁を上書きしないか」を検証する。セットアップは周期に依存し周波数で救えるが、ホールドは周期に依存せず遅延挿入でしか直せない。
- スキュー(到達時刻の空間ずれ)と ジッタ(周期の時間揺らぎ)はクロック不確かさとしてマージンを削り、スキューはセットアップとホールドに逆符号で効く。OCV と PVT コーナーを重ね、悲観側で検証することで実機の正しさを担保する。
半導体 Article
静的タイミング解析(STA)とセットアップ・ホールドを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
半導体
比較で見る軸
難易度: advanced / カテゴリ: 半導体 / タグ数: 6
導入後に効く点
各パスで到着時刻と要求時刻を比較し、その差スラックが負でなければ合格。最小スラックのパスがクリティカルパスで、回路の最高動作周波数を決めます。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- 半導体
- タグ数
- 6
判断チェックリスト
- 自社の用途が「半導体 / STA」に近いか確認する。
- 強みである「STAは入力ベクトルを与えず、全フリップフロップ間のパスを網羅してタイミングを検証する手法で、シミュレーションと違い最悪ケースを漏れなく保証できます。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。