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

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

1.3.1.1. Sweep Hints Viewer

Sweep Hints Viewerを使用すると、合成によってデザイン内のロジックが削除された理由を視覚化して特定することができます。これは、RTLアナライザーのツールの1つで、メニューから Tools > View Sweep Hints を選択してアクセスすることができます。
スイープされたインスタンスのコンテキスト・メニューから起動することもできます。

RTLアナライザーは、最上位モジュールのポートとリーフ・インスタンスを、関連するスイープヒントとともにオレンジ色で強調表示します。スイープされたポートまたはインスタンスの上にカーソルを合わせると、ツールチップには、スイープされたポート数、スイープヒントのタイプ、およびスイープヒントの理由が表示されます。これらの強調表示とツールチップは、次の図に示すように、回路図ビューとネットリスト・ナビゲーターの両方で利用できます。

RTLアナライザーのスイープ・ヒント・ビュー

RTLアナライザーからSweep Hints Viewerを起動するには、スイープされたインスタンス、またはネットリスト・ナビゲーターもしくは回路図ビューの最上位モジュールポートのコンテキスト・メニューから、View Sweep Hints を選択します。次の図を参照してください。

コンテキスト・メニューから View Sweep Hints オプションを選択すると、Sweep Hints Viewerには、選択しているインスタンスまたはポートのスイープヒントが自動入力されます。詳細は次の図のとおりです。

選択しているインスタンスに対して自動入力されるスイープ・ヒント・リスト

Sweep Hints Viewerの根本原因ビュー

デザインの特定のノードがスイープされる根本原因を特定するには、次にリストされている、スイープ時にノードがマークされるさまざまな理由を理解する必要があります。

  • ノードが定数0または1で止まっています。例えば、AND ゲートの入力ポートが0で止まっていると、AND ゲートのスイープがトリガーされます。これは、AND ゲートの出力も0で止まっているためです。
  • ノードがワイヤーとして動作しており、削除されています。例えば、選択ラインが定数に接続されているマルチプレクサーは、ワイヤーとして機能します。
  • スイープ時にノードに変更がありましたが、削除されていません。
  • ノードのすべてのファンアウトがなくなり、削除されています。
  • ポートまたはインスタンス・ポートが切断されています。親または子にファンアウトがありません。

Sweep Hints Viewerの Root Causes タブには、スイープの記録とそれらがスイープされた根本原因のリストが表示されます。次に例を示します。

図 9. Sweep Hints ViewerのRoot Causesタブ

Root Causesビューには、根本原因が表示されます。また、Swept Objects Count 列には、ルート・オブジェクトのスイープされたオブジェクト総数が表示されます。これは、Root Record 列のスイープ記録までたどることができます (例えば、上の画像の802137)。コンテキスト・メニューから Show Sweep Hints オプションを選択すると、インターフェイスが Sweep Hints ビューに切り替わり、Root Recordを根本原因として特定するスイープ記録がすべて表示されます。次の図のようになります。

図 10. Root Recordのスイープ記録の追跡
注: Show Hint Trace の詳細に関しては、Sweep Hints ViewerのSweep Hintsビュー を参照してください。

Sweep Hints Viewerの階層ビュー

DNIフロー (ベータ版) で説明されているとおり、スイープ最適化 (スイープ・チェックポイント) はAnalysis & Elaborationステージの一部として実行されます。スイープ最適化フェーズでは、スイープされたオブジェクトのデータベースと、その削除理由が残されます。データベースは、削除されたオブジェクト間の関係も追跡します。例えば、ゲートの出力が宙に浮いている場合は、スイープされます。ファンインコーン内のいくつかのセルも、その出力が有用な駆動をしていない場合はスイープされる可能性があります。Sweep Hints Viewerを使用すると、スイープ・ヒント・データベースを表示することができます。これには、スイープ前のデザインでマークされた、後に削除されるオブジェクトのリストが含まれます。

注: 大規模で複雑なデザインの場合、スイープされるオブジェクトの総数が膨大になる可能性があります (数百万)。したがって、スイープされるオブジェクトは階層的に配置されます。それにより、確認したい領域をすばやくクエリー、フィルタリング、および検索することができます。
図 11. Sweep Hints ViewerのHierarchyタブ

Sweep Hints Viewerの Hierarchy タブでは、さまざまな階層レベルとそのスイープ統計を観察することができます。ここでの論理ユニットはリーフセルであり、AND/ORゲートやレジスターなどの論理プリミティブを指します。階層セルは、リーフセルと他の階層セルの複合体です。

上の画像の Leaf Cells Count by Hierarchy テーブルは、ローカルまたは特定の階層パスの階層全体でスイープされたロジックの割合に関する情報を提供します。テーブルの列は、スイープ前後のリーフセルの数と、階層パスのタイプを示します。階層パスのタイプは、USER (設計したRTL)、 インテル® IP、またはメガファンクション ( インテル® が提供するライブラリー・モジュール) になります。階層テーブルが大きい場合は、フィルターオプションを使用してデザインの領域を絞り込みます。

注: インテル® IPおよびメガファンクション・タイプは変更することができないため、デフォルトでは非表示になります。ただし、特定の状況では表示することができます。それには、Hierarchy Typeドロップダウン・リストで必要なオプションを選択します。暗号化されたモジュールは常にこのビューでは非表示になります。

Sweep Hints ViewerのSweep Hintsビュー

図 12. Sweep Hints Viewerにおけるスイープ・オブジェクト例

回路図ビューで、青緑色でハイライト表示されているスイープ・オブジェクトに注目してください。このオブジェクトのツールチップにカーソルを合わせる、もしくはSweep Hints Viewerでスイープの理由を表示すると、このインスタンスは、インスタンス・ポートのファンアウトがなくなったためにスイープされていることが分かります。同様に、他のスイープ・オブジェクトを選択して根本原因を特定し、回路図ビューアーと階層ビューで表示することができます。これらのオブジェクトはすべて、コンパイルフローを進めると最終的にはデザインから削除されます。

Hierarchy タブは、インスタンスのスイープ統計によるフィルタリングに役立ちます。Sweep Hints タブを使用すると、特定の階層レベルでスイープされたリーフ・オブジェクトをフィルタリングしてクエリーすることができます。テーブルのさまざまな列では、スイープに関係するオブジェクトを説明し、データをクエリーする方法を提供しています。例えば、特定のインスタンス・タイプを検索したり、結果を特定のスイープ理由やタイプなどに限定したりすることができます。

スイープに関連するオブジェクトの表示

スイープに関連するオブジェクトの表示は、Sweep Hints の下にある選択オブジェクトを右クリックし、コンテキスト・メニューから Show Hint Trace を選択することでも行うことができます。Hint Trace for ID <number> セクションには、スイープされるオブジェクトの階層リストが表示されます。このリストには、特定のオブジェクトがスイープされる原因となったスイープ・オブジェクトや、あるオブジェクトの結果としてスイープされるオブジェクトが含まれます。チェーン内のさまざまなオブジェクトをハイライトして選択する機能により、必要なスイープ情報を絞り込むことができます。

次の図では、オブジェクトID 30のポートのスイープヒントを追跡しています。Hint Trace for ID 30 からは、オブジェクトID 2のインスタンス・ポートがスイープポート30に関連付けられていることが分かります。両方のオブジェクトのスイープの理由は、ファンアウトの切断です。

図 13. スイープに関連するオブジェクト