AN 899: 高速保存によるコンパイル時間の短縮
バージョン情報
更新対象: |
---|
インテル® Quartus® Prime デザインスイート 19.3 |
1. AN 899: 高速保存によるコンパイル時間の短縮
インテル® Quartus® Primeプロ・エディションでは、FPGAペリフェラル・ブロックまたはコア・ロジック・デザイン・ブロックの要件を満たしているコンパイル結果を保存し、それらのブロックの配置および配線をその後のコンパイルで再利用することができます。階層インスタンスをデザイン・パーティションとして割り当て、コンパイルの成功後にそれを保存し再利用することができます。
デザインのセットアップ要件
高速保存を使用するには、1つ以上の予約済みコア・パーティションと、ルート・パーティションとして機能する保存された.qdbが必要です。このデザインの分割は、デバイス・ペリフェラルの再利用またはパーシャル・リコンフィグレーション (PR) の実装フローで必要な分割に類似しています。このチュートリアルには、このセットアップを示すデザイン例が含まれています。
1.1. チュートリアル用デザインの概要
このチュートリアルには、高速保存の使用方法を示すために準備されたデザイン例が含まれています。インテルQuartus Prime開発ソフトウェア・プロ・エディションのチュートリアル手順で使用するデザイン例は、チュートリアル向けデザインファイルのダウンロード で説明されているようにダウンロードすることができます。
デザイン例の最上位では、550 MHzの高速クロック (CLK1) および100 MHzの低速クロック (CLK2) を生成するPLLをインスタンス化します。最上位デザインではまた、LED[3:0] をそれぞれ2、4、8、16秒ごとに駆動する点滅LEDモジュールを4つインスタンス化します。
また、 インテル® FPGAのデザインサイズを大きくするため、デザイン例では、OpenCores*デザインの重複する20のインスタンスをインスタンス化します。1
重複するOpenCores* デザイン・インスタンスには次の特性があります。
- デザインは各インスタンスを並列に実装します。
- I/Oラッパーロジックを備え、より大きなデザインに必要なI/Oピンの数を低減します。
- インスタンスとラッパーロジック間にタイミングがクリティカルなパスは存在しません。
1.2. チュートリアル向けデザインファイルのダウンロード
- チュートリアル・デザイン・ファイルを次のリンクよりダウンロードし、展開します。
- 展開したチュートリアル・デザイン・ファイルのディレクトリー構造を表示します。
ファイル名 | 説明 |
---|---|
top.sv |
iopll、big_partition1_top、blinking_led_2s、blinking_led_4s、blinking_led_8s、およびblinking_led_16sをインスタンス化する最上位ファイルです。LED[4:7]を単一のシフトビットとして駆動するロジックも含まれています。 |
top.qpf | インテル® Quartus® Primeのプロジェクト・ファイルであり、プロジェクト名とリビジョンを格納します。 |
top.qsf | インテル® Quartus® Primeの設定ファイルであり、プロジェクトの割り当てと設定を含みます。 |
big_partition1_top.v | OpenCores*デザインの20のインスタンスをインスタンス化するデザインファイルです。 |
blinking_led_2s.sv | LED[0] を2秒ごとに駆動するロジックです。 |
blinking_led_4s.sv | LED[1] を4秒ごとに駆動するロジックです。 |
blinking_led_8s.sv | LED[2] を8秒ごとに駆動するロジックです。 |
blinking_led_16s.sv | LED[3] を16秒ごとに駆動するロジックです。 |
blinking_led.sdc | Synopsysデザインの制約ファイルであり、50 MHzの入力リファレンスclockを定義します。 |
iopll.ip | topでインスタンス化されるIOPLLインテル® FPGA IPです。IPは50 MHzのリファレンス・クロック周波数を使用し、100 MHzおよび550 MHzのクロックを生成します。 |
tx_dcfifo.ip | blinking_led_2s、blinking_led_4s、blinking_led_8s、およびblinking_led_16sのインスタンスでインスタンス化されるデュアルクロックFIFOインテルFPGA IPです。550 MHzの書き込みクロックと100 MHzの読み出しクロックを備えます。 |
report_timing.tcl | タイミング・アナライザーのコマンドを備えるtclスクリプトで、各パーティションの最小の正のスラックまたは最低スラックでのパスレポートの概要を生成します。また、タイミングを満たすパーティション内の2つのノードのタイミングを報告します。 |
1.3. モジュール1: 分割されていないデザインの解析
プロセスの説明
Fast Preserveオプションを使用するには、パーシャル・リコンフィグレーションのセットアップと同様にデザインを分割する必要があります。まず分割されていないデザインを解析し、十分なパフォーマンスを示しているブロックと、さらに最適化が必要なブロックを特定します。 インテル® Quartus® Primeのデザイン・アシスタントは、さらに最適化する必要がある領域の特定に役立ちます。
デザインを分割後、そのパーティションを保存してFast Preserveを有効にすることで、コンパイル時間を最適化されていないパーティションに集中させます。
チュートリアル・ファイル
tutorial_flatディレクトリーには、このチュートリアル・モジュールで使用するファイルが含まれています。
チュートリアルの手順
このチュートリアル・モジュールには、次のステップが含まれます。
1.3.1. ステップ1: フラットデザインのコンパイル
- インテルQuartus Prime開発ソフトウェア・ プロ・エディションのFile > Open Projectをクリックし、/tutorial_flat/top.qpfプロジェクト・ファイルを開きます。
-
フラットデザインをコンパイルするには、Compilation DashboardのCompile Designをクリックします。システムによっては、フラット・コンパイルに40分以上かかる場合があります。
図 3. Compilation Dashboard
-
Compilation Reportでコンパイル時間を確認するには、Flow Elapsed Timeレポートをクリックします。Fast Preserveは、このコンパイル時間を大幅に短縮することが可能です。
図 4. Flow Elapsed Timeレポート
1.3.2. ステップ2: タイミングがクリティカルなデザインブロックの特定
- タイミング・アナライザーを開くには、Tools > Timing Analyzer をクリックします。
-
タイミング・アナライザーのTasksペインで、Update Timing
Netlistをダブルクリックし、コンパイル中に生成された最終的なタイミング・ネットリストをロードします。
図 5. タイミング・アナライザーのTasksペイン
-
report_timing.tclスクリプトを実行し、タイミングがクリティカルなデザインブロックにおける要件を満たさないパスを特定するには、Consoleウィンドウで次のコマンドを入力します。Consoleウィンドウが表示されていない場合は、タイミング・アナライザーのView > ConsoleをクリックしてConsoleを表示します。このスクリプトは、要件を満たさないパスを特定するコマンドを実行します。
source report_timing.tcl
tclスクリプトはreport_timingコマンドを実行し、最低スラックをもつ上位100パスのタイミングをキャプチャーします。このスクリプトは、一部のデザインブロックの特定のノード間のタイミングをキャプチャーするように事前にコンフィグレーションされています。これらのノードのタイミングは、このチュートリアルの後半で解析します。
図 6. タイミング・アナライザーのReportフォルダー表 2. report_timing.tclによって生成されるタイミング解析のレポート タイミング解析のフォルダー 対象 タイミングレポートによって表示される内容 inst_big u_big_partition1_top 最低スラックをもつ上位100パスの解析 inst_i1 u_blinking_led_i1 inst_i2 u_blinking_led_i2 inst_i3 u_blinking_led_i3 inst_i4 u_blinking_led_i4 inst_big_path1 u_big_partition1_top 特定のノード間のタイミングの解析 inst_i1_path1 u_blinking_led_i1 inst_i2_path1 u_blinking_led_i2 - inst_bigフォルダーのSlow 900 mV 100C Modelレポートを右クリックした後、Generate in All Cornersをクリックします。この手順を、inst_i1、inst_i2、inst_i3、およびinst_i4フォルダーで繰り返します。
- Reportペインの各フォルダーに生成されるMulti Corner Summaryレポートを表示します。inst_i3フォルダーおよびinst_i4フォルダーの赤い文字のレポートは、要件を満たしていないパスがあるタイミングがクリティカルなデザインブロックを示しています。
-
inst_i3フォルダーのMulti Corner Summaryレポートを開きます。From NodeフィールドおよびTo Nodeフィールドの値を確認します。解析により、u_blinking_led_i3の要件を満たしていないパスは、64ビットカウンターにあることが示されています。このカウンターは、8秒に相当するサイクル数をカウントします。各サイクルは1.818 nsです。
図 7. u_blinking_led_i3のMulti Corner Summary注: 配置と配線の結果は、プロセッサー、OS、およびソフトウェアのバージョンによって異なる場合があります。
-
inst_i4フォルダーのMulti Corner Summaryレポートを開きます。From NodeフィールドおよびTo Nodeフィールドの値を確認します。解析により、u_blinking_led_i4の要件を満たしていないパスは、64ビットカウンターにあることが示されています。このカウンターは、16秒に相当するサイクル数をカウントします。各サイクルは1.818 nsです。
図 8. u_blinking_led_i4のMulti Corner Summaryタイミング解析は、最適化に向けて、u_blinking_led_i3およびu_blinking_led_i4をタイミングがクリティカルなデザインブロックとして特定しています。
1.3.3. ステップ3: デザイン・アシスタントの結果の確認
デザイン・アシスタントを実行するには、次の手順に従います。
-
デザイン・アシスタントの設定を表示するには、Assignments > Settings > Design Assistant Rule Settingsの順にクリックします。次のデザイン・アシスタントの設定は、コンパイル時にデザイン・アシスタントを自動的に有効にすること、およびHRR-10101 Asynchronous Clearsの規則が有効になっていることを示しています。HRR-10101は、デザインのパフォーマンスを向上させる可能性のあるパスのリタイミングを妨げる非同期のクリア信号を特定します。
図 9. デザイン・アシスタントの設定
-
Compilation ReportのSynthesisフォルダーで、Design Assistant (Elaborated) フォルダーを展開します。デザイン・アシスタントは、リタイミングを制限する非同期のクリアがデザインに含まれていることを報告します。
図 10. デザイン・アシスタント・レポート
モジュール2: タイミングが収束しているデザイン・パーティションの保存 では、これ以上の最適化を必要としないデザイン・パーティションを保存する方法を説明しています。これにより、最適化がさらに必要な領域にコンパイラー努力を集中させることができます。
1.4. モジュール2: タイミングが収束しているデザイン・パーティションの保存
プロセスの説明
デザインを分割してデザインすると、デザイン内の個々のロジックブロックを保存することができます。デザインを分割後、タイミングを満たすブロックのパーティションを保存し、他のデザインブロックの最適化に集中することができます。
このチュートリアル・モジュールでは、ルート・パーティションを保存して再利用します。これは、デバイスのペリフェラルを含むパーティションです。
チュートリアル・ファイル
tutorial_baseディレクトリーには、このチュートリアル・モジュールで使用するファイルが含まれています。
チュートリアルの手順
このチュートリアル・モジュールには、次のステップが含まれます。
1.4.1. ステップ1: デザイン・パーティションの作成
- インテルQuartus Prime開発ソフトウェア・プロ・エディションで、File > Open Projectをクリックし、/tutorial_base/top.qpfプロジェクト・ファイルを開きます。
- Processing > Start > Start Analysis & Elaborationの順にクリックします。
- Project NavigatorのHierarchyタブで、u_blinking_led_topインスタンスを展開します。
-
u_blinking_led_i3インスタンスを右クリックしてDesign Partitionを指し、TypeにReserved Coreを選択します。割り当てられている各インスタンスの横に、デザイン・パーティションのアイコンが表示されます。図 12. デザイン・パーティションの作成
- 手順の4を繰り返し、u_blinking_led_i4インスタンスにパーティションを作成します。残りのインスタンスは、ルート・パーティションの一部としてエクスポートします。
- Design Partitions Windowをまだ開いていない場合は、Assignments > Design Partitions Windowをクリックします。Design Partitions Windowには、コンパイラーがそれぞれのプロジェクトに自動的に作成するルート・パーティション (|) とともに、ご自身で定義したパーティションがリストされます。図 13. Design Partitions Window2
1.4.2. ステップ2: デザイン・パーティションのフロアプラン
-
Design Partitions WindowのProject Navigatorでblinking_led_8sインスタンスを右クリックし、
Logic Lock Region > Create New Logic Lock Regionをクリックします。
図 14. Logic Lock領域の作成
- 領域のプロパティーを変更するには、Assignments > Logic Lock Regions Windowをクリックします。
- Origin列で、X165_Y113を指定します。
- Widthを14、そしてHeightを34に変更します。
- ReservedおよびCore-Onlyのオプションを有効にします。
- Routing Regionセルをクリックします。 Logic Lock Routing Region Settingsダイアログボックスが表示されます。
- Fixed with expansionは、Routing TypeのExpansion Lengthを1にして指定します。このチュートリアルにおいて、実際のサイズと位置は任意です。ただし、Logic Lock領域の形状は、Chip Plannerで確認および調整することができます。
-
1から7の手順を繰り返し、次のLogic Lock領域をblinking_led_16sインスタンスに定期議します。
図 15. Logic Lock領域
- Origin—X165_Y149
- Width—14
- Height—34
- Reserved—On
- Core Only—On
- Expansion Length—Fixed with expansion 1
このフロアプランでは、配置位置が出力ピンから離れ過ぎていないため、ref_clock_inのタイミングが満たされます。
図 16. Logic Lock領域の配置
1.4.3. ステップ3: タイミングが収束しているルート・パーティションの保存
- Assignments > Design Partitions Windowをクリックします。
-
root_partition行で、root_partition.qdbをPost Final Export Fileとして指定します。
図 17. Post Final Export File
- デザインをコンパイルしてパーティションをエクスポートするには、Compilation DashboardのCompile Designをクリックします。
1.5. モジュール3: 高速保存での最適化
プロセスの説明
プロジェクトの別のリビジョンを作成し、他のパーティションの最適化時に、保存されているルート・パーティションを再利用することができます。Fast Preserveオプションを有効にすると、コンパイラーは、インポートされたパーティションのロジックをパーティション境界とデザインの残りの部分の間のインターフェイス・ロジックのみに省略するため、そのパーティションに必要なコンパイル時間が短縮します。
このチュートリアル・モジュールでは、デバイスのペリフェラルを含むパーティションであるルート・パーティションを再利用します。
チュートリアル・ファイル
tutorial_implディレクトリーには、このチュートリアル・モジュールで使用するファイルが含まれています。
チュートリアルの手順
このチュートリアル・モジュールには、次のステップが含まれます。
1.5.1. ステップ1: プロジェクトのリビジョンの作成
-
tutorial_baseディレクトリーから、次のファイルをtutorial_implディレクトリーにコピーします。
- top.qsf—プロジェクトの新しいリビジョンに、パーティションとLogic Lockの設定を含めます。
- root_partition.qdb—最終的な.qdbのスナップショットを新しいリビジョンのルート・パーティションとして適用します。
-
top.qsfで、次の行を削除します。
set_instance_assignment -name EXPORT_PARTITION_SNAPSHOT_FINAL \ root_partition.qdb -to | -entity top
- top.qsfを保存します。
1.5.2. ステップ2: 高速保存の有効化
- Assignments > Settings > Compiler Settings > Incremental Compileの順にクリックします。
-
Fast Preserveオプションをオンにします。
図 18. Fast Preserveオプション
- OKをクリックします。
set_global_assignment -name FAST_PRESERVE AUTO
1.5.3. ステップ3: ルート・パーティションのインポート
- Design Partitions Windowをまだ開いていない場合は、Assignments > Design Partitions Windowをクリックします。Design Partitions Windowは、ステップ1: デザイン・パーティションの作成 で作成したblinking_led_8sおよびblinking_led_16sのパーティションをリストします。
-
root_partition行で、root_partition.qdbをPartition Database Fileとして選択します。これにより、root_partition.qdbがこのプロジェクトのルート・パーティションのソースになります。
図 19. ルート・パーティションのインポート
1.5.4. ステップ4: 予約済みコア・パーティションの最適化
-
blinking_led_8sおよびblinking_led_16sのRTLを更新し、タイミング違反と非同期リセットを修正します。
注: この手順を高速化するには、単に、golden_rtlディレクトリーからblinking_led_8s.svおよびblinking_led_16s.svをコピーし、これらのファイルをtutorial_implディレクトリーに貼り付けて既存のファイルを上書きします。
-
Compilation DashboardのCompile Designをクリックします。Compilation Dashboardには、コンパイラーの各モジュールで費やされた時間と総コンパイル時間が表示されます。
図 20. Fast Preserveコンパイルフローの時間
1.5.5. ステップ5: 高速保存結果の表示
-
Compilation Reportでコンパイル時間を確認するには、Flow Elapsed Timeレポートをクリックします。このレポートは、コンパイラーの各モジュールで短縮された時間を示します。
図 21. コンパイル時間の比較
-
Synthesisフォルダー内のDesign Assistant (Elaborated) レポートを表示します。非同期クリアの規則違反はすべて解決されています。
図 22. デザイン・アシスタントの結果
- タイミング・アナライザーの結果を表示するには、Tools > Timing Analyzerをクリックします。
- TasksペインのUpdate Timing Netlistをダブルクリックします。
- ReportsのSlackフォルダーを開きます。
-
Report Setup Summaryをダブルクリックします。デザインは、セットアップのタイミング要件をすべて満たしています。
図 23. タイミング解析の結果
1.6. AN 899: 高速保存によるコンパイル時間の短縮の改訂履歴
ドキュメント・バージョン | インテル® Quartus® Primeのバージョン | 変更内容 |
---|---|---|
2019.11.06 | 19.3.0 |
|