インテル® Hyperflex™ アーキテクチャー高性能デザイン・ハンドブック

ID 683353
日付 10/04/2021
Public
ドキュメント目次

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

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

図 99に 、赤い線は同じクリティカル・チェーンを表します。タイミング制限により、レジスターAが前方にリタイミングするのを防ぎます。タイミングの制限により、レジスターBが逆方向にリタイミングすることも防止されます。レジスターAとレジスターBが同じレジスターである場合、ループが発生します。

図 99. サンプルクリティカル・チェーン

クリティカル・チェーンに関する早送りの推奨事項は次のとおりです。

  • チェーン内の「ロングパス」の遅延を削減します。遅延を削減するために標準のタイミング収束技術を使用してください。過度の組み合わせロジック、準最適配置、ルーティング輻輳により、パスの遅延が発生します。
  • チェーン内の「ロングパス」にさらにパイプライン・ステージを挿入します。ロングパスは、レジスター間の遅延が最も大きいクリティカル・チェーンの部分です。
  • 遅延を増加します(または、パイプライン・ステージをチェーンの「ショートパス」に追加する)。

重要なチェーンの特定のレジスターは、他の多くの理由でパフォーマンスを制限する可能性があります。コンパイラーは、リタイミングによってさらなる最適化を制限する次のタイプの理由を分類します。

  • 不十分なレジスター
  • ループ
  • ショートパス/ロングパス
  • パスの制限

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

表 11.  さまざまなデザイン条件に対するHyper-Registerのサポート
デザイン条件 Hyper-Registerのサポート
Initial conditions that cannot be preserved Hyper-Registerは初期条件をサポートしています。ただし、すべてのレジスターの初期条件ステージ(つまり、Hyper-Registerのマージおよび複製)を保持しながら、リタイミング操作を実行することはできません。このような状況がデザインで発生した場合、関係するレジスターはリタイムされません。これにより、レジスターのリタイミングがデザイン機能に影響を与えないことが保証されます。
Register has an asynchronous clear Hyper-Registerは、データおよびクロック入力のみをサポートします。Hyper-Registerには、非同期クリア、プリセット、イネーブルなどのコントロール信号がありません。非同期クリアを持つレジスターは、Hyper-Registerにリタイムすることはできません。非同期クリアは、ステートマシンやコントロール・ロジックなど、必要なときにのみ使用してください。多くの場合、データパスの大部分から非同期クリアを回避または削除することができます。
Register drives an asynchronous signal このデザイン条件は、非同期リセットを使用するデザインに固有のものです。非同期クリアでリセットされるレジスターの数を削減することに重点を置いてください。
Register has don’t touch or preserve attributes Compilerは、これらの属性を持つレジスターをリタイムしません。 Preserve属性を使用して高いファンアウト信号のレジスター複製を管理する場合、preserve属性を削除してみてください。Compilerは、それぞれの宛先への各ルーティング・パスに沿って高いファンアウトレジスターをリタイムすることができます。あるいは、 dont_merge属性を使用します。Compilerは、ALM、DDIO、シングルポートRAM、およびDSPブロックにレジスターをリタイムします。
Register is a clock source このデザイン条件は一般的ではありません。特に、デザインのパフォーマンスに重大な影響を与える部分については、まれです。このリタイミング制限が必要な性能を達成できない場合、PLLがレジスターではなくクロックを生成できるかどうかを検討してください。
Register is a partition boundary この条件は、デザインパーティションを使用するデザインに固有です。このリタイミング制約により、必要なパフォーマンスを達成できない場合、Hyper-Retimingのパーティション境界内にレジスターを追加してください。
Register is a block type modified by an ECO operation この制限は一般的ではありません。 ECOを実行するのではなく、デザインソースの機能的な変更を行い、リコンパイルすることによって制限を回避してください。
Register location is an unknown block この制限は一般的ではありません。指定したブロックタイプに隣接して余分なレジスターを追加することで、この条件を回避することができます。
Register is described in the RTL as a latch Hyper-Registerはラッチを実装できません。 RTLコーディングの問題(不完全な割り当てなど)のために、ラッチが推測されることがあります。ラッチを実装しない場合、RTLを変更してください。
Register location is at an I/O boundary すべてのデザインにI/Oが含まれていますが、Hyper-RetimingのI/O境界の隣にパイプライン・ステージを追加することができます。
Combinational node is fed by a special source この状態は珍しく、特にデザインの性能重視の部分では珍しいことです。
Register is driven by a locally routed clock Hyper-Registerは、専用のクロックネットワークによってのみクロックされます。ルーティング・ファブリックを使用してクロック信号を配信することは珍しいことですが、特にデザインのパフォーマンス重視の部品です。代わりに小さなクロック領域を実装することを検討してください。
Register is a timing exception end-point Compilerは、SDC制約のソースまたはデスティネーションであるレジスターをリタイムしません。
Register with inverted input or output この状態はまれです。
Register is part of a synchronizer chain Fitterはシンクロナイザー・チェーンを最適化して平均故障間隔(MTBF)を増やし、コンパイラーはシンクロナイザー・チェーンの一部として検出またはマークされたレジスターのリタイミングを行いません。シンクロナイザー・チェーンに隣接するクロックドメイン境界にパイプライン・ステージを追加して、リタイミングの柔軟性を提供します。または、特定のシンクロナイザー・チェーンのSynchronization Register Chain Length (デフォルトは3)の検出数を減らすことができます。場合によっては、シンクロナイザー・チェーンは不要であり、推論すべきではありません。
Register with multiple period requirements for paths that start or end at the register (cross-clock boundary) この状況は、レジスターが1つの周波数でクロックのデータをラッチし、別の周波数で動作するレジスターにファンアウトする任意のクロスクロック境界で発生します。Compilerは、クロスクロック境界でレジスターをリタイムしません。リタイミングに柔軟性を持たせるために、クロックドメイン境界の一方の側または他方の側にパイプライン・ステージを追加することを検討してください。