moerjielovecookie

Sawen_Blog

一个普通工科牲的博客网站
x
github
follow
email

Vivadoにおける合成の設定

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]

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>]
  • 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 の合成設定の核心は、戦略、属性、制約を通じて設計目標(性能 / 面積 / 消費電力)を協調的に最適化することです。推奨:

  1. 初期段階:デフォルト戦略を使用し、徐々に制約を追加。
  2. タイミング違反:優先的に PerformanceOptimized_highRetiming を調整。
  3. リソースが逼迫している場合AreaOptimized_high とリソース共有(例:Resource Sharing)を有効化。
  4. 反復最適化:合成レポートと増分コンパイルを組み合わせて、変更効果を迅速に検証。
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。