AR# 66314

Vivado - デザインにおける密集

説明

大規模なデザインになるとその複雑性も増すため、密集を把握することは容易ではありません。

ここでは、Vivado でデザインにおける密集を解決する方法とツールについて説明します。

ソリューション

密集の把握

メッセージ - route_design 内のメッセージには、デザインの密集レベルが高いときにそのことが示されます。次に例を示します。

INFO: [Route 35-449] Initial Estimated Congestion
   ________________________________________________________________________
  |           | Global Congestion | Long Congestion   | Short Congestion  |
  |           |___________________|___________________|___________________|
  | Direction | Size   | % Tiles  | Size   | % Tiles  | Size   | % Tiles  |
  |___________|________|__________|________|__________|________|__________|
  |      NORTH|     8x8|      0.49|     8x8|      1.14|   16x16|      2.84|
  |___________|________|__________|________|__________|________|__________|
  |      SOUTH|     8x8|      0.52|     8x8|      1.00|   16x16|      2.27|
  |___________|________|__________|________|__________|________|__________|
  |       EAST|   16x16|      0.66|     8x8|      1.07|   32x32|      5.64|
  |___________|________|__________|________|__________|________|__________|
  |       WEST|     8x8|      0.63|     4x4|      0.86|   16x16|      6.20|
  |___________|________|__________|________|__________|________|__________|

 

INFO: [Route 35-448] Estimated routing congestion is level 5 (32x32).Congestion levels of 5 and greater can reduce routability and impact timing closure.

この場合、メッセージは密集レベルが 5 (2^5) であること、またはタイルの 32x32 エリアで 100% を超える配線リソースが使用されていることが示されています。通常、密集レベルが 4 を超えると問題になります。

メトリクス - 配線済みのデザインで密集メトリクス ビューを表示する ([Device] ビューで右クリックして [Metrics] -> [Vertical/Horizontal routing congestion per CLB] をクリック) と、密集の位置がわかります。

ビューが開くと、メトリクスの結果に密集率 (%) と問題のタイルが示されます。値が 100 を超えていると、そのタイル エリアにある配線リソースの使用率が 100% を超えていることを意味し、配線プログラムは、通常はこのエリアで当該タイルを使用する配線を変更する必要があります。

密集の診断

 

使用率 - 密集の主な理由の 1 つはデザインの使用率です。使用率の高いデザインは密集が発生しやすくなります。一般に、使用率が 80% (スライス LUT) を超えるデザインでは配線およびタイミングを満たすことが難しくなります。これが難しくなる実際のパーセンテージはデザインに大きく依存し、デザインにおける制御セット (クロック、リセット、イネーブル) の数の影響を受けます。また、フリップフロップ、LUTRAM、ブロック RAM、DSP などその他のサイト タイプの使用率が高すぎることによって密集が発生する場合もあります。

これを回避する 1 つの方法として、複数のサイト タイプのバランスを取ります。たとえば、LUTRAM が多いことが LUT の使用率超過を引き起こしている場合、LUTRAM の一部をブロック RAM サイトに移動することで密集を軽減できます。使用率および制御セット レベルのガイダンスは、『Vivado UltraFast 設計手法ガイド』 (UG949) の「制御信号および制御セット」セクションを参照してください。

 

report_high_fanout_nets - 密集の緩和につながるファンアウトの大きいネットを示します。特に、ファンアウトの大きなクロック以外の制御信号は密集の原因となる可能性があります。同期で駆動されているファンアウトの大きなネットのリストを作成して次のコマンドを使用すると、密集エリアを緩和できます。

phys_opt_design -force_replication_on_nets

ファンアウトの大きなネットが LUT から駆動されていて、phys_opt_design で複製できない場合は、RTL で手動で複製するか、追加遅延が許容可能であればグローバル バッファー (BUFG) を追加できます。

report_design_analysis - report_design_analysis -complexity コマンドを使用すると、デザインが複雑で密集が発生しやすいかを確認できます。

report_design_analysis -help を使用すると、この使用方法に関する追加情報を確認できます。IDE で [Tools] -> [Report] -> [Report Design Analysis] をクリックします。

コマンド例:

report_design_analysis -congestion -complexity -hierarchical_depth 10

このコマンドにより、複雑性レントが 10 階層段分解析されます。また、-congestion オプションによって、最も高い使用率で配線されているタイルがリストされます。

 

report_qor_suggestions - report_qor_suggestions コマンドを配線済みデザインに実行すると、制約、Tcl、およびデザイン変更において、密集の問題に役立つ推奨事項を表示できます。このコマンドでは、クリティカル タイミング パスに関する QOR の向上に重点を置いていますが、特定の密集シナリオが検出された場合はこれに関する推奨事項が表示されます。

 

密集に関連したロジック - 回路図を構築し、密集したタイルを占有しているロジックを検出します。このロジックは、この密集に直接関連しているファンアウトの大きなネットを接続する際にチェックできます。このプロセスの詳細は、(Xilinx Answer 66698) を参照してください。

 

ローカル密集とグローバル密集 - 密集は、デバイス全体の使用率が低い場合でも、デバイスの一部領域のローカルで発生する可能性があります。この場合、Pblock によって密集が発生することがあり、I/O 接続やエリア制約など一部の制約をチェックする必要があります。Plock の制約を緩和または削除して、結果がどのように異なるかを確認してください。

 

クロック配置フロアプランのチェック - 特定クロックに十分なリソースを使用していないクロック フロアプランがないか report_clock_utilization レポートを確認してください。このためには、密集のあるクロック領域に入るすべてのグローバル クロックを書き留めます。使用するクロック領域が少なすぎるクロックはありませんか。配置プログラムでは特定のクロックに十分なクロック領域を割り当てることができない場合があります。このような場合は、クロック領域を 1 つ追加するようの現在ののクロック フロアプランを修正すると、密集を軽減できます。詳細は、(Xilinx Answer 66386) を参照してください。

 

 

密集の軽減方法

 

ストラテジと -directive オプション

 

  • phys_opt_design をインプリメンテーション フローに追加します。これによりタイミング ベースの物理的最適化が実行され、密集が緩和されます。phys_opt_design で異なるオプションを使用して複数回実行するのも緩和につながります。
    また、phys_opt_design post-placement/post-routing を使用するオプションがあります。詳細は、phys_opt_design -help で確認してください。

 

  • Vivado には密集専用のストラテジがいくつかあります ([Tools] -> [Options] -> [Strategies] をクリック)。これらのストラテジから、place_design や route_design などに適した、密集の軽減に役立つ特定のオプションを見つけることができます。
    また、-Explore を使用すると通常、実行時間は長くなりますが、よりよい結果を得ることができます。
 
  • Vivado 合成の AlternateRoutability オプションを使用します。

  • 異なる place_design オプション (place_design -help で確認) を使用して複数回実行します。特に、SpreadLogic_high/medium/low および AltSpreadLogic_high/medium/low オプションはロジックを分散させ、密集を回避できます。
    さまざまな place_design オプションの結果を比較しながら route_design を実行すると、デザインにより適したオプションがわかります。
    デザインが変更されると、最適なオプションも変わることに注意してください。結果の比較には、report_timing_summary および report_design_analysis -congestion が使用できます。

  • 適切な opt_design を見つけることは、密集したデザインにも役立ちます。オプションごとに report_utilization を実行して、どのオプションを使用すると LUT およびフリップフロップ数 (多く使用されている方) の使用数が最も少なくなるかを確認できます。

  • Vivado 合成で -resource_sharing オプションを使用します。これによって多くの場合、算術演算子が共有されます。デフォルトは auto に設定されています。

  • タイミング クリティカル パスに対して place_design および phys_opt_design の実行中のみ厳しい制約を指定します。これらのパスが優先されることで、より優れた QOR を得ることができます。

 

  •  ブロック RAM または DSP をフロアプランを実行してみてください。異なる place_design オプションの試行から見つけた最適なタイミング結果を使用してこれらの LOC 制約を今後実行する run のために修正してブロック RAM または DSP をフロアプランすると、緩和に役立ちます。
    これらの制約の取得には複数のオプションがあります。
  1. 配置デザインで、修正するブロック RAM または DSP を選択して、[Device] ウィンドウで右クリックして [Fix Cells] を実行します。この時点でデザインを保存すると修正した制約が保存されます。
  2. 現在のブロック RAM または DSP 配置の LOC 制約を出力するには、次のコマンドを使用します。
    これらの結果は XDC ファイルにコピーできます。
    同様の構文を DSP に使用でき、検索パターンは Vivado IDE の検索ウィンドウから検出できます。
     
set BRAMS [get_cells -hierarchical -filter { PRIMITIVE_TYPE =~ BLOCKRAM.BRAM.* } ]
foreach i $BRAMS {puts "set_property LOC [get_property LOC [get_cells $i]] \[get_cells \{${i}\}\]"}

ファンアウトの削減と制御
  • phys_opt_design の -force_replication_on_nets オプションを使用します。このオプションはファンアウトを削減する最適なオプションです。post-place phys_opt_design により配置情報が使用されて複製されたドライバーから駆動されているネットが判断できるため、パスが必要以上に長くなることがありません。
    たとえば、phys_opt_design -force_replication_on_nets ${hi_fanout_nets} では、hi_fanout_nets がファンアウトを削減する必要があるネットになります。
    詳細は、phys_opt_design -help で確認してください。このアンサー添付されている Tcl のサンプルでは、同期で駆動されているファンアウトが大きいネットが検出され、phys_opt_design で使用可能な一連のネットの変数が作成されます。
        •   

  • -fanout_opt place_design オプションを使用します。2017.x で使用できるようになった -fanout_opt では、クリティカル ネットの大きなファンアウトが複製されます。このオプションの詳細は、place_design -help を参照してください。

  • クロック以外の、ファンアウトが大きなネットにはグローバル バッファーを使用してください。opt_design では、ファンアウトが大きなネットに自動的に BUFG を挿入できます。
    グローバル クロック リソースを使用するとファンアウトが大きいネットが原因で発生する密集を緩和できます。配線済みデザインの report_high_fanout レポートを確認してこのようなネットがあるかを確認してください。opt_design による BUFG の自動挿入は、調整することもできます。詳細は、(Xilinx Answer 54177) を参照してください。

ローカル密集の削減

  • 合成から LUT の組み合わせを削減または削除してみてください (-no_lc)。LUT 入力によって密集が発生することがありますが、これにより CLB に入るネット数を減少できます。

  • 制約されたロジックが密集領域に関連している場合、pblock 制約を拡張または削除してください。これにより、配置プログラムはより柔軟に密集を避けることができるようになります。

使用率の低減

  • 何が必ず必要であるか結果を解析します。GSR で必要な初期化が可能であれば、リセット信号の一部は必ずしも必要でない場合があります。詳細は、UG949 の第 4 章「RTL コード記述のガイドライン」を参照してください。
AR# 66314
日付 09/04/2017
ステータス アクティブ
種類 一般
ツール