こんにちは。

マクニカで インテル® FPGA 製品の技術サポートをしている インテル・F・ハナコ です。

 

インテル FPGA を開発中、ユーザーによっては Quartus® Prime のコンパイル実行を繰り返さなければならない場面があります。

コンパイルを何度も実行することへの一番のストレスは、やはり “コンパイル実行中の待ち時間” ではないでしょうか。
今回はそんなストレスから解放してくれる コンパイル時間を短縮させる方法 をご紹介します。

通常のコンパイル・フロー

下図は、通常 Quartus® Prime が行うコンパイル・フローを示したものです。
主なプロセスは以下の4工程です。このうち、Analysis & Synthesis(論理合成)と Fitter(配置配線)がコンパイル実行時間の大半を占めます。

つまり、この工程の処理時間を短縮することが、コンパイルの総時間を短縮することにつながります。

Article header library 120985 pic01  1

コンパイル時間を短縮させる方法はこれだ!

Quartus® Prime には、主に以下3つのコンパイル・メソッドがあります。
いずれもコンパイルが完了したプロジェクトに対して、その後修正を加え 再コンパイルを実施したときに効果を発揮します。

 1. スマート・コンパイル(Smart Compilation)
 2. ラピッド・リコンパイル(Rapid Recompile)
 3. インクリメンタル・コンパイル(Incremental Compilation)


これらのコンパイル時間の短縮効果は、(小)1 < 2 < 3(大) です。
ここでは、その中でも簡単に使える スマート・コンパイル機能ラピッド・リコンパイル機能 を取り上げます。

ハナコのつぶやき
3つ目の “インクリメンタル・コンパイル” は一番効果的ですが、ややテクニックを要します。そのため別のページでご案内します。下記をご覧ください。

⇒ FPGA デザインの一部だけを再コンパイルする方法
⇒ インクリメンタル・コンパイルを使ってみよう

これら機能の特徴は?

スマート・コンパイル と ラピッド・リコンパイルの特徴をざっくりと下表に示します。

  スマート・コンパイル ラピッド・リコンパイル
対象デバイス Lite Edition および Standard Edition で
サポートされているデバイス
(Arria® 10, MAX® 10 を除く)
Stratix® 10, Stratix® V, Arria® 10, Arria® V, Cyclone® 10 GX, Cyclone® V
対応する
Quartus® Primeの
エディション
Lite Edition
Standard Edition
Standard Edition(Arria® 10 を除く)
Pro Edition (ver.20.3 以降では非推奨)
特徴 再実行の必要ないコンパイル項目(例えば、Analysis & Synthesis、Fitter など)をコンパイラーが自動で判断し、その工程をスキップする機能。デザイン全体が適用の対象。 一度論理合成と配置配線を終えた結果の情報を再利用して、小規模な設計変更を高速にコンパイル処理できるようにする機能。デザイン全体が適用の対象。
メリット 操作が簡単!
工程がスキップされるので、コンパイル時間が短縮できる。
操作が簡単!
前回のコンパイル結果を再利用するので、必要な部分のみを論理合成および配置配線する。デザイン変更が少ない場合、コンパイル時間を削減することができる。
デメリット デザインを一部変更すると、前回の処理結果を再適用せず、(変更のない部分も含め)デザイン全体が再コンパイル(Analysis & Synthesis から再実行)される。 対象のデバイスが限定されている。
Lite Edition では実行できない。

各コンパイルの実行フロー例

スマート・コンパイルの場合

例えば、(事前にスマート・コンパイルのオプションは適用済みの状態で)既にコンパイルが完了した後に

  • ピンレイアウトを変更した
  • デバイスの型番が変更になった(ただしデバイス・ファミリーは同一)
  • (タイミングがメットできていないなどの理由で) 内部配置に影響するオプションを設定した


このようなときにスマート・コンパイルが適用されると、コンパイラーは下図の処理動作になります。
(※ Stratix® V, Arria® V, Cyclone® V の場合はラピッド・リコンパイルの活用を推奨します。)

Article header library 120985 pic02  1

ラピッド・リコンパイルの場合

[Stratix® V, Arria® V, Cyclone® V をターゲットにしたプロジェクトが対象]
例えば、既にコンパイルが完了した後に

  • 小規模なデザイン修正があった(例: レジスタの追加)
  • 新たに機能モジュールが追加された
  • ピンレイアウトを変更した
  • デバイスの型番が変更になった(ただしデバイス・ファミリーは同一)
  • (タイミングがメットできていないなどの理由で) 内部配置に影響するオプションを設定した
  • SignalTap® II ロジック・アナライザーを追加した、あるいはそのデバッグ条件を変更した


このようなときにラピッド・リコンパイルが適用できます。
下図は、デザインが修正された場合にラピッド・リコンパイルを適用した際の、コンパイラーの処理動作を表したものです。

Article header library 120985 pic03  1

その実行方法は?(スマート・コンパイル)

ものすごく簡単です!!
まず 初回コンパイルの前に、オプションを設定します。
Assignments メニュー > Settings > Compilation Process Settings カテゴリーを選択し、Use smart compilation オプション = On!

Article header img04  9


その後、Processing メニュー > Start Compilation でコンパイルをスタートします。

Article header img05  9


このときに実行されるコンパイルは、まだスマート・コンパイルではありません。

この回 以降の再コンパイルをスマート・コンパイルで実行させるために、データベースを保存しながらコンパイルが行われます。(そのため若干処理時間がかかります。)
その後、レイアウト変更があったので再コンパイルが必要になりました。

Pin Planner でレイアウトを変更後、Processing メニュー > Start Compilation でコンパイルをスタートします。

Article header img05  10


この回のコンパイルが、まさに “スマート・コンパイル” になります!
なお、このオプションが適用されていても、再び論理合成が必要だと Quartus® Prime に判断された場合には自動的に Analysis & Synthesis が実行されます。実行状況や時間は、Tasks ウィンドウやコンパイル・レポートの Flow Elapsed Time で確認が可能です。

以上が、スマート・コンパイルの実行方法です。

その実行方法は?(ラピッド・リコンパイル)

こちらも、ものすごく簡単です!!
Processing メニュー > Start > Start Rapid Recompile をクリック!
これだけでラピッド・リコンパイルの再コンパイルが実行されます。

Article header img06  5
Article header img07  6


実行状況や時間は、Tasks ウィンドウ(自動的に Rapid Recompile モードに表示が変わります。)やコンパイル・レポートの Flow Elapsed Time で確認が可能です。

デザイン規模や変更内容の状況にも依存しますが、合成前のHDLを変更する(推奨5%以下)場合にはコンパイル速度を最大3倍に、配置配線(フィッティング)後の SignalTap® II ロジック・アナライザーを使った信号解析での条件変更の場合には最大4倍に、高速化が期待できますよ。

以上が、ラピッド・リコンパイルの実行方法です。

ハナコのちょこっとポイント!

ここでお伝えしたい結論は、「ラピッド・リコンパイルを使うとき、基本的にはスマート・コンパイル機能は OFF にしましょう。」です。

今までラピッド・リコンパイルを実行していたのに、レイアウトを変更後につい通常のコンパイル(Processing メニュー > Start Compilation)を実行してしまうと以下のエラーになることがあります。

ID:14608 You have completed a Rapid Recompile incremental compilation. Please run the Rapid Recompile Fitter to re-iterate your Rapid Recompile incremental compilation, or run Analysis & Synthesis (quartus_map) to start a Full Compilation.

"スマート・コンパイル" と "ラピッド・リコンパイル" は、前回のコンパイル結果(データベース)に対する処理のアルゴリズムが異なるため、このようなエラーが発生してしまいます。

Article header img08  6

上記エラーの回避策は、Rapid Recompile Fitter を単独実行(右図参照)後に改めてラピッド・リコンパイルを実行します。

このエラーはあくまでも一例で、他にもデータベースの不適合により別のエラーが発生することもあります。
"基本的には" と書いたのは、Quartus® Prime の特性を理解し きちんとした手順を踏めば、エラーを回避できますし機能の併用も可能です。…が、私から言わせてもらえば(せっかくラピッド・リコンパイルを使っているのに)この2つのオプション併用はあまり意味がないですね~。

最後に

いかがですか、こんなに簡単な操作でコンパイル時間を短縮できるなんて、画期的だと思いませんか?
ぜひみなさんもお試しください!


おすすめ記事/資料はこちら

FPGA デザインの一部だけを再コンパイルする方法
Quartus® はじめてガイド - コンパイル・レポート・ファイルの見方
Quartus® ガイド - Design Space Explorer II の使い方
FPGA / CPLD の一般的な開発フロー