インテル® Quartus® Primeプロ・エディションのユーザーガイド: デザインのコンパイル

ID 683236
日付 6/26/2023
Public
ドキュメント目次

1.7.6. リタイミングの制限と対処方法

コンパイラーは、Hyper-Retimingによって最適化をさらに行う場合に制限となるデザイン内のレジスターチェーンを識別します。コンパイラーは、このような関連レジスター間パスをクリティカル・チェーンと呼びます。クリティカル・チェーンおよび関連付けられているクロックドメインの fMAX は、レジスター間パスの平均遅延、および配線ワイヤーなどの分割できない回路要素の量子化遅延によって制限されます。 さまざまな状況がリタイミングの制限を引き起こします。リタイミングの制限は、ハードウェアの特性やソフトウェアの動作に起因するものや、デザインに固有の問題などがあります。Retiming Limit Details は、リタイミングをさらに行う際の妨げとなる制限理由、およびチェーンを構成するレジスターと組み合わせノードをレポートとして提供します。Fast Forwardの推奨事項では、クリティカル・チェーンを除去し、さらにレジスターのリタイミングを行うための手順が一覧で提供されます。

次のシンプルなクリティカル・チェーンの図において、赤い線は同じクリティカル・チェーンを表しています。タイミング制約により、レジスターAが前方にリタイミングされないようになっています。また、タイミング制約により、レジスターBが後方にリタイミングされないようになっています。レジスターAとレジスターBが同じレジスターである場合は、ループが発生します。

図 92. クリティカル・チェーン例

クリティカル・チェーンに関するFast Forwardの推奨事項には次のようなものがあります。

  • チェーン内の「長いパス」の遅延を減らします。標準的なタイミング・クロージャー手法を使用して遅延を削減します。組み合わせロジック、最適ではない配置、配線の輻輳などがパス遅延の原因になります。
  • チェーン内の「長いパス」にさらにパイプライン・ステージを挿入します。長いパスはクリティカル・チェーンの一部で、レジスター間の遅延が最も大きくなります。
  • 遅延を増やします (チェーン内の「短いパス」にパイプライン・ステージを追加する)。

他にも、さまざまな理由により、クリティカル・チェーンの特定のレジスターによってパフォーマンスが制限されることがあります。コンパイラーは、リタイミングによって最適化をさらに行う場合の制限となる理由を次のように分類します。

  • レジスター不足
  • ループ
  • 短いパス/長いパス
  • パスの制限

特定のクリティカル・チェーンがデザインのパフォーマンスを制限している理由を把握したら、RTLを変更してボトルネックを解消し、パフォーマンスを向上させることができます。

表 24.  さまざまなデザイン条件に対するHyper-Registerのサポート
デザイン条件 Hyper-Registerのサポート
初期条件を維持することができない Hyper-Registerは初期条件をサポートします。ただし、すべてのレジスターの初期条件ステージを維持する場合は、一部のリタイミング操作を実行することができません (つまりHyper-Registerのマージおよび複製)。この条件がデザインで発生している場合、フィッターは、このようなレジスターのリタイミングを行いません。このリタイミング制限により、レジスターのリタイミングがデザインの機能に影響を与えないことが保証されます。
レジスターに非同期クリアがある Hyper-Registerは、データおよびクロック入力のみをサポートします。Hyper-Registerには、非同期クリア、プリセット、イネーブルなどのコントロール信号がありません。フィッターでは、非同期クリアのあるレジスターをリタイミングすることはできません。非同期クリアは、ステートマシンやコントロール・ロジックなど、必要な場合にのみ使用します。多くの場合は、データパスの多くの部分で非同期クリアを回避または削除することができます。
レジスターで非同期信号を駆動している このデザイン条件は、非同期リセットを使用するデザインに固有です。非同期クリアでリセットされるレジスターの数を減らすことに重点を置きます。
レジスターにdon’t touchまたはpreserve属性がある コンパイラーは、このような属性をもつレジスターのリタイミングを行いません。preserve 属性を使用して高ファンアウト信号のレジスター複製を管理している場合は、preserve 属性を削除してみてください。コンパイラーにより、高ファンアウト・レジスターのリタイミングをそれぞれの到達先への配線パスに沿って行うことができる場合があります。もしくは、dont_merge 属性を使用します。コンパイラーは、ALM、DDIO、シングルポートRAM、およびDSPブロックでレジスターをリタイミングします。
レジスターがクロックソースである このデザイン条件は一般的ではありません。特に、デザインのパフォーマンスがクリティカルな部分ではあまり見られません。このリタイミング制限によって必要なパフォーマンスを達成できない場合は、レジスターではなくPLLでクロックを生成できないかを検討します。
レジスターがパーティション境界である この条件は、デザイン・パーティションを使用するデザインに固有です。このリタイミング制限によって必要なパフォーマンスを達成できない場合は、レジスターをパーティション境界内に追加し、Hyper-Retimingを行います。
レジスターがECOによって変更されるブロックタイプである この制限は一般的ではありません。ECOを行うのではなく、デザインソースで機能の変更を行い再コンパイルすることで、この制限を回避します。
レジスターの位置が不明なブロックである この制限は一般的ではありません。多くの場合、この条件は、該当するブロックタイプに隣接するレジスターを追加することで、回避することができます。
レジスターがRTL内でラッチとして記述されている Hyper-Registerではラッチを実装することができません。RTLのコーディングの問題 (不完全な割り当てなど) により、コンパイラーでラッチが推論されます。ラッチを実装しない場合は、RTLを変更します。
レジスターの位置がI/O境界である すべてのデザインにはI/Oが含まれます。パイプライン・ステージをI/O境界の隣に追加し、Hyper-Retimingを行います。
組み合わせノードが特別なソースから供給されている この条件は一般的ではありません。特に、デザインのパフォーマンスがクリティカルな部分ではあまり見られません。
レジスターがローカルに配線されたクロックによって駆動されている 専用クロック・ネットワークによってのみHyper-Registerにクロックを提供します。配線ファブリックを使用してクロック信号を分配することは一般的ではありません。特に、デザインのパフォーマンスがクリティカルな部分ではあまり見られません。代わりに、小さなクロック領域の実装を検討します。
レジスターがタイミング例外のエンドポイントである コンパイラーは、.sdc 制約のソースまたは宛先のレジスターのリタイミングを行いません。
レジスターの入力または出力が反転している この条件は一般的ではありません。
レジスターがシンクロナイザー・チェーンの一部である フィッターは、シンクロナイザー・チェーンを最適化して平均故障間隔 (MTBF) を大きくします。また、コンパイラーは、シンクロナイザー・チェーンの一部として検出またはマークされたレジスターのリタイミングを行いません。シンクロナイザー・チェーンに隣接するクロックドメイン境界でパイプライン・ステージを追加すると、リタイミングを柔軟に行うことができるようになります。または、該当するシンクロナイザー・チェーンの Synchronization Register Chain Length の検出数 (デフォルトは3) を小さくすることもできます。場合によっては、シンクロナイザー・チェーンは必要ないため、推論されるべきではありません。
レジスターに複数の周期要件がある (パスがクロック交差境界にあるレジスターで開始または終了する) この状況はクロック交差境界で発生します。ここでは、レジスターはある周波数のクロックでデータをラッチし、別の周波数で動作しているレジスターにファンアウトします。コンパイラーは、クロック交差境界のレジスターをリタイミングしません。パイプライン・ステージをクロックドメイン境界のどちらか一方に追加し、リタイミングに柔軟性をもたせることを検討します。