UltraFastTM 設計手法 Vivado Design Suite 成功のためのガイドライン © Copyright 2013 Xilinx . 内容 UltraFast 設計手法の概要 ハードウェアに適合する HDL コードの記述 タイミング制約の作成と検証 クロック配置、ピン配置、フロアプラン 2 © Copyright 2013 Xilinx . UltraFastTM 設計手法の利点 コンパイル時間を短縮し、予測可能な結果を取得 – 適切な設計手法が必要 プロジェクトのスケジュールによりタイム トゥ マーケットの短縮が必要 – リスクを効果的に管理 – 反復回数、特に最終段階での変更を最小限に抑える – 予測および解析機能により、設計の初期段階でさまざまなオプションを試すことが可能 エキスパートや上級ユーザーからの推奨事項 – ベスト プラクティス (チェックリストおよび資料へのリンク) – 検証ツールおよびレポート – リンティングおよび DRC 3 © Copyright 2013 Xilinx . UltraFast 設計手法ガイド (UG949) PCB 設計 : ボードの製造し直しを回避 – XPE を使用して消費電力を要件に対して検証 – Vivado I/O 配置を使用し、インターフェイスを含む最上位で DRC を実行 デザインの作成 : 最高の QoR を得るためのコーディング スタイル – Vivado の HDL 言語テンプレートを使用 – 新しいリンティング機能 : 設計手法 DRC ルールデック インプリメンテーション : 短期間でタイミング クロージャを達成 – 短期間でクロージャを達成するための手法 : 最小限の制約でクロージャ – 最終的なクロージャ : 適切な制約でクロージャ – XDC 言語テンプレートおよびタイミング DRC ルールデックを使用 4 © Copyright 2013 Xilinx . 設計サイクルを高速化するためのストラテジ 初期段階で反復作業 デザイン フローの初期段階からクロージャを開始する – 後の段階よりも反復作業を短時間で実行可能 – 結果の品質 (QoR) に与える影響が大きい QoR への影響 100x 10x 1.2x 1.1x PCB / 設計 デバイス/IP の選択 IP の統合、RTL デザイン、 検証 インプリメンテーション クロージャ 設計サイクルの時間とコストを削減 5 © Copyright 2013 Xilinx . コンフィギュレーション、 検証、デバッグ タイミング クロージャを短期間で達成するための手法 基本制約の作成 優先順位を決め、1 ステップごとにクロージャ – まず合成 (高速、影響が大きい) で、その後バックエンドで – 最も単純な制約から開始 : • ほとんどの問題の原因となる内部 Fmax (フリップフロップ間の制約) • クロックの依存性を適切に定義 – デザインおよび制約が妥当なものであることを確認 – 解析して根本的な原因を把握してから修正方法を決定 • クロック パス vs. データ パス vs. インターコネクト遅延 vs. ロジック遅延… – I/O 制約を追加し (Vivado XDC テンプレートを使用)、再実行… 最終的な制約と混同しない – 完全な制約は必要 6 © Copyright 2013 Xilinx . デザイン クロージャを段階的に達成 合成 合成 合成 • 解析 • 解析 • 解析 必要な場合 I/O 制約を追加 基本制約 タイミング例外、 フロアプランを追加 配線 配置 配線 配置 配線 配置 • 解析 • 解析 • 解析 • 解析 • 解析 • 解析 内部パスを最適化 チップ全体を最適化 調整 Fmax Fmax Fmax 基本 XDC 7 完全な XDC © Copyright 2013 Xilinx . 最終 XDC クリティカル パスが変わることがある 実際のデザイン例 合成後の予測 (実際の問題) – ワースト パス : ロジック レベル数 13 ワースト パス : 4.3ns 配置後 – ワースト パス : ロジック レベル数 7 – ロジック レベル数が 7 ~ 13 のパスは ローカルに配置される ワースト パス : 4.2ns 配線後 (実際の問題の副作用) – ワースト パス : ロジック レベル数 4 – ロジック レベル数が 5 ~ 13 のパスは 優先的に配線される ワースト パス : 4.1ns タイミング クロージャを短期間で達成するため タイミングの問題を初期段階で解析および修正 8 © Copyright 2013 Xilinx . HDL コーディング スタイルの影響 ブロックの推論 – RAM、DSP、LUT RAM、SRL の推論には推奨されるテンプレートを使用 デザインをパイプライン処理してロジック レベルを削減 リセットをできるだけ使用しない – リセット回路は通常不要 : ザイリンクス デバイスは既知のステートで起動 – 専用シフト レジスタ (SRL) および RAM メモリ配列はリセットを使用しない リセットが必要な場合は同期リセットを使用 – レジスタを専用 RAM および DSP ブロックにパック可能 – リセットをデータパス (LUT) にインプリメントすることも可能 合成ツールでの処理がより柔軟に実行される – ほかの合成ツールまたは以前のリリースで必要だった属性を再確認 – KEEP、dont_touch、syn_preserve、max_fanout などの属性はできるだけ 使用しない 9 © Copyright 2013 Xilinx . HDL 言語テンプレートの使用 IDE からテンプレートにアクセス – [Windows] → [Language Templates] をクリック 合成テンプレート – BRAM、LUTRAM、ROM、SRL – カウンター、乗算器 – FSM、デコーダー、エンコーダー – … 10 © Copyright 2013 Xilinx . ハードウェアに適したコード記述 DSP ブロックのカスケード機能を活用 乗算器のチェーンをパイプライン 処理すると最適なパフォーマンスが 得られる in in 加算器のツリーは パフォーマンスの ボトルネックとなる out DSP48 DSP48 DSP48 DSP48 out ブロック RAM の競合を回避するロジック(*) を使用しない 合成ツール で競合が 発生すると 想定される rdaddr wraddr din (*) : Synplify でデフォルトで追加されるロジック (syn_no_rw_check 属性を使用すると削除される) 11 競合チェックを ディスエーブルに した推論 RAMB rdaddr wraddr din dout = © Copyright 2013 Xilinx . RAMB dout リセットの影響 適切なリセットを選択することによりパフォーマンスを向上 – 可能な限りリセットを使用しないのがベスト – 非同期リセットではなく同期リセットを使用 – アクティブ Low リセットでなくアクティブ High リセットを使用 – レジスタのデフォルト値は INIT プロパティで指定 非同期リセットを使用すると DSP/RAM が推論されない DSP48 A P B 使用済みレジスタ rst 非同期リセットを エミュレートする回路 12 未使用レジスタ ‘1’ © Copyright 2013 Xilinx . LUT コンバイン LUT コンバインは LUT の 2 つの出力 (O5/O6) を利用 – 利点 : エリアを節約 – 欠点 : 密集を引き起こす可能性がある ツールの動作 – XST/Synplify ではデフォルトで LUT コンバインを使用、Vivado 合成にはソフト LC 制約がある – インプリメンテーションでは place_design で使用率に応じて LUT が組み合わせられる – デバイスまたは Pblock の使用率が高いと、より多くのLUT が組み合わせられる Use report_utilization を使用し、O5 と O6 を使用する LUT を確認 Slice Logic Distribution +-------------------------------------------------------------+-----------+ |Site Type | Used| +-------------------------------------------------------------+-----------+ |Slice | 45910| |LUT as Logic | 120084| | using O5 output only | 422| | using O6 output only | 105082| | using O5 and O6 | 14580| ガイドライン : >15% の LUT が O5 と O6 の両方を使用している場合 – 合成で LUT コンバインをオフにすることを考慮 13 © Copyright 2013 Xilinx . その他のデザイン 解析 report_high_fanout_nets – ネットのファンアウトを削減するには、次を使用 • max_fanout (Vivado 合成および XST) • syn_maxfan (Synplify) – タイミング ドリブン複製には phys_opt_design を使用 report_control_sets – パッキングの問題や適合の問題を表す – –verbose オプションを実行して完全なリストを生成 – Synplify の syn_reduce_controlset_size 属性を使用して制御 デフォルトは 2 だが、8 に設定してファンアウトの小さい制御セットを除去 14 © Copyright 2013 Xilinx . クリティカル警告を確認して解決 Vivado はクリティカル警告が発生しても停止しない – 多くの問題を同時に修正することが可能 – クリティカル警告を解決しないと、ビットストリーム生成でエラーが発生する クリティカル警告は深刻なデザインの問題 – 無効な制約または XDC 構文エラー – パスの分割 – ネットリスト オブジェクトが見つからない、または無効 次の段階に進む前にこれらの警告を解決 – デザイン解析の結果が不正確になる可能性がある – クリティカル警告があると、最適なデザインを作成できない 15 © Copyright 2013 Xilinx . タイミング制約は適切なものにする必要がある 制約 (クロック、I/O) が不足している場合 – パスのタイミングが実際よりも良いようにレポートされる – 違反はレポートされないが、ハードウェアでは機能しない パスが不適切に制約されている場合 – 重要でないパスに時間と最適化のエフォートが費やされる – レポートされたタイミング違反がハードウェアでは問題とならない場合がある 制約により間違ったホールド違反がレポートされた場合 – 実行時間が長くなり、セットアップ違反が発生することがある – 配置配線では、ホールド違反を修正することが最優先される • デザインにホールド違反があると、ハードウェアで機能しない • デザインにセットアップ違反があっても、ハードウェアでは機能する (ただし低速) 16 © Copyright 2013 Xilinx . IP 制約 多くのコアには独自の制約/例外制約がある – PCIe、MIG、RAM ベースの非同期 FIFO… ネイティブでない IP : 注意が必要 – NGC ファイルで提供されている IP 制約を含め忘れることがあるので注意 ネイティブ IP : 制約は自動的に含まれる – IDE の [Sources] ビュー : [Compile Order] タブの [Constraints] フォルダー – report_compile_order -constraints を使用して制約ファイル ソースを確認 17 © Copyright 2013 Xilinx . 適切な制約の作成方法 クロックを作成し、クロックの関連性を定義 – 4 手順のガイドライン 入力遅延および出力遅延を設定 – 不正なホールド違反を作成しないよう注意 タイミング例外を設定 – できるだけ少なく – 不正なホールド違反を作成しないよう注意 各手順でレポート コマンドを使用して検証 18 © Copyright 2013 Xilinx . クロックの基本原則 SDC ベースのタイミング エンジンでは、クロックは作成しないと認識されない – プライマリ クロックは create_clock を使用して作成 クロックはクロック調整ブロックを介して自動的に伝搬される – MMCM および PLL の出力クロックは自動生成される – ギガビット トランシーバーは自動的に伝搬されないので、手動で作成する必要あり クロックをここで 作成しない クロックを ここで作成 必要に応じて内部クロックを create_generated_clock を使用して作成 デフォルトではクロック間のすべてのパスのタイミングが解析される 19 © Copyright 2013 Xilinx . クロックを作成する 4 つの手順 手順 1 – 最上位ポートに create_clock を使用してプライマリ クロックを作成 – デザインを合成するか、ネットリスト デザインを開く 手順 2 – report_clocks を実行 – レポートを参照して周期、位相、伝搬を確認 – 必要に応じて制約を修正 Attributes P: Propagated G: Generated Clock sys_clk pll0/clkfbout pll0/clkout0 pll0/clkout1 Period 10.000 10.000 2.500 10.000 Waveform {0.000 5.000} {0.000 5.000} {0.000 1.250} {0.000 5.000} Attributes P P,G P,G P,G report_clocks の出力例 20 © Copyright 2013 Xilinx . Sources {sys_clk} {pll0/plle2_adv_inst/CLKFBOUT} {pll0/plle2_adv_inst/CLKOUT0} {pll0/plle2_adv_inst/CLKOUT1} クロックを作成する 4 つの手順 (続き) 手順 3 – report_clock_interaction を使用してクロックの関連性を評価 注意 : クロック間のパスはすべてデフォルトで制約される – クロック間のパス (クロック乗せ換え) を非同期として指定 • 適切な CDC 同期回路が設計されていることを確認 • set_clock_groups を使用 (set_false_path よりも推奨) 注意 : この制約により set_max_delay 制約が無効になるので注意 – 制約が適用されていないオブジェクトがあるかを確認 • check_timing を使用 手順 4 – report_clock_networks を実行 – ロジックが含まれないクロック ラインを設計する • ヒント : 合成でクロック ゲーティング オプションを使用して LUT を削除 21 © Copyright 2013 Xilinx . クロック ネットワーク レポート report_clock_network は制約されていないネットワークを表示 クロック ネットワーク レポートに制約 されていないクロックが含まれる場合 create_clock 22 © Copyright 2013 Xilinx . クロック ネットワーク レポートに 制約されていないクロックなし クロック関連性の定義と検証 23 © Copyright 2013 Xilinx . クロック乗せ換えの制約 適切な同期化手法を使用 – 1 ビットの場合は 2 段以上のレジスタ – バスの場合は FIFO MTBF を最大化 – 平均故障間隔 (MTBF) を最大にするため、 ASYNC_REG を設定して同期化フリップフロップ を同じスライスに配置 set_property ASYNC_REG TRUE \ [get_cells [list sync0_reg sync1_reg]] 24 © Copyright 2013 Xilinx . 非同期 CDC の制約 – 1 ビット クロック間のタイミング パスを無視 set_clock_groups -asynchronous -group {clk1} -group {clk2} 上記は次と等価 : set_false_path -from [get_clocks clk1] -to [get_clocks clk2] set_false_path -from [get_clocks clk2] -to [get_clocks clk1] 注意 : これにより set_max_delay 制約は無効になる クロック グループ間のタイミング パスを無視 # SDC create_clock for the two primary clocks create_clock -name clk_oxo -period 10 [get_ports clk_oxo] create_clock -name clk_core -period 10 [get_ports clk_core] # Set Asynchronous Clock Groups set_clock_groups -asynchronous -group [get_clocks -include_generated_clocks clk_oxo] \ -group [get_clocks -include_generated_clocks clk_core} ] 注意 : これにより set_max_delay 制約は無効になる 25 © Copyright 2013 Xilinx . 非同期 CDC の制約 – バス ビルトイン ハード FIFO を使用 (推奨) – 非同期転送用に設計されている – set_clock_groups 制約を使用 ファブリックのグレイ コードで記述された FIFO 転送を使用 sync. – タイミング要件を設定 : set_max_delay $delay \ –from [get_pins cell1/C] \ –to [get_pins cell2/D] \ cell1 –datapath_only ($delay は clk A の周期または 2 つのクロック周期の 小さい方より小さい) – set_max_delay を含む XDC ファイルは IP カタログで自動生成される sync. – 非同期クロック グループは作成しない set_clock_groups が set_max_delay より優先され、 set_max_delay が無効になる 注記 : – 26 -datapath_only はザイリンクス特定 (SDC に準拠しない) © Copyright 2013 Xilinx . cell2 入力/出力遅延 I/O 制約なしで開始 – 主要なタイミング問題を検出し、修正することに集中 – Vivado では I/O 制約を設定しないと I/O タイミングは解析されない • I/O タイミングを無視するために false_path -from または -to get_ports は不要 主要なタイミングが妥当なものになったら、現実的な I/O 遅延を指定 – set_input_delay および set_output_delay を使用 – 不正な遅延値 (< 0ns など) を使用すると、解析か不正になる 指定する遅延値は外部遅延 – UCF のデフォルト : 内部遅延 27 © Copyright 2013 Xilinx . タイミング例外 : できるだけ少なく 利点 : タイミング クロージャに有益 set_false_path set_multicycle_path set_max_delay – インプリメンテーション時間が長くなるのを回避 – 非現実的なタイミング要件を調整 例外がタイミング クロージャおよび実行時間に悪影響を与えることもある セマン ティック set_multicycle_path : –hold を使用 (誤ったホールド違反を回避) regexp : 複雑な式を回避、制約を厳しくしすぎない : 実行時間への影響なし (単にパスから削除) set_false_path –from 実行時間 set_false_path -from -to : 影響あり (削除不可、プロセスで共有されるパス) 非同期クロックの間に set_clock_groups を使用 優先順位 set_multicycle_path 3 –from REGA/Q set_multicycle_path 2 –to 28 © Copyright 2013 Xilinx . REGB/D -to よりも -from が 優先される マルチサイクル パス set_multicycle_path N を設定するとホールド チェックは N-1 で実行される – N が 10 の場合、ホールド要件が 9 サイクルになる セットアップ チェックを変更すると、ホールド チェックも変更される 実行時間とセットアップへの悪影響を回避するためのガイドライン – 適切な回路 (クロック イネーブル ロジックなど) を追加 – ホールド要件を 0 に戻して (N-1 減らす) 誤ったホールド違反を回避 Slow Path Launch Transmit Edge 5 ns D Q D Q D Q REG A REG B REG C CLK CLK CLK CLK1X - B Enable CLK1X setup hold CLK1X - C Capture Edge Enable set_multicycle_path –from [get_cells regB] –to [get_cells regC] == set_multicycle_path –from [get_cells regB] –to [get_cells regC] 2 -setup set_multicycle_path –from [get_cells regB] –to [get_cells regC] 1 –hold 29 © Copyright 2013 Xilinx . 2 setup:2, hold:1 setup:2, hold:0 Vivado 言語テンプレートの使用 XDC テンプレート IDE からテンプレートにアクセス – [Windows] → [Language Templates] を クリック SDR および DDR テンプレート – 入力および出力 – ソース同期/システム同期 – 中央揃え/エッジ揃え 30 © Copyright 2013 Xilinx . レポートの解読 report_timing_summary で生成されるタイミング サマリ レポート – [Intra-Clock Paths] セクション : クロック ドメイン内のパス – [Inter-Clock Paths] セクション : 異なるクロック ドメイン間のパス report_timing をインタラクティブにアドバンス オプションを指定して使用 – 通常 Tcl コンソールで使用 • report_timing –through [get_nets {/cpu_top/crit_net_name}] • report_timing –setup –max_paths 10 # For 10 worst setup paths • report_timing –hold –to [get_cells {/top/item}] # Hold on “item” – XDC ファイルからのフィルターを使用して各制約をチェック • set_multicycle_path –from [get_pins regA/C] –to [get_pins regB/D] • report_timing –from [get_pins regA/C] –to [get_pins regB/D] 31 © Copyright 2013 Xilinx . タイミング コマンドのまとめ クロックを作成して検証 – check_timing : 不足しているクロックおよび I/O 制約を確認 – report_clocks : 周波数および位相をチェック – report_clock_networks : クロック ルート クロック グループを確認 – report_clock_interaction I/O 遅延を確認 – report_timing -from [input_port] -setup/-hold – report_timing -to [output_port] -setup/-hold 必要に応じて例外を追加 – report_timing を使用して確認 32 © Copyright 2013 Xilinx . 制約ファイルの管理 1 つの XDC ファイルを使用 – XDC が合成とインプリメンテーションの両方に適用される 複数の XDC ファイルを使用 – 最上位制約を含むメインの XDC • プライマリ クロックおよび I/O 遅延 • クロックおよび RTL オブジェクトの例外 – インプリメンテーション特定の XDC main.xdc Elaboration • 物理制約 • 物理ネットリストに基づく例外 Synthesis impl.xdc 33 © Copyright 2013 Xilinx . Implementation IP 制約ファイルの管理 一部の IP には独自の XDC 制約がある – 例 : Clocking Wizard デフォルトでは、Clocking Wizard の XDC はユーザー XDC よりも先に読み込まれる (ユーザー制約で IP で定義されたクロックを上書き可能) 制約ファイルの順序は重要 – XDC ファイルの順序をレポート : report_compile_order –constraints – report_clocks を使用してクロックを常に検証 (4 手順のプロセスの手順 2) – デフォルト順を変更する場合 set_property PROCESSING_ORDER early|late IP_XDC_File – 必要に応じて IP の XDC ファイルをイネーブル/ディスエーブル 34 © Copyright 2013 Xilinx . クロックおよびピンの配置 ピンおよびクロックの配置は通常デザイン サイクルの初期段階で決定 – これらの決定がデザインのパフォーマンスに影響 • 過剰なクロック スキュー • 不適切な I/O タイミング • タイミングに問題のあるクロック乗せ換え • ロジック配置の柔軟性低下 • クロック リソースの選択肢が少ない • 過剰な配線遅延 • デバイス使用率の低下 ピンとクロックの配置は一緒に考える必要がある – クロック ピンに関する決定事項がクロック タイミングおよびリソースの選択に影響 – データ ピンに関する決定事項がクロック ピンの配置に影響 35 © Copyright 2013 Xilinx . クロックおよびピンの配置 クロック ピン配置での考慮事項 – ピンを割り当てる前に I/O インターフェイスおよびクロッキング IP を生成する – 可能な限りクロックおよび MMCM を統合する • クロックおよび MMCM の数を少なくすると、使用されるクロック リソースおよびクロック乗せ換えが 減る – クロック リソースおよびピンを割り当てる前にすべての CDC を考慮する データ ピン配置での考慮事項 – 関連のデータ ピンを同じバンクに配置、それが不可能な場合は隣接バンクに配置 • 可能な場合は関連の I/O クロックを同じバンクに配置 – データ パスと共に関連の制御信号の配置も考慮する – ピン配置を実行するときにデータ フローを考慮する • データがデバイス内を障害なく通過できるようピン配置を選択する – ファンアウトの大きい信号をチップの中央近くに配置する • ファンアウトの非常に大きい信号は BUFG リソースを使用して CCIO ピンに割り当てることを考慮 – 配置段階ですべてのピン属性 (I/O 規格、スルーなど) を評価 36 © Copyright 2013 Xilinx . クロックおよびピンの配置 Vivado のピン配置機能を使用 – ピンおよびクロックの割り当てを生成された IP からインポート – パッケージおよびデバイスでの I/O リソース配置を表示 – DRC、SSN、およびその他のチェックで検証 – コンフィギュレーション ピンの割り当ておよびデバイスを移行した場合の考慮事項 ピンの変更を Vivado で再評価 – PCB ピン スワップがタイミングおよび リソースにどのように影響するかを 理解 37 © Copyright 2013 Xilinx . SSI に関する追加の考慮事項 クロッキング – ファンアウトの大きいクロックは中央の SLR に配置 – リージョナル クロックは SLR 内の中央のクロック領域に配置 – クロック ピン/MMCM はタイミング クリティカル I/O インターフェイスと同じ SLR に配置 (タイミング クリティカル I/O インターフェイスを別の SLR から駆動しない) – 上部の SLR と下部の SLR でクロック ピンをバランス良く選択する • 上部 2 つの SLR のクロック ドメインには 8 個の BUFG x 2 • 下部 4 つの SLR のクロック ドメインには 4 個の BUFG x 4 ピン配置 – すべての SLR を駆動するファンアウトの大きい信号は中央の SLR に配置 – I/O インターフェイスは複数の SLR にまたがらないようにする – SLR をまたがるデータ フローに注意 • ピン配置の選択により複数の SLR をまたぐことが必要になる状況を回避 参考資料 『高集積度 FPGA 設計手法ガイド』 (UG872) 38 © Copyright 2013 Xilinx . フロアプランで配置を改善 フロアプランなしで開始 – 配置配線アルゴリズムで達成可能な結果を確認 まず HDL、合成、制約を改善 – 簡単、フロアプランを使用しない方が一貫した結果が 得られる Vivado IDE を使用 – モジュールごとに配置をハイライトし、ガイドとして使用 – クリティカル タイミング パスの配置を表示 • Pblock のデータ フローを理解 • Pblock の影響を理解 • 配置周辺のリソースがデータ フローに影響 – リソース使用率を考慮して Pblock を作成 フロアプランを過剰に使用しない (できるだけ少なく) – デザインの重要なエリアのみをフロアプラン – 使用率の高い Pblock を作成しない • 配線の密集または新しいタイミング問題が発生する可能性あり – Pblock が重ならないようにする • 配置およびクロックが複雑になる 39 © Copyright 2013 Xilinx . Baseline run with highlighted regions UltraFast 設計手法のまとめ 最適な結果を得るには、FPGA の HDL スタイルを適用 – BRAM、LUTRAM、DSP、SRL 推論の要件に注意 – 通常はリセットをできるだけ使用しない、使用する場合は非同期リセットを避ける – 制御信号を最小限にする – 大型 FPGA はデータ フローおよびフロアプランを考慮して設計 基本制約を作成してクロージャを短時間で達成 適切なタイミング制約を設定 – 不適切な制約は実行時間が長くなり、パフォーマンスが低下し、ハードウェア エラーが発生する原因となる – タイミングの作成方法および検証方法の基本を理解する ピン/クロック配置のガイドラインに従う – データ フローに従う – ファンアウトの大きいクロックおよびピンを SSIT デバイスの中央に配置する 40 © Copyright 2013 Xilinx .
© Copyright 2025 ExpyDoc