Presentation is loading. Please wait.

Presentation is loading. Please wait.

UltraFastTM 設計手法 成功のためのガイドライン Vivado Design Suite.

Similar presentations


Presentation on theme: "UltraFastTM 設計手法 成功のためのガイドライン Vivado Design Suite."— Presentation transcript:

1 UltraFastTM 設計手法 成功のためのガイドライン Vivado Design Suite

2 内容 UltraFast 設計手法の概要 ハードウェアに適合する HDL コードの記述 タイミング制約の作成と検証
クロック配置、ピン配置、フロアプラン

3 UltraFastTM 設計手法の利点 コンパイル時間を短縮し、予測可能な結果を取得
適切な設計手法が必要 プロジェクトのスケジュールによりタイム トゥ マーケットの短縮が必要 リスクを効果的に管理 反復回数、特に最終段階での変更を最小限に抑える 予測および解析機能により、設計の初期段階でさまざまなオプションを試すことが可能 エキスパートや上級ユーザーからの推奨事項 ベスト プラクティス (チェックリストおよび資料へのリンク) 検証ツールおよびレポート リンティングおよび DRC

4 UltraFast 設計手法ガイド (UG949)
PCB 設計 : ボードの製造し直しを回避 XPE を使用して消費電力を要件に対して検証 Vivado I/O 配置を使用し、インターフェイスを含む最上位で DRC を実行 デザインの作成 : 最高の QoR を得るためのコーディング スタイル Vivado の HDL 言語テンプレートを使用 新しいリンティング機能 : 設計手法 DRC ルールデック インプリメンテーション : 短期間でタイミング クロージャを達成 短期間でクロージャを達成するための手法 : 最小限の制約でクロージャ 最終的なクロージャ : 適切な制約でクロージャ XDC 言語テンプレートおよびタイミング DRC ルールデックを使用

5 設計サイクルを高速化するためのストラテジ 初期段階で反復作業
デザイン フローの初期段階からクロージャを開始する 後の段階よりも反復作業を短時間で実行可能 結果の品質 (QoR) に与える影響が大きい QoR への影響 100x x x x デバイス/IP の選択 PCB / 設計 インプリメンテーション クロージャ IP の統合、RTL デザイン、 検証 コンフィギュレーション、 検証、デバッグ 設計サイクルの時間とコストを削減

6 タイミング クロージャを短期間で達成するための手法 基本制約の作成
優先順位を決め、1 ステップごとにクロージャ まず合成 (高速、影響が大きい) で、その後バックエンドで 最も単純な制約から開始 : ほとんどの問題の原因となる内部 Fmax (フリップフロップ間の制約) クロックの依存性を適切に定義 デザインおよび制約が妥当なものであることを確認 解析して根本的な原因を把握してから修正方法を決定 クロック パス vs. データ パス vs. インターコネクト遅延 vs. ロジック遅延… I/O 制約を追加し (Vivado XDC テンプレートを使用)、再実行… 最終的な制約と混同しない 完全な制約は必要 6

7 デザイン クロージャを段階的に達成 必要な場合 タイミング例外、 基本制約 内部パスを最適化 チップ全体を最適化 調整 I/O 制約を追加
合成 解析 配置 配線 基本制約 内部パスを最適化 Fmax 基本 XDC 合成 解析 配置 配線 I/O 制約を追加 チップ全体を最適化 Fmax 完全な XDC 合成 解析 配置 配線 必要な場合 タイミング例外、 フロアプランを追加 調整 Fmax 最終 XDC

8 クリティカル パスが変わることがある 実際のデザイン例
合成後の予測 (実際の問題) ワースト パス : ロジック レベル数 13 配置後 ワースト パス : ロジック レベル数 7 ロジック レベル数が 7 ~ 13 のパスは ローカルに配置される 配線後 (実際の問題の副作用) ワースト パス : ロジック レベル数 4 ロジック レベル数が 5 ~ 13 のパスは 優先的に配線される ワースト パス : 4.3ns ワースト パス : 4.2ns ワースト パス : 4.1ns タイミング クロージャを短期間で達成するため タイミングの問題を初期段階で解析および修正 8

9 HDL コーディング スタイルの影響 ブロックの推論 デザインをパイプライン処理してロジック レベルを削減 リセットをできるだけ使用しない
RAM、DSP、LUT RAM、SRL の推論には推奨されるテンプレートを使用 デザインをパイプライン処理してロジック レベルを削減 リセットをできるだけ使用しない リセット回路は通常不要 : ザイリンクス デバイスは既知のステートで起動 専用シフト レジスタ (SRL) および RAM メモリ配列はリセットを使用しない リセットが必要な場合は同期リセットを使用 レジスタを専用 RAM および DSP ブロックにパック可能 リセットをデータパス (LUT) にインプリメントすることも可能 合成ツールでの処理がより柔軟に実行される ほかの合成ツールまたは以前のリリースで必要だった属性を再確認 KEEP、dont_touch、syn_preserve、max_fanout などの属性はできるだけ 使用しない

10 HDL 言語テンプレートの使用 IDE からテンプレートにアクセス 合成テンプレート
[Windows] → [Language Templates] をクリック 合成テンプレート BRAM、LUTRAM、ROM、SRL カウンター、乗算器 FSM、デコーダー、エンコーダー

11 ハードウェアに適したコード記述 DSP ブロックのカスケード機能を活用 in ブロック RAM の競合を回避するロジック(*) を使用しない
乗算器のチェーンをパイプライン 処理すると最適なパフォーマンスが得られる in 加算器のツリーはパフォーマンスのボトルネックとなる out out DSP48 DSP48 DSP48 DSP48 競合チェックを ディスエーブルに した推論 合成ツールで競合が 発生すると想定される rdaddr RAMB wraddr rdaddr dout RAMB din wraddr dout din = (*) : Synplify でデフォルトで追加されるロジック (syn_no_rw_check 属性を使用すると削除される)

12 リセットの影響 適切なリセットを選択することによりパフォーマンスを向上 非同期リセットを使用すると DSP/RAM が推論されない P A
可能な限りリセットを使用しないのがベスト 非同期リセットではなく同期リセットを使用 アクティブ Low リセットでなくアクティブ High リセットを使用 レジスタのデフォルト値は INIT プロパティで指定 非同期リセットを使用すると DSP/RAM が推論されない DSP48 A B P 使用済みレジスタ rst 未使用レジスタ 非同期リセットを エミュレートする回路 ‘1’

13 LUT コンバイン LUT コンバインは LUT の 2 つの出力 (O5/O6) を利用 ツールの動作
利点 : エリアを節約 欠点 : 密集を引き起こす可能性がある ツールの動作 XST/Synplify ではデフォルトで LUT コンバインを使用、Vivado 合成にはソフト LC 制約がある インプリメンテーションでは place_design で使用率に応じて LUT が組み合わせられる デバイスまたは Pblock の使用率が高いと、より多くのLUT が組み合わせられる Use report_utilization を使用し、O5 と O6 を使用する LUT を確認 ガイドライン : >15% の LUT が O5 と O6 の両方を使用している場合 合成で LUT コンバインをオフにすることを考慮 Slice Logic Distribution |Site Type | Used| |Slice | | |LUT as Logic | | | using O5 output only | | | using O6 output only | | | using O5 and O | |

14 その他のデザイン 解析 report_high_fanout_nets report_control_sets
ネットのファンアウトを削減するには、次を使用 max_fanout (Vivado 合成および XST) syn_maxfan (Synplify) タイミング ドリブン複製には phys_opt_design を使用 report_control_sets パッキングの問題や適合の問題を表す –verbose オプションを実行して完全なリストを生成 Synplify の syn_reduce_controlset_size 属性を使用して制御 デフォルトは 2 だが、8 に設定してファンアウトの小さい制御セットを除去

15 クリティカル警告を確認して解決 Vivado はクリティカル警告が発生しても停止しない クリティカル警告は深刻なデザインの問題
多くの問題を同時に修正することが可能 クリティカル警告を解決しないと、ビットストリーム生成でエラーが発生する クリティカル警告は深刻なデザインの問題 無効な制約または XDC 構文エラー パスの分割 ネットリスト オブジェクトが見つからない、または無効 次の段階に進む前にこれらの警告を解決 デザイン解析の結果が不正確になる可能性がある クリティカル警告があると、最適なデザインを作成できない

16 タイミング制約は適切なものにする必要がある
制約 (クロック、I/O) が不足している場合 パスのタイミングが実際よりも良いようにレポートされる 違反はレポートされないが、ハードウェアでは機能しない パスが不適切に制約されている場合 重要でないパスに時間と最適化のエフォートが費やされる レポートされたタイミング違反がハードウェアでは問題とならない場合がある 制約により間違ったホールド違反がレポートされた場合 実行時間が長くなり、セットアップ違反が発生することがある 配置配線では、ホールド違反を修正することが最優先される デザインにホールド違反があると、ハードウェアで機能しない デザインにセットアップ違反があっても、ハードウェアでは機能する (ただし低速)

17 IP 制約 多くのコアには独自の制約/例外制約がある ネイティブでない IP : 注意が必要 ネイティブ IP : 制約は自動的に含まれる
PCIe、MIG、RAM ベースの非同期 FIFO… ネイティブでない IP : 注意が必要 NGC ファイルで提供されている IP 制約を含め忘れることがあるので注意 ネイティブ IP : 制約は自動的に含まれる IDE の [Sources] ビュー : [Compile Order] タブの [Constraints] フォルダー report_compile_order -constraints を使用して制約ファイル ソースを確認

18 適切な制約の作成方法 クロックを作成し、クロックの関連性を定義 入力遅延および出力遅延を設定 タイミング例外を設定
4 手順のガイドライン 入力遅延および出力遅延を設定 不正なホールド違反を作成しないよう注意 タイミング例外を設定 できるだけ少なく 各手順でレポート コマンドを使用して検証 18

19 クロックの基本原則 SDC ベースのタイミング エンジンでは、クロックは作成しないと認識されない
プライマリ クロックは create_clock を使用して作成 クロックはクロック調整ブロックを介して自動的に伝搬される MMCM および PLL の出力クロックは自動生成される ギガビット トランシーバーは自動的に伝搬されないので、手動で作成する必要あり 必要に応じて内部クロックを create_generated_clock を使用して作成 デフォルトではクロック間のすべてのパスのタイミングが解析される クロックをここで 作成しない クロックを ここで作成

20 クロックを作成する 4 つの手順 手順 1 手順 2 report_clocks の出力例
最上位ポートに create_clock を使用してプライマリ クロックを作成 デザインを合成するか、ネットリスト デザインを開く 手順 2 report_clocks を実行 レポートを参照して周期、位相、伝搬を確認 必要に応じて制約を修正 Attributes P: Propagated G: Generated Clock Period Waveform Attributes Sources sys_clk { } P {sys_clk} pll0/clkfbout { } P,G {pll0/plle2_adv_inst/CLKFBOUT} pll0/clkout { } P,G {pll0/plle2_adv_inst/CLKOUT0} pll0/clkout { } P,G {pll0/plle2_adv_inst/CLKOUT1} report_clocks の出力例

21 クロックを作成する 4 つの手順 (続き) 手順 3 手順 4
report_clock_interaction を使用してクロックの関連性を評価 注意 : クロック間のパスはすべてデフォルトで制約される クロック間のパス (クロック乗せ換え) を非同期として指定 適切な CDC 同期回路が設計されていることを確認 set_clock_groups を使用 (set_false_path よりも推奨) 注意 : この制約により set_max_delay 制約が無効になるので注意 制約が適用されていないオブジェクトがあるかを確認 check_timing を使用 手順 4 report_clock_networks を実行 ロジックが含まれないクロック ラインを設計する ヒント : 合成でクロック ゲーティング オプションを使用して LUT を削除

22 クロック ネットワーク レポート report_clock_network は制約されていないネットワークを表示 create_clock
クロック ネットワーク レポートに制約されていないクロックが含まれる場合 クロック ネットワーク レポートに制約されていないクロックなし create_clock

23 クロック関連性の定義と検証

24 クロック乗せ換えの制約 適切な同期化手法を使用 MTBF を最大化 1 ビットの場合は 2 段以上のレジスタ バスの場合は FIFO
平均故障間隔 (MTBF) を最大にするため、ASYNC_REG を設定して同期化フリップフロップを同じスライスに配置 set_property ASYNC_REG TRUE \ [get_cells [list sync0_reg sync1_reg]]

25 非同期 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} ]

26 非同期 CDC の制約 – バス ビルトイン ハード FIFO を使用 (推奨)
非同期転送用に設計されている set_clock_groups 制約を使用 ファブリックのグレイ コードで記述された FIFO 転送を使用 タイミング要件を設定 : set_max_delay $delay \ –from [get_pins cell1/C] \ –to [get_pins cell2/D] \ –datapath_only ($delay は clk A の周期または 2 つのクロック周期の 小さい方より小さい) set_max_delay を含む XDC ファイルは IP カタログで自動生成される 非同期クロック グループは作成しない set_clock_groups が set_max_delay より優先され、 set_max_delay が無効になる sync. cell1 sync. cell2 注記 : -datapath_only はザイリンクス特定 (SDC に準拠しない)

27 入力/出力遅延 I/O 制約なしで開始 主要なタイミングが妥当なものになったら、現実的な 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

28 タイミング例外 : できるだけ少なく 利点 : タイミング クロージャに有益
インプリメンテーション時間が長くなるのを回避 非現実的なタイミング要件を調整 例外がタイミング クロージャおよび実行時間に悪影響を与えることもある 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 REGB/D -to よりも -from が 優先される

29 マルチサイクル パス set_multicycle_path N を設定するとホールド チェックは N-1 で実行される
セットアップ チェックを変更すると、ホールド チェックも変更される 実行時間とセットアップへの悪影響を回避するためのガイドライン 適切な回路 (クロック イネーブル ロジックなど) を追加 ホールド要件を 0 に戻して (N-1 減らす) 誤ったホールド違反を回避 hold setup Launch set_multicycle_path –from [get_cells regB] –to [get_cells regC]  setup:2, hold:1 == 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  setup:2, hold:0

30 Vivado 言語テンプレートの使用 XDC テンプレート
IDE からテンプレートにアクセス [Windows] → [Language Templates] を クリック SDR および DDR テンプレート 入力および出力 ソース同期/システム同期 中央揃え/エッジ揃え

31 レポートの解読 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]

32 タイミング コマンドのまとめ クロックを作成して検証 クロック グループを確認 I/O 遅延を確認 必要に応じて例外を追加
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 を使用して確認

33 制約ファイルの管理 1 つの XDC ファイルを使用 複数の XDC ファイルを使用 プライマリ クロックおよび I/O 遅延
クロックおよび RTL オブジェクトの例外 インプリメンテーション特定の XDC 物理制約 物理ネットリストに基づく例外 Implementation main.xdc impl.xdc Synthesis Elaboration

34 IP 制約ファイルの管理 一部の IP には独自の XDC 制約がある 制約ファイルの順序は重要
例 : Clocking Wizard 制約ファイルの順序は重要 XDC ファイルの順序をレポート : report_compile_order –constraints report_clocks を使用してクロックを常に検証 (4 手順のプロセスの手順 2) デフォルト順を変更する場合 set_property PROCESSING_ORDER early|late IP_XDC_File 必要に応じて IP の XDC ファイルをイネーブル/ディスエーブル デフォルトでは、Clocking Wizard の XDC はユーザー XDC よりも先に読み込まれる (ユーザー制約で IP で定義されたクロックを上書き可能)

35 クロックおよびピンの配置 ピンおよびクロックの配置は通常デザイン サイクルの初期段階で決定 ピンとクロックの配置は一緒に考える必要がある
これらの決定がデザインのパフォーマンスに影響 過剰なクロック スキュー 不適切な I/O タイミング タイミングに問題のあるクロック乗せ換え ロジック配置の柔軟性低下 クロック リソースの選択肢が少ない 過剰な配線遅延 デバイス使用率の低下 ピンとクロックの配置は一緒に考える必要がある クロック ピンに関する決定事項がクロック タイミングおよびリソースの選択に影響 データ ピンに関する決定事項がクロック ピンの配置に影響

36 クロックおよびピンの配置 クロック ピン配置での考慮事項 データ ピン配置での考慮事項
ピンを割り当てる前に I/O インターフェイスおよびクロッキング IP を生成する 可能な限りクロックおよび MMCM を統合する クロックおよび MMCM の数を少なくすると、使用されるクロック リソースおよびクロック乗せ換えが 減る クロック リソースおよびピンを割り当てる前にすべての CDC を考慮する データ ピン配置での考慮事項 関連のデータ ピンを同じバンクに配置、それが不可能な場合は隣接バンクに配置 可能な場合は関連の I/O クロックを同じバンクに配置 データ パスと共に関連の制御信号の配置も考慮する ピン配置を実行するときにデータ フローを考慮する データがデバイス内を障害なく通過できるようピン配置を選択する ファンアウトの大きい信号をチップの中央近くに配置する ファンアウトの非常に大きい信号は BUFG リソースを使用して CCIO ピンに割り当てることを考慮 配置段階ですべてのピン属性 (I/O 規格、スルーなど) を評価

37 クロックおよびピンの配置 Vivado のピン配置機能を使用 ピンおよびクロックの割り当てを生成された IP からインポート
パッケージおよびデバイスでの I/O リソース配置を表示 DRC、SSN、およびその他のチェックで検証 コンフィギュレーション ピンの割り当ておよびデバイスを移行した場合の考慮事項 ピンの変更を Vivado で再評価 PCB ピン スワップがタイミングおよび リソースにどのように影響するかを 理解

38 SSI に関する追加の考慮事項 クロッキング ピン配置 参考資料 ファンアウトの大きいクロックは中央の 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)

39 フロアプランで配置を改善 フロアプランなしで開始 まず HDL、合成、制約を改善 Vivado IDE を使用
配置配線アルゴリズムで達成可能な結果を確認 まず HDL、合成、制約を改善 簡単、フロアプランを使用しない方が一貫した結果が 得られる Vivado IDE を使用 モジュールごとに配置をハイライトし、ガイドとして使用 クリティカル タイミング パスの配置を表示 Pblock のデータ フローを理解 Pblock の影響を理解 配置周辺のリソースがデータ フローに影響 リソース使用率を考慮して Pblock を作成 フロアプランを過剰に使用しない (できるだけ少なく) デザインの重要なエリアのみをフロアプラン 使用率の高い Pblock を作成しない 配線の密集または新しいタイミング問題が発生する可能性あり Pblock が重ならないようにする 配置およびクロックが複雑になる Baseline run with highlighted regions

40 UltraFast 設計手法のまとめ 最適な結果を得るには、FPGA の HDL スタイルを適用 基本制約を作成してクロージャを短時間で達成
BRAM、LUTRAM、DSP、SRL 推論の要件に注意 通常はリセットをできるだけ使用しない、使用する場合は非同期リセットを避ける 制御信号を最小限にする 大型 FPGA はデータ フローおよびフロアプランを考慮して設計 基本制約を作成してクロージャを短時間で達成 適切なタイミング制約を設定 不適切な制約は実行時間が長くなり、パフォーマンスが低下し、ハードウェア エラーが発生する原因となる タイミングの作成方法および検証方法の基本を理解する ピン/クロック配置のガイドラインに従う データ フローに従う ファンアウトの大きいクロックおよびピンを SSIT デバイスの中央に配置する


Download ppt "UltraFastTM 設計手法 成功のためのガイドライン Vivado Design Suite."

Similar presentations


Ads by Google