Quartus® Primeプロ・エディションのユーザーガイド: タイミング・アナライザー

ID 683243
日付 4/01/2024
Public
ドキュメント目次

2.3.7. フィッターの過剰制約の使用

フィッターの過剰制約は、モデリングの不正確さ、誤相関、またはロジックの最適化におけるその他の欠陥を克服するために調整するタイミング制約です。 フィッターでセットアップおよびホールドパスを過剰制約することで、特定のパスでタイミングをより積極的に最適化することができます。

Stratix® 10デザインでの過剰制約

通常、フィッター時にのみ適用される過剰制約を記述する際は、.sdc ファイルを読み取っている実行ファイルの名前をチェックする条件ステートメントを使用します。次の例は、フィッター時に過剰制約を適用する条件ステートメントを示しています。

# Example Fitter overconstraint targeting specific nodes
if { $::TimingAnalyzerInfo(nameofexecutable) eq "quartus_fit"} {
  set_max_delay -from ${my_src_regs} -to ${my_dst_regs} 1ns
}

通常、過剰制約は、特定のパス (またはパスのセット) でフィッターのデフォルトの最適化作業よりも多くを必要とする場合に適用されます。したがって、過剰制約では通常、追加の最適化が必要な (1つまたは複数の) パス内の特定のノード名またはレジスター名を指定します。

Hyperflex® アーキテクチャーをサポートするデバイス ( Stratix® 10 Agilex™ FPGAポートフォリオ・デバイスなど) の場合、特定のノード名またはレジスター名に適用するタイミング制約により、Hyper-Retimerによってそれらのノードまたはレジスターを含むパスが最適化されないようにします。

Hyper-Retimerはフィッターのコンポーネントであるため、フィッター時に条件付きで適用される過剰制約は、フィッターのHyper-Retimer部分では逆効果になります。過剰制約により、実際には最適化が効果的に進むのではなく、最適化が妨げられます。

Hyperflex® アーキテクチャーに向けて設計している場合は、is_post_route Tcl関数形式の条件ステートメントを使用して、過剰制約を配置および配線時に適用し、Hyper-Retimerには適用しないようにします。is_post_route では、フィッターのPlan、Place、Routeステージなどで過剰制約を適用し、スラックを調整することができます。また、is_post_route では、Hyper-Retimerによる配線後のリタイミングを可能にします。サインオフ時のタイミング解析には影響しません。

# Example Fitter overconstraint targeting specific nodes (allows for post-route retiming)
if { ! [is_post_route]} {
  set_max_delay -from ${my_src_regs} -to ${my_dst_regs} 1ns
}
注: is_post_route 関数は包括的です。関数を除外するには、否定構文 (!) を使用します。

他のすべてのデバイスファミリーをターゲットとする場合のデザインの過剰制約

フィッターの過剰制約を割り当て、現在の実行ファイルの名前を確認することで (quartus_fit もしくは quartus_sta)、フィッターによる最適化とサインオフのタイミング解析に異なる制約を適用することができます。

set fit_flow 0
if { $::TimingAnalyzerInfo(nameofexecutable) == "quartus_fit" } {
   set fit_flow 1
}
if {$fit_flow} {
  # Example Fitter overconstraint targeting specific nodes (restricts retiming)
  set_max_delay -from ${my_src_regs} -to ${my_dst_regs} 1ns
}

その他の過剰制約の組み合わせ

タイミング制約は、上記のフィッターの他にも、コンパイラーの特定のステージに適用することができます。次の表は、コンパイルステージのさまざまな組み合わせと、それらのステージにおいて制約を適用する条件式を示しています。

表 13.  過剰制約の組み合わせ
コンパイルステージ Tcl条件 備考
Fitter if { $::TimingAnalyzerInfo(nameofexecutable) eq "quartus_fit" } フィッターステージ全体で制約を適用します。 Hyperflex® アーキテクチャーをサポートしないデバイスでフィッターの過剰制約に使用します。
Signoffタイミング if { $::TimingAnalyzerInfo(nameofexecutable) eq "quartus_sta" } タイミング解析時に制約を適用します。この条件は一般的ではありません。通常、タイミング解析の制約はコンパイルフロー全体で適用します。
Plan、Place、Route if { ! [is_post_route] } Hyperflex® アーキテクチャーをサポートするデバイスのPlan、Place、Routeステージで制約を適用します。フィッターの過剰制約に使用します。
Retime (HyperRetimer)、Finalize、Signoffタイミング if { [is_post_route] } Hyperflex® アーキテクチャーをサポートするデバイスのRouteステージ完了後に制約を適用します。このステージの組み合わせは一般的ではありません。通常、タイミング解析の制約はコンパイルフロー全体で適用します。
Retime (HyperRetimer)、Finalize if { [is_post_route] && $::TimingAnalyzerInfo(nameofexecutable) eq "quartus_fit" } Hyperflex® アーキテクチャーをサポートするデバイスのRetimingおよびFinalizeステージで制約を適用します。このステージの組み合わせは一般的ではありません。