“FPGAの動作スピード改善のポイント”第2弾は、Advisor機能を用いた「個別の動作スピードの設定」について解説する。
前回は「動作スピードを改善するポイントは?」をテーマに、同期パスを例にタイミング検証の基本的な考え方と「TimeQuest」を中心としたアルテラの開発ツール「Quartus® II」による確認方法を紹介しました。
今回はさらにもう一歩踏み込んで、実際にAdvisor機能を用いた“個別の動作スピードの設定”について解説します。
Quartus IIには、内部動作周波数を改善するためのさまざまなTimingに関する設定があります。しかし、ユーザーが設計したデザインも千差万別なので、「この設定をすれば必ず効果が出る!」とは言い切れません。つまり、“どの設定で効果が出るのかは、その結果を確認するまで分からない”といえます。
このようなときにはAdvisor機能を使うと便利です。
そこで今回は、Advisor機能の1つ“Timing Optimization Advisor”について紹介します。それでは、Timing Optimization Advisorを起動してみましょう。Quartus IIの[Tool]−[Advisors]−[Timing Optimization Advisor]で起動します(図1)。
図1 “Timing Optimization Advisor”の起動方法
これまで紹介してきたほかのAdvisorと同様にStageごとに設定項目が分かれており(図2)、すでに設定されている項目にはマーク(チェックマーク)、まだ設定されていない項目にはマーク(アラートマーク)が表示されています(注)。
注:設定しているデバイスにより、表示形式は異なります。 |
それでは、「Stage1」から見ていきましょう。
「Stage1」には、3つの項目があります(「Specify Fitter effort」と「Turn on Auto Global Clock」は、すでにマーク(チェックマーク)になっているのでここでは説明を割愛します)。
クロック・ドメイン(clock domains)とは、“デザインで使用しているクロックの系統”のことです。
例えば、1つのデザインに複数のクロックを使用している場合、動作スピードの速いクロックと遅いクロックが混在します。「FPGAの動作スピードを改善するポイントとは?」で紹介した設定“Optimization Technique”は、すべてのクロック・ドメインに対して改善を行うものでしたが、デザインによっては必ずしもすべてのクロック系統を速くする必要がない場合もあるはずです。
このようなときに有効となるのが、個別のクロック・ドメインに対して動作スピードの改善を行う“Optimize specific clock domains for speed”という設定です(図3)。
図3の右下を見てください。「Current Global Settings」の“Speed Optimization Technique for Clock Domains”という設定が「Not Set」になっていますので、クロック・ドメインごとの設定を行ってみましょう。
まず、“Open Assignment Editor - Synthesis category”をクリックします。すると、[Assignment Editor]のSynthesisに関する画面に移動します(図4)。
例えば“clock”という名のクロック・ドメインに設定する場合は、以下のとおりです。
もし、複数のクロック・ドメインに対して設定を行いたい場合は、これと同様の設定を行ってください。ちなみに、ここで設定したクロック名以外のクロック・ドメインは「FPGAの動作スピードを改善するポイントとは?」で行った“Optimization Technique”の設定が適用されます。
複数のクロック・ドメインに対して個別の設定を行いたい場合もありますが、ここでのポイントは“あまり多くのクロック・ドメインを設定しないこと”です。なぜなら、多くのクロック・ドメインに設定を行うと、Quartus IIは優先順位を付けられなくなり、結局どのクロック・ドメインに対しても設定の強制力が平均化されてしまうからです。
この設定は、主にQuartus IIで論理合成をせずに、サードパーティ製合成ソフトウェアを用いる場合に使用します。
サードパーティ製合成ソフトウェアはデザイン論理を合成し、合成結果をネットリストとして出力します。そして、このネットリストをQuartus IIが読み込んで配置配線を行います。この設定はネットリストを見直して配置を行う設定で、以下の2つの設定を行います(図5)。
−Perform WYSIWYG Primitive Resynthesis
サードパーティ製合成ソフトウェアが生成したネットリストは、ターゲットとしているデバイスの構造として記述されています。このネットリストを再度ゲートの記述に戻し、さらにQuartus IIがターゲットのデバイスの構造に対して再構成を行います(図6)。
図6 “Perform WYSIWYG Primitive Resynthesis”の概念図
この設定の注意点としては、
などが挙げられます。
−Perform gate-level register retiming
レジスタ間の組み合わせ論理の量を均一化し、タイミングを改善する設定です。通常は、サードパーティ製合成ソフトウェアが生成したネットリストの時点でレジスタ間の組み合わせ回路は決まりますが、この設定では組み合わせ回路の配置を変更します(図7)。
図7 “Perform gate-level register retiming”の概念図
これらの設定はタイミング改善で非常に効力を発揮する設定ですが、その分、コンパイル時間を必要とする点も考慮して設定をした方がよいでしょう。
アルテラのFPGA/CPLDは、デバイス内部に「グローバル配線」というスキュー(到達時間差)の非常に小さい配線を持っています。特にクロックやリセットなど、デザイン回路全体の信号に使用することは必須です。グローバル配線の本数には限りがありますので、使用していないグローバル配線があれば有効活用してください。
次に、「Stage2」に進んでみましょう。「Stage2」には2つの設定項目があります(図8)。
この設定は、デザイン上で“LCELL”バッファを呼び出している場合に有効になります。“LCELL”とは、文字通り「ロジック・セル」のことで、ロジックの分割を意図的に行いたい場合にデザイン上で呼び出します。この設定は“LCELL”の呼び出しを無視する設定なので、“LCELL”を呼び出していない場合は特に設定する必要はありません。
3種類の設定がありますが、どれも強力な最適化オプションです。どの設定もコンパイル時間が長くなってしまう「力業」の設定項目ですが、その分タイミング改善の見込みがありますので、こちらも有効活用していただきたい設定です(図9)。
−Perform Physical Synthesis for Combinational Logic for Performance
遅延値が一番遅い信号パス(クリティカル・パス)が通る、組み合わせ論理の道筋を変更するための設定です。この設定が有効になったパスは、組み合わせ論理を通る段数が少なくなりますので、遅延値の減少が期待できます(図10)。
図10 “Perform Physical Synthesis for Combinational Logic for Performance”の設定概念図
−Perform Register Duplication for Performance
通常レジスタは、デザイン上で宣言された数だけ使用されます。しかし、複数のレジスタにつながっている場合、配置配線の制約によっては非常に遠い場所に配置されてしまう可能性があり、これがクリティカル・パスになります。このような配置による遅延値の増大を防ぐために、同じ動作をするレジスタを複製して配線遅延値の縮小を行います(図11)。
図11 “Perform Register Duplication for Performance”の設定概念図
この設定によりタイミング改善が期待できますが、レジスタが増える可能性もあります。デバイスのロジック容量に余裕があるかどうかを確認してから設定するようにしましょう。
−Perform Register Retiming for Performance
配置配線を行うと、同じデータ・パスでもクリティカル・パスになるレジスタ間と、ならないレジスタ間が存在します。この設定はレジスタ間の配線遅延を均一化して、クリティカル・パスに対する遅延値を減少させ、全体のタイミング改善を行います(図12)。
図12 “Perform Register Retiming for Performance”の設定概念図
通常の配置配線でも遅延値の均一化は行っていますが、特にクリティカル・パスになっている部分に対してレジスタ間の間隔を見直します。この設定を行ってもクリティカル・パスが要求動作周波数を満たさない場合、レジスタ間にさらにレジスタを追加する(パイプライン処理)など、デザインの修正を検討した方がよいかもしれません。
Copyright © ITmedia, Inc. All Rights Reserved.