こんにちは、スコです。
今回は、最近知った Physical Synthesis という機能についてご紹介します。
Physical Synthesisとは?
Physical Synthesis とは、
"タイミング制約を満たせない" や "最大動作周波数を向上させたい" というときに、
Fitter (配置配線) の出力結果を元に論理合成を変更し、より良い回路 (タイミングの面で) に再合成する機能です。
使用方法
Quartus® Prime のメニューバーの Assignment メニューから Settings を起動し、
Category の中の Compiler Settings を開くと、以下のような画面が表示されます (図1)。
そして、Advanced Settings(Fitter)を選択します。
すると、以下の画面が現れます (図2)。
図2 の ① ~ ⑥ が Physical Synthesis の設定項目です。
Physical Synthesis では、最適化する回路を選択可能で、ON にした項目について最適化を実行します。
今回は、例として以下のオプションを On にします。
③ Perform Physical Synthesis Combinational Logic for Performance
⑤ Perform Register Retiming for Performance
これらについて、簡単に説明します。
③ Perform Physical Synthesis Combinational Logic for Performance
図3では、b が クリティカル・パス※1です。
b の信号は LUT※2 に入り、その LUT の出力が後段の LUT に入ります。
※1 : デザインの中で遅延が大きいパスやタイミングを満たしていないパス。
※2 : LUT=ルック・アップ・テーブルの詳細は「FPGA って何?」をご覧ください。
このような場合、以下のような構成に変更します(図4)。
後段の LUT から出力される信号は変更前と同じにし、
2つの LUT の入力の組み合わせを変え、b の信号を後段の LUT へ入力します。
そうすることによって、上段の分の遅延を解消することができ、クリティカル・パスの遅延を小さくすることができます。
⑤ Perform Register Retiming for Performance
以下のような場合(図5)。
レジスタ AB 間の遅延は 15ns、レジスタ BC 間の遅延は 3ns です。
このような場合、以下の配置配線構成に変更されます(図6)。
レジスタ B の位置を変更することにより、
レジスタ AB 間、BC 間の遅延がともに 9ns となります。
これにより、この回路の critical path は15ns から 9ns になり、動作周波数が増加します。
このように、自分のデザインに有効な項目を ON にし、
最後に Physical Synthesis Effort Level の設定を行います。
⑥ Physical Synthesis Effort Level
Effort Level の初期設定は Normal です。
これを Extra や Fast に変更することによって、Physical Synthesis をどのレベルで実行するかを設定します。
それぞれのメリット、デメリットは以下のとおりです(表1)。
Fast |
Normal (Default) |
Extra |
|
メリット |
Normal よりもコンパイル時間が短縮 |
タイミングが改善 | Normal よりもタイミングが改善 |
デメリット | Normal よりもパフォーマンス向上率は低い | コンパイル時間が増加 | Normal よりもコンパイル時間が増加 |
表1
あとは、通常通りコンパイルを実行するだけです。
実行例
以下のような設定で実際に Physical Synthesis を実行してみました。
・ Perform Physical Synthesis Combinational Logic for Performance ⇒ On
・ Perform Register Retiming for Performance ⇒ On
・ Physical Synthesis Effort Level ⇒ Extra
すると、変更前と変更後で以下のような結果がでました!(図7)
Fmax(最大動作周波数)が向上しているということは、タイミングが改善されていることになります。
Physical Synthesis を行うと、パフォーマンスが向上することが分かりました。
また、上記の回路とは別に回路規模がとても小さい回路に対しても検証しました。
しかし、ほとんど結果が変わりませんでした。
Physical Synthesis は 回路を再構成しより良い回路にしようという機能なので、
そもそも最適化の対象となる回路がない場合は適用されません。
ちなみに、本当に Physical Synthesis が適用されているか確認したい場合は
コンパイルレポートの Table of Contents の Fitter にある Netlist Optimizations をご確認ください。
図8 では Netlist Optimizations を参照しています。
どの回路に対してどのような最適化が適用されているかは、Operation で Physical Synthesis となっている項目で
Node:適用されたノード、
Action:で適用された最適化
を確認することができます。
ぜひみなさんも、Physical Synthesis を使用してみてくださいね!
まとめ
Physical Synthesis をしようすると、回路のタイミング品質を向上させることができる。
また、3種類のモードがあり、用途に合わせて選択が可能。
しかし、回路規模が極端に小さな回路など、最適化の対象となる回路を含まない場合は結果はあまり変化しない。