0.1.1 1. 合成戦略(Synthesis Strategy)#
- 作用:合成ツールによる設計の最適化方向を制御する(性能、面積、消費電力)。
- 選択肢:
- Vivado Synthesis Defaults:デフォルト戦略、性能とリソースのバランスを取る。
- AreaOptimized_high:リソース使用量を優先的に削減(例:LUT、レジスタ)。
- PerformanceOptimized_high:タイミング性能を優先(クリティカルパスの遅延を低減)。
- PowerOptimized_high:消費電力を最適化(電源制約と併用する必要あり)。
- 設定場所:
- Vivado の
Project Settings > Synthesis > Strategy
。 - コマンドライン:
set_property strategy <strategy_name> [current_run]
- Vivado の
0.1.2 2. 重要な最適化属性#
0.1.2.1 (1) リソース制御#
- MAX_FANOUT:
- 信号の最大ファンアウトを制限し、高ファンアウトネットワークによるタイミング問題を減少させる。
- 設定方法:RTL コードまたは XDC 制約に
set_property MAX_FANOUT <value> [get_nets <net_name>]
を追加。
- RAM_STYLE:
- RAM の実装方法を指定(
block
は BRAM を使用、distributed
は LUTRAM を使用)。 - 例:
set_property RAM_STYLE block [get_cells <ram_instance>]
。
- RAM の実装方法を指定(
- USE_DSP48:
- DSP48 ユニットを使用するように乗算器を強制(LUT ではなく)、性能を向上させる。
- 設定方法:
set_property USE_DSP48 yes [get_cells <mult_instance>]
。
0.1.2.2 (2) タイミング最適化#
- Retiming:
- レジスタ間でロジックの位置を調整し、クリティカルパスの遅延をバランスさせる。
- 有効化方法:合成設定で
Perform register retiming
をチェック。
- Control Set Optimization:
- 同じ制御信号(リセット / イネーブル)のレジスタを統合し、制御セットの数を減少させる。
- 選択肢:
Auto
(デフォルト)またはAggressive
。
0.1.3 3. クロックドメイン間(CDC)処理#
- 非同期パス制約:
-
クロックドメイン間のパスに
set_false_path
またはset_clock_groups
を設定し、無効なタイミング分析を避ける。 -
例:
set_clock_groups -asynchronous -group {clkA} -group {clkB}
-
- 同期器の識別:
- Vivado は一般的な同期器構造(例:デュアルレジスタ)を自動的に識別し、追加の制約は不要。
0.1.4 4. 増分合成(Incremental Synthesis)#
- 作用:変更部分のみを再合成し、コンパイル時間を短縮。
- 有効化条件:
- 初回合成後に
checkpoint
ファイル(.dcp
)を生成する必要がある。 - 次回実行時に
Incremental Synthesis
オプションをチェック。
- 初回合成後に
- 適用シナリオ:小規模な設計の反復、全プロセスの時間を避ける。
0.1.5 5. 制約ファイル(XDC)の重要な設定#
-
クロック定義:
create_clock -period 10 [get_ports clk] ; 10ns周期のクロックを定義
-
入力 / 出力遅延:
set_input_delay 2.0 -clock [get_clocks clk] [get_ports data_in] set_output_delay 1.5 -clock [get_clocks clk] [get_ports data_out]
-
マルチサイクルパス:
set_multicycle_path 2 -setup -from [get_pins {regA|C}] -to [get_pins {regB|D}]
0.1.6 6. 合成レポート分析#
レポート生成コマンド:report_timing_summary -file timing.rpt
重要指標:
- WNS (Worst Negative Slack):最悪の負のスラック(≥0 が必要)。
- リソース利用率:LUT、FF、BRAM、DSP の使用割合。
- クロック周波数:目標周波数(
Target Frequency
)を満たしているか確認。
0.1.7 7. よくある問題と調整#
- 高ファンアウトネットワーク:
- 解決策:
BUFG
(グローバルバッファ)を挿入するか、レジスタを複製。
- 解決策:
- クリティカルパスが最適化されていない:
- ロジック階層を確認し、手動でパイプライン(
pipeline
)を追加。
- ロジック階層を確認し、手動でパイプライン(
- 制御セットが多すぎる:
- リセット / イネーブル信号の種類を減少させるか、
Control Set Optimization
を有効化。
- リセット / イネーブル信号の種類を減少させるか、
0.1.8 まとめ#
Vivado の合成設定の核心は、戦略、属性、制約を通じて設計目標(性能 / 面積 / 消費電力)を協調的に最適化することです。推奨:
- 初期段階:デフォルト戦略を使用し、徐々に制約を追加。
- タイミング違反:優先的に
PerformanceOptimized_high
とRetiming
を調整。 - リソースが逼迫している場合:
AreaOptimized_high
とリソース共有(例:Resource Sharing
)を有効化。 - 反復最適化:合成レポートと増分コンパイルを組み合わせて、変更効果を迅速に検証。