2019年1月20日日曜日

STA (Static Timing Analysis) レポートのみかた

STAの計算式には作法があり、Setup/Holdのタイミング計算をあたりまえに理解していても、
STAのレポートの計算手順と一致しているとは限らない。
基本的な考え方をリマインダしておく。

内部同期パスのSlack計算式
Setup Slack = <setup data required time> - <data arrival time>
Hold Slack = <data arrival time> - <hold data required time>

Point
  • スラックの計算は所要(の計算)と結果(の計算)の2つにまとめて表される
  • タイミングレポートはこの形式で表現される
  • Skewはサマリー情報として使われるがタイミングパス計算には使われない

Slackの計算式

<setup data required time>             # セットアップ所要時間
    = <destination clock arrival time> # クロック到着時間(受信側FF)
    +- <clock pessimism>               # Clock Pessimism
    - <clock uncertatinty>             # Clock Uncertainty
    - <setup time>                     # セットアップ時間
<hold data required time>              # ホールド所要時間
    = <destination clock arrival time> # クロック到着時間(受信側FF)
    +- <clock pessimism>               # Clock Pessimism
    + <clock uncertainty>              # Clock Uncertainty
    + <hold time>                      # ホールド時間
<data arrival time>                    # データ到着時間
    = <sorce clock arrival time>       # クロック到着時間(送信側FF)
    + <data delay>                     # データ遅延

Point
  • セットアップ解析の受信エッジは送信エッジの次の有効エッジ
  • ホールド解析の受信エッジは送信エッジと同じ
  • セットアップ解析の受信エッジは送信エッジの次の有効エッジ
  • ホールド解析の受信エッジは送信エッジと同じ
  • ワースト条件で見る
  • パスがセット/クリアのときはリカバリー/リムーバルと呼ぶ。セットアップ=リカバリー、ホールド=リムーバル
タイミング解析には動作条件があり、タイミングモデルとして使用される。
デバイスの動作条件
・コーナー条件(プロセスばらつき、電圧、温度) # Slow or Fast
・Max/Min解析(チップ内ばらつき) # MaxかMinのモデルが使われPessimismで調整される
・Rise/Fall解析 # STAでは自動で考慮される(ガードバンドが緩和される)

タイミングレポートは、コーナー条件(Fast Corner, Slow Corner)×Max/Min条件の数(=2x2=4)だけ種類がある。基本的にセットアップはSlow/Max、ホールドはFast/Min。チップ内ばらつき(On Die Variation)は最も厳しい条件で評価するので、データ到達時間Max、所要時間(概ねディスティネーションクロック遅延)Minということになるが、タイミングレポート上はそこまで詳細に表現されない。このあたりはXilinxのISEのときから正確な値を得ることができずグレーなところがあった(あるタイミングパスを個別のパス遅延のレポートで積み上げて手動で計算したとき、タイミングパスのレポートと手動の結果が微妙に一致しなかった)。vivadoはISEと異なり、現状見れないパスというのはなさそうだが、個々の積み上げとタイミングレポートが微妙にことなるところは変わっていない。この辺りはガードバンド(ディレーティング)としてツール内部で何かしらの計算をしていると思われる。
例えばセットアップのレポートをみると、パスタイプとして”Max at Slow Corner”のようにあるが、このMaxが何を指しているのか不明瞭なところがある。結論として(多分)、チップ内ばらつきはMax条件でみて、Min条件でみるほうが厳しい箇所(概ねディスティネーションクロック遅延)についてはCPRというパラメータで補正している。Xilinxのサポートアンサー情報に、このことに関する記事があった。(ワーストケース セットアップのシナリオを見つけ出すため、最大のデータ パスと最小のクロックパスがツールで使用されます。デスティネーション パスは最小のパス遅延、ソース パスには最大遅延が適用されます。この共通パスの場合、最小遅延と最大遅延の両方を適用することはできません。CPR は、この問題措置のため、最大値と最小値の差を利用します。この差はスラック計算に考慮されます。)
Rise/Fall解析はとくにきにしなくてもツールで自動的に考慮される。制約としてこれらのパス条件を付けることも可能。

タイミングレポートの構造
①サマリー情報
②詳細情報
 ②-1 到着時間
 ②-2 所要時間
 ②-3 結果

サマリー情報
ソース
ディスティネーション
パスグループ
パスタイプ
所要時間
データ遅延
ロジック段数
クロックパススキュー
 DCD(Destination Clock Delay)
 SCD(Source Clock Delay)
 CPR(Clock Pessimism Removal)

サマリー情報

タイミングパスの概要。詳細情報とはまとめ方が異なり、クロックの遅延はスキューで表現する。

クロックパススキュー

Skew=DCD-SCD
ツールによって扱いは異なると思うが、Xilinxのvivado世代ではこのSkewをある程度除去できるらしく、CPR(クロック・ペシミズムの除去)というパラメータがある。このペシミズム除去は、その名の通りQoRにとって都合の良い極性を持つ。
Point
  • セットアップ解析でDCD-SCD>0:CPR=0(有利なのでそのまま使う)
  • セットアップ解析でDCD-SCD<0:CPR>0,で最大でSkewを0にする値
  • ホールド解析でDCD-SCD>0:CPR<0,最小でSkewを0にする値
  • ホールド解析でDCD-SCD<0:CPR=0(有利なのでそのまま使う)
タイミングレポート(セットアップサマリー)
Slack (<Met>|<Violation>) : <Slack値> (required time - arrival time)
  Source: <Source F/F> (clock edge)
  Destination: <Destination F/F> (clock edge)
  Pass Group: <クロックグループなどのタイミンググループ>
  Pass Type: <Setup>|<Hold> (<動作条件>)
  Requirement: <所要時間>
  Data Path Delay <データ遅延>
  Clock Path Skew: <クロックスキュー値> (DCD - SCD + CPR)
  Clock Uncertainty: <Uncertainty値>

タイミングレポート(セットアップサマリー)
Max Delay Paths
--------------------------------------------------------------------
Slack (MET) :             15.568ns  (required time - arrival time)
  Source:                 clk_gen/A_reg/C
                          (rising edge-triggered cell FDRE clocked
                           by BASECK {rise@0.000ns fall@8.333ns
                           period=16.665ns})
  Destination:            clk_gen/Reset_reg/D
                          (rising edge-triggered cell FDRE clocked
                           by BASECK {rise@0.000ns fall@8.333ns
                           period=16.665ns})
  Path Group:             BASECK
  Path Type:              Setup (Max at Slow Process Corner)
  Requirement:            16.665ns
                          (BSSECK rise@16.665ns
                           - BASECK rise@0.000ns)
  Data Path Delay:        1.093ns
                          (logic 0.580ns (53.085%)
                           route 0.513ns (46.915%))
  Logic Levels:           1  (LUT2=1)
  Clock Path Skew:        0.000ns (DCD - SCD + CPR)
    Destination Clock Delay (DCD):    4.861ns = ( 21.526 - 16.665 ) 
    Source Clock Delay      (SCD):    5.158ns
    Clock Pessimism Removal (CPR):    0.296ns
  Clock Uncertainty:      0.035ns ((TSJ^2 + TIJ^2)^1/2 + DJ) /2 +PE
    Total System Jitter     (TSJ):    0.071ns
    Total Input Jitter      (TIJ):    0.000ns
    Discrete Jitter          (DJ):    0.000ns
    Phase Error              (PE):    0.000ns

詳細情報

タイミングレポート(到着時間)
Location  Delay type  Incr(ns)  Path(ns)  Netlist Resource(s)
 ----------------------------------------  -------------------
 <ソースクロックパス遅延の詳細>
                          0.000     0.000  ソースクロックのスタート地点
                          ・・・
                                    5.158 ソースF/Fのクロック(/C)
 ----------------------------------------  -------------------
 <データパス遅延の詳細>
                          0.456     5.614  ソースF/Fの出力(/Q)
                          ・・・
                                    6.250  Desti.F/Fの入力(/D)
 ----------------------------------------  -------------------
タイミングレポート(所要時間&結果)
Location  Delay type  Incr(ns)  Path(ns)  Netlist Resource(s)
 ----------------------------------------  -------------------
 <ディスティネーションクロックパス遅延の詳細>
                         16.665    16.665  Desti.クロックのスタート地点
                          ・・・
                1.510    21.526  DestiF/Fのクロック(/C)
           pessimism      0.296    21.823
           uncertainty   -0.035    21.787
           setup          0.031    21.818
 ----------------------------------------  -------------------
           required time           21.818    
           arrival time            -6.250    
 -------------------------------------------------------------
           slack                   15.568    
Point
サマリーではクロックスキューを使ってクロックの関係を表現しているが、詳細情報ではクロックの遅延とクロック・ペシミズムを使って計算している。式をみればわかる通り、スキューはペシミズム・リムーバルで補正したあとの値(補正しない、補正しきれない場合もある)。詳細パスでは実際に補正する分のペシミズムをパス遅延に加算している。

CPRでSkewを0にできなかった例


タイミングレポート
Max Delay Paths
 -------------------------------------------------------------
Slack (MET) :             6.487ns  (required time - arrival time)
  Source:                 jtag/B_reg[1]/C
                          (rising edge-triggered cell FDCE clocked
                           by clk100m {rise@0.000ns fall@4.999ns
                           period=9.999ns})
  Destination:            common/B_reg[15]/D
                          (rising edge-triggered cell FDCE clocked
                           by clk100m {rise@0.000ns fall@4.999ns
                           period=9.999ns})
  Path Group:             clk100m
  Path Type:              Setup (Max at Slow Process Corner)
  Requirement:            9.999ns
                          (clk100m rise@9.999ns
                           - clk100m rise@0.000ns)
  Data Path Delay:        3.085ns
                          (logic 1.724ns (55.890%)
                           route 1.361ns (44.109%))
  Logic Levels:           4  (CARRY4=4)
  Clock Path Skew:        -0.035ns (DCD - SCD + CPR)
    Destination Clock Delay (DCD):    1.420ns = ( 11.419 - 9.999 ) 
    Source Clock Delay      (SCD):    1.533ns
    Clock Pessimism Removal (CPR):    0.078ns
  Clock Uncertainty:      0.104ns  ((TSJ^2 + DJ^2)^1/2) / 2 + PE
    Total System Jitter     (TSJ):    0.071ns
    Discrete Jitter          (DJ):    0.196ns
    Phase Error              (PE):    0.000ns

 Location  Delay type  Incr(ns)  Path(ns)  Netlist Resource(s)
 ----------------------------------------  -------------------
 <ソースクロックパス遅延の詳細>
                          0.000     0.000  ソースクロックのスタート地点
                          ・・・
                                    1.553 ソースF/Fのクロック(/C)
 ----------------------------------------  -------------------
 <データパス遅延の詳細>
                          0.518     2.051  ソースF/Fの出力(/Q)
                          ・・・
                                    4.618  Desti.F/Fの入力(/D)
 ----------------------------------------  -------------------
 <ディスティネーションクロックパス遅延の詳細>
                          9.999     9.999  Desti.クロックのスタート地点
                          ・・・
                1.420    11.419  DestiF/Fのクロック(/C)
           pessimism      0.078    11.419
           uncertainty   -0.104    11.393
           setup         -0.288    11.105
 ----------------------------------------  -------------------
           required time           11.105
           arrival time            -4.618    
 -------------------------------------------------------------
           slack                    6.487    


0 件のコメント:

コメントを投稿