タイミング解析の基本概念
タイミング制約の書き方の前に、タイミング解析ツール(Static Timing Analysis(STA))がどうやって判定しているのかを知っておいた方がよい。
◇
タイミング解析の対象となるパスは次図の4種類だが、このうち入出力ピンとFFの間のパスは、仮想的な外部FFを置いてFF間のパスとして解析する。
解析は、起点から終点まで実際にかかる時間(Arrival Time)と満たすべき時間(Required Time)を計算し、その差(Slack)が正ならばMET、負ならVIOLATEDと判定する。パスのうち、入力ピン→出力ピンは伝搬時間のmin/maxを計算し、FF間はセットアップとホールドの2つの項目を計算する。
項目 |
Arrival Time |
Required Time |
Slack |
セットアップ |
d1(max) + d2(max) |
T + d3(max) - d4(setup) |
Required - Arrival |
ホールド |
d1(min) + d2(min) |
d3(min) + d4(hold) |
Arrival - Required |
ここで、遅延値がmin/maxになる条件をFast/Slowコーナとよび、プロセスばらつき、電源電圧、ジャンクション温度の3つの要因(PVTとよぶ)によって決まる。
条件 |
プロセス(P) |
電圧(V) |
温度(T) (注1) |
Slowコーナ |
最速 |
min |
max |
Fastコーナ |
最遅 |
max |
min |
(注1) 65nm以下のプロセスでは高温でなく低温の方がSlowコーナになることがある。 これは温度が変わると、FETのキャリア移動度としきい値電圧の2つのパラメータが 速度について逆方向に変化するので、どちらが支配的かに依存するためである。 |
QuartusとVivadoではFast/Slowコーナの取り方に少し違いがある。Vivadoでは選択したデバイス型名のSpeed Gradeにおける最速/最遅プロセスとしているが、QuartusではSlowコーナはVivadoと同じだがFastコーナは最速Speed Gradeにおける最速プロセスとしている。また、温度について、QuartusではSlowコーナは高温と低温の2つの場合を計算している(どちらが遅くなるか不確定)が、Vivadoでは1つの場合しか計算されない(高温か低温かは特に言っていない)。
ちなみに、Speed Gradeの付け方もIntelとXilinxでは異なっていて紛らわしい。Intelでは同じSpeed Grade(数字が小さいほど速い)でもIND品(Tj=-40 to 100)はCOM品(Tj=0 to 85)より遅延値は大きい。一方、Xilinxでは同じSpeed Grade(数字が大きいほど速い)ならばIND品でもCOM品でも遅延値は同じである。
◇◇
パスに対する解析の項目と条件をまとめると次表のようになる。
パス |
項目 |
条件 |
FF→FF |
セットアップ |
Slowコーナ |
ホールド |
Fastコーナ |
|
入力ピン→FF |
セットアップ(tSU) |
tSU>0のときSlowコーナ tSU<0のときFastコーナ |
ホールド(tH) |
tH>0のときFastコーナ tH<0のときSlowコーナ |
|
FF→出力ピン |
クロックツーアウトプット(tCO),max |
Slowコーナ |
クロックツーアウトプット(tCO),min |
Fastコーナ |
|
入力ピン→出力ピン |
伝搬遅延(tPD),max |
Slowコーナ |
伝搬遅延(tPD),min |
Fastコーナ |
この表において、入力ピン→FFのパスで、tSU,tHの正負によって条件が変わるのは次の理由による。
FFのセットアップ時間は正であるが、FPGAの入力ピンで見たセットアップ時間(tSU)は
tSU = (FFのsetup) + (データ遅延) − (クロック遅延)
なので、データ遅延とクロック遅延との大小関係によって正にも負にもなりうる。
このとき、入力ピンへデータが到達するRequired Timeが最も早くなる条件を考えると
tSU>0の場合、|tSU|がmaxになるとき(Slowコーナ)
tSU<0の場合、|tSU|がminになるとき(Fastコーナ)
だから、tSUの正負によって、Slow/Fastコーナどちらの条件で計算するかが変わるのである。
同様に、FPGAの入力ピンで見たホールド時間(tH)は
tH = (FFのhold) − (データ遅延) + (クロック遅延)
であり、入力ピンへデータが到達するRequired Timeが最も遅くなる条件は次のようになる。
tH>0の場合、|tH|がminになるとき(Fastコーナ)
tH<0の場合、|tH|がmaxになるとき(Slowコーナ)