Vivado Design Suite
ユーザー
ガ イ ド
合成
Notice of Disclaimer
The information disclosed to you hereunder (the “Materials”) is provided solely for the selection and use of Xilinx products.To the maximum extent permitted by applicable law:(1) Materials are made available "AS IS" and with all faults, Xilinx hereby DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,
NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and (2) Xilinx shall not be liable (whether in contract or tort, including negligence, or under any other theory of liability) for any loss or damage of any kind or nature related to, arising under, or in connection with, the Materials (including your use of the Materials), including for any direct, indirect, special, incidental, or consequential loss or damage (including loss of data, profits, goodwill, or any type of loss or damage suffered as a result of any action brought by a third party) even if such damage or loss was reasonably foreseeable or Xilinx had been advised of the possibility of the same.Xilinx assumes no obligation to correct any errors contained in the Materials or to notify you of updates to the Materials or to product specifications.You may not reproduce, modify, distribute, or publicly display the Materials without prior written consent.Certain products are subject to the terms and conditions of the Limited Warranties which can be viewed at http://www.xilinx.com/warranty.htm; IP cores may be subject to warranty and support terms contained in a license issued to you by Xilinx.Xilinx products are not designed or intended to be fail-safe or for use in any application requiring fail-safe performance; you assume sole risk and liability for use of Xilinx products in Critical
Applications:http://www.xilinx.com/warranty.htm#critapps.
© Copyright 2013 Xilinx, Inc. Xilinx, the Xilinx logo, Artix, ISE, Kintex, Spartan, Virtex, Vivado, Zynq, and other designated brands included herein are trademarks of Xilinx in the United States and other countries.All other trademarks are the property of their respective owners.
本資料は英語版 (v2013.1) を翻訳し た も ので、 内容に相違が生じ る 場合には原文を優先し ます。 資料に よ っ ては英語版の更新に対応 し ていない も のがあ り ます。 日本語版は参考用 と し て ご使用の上、 最新情報につ き ま し ては、 必ず最新英語版を ご参照 く だ さ い。 こ の資料に関す る フ ィ ー ド バ ッ ク お よ び リ ン ク な ど の問題につ き ま し ては、[email protected] までお知 ら せ く だ さ い。 いただ き ま し た ご意見を参考に早急に対応 さ せていただ き ます。 なお、 こ の メ ール ア ド レ スへのお問い合わせは受け付け てお り ません。 あ ら か じ めご了承 く だ さ い。
次の表に、 こ の文書の改訂履歴を示 し ます。 日付 バージ ョ ン 改訂内容 2013 年 4 月 10 日 2013.1 次の よ う に変更 • XST 合成情報を削除 • XST 警告を追加および削除 • 合成ス ト ラ テジの図を追加 • 新し い合成ス ト ラ テジの説明を追加
• 「run ス ト ラ テジの作成」 に合成オプシ ョ ン -bugf、 -directive、 -no_lc、 -control_set_opt_threshold、 -resource_sharing を追加 • 「run ス ト ラ テジの作成」 か ら -no_iobuf を削除 • 19 ページの 「ボ ト ムア ッ プ フ ローの設定」 を追加 • 使用可能な Tcl コ マン ド オプシ ョ ンの リ ス ト を ア ッ プデー ト • 付録 A 「合成属性」 に SHREG_EXTRACT を追加 • 付録 C 「HDL コーデ ィ ン グ手法」 を追加
目次
改訂履歴 . . . 3Vivado 合成
概要 . . . 6 合成手法 . . . 6 合成の使用 . . . 7 フ ロ アプ ラ ンお よ び使用率の表示 . . . 24 ロ ジ ッ ク の解析 . . . 27 非プ ロ ジ ェ ク ト モー ド での合成 . . . 32付録 A : 合成属性
概要 . . . 35 サポー ト さ れ る 属性 . . . 35付録 B : SystemVerilog サポー ト
概要 . . . 43 特定の フ ァ イ ルで SystemVerilog を使用 . . . 43 デー タ 型 . . . 44 プ ロ セ ス . . . 47 手続 き プ ロ グ ラ ム代入文 . . . 49 タ ス ク お よ び関数 . . . 50 モジ ュ ールお よ び階層 . . . 51 イ ン タ ーフ ェ イ ス . . . 52付録 C : HDL コ ーデ ィ ング手法
概要 . . . 55 VHDL の利点 . . . 55 VHDL の利点 . . . 55 SystemVerilog の利点 . . . 56 フ リ ッ プ フ ロ ッ プ、 レ ジ ス タ 、 お よ び ラ ッ チ . . . 56 ラ ッ チ . . . 59 ト ラ イ ス テー ト . . . 61 シ フ ト レ ジ ス タ . . . 64 ダ イ ナ ミ ッ ク シ フ ト レ ジ ス タ . . . 68 乗算器 . . . 71 乗加算お よ び乗累算 . . . 73 RAM の HDL コ ーデ ィ ン グ手法 . . . 75付録 D : その他の リ ソ ース
Vivado 合成
概要
合成は、RTL で記述 さ れたデザ イ ン を ゲー ト レベル記述に変換する プ ロ セ ス です。 Vivado™ 統合設計環境 (IDE) の 合成は タ イ ミ ン グ ド リ ブンであ り 、 メ モ リ 使用量お よびパフ ォ ーマン ス で最適化 さ れてい ます。 SystemVerilog お よ び VHDL と Verilog の混合 も サポー ト さ れてい ます。 Vivado IDE では、 業界標準の Synopsys Design Constraints (SDC) に基づ く ザ イ リ ン ク ス デザ イ ン制約 (XDC) がサポー ト さ れてい ます。
重要 : UCF 制約は、 Vivado 合成ではサポー ト されません。 UCF 制約は XDC 制約に変換する必要があ り ます。詳細は、 『Vivado Design Suite 移行手法ガ イ ド 』 (UG911) [参照 6] の 「UCF 制約の XDC 制約への移行」 を参照し て く だ さ い。
合成を設定 し て実行する には、 次の 2 つの方法があ り ます。 • プ ロ ジ ェ ク ト モー ド を使用
• 非プ ロ ジ ェ ク ト モー ド を使用 (Tcl コ マン ド synth_design を実行し 、 デザ イ ン フ ァ イ ルをユーザーが制御) 操作モー ド の詳細は、 『Vivado Design Suite ユーザー ガ イ ド : デザ イ ン フ ローの概要』 (UG892) [参照 7] を参照し て く だ さ い。 こ の章では、 両方のモー ド を使用 し た合成を個別のセ ク シ ョ ンで説明 し ます。
合成手法
Vivado IDE では、 合成およびイ ンプ リ メ ンテーシ ョ ン run を ボ タ ン を ク リ ッ ク する だけで実行可能な環境が提供 さ れ てい ます。run のデータ は自動的に管理 さ れ、 さ ま ざ ま な RTL ソ ース バージ ョ ン、 タ ーゲ ッ ト デバ イ ス、 合成お よ び イ ン プ リ メ ン テーシ ョ ン オプシ ョ ン、 物理制約お よ び タ イ ミ ン グ制約を使用 し て繰 り 返 し 実行で き ます。 Vivado IDE では、 次の操作を実行で き ます。 • ス ト ラ テジ を作成お よ び保存。 ス ト ラ テジ と は、 合成ま たは イ ンプ リ メ ン テーシ ョ ンのデザ イ ン run に適用 さ れ る コ マ ン ド オプシ ョ ンの設定です。 詳細は、11 ページの 「run ス ト ラ テジの作成」 を参照 し て く だ さ い。 • 複数の合成お よ び イ ンプ リ メ ン テーシ ョ ン run を設定し 、 順次に、 ま たはマルチプ ロ セ ッ サ マシ ンで同時に実 行。 詳細は、15 ページの 「合成の実行」 を参照 し て く だ さ い。 • 合成ま たは イ ンプ リ メ ン テーシ ョ ンの進捗状況を監視、 ロ グ レ ポー ト を確認、run を キ ャ ンセル。詳細は、22 ペー ジの 「合成実行の監視」 を参照 し て く だ さ い。
合成の使用
こ のセ ク シ ョ ンでは、Vivado IDE を使用 し て Vivado 合成を設定お よび実行する方法を説明 し ます。 各 Vivado IDE 操 作の下に、 同等の Tcl コ マン ド が リ ス ト さ れてい ます。
Tcl コ マン ド の詳細および Tcl の使用方法は、 次のガ イ ド を参照し て く だ さ い。 • 『Vivado Design Suite Tcl コ マン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 3]
• 『Vivado Design Suite ユーザー ガ イ ド : Tcl ス ク リ プ ト 機能の使用』 (UG894) [参照 4]
合成設定
デザ イ ンの合成オプシ ョ ン を設定する には、 次の手順に従い ます。
1. Flow Navigator で [Synthesis] → [Synthesis Settings] を ク リ ッ ク し ます (図 1)。
図 2 に示す [Project Settings] ダ イ ア ロ グ ボ ッ ク ス が開き ます。
X-Ref Target - Figure 1
合成の使用
X-Ref Target - Figure 2
2. [Project Settings] ダ イ ア ロ グ ボ ッ ク ス で、 次の よ う に設定 し ます。
a. [Synthesis] ページの [Constraints] で、 [Default Constraint Set] にア ク テ ィ ブな制約セ ッ ト と する制約セ ッ ト を 選択 し ます。 制約セ ッ ト は、 ザ イ リ ン ク ス デザ イ ン制約 (XDC) で記述 さ れたデザ イ ン制約を含む複数の制 約フ ァ イ ルのセ ッ ト です。 デザ イ ン制約には、 次の 2 種類があ り ます。 - 物理制約 : ピ ン配置、 ブ ロ ッ ク RAM、 LUT、 フ リ ッ プフ ロ ッ プな どのセルの絶対配置ま たは相対配置、 お よ びデバ イ ス の コ ン フ ィ ギ ュ レーシ ョ ン設定を定義 し ます。 - タ イ ミ ン グ制約 : デザ イ ンの周波数要件を定義し ます。 タ イ ミ ン グ制約を設定し ない場合、 デザ イ ンが ワ イ ヤの長 さ お よ び配線の密集度にのみ基づいて最適化 さ れます。 選択 し た制約セ ッ ト は新 し い run に使用 さ れ、 デザ イ ンの変更 も こ の制約セ ッ ト に保存 さ れます。 同等の Tcl コ マン ド : -constrset <arg>
b. [Options] エ リ アで、[Strategy] ド ロ ッ プダ ウ ン リ ス ト か ら 合成 run に使用する 合成ス ト ラ テジ を選択し ます。 あ ら か じ め定義 さ れた ス ト ラ テジか ら 選択する か、 ま たは独自の ス ト ラ テジ を定義で き ます。 合成ス ト ラ テ ジ を選択す る と 、 使用可能な Vivado ス ト ラ テ ジがダ イ ア ロ グ ボ ッ ク ス に表示 さ れます。 オプシ ョ ンの値を 変更する と 、 合成ス ト ラ テジの設定を変更で き ます。 表 1 に、 run ス ト ラ テジ、 そのデフ ォ ル ト 設定、 およびその他のオプシ ョ ン を示 し ます。 表の後に、 オプシ ョ ンの詳細を説明 し ます。 c. 表示 さ れてい る オプシ ョ ン を選択 し ます。 次のオプシ ョ ンがあ り ます。 - [tcl.pre] および [tcl.post] : 合成の前後に実行する Tcl フ ァ イ ルを指定し ます。 注記 : tcl.pre お よび tcl.post ス ク リ プ ト 内のパス は、 現在のプ ロ ジ ェ ク ト に関連付け ら れてい る run デ ィ レ ク ト リ <project>/<project.runs>/<run_name> を基準 と し てい ます。
Tcl ス ク リ プ ト の詳細は、 『Vivado Design Suite ユーザー ガ イ ド : Tcl ス ク リ プ ト 機能の使用』 (UG894) [参 照 4] を参照 し て く だ さ い。
現在のプ ロ ジ ェ ク ト ま たは現在の run の DIRECTORY プ ロ パテ ィ を使用し て、 ス ク リ プ ト 内の相対パス を定義で き ます。
get_property DIRECTORY [current_project] get_property DIRECTORY [current_run] 表 1 : Vivado の run ス ト ラ テ ジおよびデ フ ォル ト オプ シ ョ ン
run ス ト ラ テ ジ オ プ シ ョ ン VivadoSynthesisDefaultsデ フ ォ ル ト 設定 Flow_RuntimeOptimizedデ フ ォ ル ト 設定 その他のオプ シ ョ ン -flatten_hierarchy rebuilt none full
-gated_clock_conversion off off on
-bufg 12 12 ユーザー選択
-fanout_limit 10,000 10,000 ユーザー選択
-directive default RunTimeOptimized な し
-fsm_extraction auto off one_hot、 sequential、 johnson、 gray
-keep_equivalent_registers オ フ オ フ オン
-resource_sharing on auto off
-control_set_opt_threshold 1 1 ユーザー選択
合成の使用 - [-flatten_hierarchy] : Vivado 合成での階層の制御方法を指定し ます。 - [none] : 階層を フ ラ ッ ト 化し ません。 合成の出力には、 元の RTL と 同 じ階層が含まれます。 - [full] : 最上位以外の階層をすべて フ ラ ッ ト 化 し ます。 - [rebuilt] : こ れがデフ ォ ル ト です。 階層を フ ラ ッ ト 化 し て合成を実行 し た後に、 元の RTL に基づいて階 層を再構築 し ま す。 こ の設定を使用す る と 、 境界を越え た最適化を実行で き る ので QoR が向上 し 、 最 終的な階層は RTL と 似た も のにな る ので解析し やす く な り ます。 - [-gated_clock_conversion] : ゲーテ ッ ド ク ロ ッ ク を イ ネーブルに変換する機能をオン/オ フに し ます。 ゲー テ ッ ド ク ロ ッ ク の変換を使用する には、 RTL 属性 も 必要です。 詳細は、付録 A 「合成属性」 を参照 し て く だ さ い。 - [-bufg] : デザ イ ンで推論可能な BUFG の最大数を指定し ます。 こ のオプシ ョ ンは、 デザ イ ンで使用 さ れ る ネ ッ ト リ ス ト のほかの BUFG が合成プ ロ セ ス で認識 さ れない場合に使用し ます。 RTL に イ ン ス タ ン シエー ト さ れてい る BUFG の数が検出 さ れ、 指定 さ れた数ま での BUFG が推論 さ れ ます。 た と えば、 –bufg オプシ ョ ン を 12 に設定 し、 RTL に 3 つの BUFG が イ ン ス タ ン シエー ト さ れて い る と する と 、 あ と 9 個の BUFG を推論可能です。 - [-fanout_limit] : 信号で駆動可能な ロー ド の最大数を指定し ます。 ロー ド の数が こ れよ り 大き く な る場合 は、 ロ ジ ッ ク が複製 さ れます。 こ のグ ローバル設定は一般的なガ イ ド ラ イ ンであ り 、 ツールで必要 と 判 断 さ れた場合は無視 さ れます。 制限を強制す る 必要があ る 場合は、付録 A 「合成属性」に説明 さ れてい る MAX_FANOUT を参照 し て く だ さ い。 注記 : -fanout_limit オプシ ョ ンは、 制御信号 (セ ッ ト 、 リ セ ッ ト 、 ク ロ ッ ク イ ネーブルな ど) には適 用 さ れません。 こ れ ら の信号を複製する 必要があ る 場合は、 MAX_FANOUT を使用し て く だ さ い。
- [-directive] : [-effort_level] に置き換わ る オプシ ョ ンで、 Vivado 合成の最適化方法を指定し ます。 設定可 能な値は [Default] と [RuntimeOptimized] です。 [RuntimeOptimized] を選択する と 、 合成が最適化を少な
く し て高速に実行 さ れます。
- [-fsm_extraction] : 有限ス テー ト マシ ンの抽出およびマ ッ プ方法を指定 し ます。 [off] に設定する と 、 ス テー ト マシ ンは ロ ジ ッ ク と し て合成 さ れます。 ス テー ト マシ ンのエン コ ー ド タ イ プを [off]、 [one_hot]、 [sequential]、 [johnson]、 [gray]、 ま たは [auto] か ら 選択で き ます。 付録 C の 「FSM コ ンポーネン ト 」 に、
こ れ ら のオプシ ョ ンが よ り 詳細に説明 さ れてい ます。 - [-keep_equivalent_registers] : 同じ 入力ロ ジ ッ ク を使用する レ ジ ス タ が統合 さ れない よ う に し ます。 - [-resource_sharing] : 異な る信号間での算術演算子の共有を設定 し ます。設定可能な値は [auto]、[on]、[off] です。 [auto] に設定す る と リ ソ ー ス の共有はデザ イ ン の タ イ ミ ン グ に応 じ て実行 さ れ、 [on] に設定す る と リ ソ ース の共有は常にオン、[off] に設定する と 常にオ フです。 - [-control_set_opt_threshold] : ク ロ ッ ク イ ネーブル最適化の し き い値を設定し 、 制御セ ッ ト の数を削減し ます。 デフ ォル ト 値は 1 です。 制御セ ッ ト を レ ジ ス タ の D ロ ジ ッ ク に移動する ために必要な フ ァ ン ア ウ ト の数を指定 し ます。 フ ァ ン ア ウ ト が指定の値 よ り 大 き い場合は、その信号で レ ジ ス タ の control_set_pin が駆動 さ れる よ う 試み ら れ ます。 - [-no_lc] : オンにする と 、 LUT の結合がオフにな り ます。 ヒ ン ト : レ ジ ス タ が統合さ れないよ う にするには、 KEEP 属性を使用で き ます。 KEEP 属性は、 信号が削除さ れた り ロ ジ ッ ク ブ ロ ッ ク に吸収 さ れ る よ う な最適化が実行 さ れない よ う に し ます。 こ の属性が設定 さ れた信号は保持 さ れ、 ネ ッ ト リ ス ト に含まれます。 詳細は、38 ページの 「KEEP」 を参照 し て く だ さ い。
run ス ト ラ テ ジの作成
ス ト ラ テジは、 合成ツールお よ び イ ンプ リ メ ン テーシ ョ ンで実行 さ れ る さ ま ざ ま なユーテ ィ リ テ ィ やプ ロ グ ラ ムのオ プシ ョ ンのあ ら か じ め定義 さ れたセ ッ ト です。 ス ト ラ テジは、 ツールお よ びバージ ョ ン特定です。 各 メ ジ ャ ー リ リ ー ス には、 そのバージ ョ ン専用の ス ト ラ テジがあ り ます。
1. フ ロ ーの現在の ス ト ラ テジ を確認する には、[Tools] → [Options] を ク リ ッ ク し、 左側のペ イ ンで [Strategies] を ク リ ッ ク し ます。
2. [Flow] ド ロ ッ プダ ウ ン リ ス ト か ら [Vivado Synthesis] を選択し ます。 右側に表示 さ れ る オプシ ョ ンは、 [Project Settings] ダ イ ア ロ グ ボ ッ ク ス の [Synthesis] ページに表示 さ れ る も の と 同じ です。
カ ス タ ム ス ト ラ テジ を作成する には、 次のいずれかを実行 し ます。
• [User Defined Strategies] を右 ク リ ッ ク し、 [Create New Strategy] を ク リ ッ ク し ます。
• ツールバーの [Create New Strategy] ボ タ ン を ク リ ッ ク し 、 [New Strategy] ダ イ ア ロ グ ボ ッ ク ス (図 3) を開き ます。
.
[New Strategy] ダ イ ア ロ グ ボ ッ ク ス で ス ト ラ テジの名前、 ス ト ラ テジの タ イ プ、 およびツール バージ ョ ン を指定し ま す。 説明 も 入力で き ます。 オプシ ョ ン を設定 し た ら [OK] を ク リ ッ ク し ます。
X-Ref Target - Figure 3
合成の使用
合成への入力
Vivado 合成には、 RTL ソ ース コ ー ド およびタ イ ミ ン グ制約を入力で き ます。
RTL ま たは制約 フ ァ イ ル を 追加す る には、 Flow Navigator で [Project Manager] → [Add Sources] を ク リ ッ ク し 、 Add Sources ウ ィ ザー ド (図 4) を開き ます。
制約、RTL、 ま たはその他のプ ロ ジ ェ ク ト フ ァ イ ルを追加し ます。 Add Sources ウ ィ ザー ド の詳細は、 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 2] を参照 し て く だ さ い。
Vivado 合成では、 ザ イ リ ン ク ス ツールでサポー ト さ れる VHDL、 Verilog、 ま たは SystemVerilog のフ ァ イ ルの合成可 能なサブセ ッ ト を読み込む こ と がで き ます。付録 B 「SystemVerilog サポー ト 」 に、 サポー ト さ れ る SystemVerilog コ ン ス ト ラ ク ト が説明 さ れてい ます。
Vivado 合成では、 合成での処理を制御する い く つかの RTL 属性 も サポー ト さ れてい ます。 こ れ ら の属性は、付録 A
「合成属性」 を参照 し て く だ さ い。
Vivado 合成は、 タ イ ミ ン グ制約に XDC フ ァ イ ルが使用 さ れます。
重要 : Vivado Design Suite では、 UCF フ ォーマ ッ ト はサポー ト さ れません。 UCF か ら XDC への変換手順は、 『Vivado Design Suite 移行手法ガ イ ド 』 (UG911) [参照 6] を参照し て く だ さ い。
X-Ref Target - Figure 4
フ ァ イルの コ ンパイル順
あ る フ ァ イ ルに宣言が含まれ、別の フ ァ イ ルがその宣言に依存 し てい る 場合、特定の コ ンパ イ ル順が必要にな り ます。 Vivado IDE では、 RTL ソ ース フ ァ イ ルの コ ンパ イ ル順は、 [Sources] ビ ューの [Compile Order] タ ブに上か ら 下への順 序で表示 さ れます。
Vivado IDE では、 最上位モジ ュール と し て適切なモジ ュールが自動的に特定 さ れ、 設定 さ れます。 コ ンパ イ ル順 も 自 動的に管理 さ れ ます。 ア ク テ ィ ブ階層に含ま れ る 最上位モジ ュ ール フ ァ イ ルお よびすべての ソ ース フ ァ イ ルが、 合 成お よ びシ ミ ュ レーシ ョ ンで正 し い順序で使用 さ れます。
[Sources] ビ ューのポ ッ プア ッ プ メ ニ ューには [Hierarchy Update] コ マン ド があ り 、 最上位モジ ュールへの変更、 デザ イ ンの ソ ース フ ァ イ ルへの変更な どの処理方法を指定 し て階層を ア ッ プデー ト で き ます。
デフ ォル ト 設定は [Automatic Update and Compile Order] で、 次の よ う に処理 さ れます。 • [Compile Order] タ ブに示すよ う に コ ンパ イ ル順が管理 さ れます。
• [Hierarchy] タ ブにどのモジ ュ ールが使用 さ れ、 階層ツ リ ーのど こ に位置する かが表示 さ れます。 ソ ース フ ァ イ ルを変更する と 、 コ ンパ イ ル順が自動的に更新 さ れます。
合成の前に コ ンパ イ ル順を変更する には、 次の手順に従い ます。
1. [Hierarchy Update] → [Automatic Update, Manual Compile Order] を ク リ ッ ク し 、 デザ イ ンに最適な最上位モジ ュー ルは自動的に選択 さ れ、 コ ンパ イ ル順は手動で指定で き る よ う に し ます。
2. [Sources] ビ ューの [Compile Order] タ ブで、 フ ァ イ ルを ド ラ ッ グする か、 ポ ッ プア ッ プ メ ニ ューの [Move Up] ま たは [Move Down] コ マン ド を使用 し て、 コ ンパ イ ル順を変更 し ます。
[Sources] ビ ュ ーの詳細は、 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 2] を参照し て く だ さ い。
グ ローバル イ ン クルー ド フ ァ イルの定義
Vivado IDE では、 1 つま たは複数の Verilog ま たは Verilog ヘ ッ ダー フ ァ イ ルを グ ローバル イ ン ク ルー ド フ ァ イ ル と し て指定で き ます。グ ロ ーバル イ ン ク ルー ド と し てマー ク さ れてい る フ ァ イ ルは、ほかの ソ ース の前に処理 さ れます。 Verilog では通常、 別の Verilog フ ァ イ ルやヘ ッ ダー フ ァ イ ルか ら の内容を参照する Verilog ソ ース フ ァ イ ルの冒頭に `include 文を含め る 必要があ り ます。 共通ヘ ッ ダー フ ァ イ ルを使用するデザ イ ンでは、 複数の Verilog ソ ース にそ れぞれ複数の `include 文を含め る必要があ る 場合 も あ り ます。
Verilog フ ァ イ ルま たは Verilog ヘ ッ ダー フ ァ イ ルを グ ローバル イ ン ク ルー ド フ ァ イ ル と し て指定する には、 次のい ずれかを実行 し ます。
1. [Sources] ビ ューで フ ァ イ ルを右 ク リ ッ ク し ます。
2. [Set Global Include] を ク リ ッ ク し ます。 ま たは、 [Source Node Properties] ビ ュ ーで [Global Include] チ ェ ッ ク ボ ッ ク ス を オンに し ます (図 5)。
合成の使用
ヒ ン ト : 1 つの Verilog ソースのみに適用する必要のあ る Verilog ヘ ッ ダー フ ァ イル (特定の `define マ ク ロ な ど) は、 グ ロ ーバル イ ン ク ルー ド フ ァ イ ル と し て指定する のではな く `include 文を使用し て参照する必要があ り ます。
[Sources] ビ ュ ーの詳細は、 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 2] を参照し て く だ さ い。
X-Ref Target - Figure 5
合成の実行
合成 run では、 合成中に使用 さ れ るデザ イ ンの詳細を定義および設定で き ます。 合成 run は次を定義 し ます。 • 合成中に タ ーゲ ッ ト と する ザ イ リ ン ク ス デバ イ ス • 適用する 制約セ ッ ト • 1 つま たは複数の合成 run を起動する オプシ ョ ン • 合成エン ジ ンの結果を制御する オプシ ョ ン RTL ソ ース フ ァ イ ルの run および制約を定義する には、 次の手順に従い ます。1. メ イ ン メ ニ ューか ら [Flow] → [Create Runs] を ク リ ッ ク する か、[Design Runs] ビ ューのツールバーの [Create Runs] ボ タ ン を ク リ ッ ク し ます。
Create New Runs ウ ィ ザー ド が開き ます (図 6)。
X-Ref Target - Figure 6
合成の使用
2. [Synthesis] をオンに し、 [Next] を ク リ ッ ク し ます。 [Configure Synthesis Runs] ページが表示 さ れます (図 7)。
3. 制約セ ッ ト ([Constraints set])、デバ イ ス ([Part])、およびス ト ラ テジ ([Strategy]) を選択し 、[Next] を ク リ ッ ク し ます。 Vivado IDE にはデフ ォ ル ト の ス ト ラ テジが含まれています。 ス ト ラ テジ run には、 特定の名前を指定する か、 デ フ ォル ト 名 (synth_1、 synth_2 な ど) を使用し ます。
制約の詳細は、 『Vivado Design Suite ユーザー ガ イ ド : 制約の使用』 (UG903) [参照 8] を参照し て く だ さ い。 カ ス タ ム ス ト ラ テジの作成方法は、11 ページの 「run ス ト ラ テジの作成」 を参照 し て く だ さ い。
X-Ref Target - Figure 7
[Next] を ク リ ッ ク し ます。 [Launch Options] ページが表示 さ れます (図 8)。
4. [Launch Options] ページで次のオプシ ョ ン を設定し 、 [Next] を ク リ ッ ク し ます。
° [Launch Directory] ド ロ ッ プダ ウ ン リ ス ト か ら run を実行する デ ィ レ ク ト リ を選択し ます。 ° [Options] エ リ アで次のいずれかをオンに し ます。
- [Launch Runs on Local Host] : 作業中のマシ ンで run を実行し ます。 [Number of jobs] で起動する run の数 を指定 し ます。
- [Launch Runs on Remote Host] : Linux のみのオプシ ョ ンで、 run を リ モー ト ホ ス ト で実行 し、 そのホ ス ト を設定 し ます。
Linux の リ モー ト ホ ス ト での run の実行については、 『Vivado Design Suite ユーザー ガ イ ド : イ ンプ リ メ ン テーシ ョ ン』 (UG904) [参照 5] の付録 A 「 リ モー ト ホ ス ト の使用」 を参照 し て く だ さ い。 [Configure Hosts] を ク リ ッ ク する と 、 ホ ス ト を設定する ダ イ ア ロ グ ボ ッ ク ス が開き ます。
- [Generate scripts only] : 後で実行する ス ク リ プ ト を生成し ます。runme.bat (Windows) ま たは runme.sh (Linux) を使用し て run を開始 し ます。
- [Do not launch now] : 前のページの設定を保存し 、 run を後で実行で き る よ う に し ます。
Create New Runs ウ ィ ザー ド でオプシ ョ ン を設定し て run を実行する と 、 [Design Runs] ビ ューに結果が表示 さ れます (図 9)。
X-Ref Target - Figure 8
合成の使用
[Design Runs] ビ ュ ーの使用
[Design Runs] ビ ュ ーには、 プ ロ ジ ェ ク ト で作成 さ れた合成 run と イ ンプ リ メ ン テーシ ョ ン run のすべてが表示 さ れ、 それ ら を設定、 管理、 実行する ための コ マ ン ド を実行で き ます。
[Design Runs] ビ ューが表示 さ れていない場合は、 [Window] → [Design Runs] を ク リ ッ ク し ます。
1 つの合成 run に、 複数の イ ンプ リ メ ン テーシ ョ ン run を含め る こ と がで き ます。 プ ラ ス記号 (+) やマ イ ナ ス記号 (-) を ク リ ッ ク する と 、 合成 run のツ リ ー表示を展開し た り 、 閉じ た り で き ます。
[Design Runs] ビ ューには、 run の ス テータ ス が実行 さ れていないか、 進行中か、 完了 し たか、 最新の状態でないかが 示 さ れます。
ソ ース フ ァ イ ル、 制約、 ま たはプ ロ ジ ェ ク ト 設定を変更する と 、 run は最新の状態ではな く な り ます。 特定の run を リ セ ッ ト ま たは削除する には、run を右 ク リ ッ ク し て [Reset Runs] ま たは [Delete] を ク リ ッ ク し ます。
ア ク テ ィ ブ run の設定
Vivado IDE で一度にア ク テ ィ ブにで き る には、 1 つの合成 run と 1 つの イ ンプ リ メ ン テーシ ョ ン run のみです。 すべ ての レ ポー ト お よ びビ ュ ーには、 ア ク テ ィ ブな run の情報が表示 さ れます。 [Project Summary] ビ ューには、 ア ク テ ィ ブな run の コ ンパ イ ル、 リ ソ ース、 およびサマ リ 情報が表示 さ れます。
別の run を ア ク テ ィ ブにす る には、 [Design Runs] ビ ュ ーで run を右 ク リ ッ ク し 、 ポ ッ プア ッ プ メ ニ ュ ーか ら [Make Active] コ マン ド を ク リ ッ ク し ます。
合成 run の起動
合成 run を実行する には、 次のいずれかを実行し ます。 • Flow Navigator で [Run Synthesis] を ク リ ッ ク し ます。
• メ イ ン メ ニ ューか ら [Flow] → [Run Synthesis] を ク リ ッ ク し ます。
• [Design Runs] ビ ューで run を右 ク リ ッ ク し、 [Launch Runs] を ク リ ッ ク し ます。
最初の 2 つのオプシ ョ ンでは、 ア ク テ ィ ブな合成 run が実行 さ れます。3 つ目のオプシ ョ ンでは、[Launch Selected Runs] ダ イ ア ロ グ ボ ッ ク ス が開き ます。 こ のダ イ ア ロ グ ボ ッ ク ス で、 run を ローカル ホ ス ト ま たは リ モー ト ホ ス
ト で実行する か、 あ る いはス ク リ プ ト を生成する かを指定で き ます。
リ モー ト ホ ス ト の使用については、『Vivado Design Suite ユーザー ガ イ ド : イ ンプ リ メ ンテーシ ョ ン』 (UG904) [参 照 5] の付録 A 「 リ モー ト ホ ス ト の使用」 を参照し て く だ さ い。
ヒ ン ト : run を実行する たびに、 別のプ ロ セスが開始 さ れます。 メ ッ セージを確認する際は、 プ ロ セ ス特定の も のに 注意 し て く だ さ い。
X-Ref Target - Figure 9
ボ ト ムア ッ プ フ ローの設定
HDL オブジ ェ ク ト を OOC (Out-of-Context) モジ ュール と し て実行する こ と に よ り 、ボ ト ムア ッ プ フ ローを設定で き ま す。 こ れには、 オブジ ェ ク ト を右 ク リ ッ ク し て [Set As Out-of-Context Module] を ク リ ッ ク し ます (図 10)。
OOC フ ローを設定する と 、新し い run が設定 さ れます。こ の run を実行する には、run を右 ク リ ッ ク し て [Launch Runs] を ク リ ッ ク し ます (18 ページの 「合成 run の起動」 を参照)。
X-Ref Target - Figure 10
合成の使用 こ れに よ り 下位モジ ュ ールが最上位モジ ュ ール と し て設定 さ れ、I/O バ ッ フ ァ ーを作成せずに合成が実行 さ れます。 合成で生成 さ れたネ ッ ト リ ス ト が保存 さ れ、 後で使用で き る よ う に ス タ ブ フ ァ イ ルが作成 さ れます。 ス タ ブ フ ァ イ ルは、 ブ ラ ッ ク ボ ッ ク ス属性が設定 さ れた、 入力 と 出力を持つ下位モジ ュールです。 最上位モジ ュ ールを再実行する と 、 ボ ト ム ア ッ プ合成に よ り ス タ ブ フ ァ イ ルがフ ローに挿入 さ れ、下位モジ ュールが ブ ラ ッ ク ボ ッ ク ス と し て コ ンパ イ ル さ れます。 イ ンプ リ メ ン テーシ ョ ン run では下位ネ ッ ト リ ス ト が挿入 さ れ、 デザ イ ン を完了し ます。 重要 : 下位ネ ッ ト リ ス ト に動作を制御するパ ラ メ ーターま たはジ ェネ リ ッ ク が含まれる場合は、 こ のオプシ ョ ン を使 用する 際に注意が必要です。 ボ ト ム ア ッ プ合成 と し て イ ンプ リ メ ン ト す る と 、 パ ラ メ ー タ ーま たはジ ェ ネ リ ッ ク のデ フ ォル ト 値が使用 さ れます。 モジ ュ ールが複数回 イ ン ス タ ン シエー ト さ れてい る 場合、 ま たはパ ラ メ ー タ ーが変更 さ れてい る 場合は、 不正な ロ ジ ッ ク が生成 さ れ る こ と があ り ます。
こ の フ ロ ーは、 主に Vivado IP で使用 さ れます。 詳細は、 『Vivado Design Suite ユーザー ガ イ ド : IP を使用 し た設計』 (UG896) [参照 9] を参照し て く だ さ い。
[Synthesis Settings] を ク リ ッ ク し て [More Options] に 「-mode out-of-context」 と 入力する こ と も 可能です。 こ の よ う に設定する と 、 合成でモジ ュ ールに I/O バ ッ フ ァ ーは挿入 さ れません。
X-Ref Target - Figure 11
プ ロ セスのバ ッ ク グ ラ ウン ド への移動
Vivado IDE で合成ま たは イ ンプ リ メ ン テーシ ョ ン を実行す る と 、 ダ イ ア ロ グ ボ ッ ク ス にプ ロ セ ス をバ ッ ク グ ラ ウ ン ド で実行す る オプシ ョ ンが表示 さ れます。run をバ ッ ク グ ラ ウ ン ド に移動する と 、 レ ポー ト を表示す る な ど、 Vivado IDE でほかの機能を実行で き る よ う にな り ます。
X-Ref Target - Figure 12
合成の使用
合成実行の監視
合成 run の ス テータ スは、 [Log] ビ ュー (図 13) で確認し ます。 合成中に こ のビ ューに表示 さ れる メ ッ セージは、 合成 ロ グ フ ァ イ ルに も 含まれます。
合成終了後の フ ロー
run が完了する と 、 [Synthesis Completed] ダ イ ア ロ グ ボ ッ ク ス が表示 さ れます (図 14)。
次のいずれかを オンに し ます。
° [Run Implementation] :イ ンプ リ メ ンテーシ ョ ン を現在の イ ンプ リ メ ンテーシ ョ ン プ ロ ジ ェ ク ト 設定を使用し
て実行 し ます。
° [Open Synthesized Design] : 合成済みネ ッ ト リ ス ト 、 ア ク テ ィ ブな制約セ ッ ト 、 ターゲ ッ ト デバ イ ス を合成済
みデザ イ ン環境で開き 、I/O ピ ン配置、 デザ イ ン解析、 フ ロ アプ ラ ン を実行で き る よ う に し ます。
° [View Reports] : [Reports] ビ ューを開き、 レ ポー ト を表示で き る よ う に し ます。
[Don't show this dialog again] をオンにする と 、 次回か ら こ のダ イ ア ロ グ ボ ッ ク スは表示 さ れな く な り ます。
X-Ref Target - Figure 13
図 13 : [Log] ビ ュ ー
X-Ref Target - Figure 14
合成結果の解析
合成が終了 し た ら 、 合成レ ポー ト を表示 し 、 合成済みデザ イ ン を開いて解析で き ます。[Reports] ビ ュ ーには、 合成お よ び イ ンプ リ メ ン テーシ ョ ンで生成 さ れた レ ポー ト の リ ス ト が表示 さ れます。 [Reports] ビ ュー (図 15) を開き、 レ ポー ト を開いて特定の run の詳細を確認し ます。合成済みデザイ ン環境の使用
Vivado IDE には、 デザ イ ン を さ ま ざ ま な面か ら 解析する環境が含まれてい ます。 合成済みデザ イ ン を開 く と 、 合成済 みネ ッ ト リ ス ト 、 ア ク テ ィ ブな制約セ ッ ト 、 お よ び タ ーゲ ッ ト デバ イ ス が読み込まれます。詳細は、 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 2] を参照し て く だ さ い。 合成済みデザ イ ン を開 く には、 次のいずれかを実行 し ます。
• Flow Navigator で [Synthesis] → [Open Synthesized Design] を ク リ ッ ク し ます。 • メ イ ン メ ニ ューか ら [Flow] → [Open Synthesized Design] を ク リ ッ ク し ます。
X-Ref Target - Figure 15
フ ロ ア プ ラ ンおよび使用率の表示 合成済みデザ イ ン を開 く と 、[Device] ビ ュー (図 16) が表示 さ れます。 こ の環境か ら 、 デザ イ ン ロ ジ ッ ク と 階層の確認、 リ ソ ー ス 使用率お よ び タ イ ミ ン グ予測の表示、 デザ イ ン ルール チ ェ ッ ク (DRC) を実行で き ます。
フ ロ ア プ ラ ン お よび使用率の表示
リ ソ ース使用率は、 展開可能な階層ツ リ ーに棒グ ラ フ で表示 さ れます。 各 リ ソ ース タ イ プを展開する と 、 論理階層の 各レベルを表示で き ます。 デバ イ ス リ ソ ース予測を グ ラ フ ィ カルに表示する には、 合成済みデザ イ ン を開いて次のいずれかを ク リ ッ ク し ます。 • Flow Navigator → [Report Utilization]• [Tools] → [Report Utilization]
X-Ref Target - Figure 16
[Utilization] ビ ュ ー (図 17) が開き ます。
ロ ジ ッ ク イ ン ス タ ン スの使用率の表示
Vivado IDE には、 デザ イ ンに含まれ るデバ イ ス リ ソ ース数を予測する 機能があ り ます。
最上位を含む ロ ジ ッ ク イ ン ス タ ン ス の使用率は、 [Instance Properties] ビ ュ ーに表示 さ れます。 [Netlist] ビ ュ ーで最上 位モジ ュ ールま たは任意の イ ン ス タ ン ス を選択 し ます (図 18)。
表示 さ れない場合は、モジ ュ ールを右 ク リ ッ ク し 、ポ ッ プア ッ プ メ ニ ューで [Net Properties] ま たは [Instance Properties] を ク リ ッ ク し ます。
X-Ref Target - Figure 17
図 17 : [Utilization] ビ ュー
X-Ref Target - Figure 18
フ ロ ア プ ラ ンおよび使用率の表示
[Netlist Properties] ま たは [Instance Properties] ビ ュ ーで [Statistics] タ ブを ク リ ッ ク し ます (図 19)。
[Statistics] タ ブには、 [Primitive Statistics] (プ リ ミ テ ィ ブ統計) お よび [Net Boundary Statistics] (ネ ッ ト 境界統計) な ど の 情報が表示 さ れます。
[Properties] ビ ューには、 タ イ プに応 じ て さ ま ざ ま な タ ブが表示 さ れます。図 19 の clkgen イ ン ス タ ン ス に対 し ては、 次の タ ブが表示 さ れます。
• [General] : 選択し た イ ン ス タ ン ス の名前 ([Name])、 セル ([Cell])、 お よび タ イ プ ([Type]) を示 し ます。 • [Attributes] : フ ァ イ ル属性を リ ス ト し ます。
• [Instance Pins] : イ ン ス タ ン ス ピ ンの ID、 名前、 方向、 BEL ピ ン、 およびネ ッ ト を リ ス ト し ます。 • [Children] : 子イ ン ス タ ン ス の ID、 名前、 セル、 およびイ ン ス タ ン ス ピ ン数を リ ス ト し ます。
• [Nets] : ネ ッ ト の ID、名前、イ ン ス タ ン ス ピ ン、フ ラ ッ ト ピ ン数、ド ラ イ バー、および配線ス テータ ス を示し ます。 • [Power] : 信号レー ト ([Signal Rate])、 High に駆動 さ れる期間の割合 ([% High])、 および階層のチ ェ ッ ク ボ ッ ク ス
([Hierarchy]) を示 し ます (設定可能)。
X-Ref Target - Figure 19
ロ ジ ッ クの解析
Vivado IDE では、 ロ ジ ッ ク を解析する ビ ューが複数あ り ます。 • [Netlist] および [Hierarchy] ビ ュ ーには、 ナビゲー ト 可能な階層ツ リ ー形式の表示が含まれます。 • [Schematic] ビ ューでは、 選択 し た ロ ジ ッ ク を展開 し た り 階層表示にで き ます。 • [Device] ビ ューは、 デバ イ ス、 配置ロ ジ ッ ク オブジ ェ ク ト 、 および接続を グ ラ フ ィ カルに表示し ます。 1 つのビ ュ ーで選択し た情報はほかのビ ュ ーで も 選択 さ れ る よ う にな っ てお り 、 必要な情報をすばや く 見つけ る こ と がで き ます。ロ ジ ッ ク 階層の表示
[Netlist] ビ ューには、 合成済みデザ イ ンの ロ ジ ッ ク 階層が表示 さ れます。 ネ ッ ト リ ス ト 内の ロ ジ ッ ク イ ン ス タ ン ス ま たはネ ッ ト を、 展開 し て選択で き ます。 別の ビ ュ ーで ロ ジ ッ ク オブジ ェ ク ト を選択する と 、[Netlist] ビ ューが自動的に展開 さ れて選択 し た ロ ジ ッ ク オブジ ェ ク ト が表示 さ れ、[Instance Properties] ま たは [Net Properties] ビ ュ ーに イ ン ス タ ン ス ま たはネ ッ ト に関する 情報が表示 さ れます。 [Hierarchy] ビ ュ ーには、 RTL ロ ジ ッ ク 階層がグ ラ フ ィ カルに表示 さ れます。 各モジ ュ ールの大 き さ が、 その他のモ ジ ュ ールに相対的な比率で表示 さ れ る ので、 選択 し た ロ ジ ッ ク モジ ュールのサ イ ズや位置を判断で き ます。 [Hierarchy] ビ ュ ーを開 く には、 次の手順に従い ます。 1. [Netlist] ビ ューを右 ク リ ッ ク し ます。 2. [Show Hierarchy] を ク リ ッ ク し ます (図 20)。 F6 キーを押 し て も [Hierarchy] ビ ューを開 く こ と がで き ます。ロ ジ ッ ク 回路図の解析
[Schematic] ビ ューでは、 選択し た ロ ジ ッ ク を展開し て表示で き ます。 [Schematic] ビ ューを表示する には、 少な く と も 1 つの ロ ジ ッ ク オブジ ェ ク ト を選択する必要があ り ます。 [Schematic] ビ ュ ーで、 任意の ロ ジ ッ ク を選択およ び表示 し ます。 タ イ ミ ン グ パ ス のグループを表示 し て、 そのパ ス 上のすべての イ ン ス タ ン ス を表示で き ます。 こ れに よ り 、 タ イ ミ ン グ ク リ テ ィ カルなモジ ュールが含まれる箇所を視 覚的に表示で き る ので、 フ ロ アプ ラ ン し やす く な り ます。 [Schematic] ビ ューを開 く には、 次の手順に従い ます。 1. 1 つま たは複数の イ ン ス タ ン ス、 ネ ッ ト 、 タ イ ミ ン グ パス を選択 し ます。 2. ツールバーま たはポ ッ プア ッ プ メ ニ ューで [Schematic] を ク リ ッ ク する か、 F4 キーを押し ます。 [Schematic] ビ ューが開き、 選択 し たモジ ュールが表示 さ れます (図 21)。X-Ref Target - Figure 20
ロ ジ ッ ク の解析 こ の後、 ピ ン、 イ ン ス タ ン ス、 階層モジ ュ ールを選択 し て、 ロ ジ ッ ク を展開で き ます。
タ イ ミ ング解析の実行
合成済みデザ イ ンの タ イ ミ ン グ解析は、 イ ンプ リ メ ン テーシ ョ ン を効率的に実行す る ために必要な制約がパ ス に設定 さ れてい る か ど う か を確認す る のに有益です。Vivado 合成は タ イ ミ ン グ ド リ ブンであ り 、 設定 し た制約に基づいて 出力が調整 さ れます。 Pblock や LOC 制約の よ う な物理制約をデザ イ ンに割 り 当て てい く と 、 よ り 正確な タ イ ミ ン グ解析結果が得 ら れ る よ う にな り ますが、 こ れ ら の結果に含まれ る のはパ ス遅延の予測値です。 合成済みデザ イ ンでは、 予測 さ れ る 配線遅延 を使用 し て解析が実行 さ れます。 こ の時点で タ イ ミ ン グ解析を実行する と 、 パ ス が正 し く 制約 さ れてい る か、お よ び タ イ ミ ン グ パス の全体的な状況を 確認で き ます。 重要 : 実際の配線遅延が含まれるのは、 イ ンプ リ メ ンテーシ ョ ン (配置配線) 後の タ イ ミ ング解析のみです。 合成済み デザ イ ンの タ イ ミ ン グ解析は、 イ ンプ リ メ ン ト 済みデザ イ ンの タ イ ミ ン グ解析ほど正確ではあ り ません。X-Ref Target - Figure 21
[Report Timing Summary] コ マ ン ド の使用
タ イ ミ ン グ解析を実行する には、Flow Navigator で [Synthesis] → [Synthesized Design] → [Report Timing Summary] を ク リ ッ ク し ます。
図 22 に示す [Report Timing Summary] ダ イ ア ロ グ ボ ッ ク ス が開き ます。
[Options] タ ブで次の よ う にオプシ ョ ン を設定 し、 [OK] を ク リ ッ ク し ます。 • [Results name] : レ ポー ト 結果の名前を指定 し ます。
• [Report] : [Path delay type] (パス遅延タ イ プ) を [max]、 [min]、 ま たは [min_max] に設定し 、 制約 さ れていないパス を レ ポー ト す る か ど う か ([Report unconstrained paths] チ ェ ッ ク ボ ッ ク ス) お よ びデー タ シー ト を レ ポー ト す る か ど う か ([Report datasheet] チ ェ ッ ク ボ ッ ク ス) を指定し ます。
X-Ref Target - Figure 22
ロ ジ ッ ク の解析
• [Path Limits] : こ のセ ク シ ョ ンでは、 次のオプシ ョ ン を設定 し ます。
° [Maximum number of paths per clock or path group] : ク ロ ッ ク ま たはパス グループご と にレ ポー ト する パス の
最大数を指定 し ます。
° [Maximum number of worst paths per endpoint] : エン ド ポ イ ン ト ご と にレ ポー ト するパスの最大数を指定し ます。
• [Path Display] : こ のセ ク シ ョ ンでは、 次のオプシ ョ ン を設定し ます。
° [Display paths with slack less than] : ス ラ ッ ク が指定し た値未満のパス を表示する よ う 指定し ます。 デフ ォ ル ト
を使用する 場合は、[Use default (1e+30)] チ ェ ッ ク ボ ッ ク ス をオンに し ます。
° [Significant Digits] : 出力結果の有効桁数を指定 し ます。
• [Command] : 現時点での report_timing コ マン ド を選択 さ れたオプシ ョ ン も 含めて表示し ます。 ま た、 [Open in a new tab] チ ェ ッ ク ボ ッ ク ス で別の タ ブに表示す る か、 [Open in Timing Analysis layout] チ ェ ッ ク ボ ッ ク ス で Timing Analyzer の レ イ ア ウ ト で表示する かを指定 し ます。
図 23 に [Advanced] タ ブを示し ます。
[Advanced] タ ブには、 次のオプシ ョ ンがあ り ます。
• [Pins] : [Show input pins in path] チ ェ ッ ク ボ ッ ク ス でパス の入力ピ ン を表示する かど う かを指定し ます。
• [File Output] : [Write results to file] チ ェ ッ ク ボ ッ ク ス で結果を フ ァ イ ルに記述する かを指定し 、 フ ァ イ ルを選択し ます。 フ ァ イ ルに上書き する か ([Overwrite])、 追加する か ([Append]) を選択で き ます。
• [Miscellaneous] : 次のオプシ ョ ンがあ り ます。
° [Ignore command errors (quiet mode)] : コ マン ド エ ラ ーを無視し ます。
° [Suspend messsage limits during command execution] : プ ロ グ ラ ム実行中 メ ッ セージの制限を解除し 、 すべての
メ ッ セージ を表示 し ます。
X-Ref Target - Figure 23
図 24 に、 [Timer Settings] タ ブを示し ます。
[Timer Settings] タ ブには、 次のオプシ ョ ンがあ り ます。
• [Interconnect] : イ ン ターコ ネ ク ト 遅延 と し て予測値を使用する か ([estimated])、 実際の値を使用する か ([actual])、 遅延を使用 し ないか ([none]) を指定 し ます。
• [Speed grade] : ターゲ ッ ト デバ イ ス の ス ピー ド グ レー ド を指定 し ます。
• [Multi-Corner Configuration] : ス ロー コーナー ([Slow]) およびフ ァ ース ト コーナー ([Fast]) の遅延タ イ プを指定し ます。
• [Disable flight delays] : フ ラ イ ト 遅延をデ ィ ス エーブルに し ます。
X-Ref Target - Figure 24
非プ ロ ジ ェ ク ト モー ド での合成
非プ ロ ジ ェ ク ト モー ド での合成
合成を実行す る Tcl コ マン ド は synth_design です。 通常 こ の コ マン ド は、 次の例の よ う に複数のオプシ ョ ン を使 用 し て実行 し ます。
synth_design -part xc7k30tfbg484-2 -top my_top
こ の例では、 synth_design が –part オプシ ョ ンおよび –top オプシ ョ ン を使用し て実行 さ れます。
Tcl コ ン ソ ールか ら 、Tcl コ マン ド オプシ ョ ン を使用し て合成オプシ ョ ン を設定し て合成を実行で き ます。[Tcl Console] ビ ュ ーで 「synth_design –help」 と 入力す る と 、 オプシ ョ ンの リ ス ト を取得で き ます。 次に、 -help オプシ ョ ン を使用 し た と き の コ マ ン ド 出力の一部を示 し ます。
synth_design [-name <arg>] [-part <arg>] [-constrset <arg>] [-top <arg>] [-include_dirs <args>] [-generic <args>] [-verilog_define <args>] [-flatten_hierarchy <arg>] [-gated_clock_conversion <arg>]
[-directive <arg>] [-rtl] [-bufg <arg>] [-no_lc]
[-fanout_limit <arg>] [-mode <arg>] [-fsm_extraction <arg>] [-keep_equivalent_registers] [-resource_sharing <arg>] [-control_set_opt_threshold <arg>] [-quiet] [-verbose] Returns: design object
Usage:
Name Description ---[-name] Design name [-part] Target part
[-constrset] Constraint fileset to use [-top] Specify the top module name
[-include_dirs] Specify verilog search directories
[-generic] Specify generic parameters.Syntax: -generic <name>=<value> -generic <name>=<value> ... [-verilog_define] Specify verilog defines.Syntax:
-verilog_define <macro_name>[=<macro_text>] -verilog_define <macro_name>[=<macro_text>] [-flatten_hierarchy] Flatten hierarchy during LUT mapping.Values: full, none, rebuilt
Default: rebuilt
[-gated_clock_conversion] Convert clock gating logic to flop enable. Values: off, on, auto
Default: off
[-directive] Synthesis directive.Values: default, runtimeoptimized
Default: default
[-rtl] Elaborate and open an rtl design
[-bufg] Max number of global clock buffers used by synthesis.Default:12
[-no_lc] Disable LUT combining.Do not allow combining LUT pairs into single dual output LUTs. [-fanout_limit] Fanout limit.Default:10000
[-mode] The design mode.Values: default, out_of_context Default: default
[-fsm_extraction] FSM Extraction Encoding.Values: off, one_hot, sequential, johnson, gray, auto Default: auto
[-keep_equivalent_registers] Prevents registers sourced by the same logic from being merged.(Note that the merging can otherwise be prevented using the synthesis KEEP attribute)
[-resource_sharing] Sharing arithmetic operators.Value: auto, on, off
Default: auto
[-control_set_opt_threshold] Threshold for synchronous control set
optimization to lower number of control sets. Default:1
[-quiet] Ignore command errors
[-verbose] Suspend message limits during command execution
-generic オプシ ョ ンで VHDL ブール値および std_logic ベ ク ター型を指定する場合、こ れ ら はほかの形式には存 在 し ないので特別な処理が必要です。 た と えば、 true/false ま たは 0010 の代わ り に Verilog 標準を使用する必要が あ り ます。 ブール値の場合、false の値は次の よ う に指定し ます。 -generic my_gen=1‘b0 std_logic ベ ク ターでは、 次の よ う に指定し ます。 -generic my_get=4‘b0010 ま た、 文字列ジ ェ ネ リ ッ ク ま たはパ ラ メ ー タ ーの変更は現在の と こ ろサポー ト さ れてい ません。
コ マ ン ド の詳細は、 『Vivado Design Suite Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 3] を参照 し て く だ さ い。 Vivado IDE での操作に対応する Tcl コ マン ド を確認する には、 Vivado IDE で コ マン ド を実行 し、 [Tcl Console] ビ ュー ま たは ロ グ フ ァ イ ルを参照 し て く だ さ い。
次に、 synth_design の Tcl ス ク リ プ ト 例を示し ます。 # Setup design sources and constraints
read_vhdl -library bftLib [ glob ./Sources/hdl/bftLib/*.vhdl ] read_vhdl ./Sources/hdl/bft.vhdl
read_verilog [ glob ./Sources/hdl/*.v ] read_xdc ./Sources/bft_full.xdc
# Run synthesis
synth_design -top bft -part xc7k70tfbg484-2 -flatten_hierarchy rebuilt # Write design checkpoint
write_checkpoint -force $outputDir/post_synth # Write report utilization and timing estimates report_utilization -file utilization.txt
report_timing > timing.txt
制約の設定
表 2 に、 Vivado タ イ ミ ン グ制約にサポー ト さ れる Tcl コ マン ド を示 し ます。 こ れ ら の コ マ ン ド の詳細は、 次の資料を参照 し て く だ さ い。
• 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 2]
• 『Vivado Design Suite Tcl コ マン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 3]
非プ ロ ジ ェ ク ト モー ド での合成
表 2 : サポー ト さ れる合成 Tcl コ マ ン ド
コ マ ン ド タ イ プ コ マ ン ド
タ イ ミ ン グ制約
create_clock create_generate_clock set_false_path set_input_delay set_output_delay set_max_delay set_multicycle_path
set_clock_latency set_clock_groups set_disable_timing オブ ジ ェ ク ト
ア ク セス
all_clocks all_inputs all_outputs get_cells
合成属性
概要
Vivado™ 合成では、 さ ま ざ ま な タ イ プの合成属性を使用で き ます。 ほ と んどの場合、 こ れ ら の属性は同 じ構文で、 同 じ 動作にな り ます。 • Vivado 合成で属性がサポー ト さ れる場合、 その属性が使用 さ れ、 その属性を反映し た ロ ジ ッ ク が作成 さ れます。 • 指定 し た属性が ツールで認識 さ れない場合、 その属性 と 値は生成 さ れたネ ッ ト リ ス ト に渡 さ れます。 認識 さ れない属性は、 フ ロ ーのダ ウ ン ス ト リ ームで使用 さ れ る と 想定 さ れます。 た と えば、LOC 制約は合成では使用 さ れませんが、 配置ツールで使用 さ れ る ので、 合成ツールか ら 転送 さ れます。サポー ト さ れる属性
BLACK_BOX
BLACK_BOX 属性は、 すべての階層レベルをオ フに し 、 合成でそのモジ ュールま たはエンテ ィ テ ィ に対し てブ ラ ッ ク ボ ッ ク ス を作成で き る よ う にする デバ ッ グ用の属性です。 こ の属性を指定す る と 、 モジ ュ ールま たはエン テ ィ テ ィ に 対 し て有効な ロ ジ ッ ク があ っ た と し て も 、合成ツールでその レベルに対 し てブ ラ ッ ク ボ ッ ク ス が作成 さ れます。 こ の 属性はモジ ュ ール、 エン テ ィ テ ィ 、 コ ンポーネ ン ト に配置で き ます。BLACK_BOX の Verilog 例
(* black_box *) module test(in1, in2, clk, out1);
重要 : Verilog では、 値は必要あ り ません。 こ の属性があれば、 ブ ラ ッ ク ボ ッ ク スが作成さ れます。
BLACK_BOX の VHDL 例
attribute black_box : string;
attribute black_box of beh : architecture is "yes";
サポー ト さ れる属性
BUFFER_TYPE
BUFFER_TYPE は入力に設定し 、 使用する バ ッ フ ァ ーの タ イ プを指定し ます。
デフ ォル ト では、 ク ロ ッ ク には IBUF/BUFG ま たは BUFGP が、 入力には IBUF が使用 さ れます。 有効な値は次の と お り です。
• ibuf : IBUF/BUFG ペアに ク ロ ッ ク ポー ト が不要な場合に使用 し ます。 こ の場合にのみ、 ク ロ ッ ク に対し て IBUF が推論 さ れます。
• none : 入力ま たは出力バ ッ フ ァ ーを使用 し ない よ う 指定 し ます。 ク ロ ッ ク ポー ト に none を指定する と 、 バ ッ フ ァ ーは使用 さ れません。
BUFFER_TYPE の Verilog 例
(* buffer_type = "none" *) input in1; //this will result in no buffers
(* buffer_type = "ibuf" *) input clk1; //this will result in a clock with no bufg
BUFFER_TYPE の VHDL 例
entity test is port(
in1 : std_logic_vector (8 downto 0); clk : std_logic;
out1 : std_logic_vector(8 downto 0)); attribute buffer_type : string;
attribute buffer_type of in1 : signal is "none"; end test;
DONT_TOUCH
KEEP ま たは KEEP_HIERARCHY の代わ り に DONT_TOUCH 属性を使用 し て く だ さ い。DONT_TOUCH 属性は KEEP ま た は KEEP_HIERARCHY 属性 と 同 じ よ う に機能 し ますが、 KEEP お よび KEEP_HIERARCHY と は異な り 配置配線にフ ォ
ワ ー ド ア ノ テー ト さ れる ので、 ロ ジ ッ ク 最適化で削除 さ れる こ と はあ り ません。
KEEP お よ び KEEP_HIERARCHY 属性 と 同様に、 DONT_TOUCH を 使用す る 際には注意が必要です。 ほ か の属性が DONT_TOUCH 属性 と 競合する 場合、 DONT_TOUCH 属性が優先 さ れます。
DONT_TOUCH 属性に有効な値は、 true/false ま たは yes/no です。 重要 : KEEP および KEEP_HIERARCHY 属性を DONT_TOUCH に置換し ます。
DONT_TOUCH の Verilog 例
(* dont_touch = "true" *) wire sig1; assign sig1 = in1 & in2;
DONT_TOUCH の VHDL 例
signal sig1 : std_logic
attribute dont_touch : string;
attribute dont_touch of sig1 : signal is "true"; ....
....
sig1 <= in1 and in2; out1 <= sig1 and in3;
FULL_CASE (Verilog のみ)
FULL_CASE は、 case、 casex ま たは casez 文で可能性のあ るすべての case 値が指定 さ れる こ と を示し ます。 case 値が指定 さ れてい る 場合、Vivado 合成で case 値に対し て余分な ロ ジ ッ ク は作成 さ れません。 (* full_case *) case select 3’b100 : sig = val1; 3’b010 : sig = val2; 3’b001 : sig = val3; endcase 重要 : こ の属性は、 RTL でのみ制御で き ます。
GATED_CLOCK
Vivado 合成では、ゲーテ ッ ド ク ロ ッ ク の変換が可能です。こ の変換を実行する には、次の 2 つの方法を使用で き ます。 • Vivado GUI のオプシ ョ ンで変換が実行 さ れる よ う 指定し ます。 • RTL 属性でゲーテ ッ ド ロ ジ ッ ク のどの信号が ク ロ ッ ク かを指定し ます。 GUI のオプシ ョ ン を指定する には、 次の手順に従い ます。1. Flow Navigator で [Synthesis Settings] を ク リ ッ ク し ます。
2. [Options] フ ィ ール ド で -gated_clock_conversion オプシ ョ ン を次のいずれかの値に設定 し ます。 ° [off] : ゲーテ ッ ド ク ロ ッ ク の変換をデ ィ ス エーブルに し ます。 ° [on] : gated_clock 属性が RTL コー ド で設定 さ れてい る場合に、ゲーテ ッ ド ク ロ ッ ク の変換を実行 し ます。 こ の設定では、 結果を よ り 制御で き ます。 ° [auto] : 次のいずれかの条件が満た さ れる 場合に、 ゲーテ ッ ド ク ロ ッ ク の変換を実行 し ます。 - gated_clock 属性が true に設定 さ れてい る。 - Vivado 合成でゲー ト が検出 さ れ、 有効な ク ロ ッ ク 制約セ ッ ト があ る。 こ の設定では、 ツールで自動的に判断 さ れます。
GATED_CLOCK の Verilog 例 :
サポー ト さ れる属性
GATED_CLOCK の VHDL 例
entity test is port (
in1, in2 : in std_logic_vector(9 downto 0); en : in std_logic;
clk : in std_logic;
out1 : out std_logic_vector( 9 downto 0)); attribute gated_clock : string;
attribute gated_clock of clk : signal is "true"; end test;
IOB
IOB は合成属性ではな く 、 Vivado イ ンプ リ メ ン テーシ ョ ンで使用 さ れ、 レ ジ ス タ を I/O バ ッ フ ァ ーに配置する必要が あ る かど う かを指定 し ます。 有効な値は true ま たは false です。
IOB の Verilog 例
(* IOB = "true" *) reg sig1;
IOB の VHDL 例
signal sig1:
std_logic attribute IOB: string
attribute IOB of sig1 : signal is "true";
KEEP
KEEP 属性は、 信号が削除 さ れた り ロ ジ ッ ク ブ ロ ッ ク に吸収 さ れ る よ う な最適化が実行 さ れない よ う に指定 し ます。 こ の属性が設定 さ れた信号は保持 さ れ、 ネ ッ ト リ ス ト に含まれます。
た と えば、2 ビ ッ ト の AND ゲー ト の出力で別の AND ゲー ト を駆動する信号に KEEP 制約を設定する と 、 信号は両方 の AND ゲー ト を含むよ り 大き い LUT には統合 さ れません。 KEEP は、 タ イ ミ ン グ制約 と も よ く 併用 さ れます。 通常は最適化 さ れる信号に タ イ ミ ン グ制約が設定 さ れてい る場合、 KEEP を設定する と 最適化 さ れな く な り 、 正し い タ イ ミ ン グ規則が使用 さ れます。 注意 : RTL で後の方で使用されない信号に KEEP 属性を設定する場合は、 注意が必要です。 合成では こ れら の信号は 保持 さ れますが、 何 も 駆動 し ません。 こ れに よ り 、 フ ロ ーの後の方で問題が発生する 可能性があ り ます。 注意 : KEEP を ほかの属性 と 共に使用す る 場合は注意が必要です。 ほかの属性が KEEP 属性 と 競合す る場合、 通常 KEEP 属性が優先 さ れます。 次に例を示 し ます。 • あ る 信号に MAX_FANOUT 属性が設定 さ れてお り 、 こ の信号で駆動 さ れる信号に KEEP 属性が設定 さ れてい る場 合、 KEEP 属性が設定 さ れてい る信号ではフ ァ ン ア ウ ト 複製は実行 さ れません。
• RAM STYLE= "block" が使用 さ れてお り 、その RAM の一部 と な るべき レ ジ ス タ に KEEP が設定 さ れてい る と 、 KEEP 属性のためにブ ロ ッ ク RAM が推論 さ れません。
有効な値は、 次の と お り です。 • true : 信号を保持し ます。 • false : 信号が必要に応 じ て最適化 さ れる よ う に し ます。 false を使用し て も 、 信号が無条件に削除 さ れる こ と はあ り ません。 デフ ォル ト は false です。 注記 : KEEP 属性を使用し て も 、 配置配線では信号は保持 さ れません。 DONT_TOUCH 属性を使用し て く だ さ い。
KEEP の Verilog 例
(* keep = "true" *) wire sig1; assign sig1 = in1 & in2; assign out1 = sig1 & in2;
KEEP の VHDL 例
signal sig1 : std_logic; attribute keep : string;
attribute keep of sig1 : signal is "true"; ....
....
sig1 <= in1 and in2; out1 <= sig1 and in3;
KEEP_HIERARCHY
KEEP_HIERARCHY は、 階層レベルが変更 さ れない よ う に し ます。 Vivado 合成では、 RTL で指定 さ れたの と 同 じ 階 層が保持 さ れ る よ う 試み ら れ ますが、QoR (結果の品質) のために階層が フ ラ ッ ト に さ れた り 、 変更 さ れ る こ と も あ り ます。 イ ン ス タ ン ス に KEEP_HIERARCHY を指定する と 、合成でその階層レベルは変更 さ れません。 こ れが QoR に影響を与 え る 場合があ り ます。 ま た、 ト ラ イ ス テー ト 出力お よ び I/O バ ッ フ ァ ーの制御ロ ジ ッ ク を記述する モジ ュールには使 用 し ないで く だ さ い。 KEEP_HIERARCHY は、 モジ ュール、 アーキ テ ク チ ャ レベル、 ま たは イ ン ス タ ン ス に指定で き ます。KEEP_HIERARCHY の Verilog 例
モ ジ ュ ールの場合(* keep_hierarchy = "yes" *) module bottom (in1, in2, in3, in4, out1, out2); イ ン ス タ ン スの場合
(* keep_hierarchy = "yes" *)bottom u0 (.in1(in1), .in2(in2), .out1(temp1));
KEEP_HIERARCHY の VHDL 例
モ ジ ュ ールの場合
attribute keep_hierarchy : string;
attribute heep_hierarchy of beh : architecture is "yes"; イ ン ス タ ン スの場合
attribute keep_hierarchy : string;
サポー ト さ れる属性
MAX_FANOUT
MAX_FANOUT は、 レ ジ ス タおよび信号のフ ァ ン ア ウ ト の制限を設定 し ます。 信号に KEEP 制約 も 設定する必要があ り ます。 こ れは、RTL ま たはプ ロ ジ ェ ク ト への入力 と し て指定で き ます。 整数値を指定 し ます。 こ の属性は、 レ ジ ス タ お よ び組み合わせ信号にのみ使用で き ます。 フ ァ ン ア ウ ト の制限に従 う ため、 レ ジ ス タ ま たは 組み合わせ信号を駆動する 信号が複製 さ れます。 MAX_FANOUT は、 合成のグ ローバル オプシ ョ ン -fanout_limit のデフ ォ ル ト 値よ り も 優先 さ れます。 デザ イ ン全 体のデフ ォ ル ト 値は、[Project Settings] ダ イ ア ロ グ ボ ッ ク ス の [Synthesis] ページ ま たは synth_design コ マ ン ド の -fanout_limit オプシ ョ ン を使用 し て設定 し ます。 MAX_FANOUT 属性は強制的に適用 さ れますが、 -fanout_limit はガ イ ド ラ イ ン と し て使用 さ れ、 強制 さ れません。 フ ァ ン ア ウ ト を厳密に制御す る 必要が あ る 場合は、 MAX_FANOUT を使用 し て く だ さ い。 ま た、 -fanout_limit オ プシ ョ ン と は異な り 、MAX_FANOUT は制御信号に も 適用 さ れます。-fanout_limit オプシ ョ ンは制御信号 (セ ッ ト 、 リ セ ッ ト 、 ク ロ ッ ク イ ネ ー ブ ル な ど) に は 適用 さ れ な い の で、 こ れ ら の 信号 を 複製す る 必要 が あ る 場合 は MAX_FANOUT を使用し て く だ さ い。注記 : 入力、ブ ラ ッ ク ボ ッ ク ス、EDIF (EDF),および NGC (Native Generic Circuit) フ ァ イ ルはサポー ト さ れてい ません。
MAX_FANOUT の Verilog 例
Vivado の場合
(* keep = "true", max_fanout = 50 *) reg sig1;
MAX_FANOUT の VHDL 例
signal sig1 : std_logic; attribute keep : string;
attribute max_fanout : integer;
attribute keep of sig1 : signal is "true"; attribute max_fanout : signal is 50;
注記 : max_fanout の値は、 VHDL の Vivado 合成では整数です。
PARALLEL_CASE (Verilog のみ)
PARALLEL_CASE は、 case 文がパ ラ レル構文で構築 さ れる 必要のあ る こ と を示し ます。 ロ ジ ッ ク は if-elsif 構文 では作成 さ れません。
(* parallel_case *) case select 3’b100 : sig = val1;
3’b010 : sig = val2; 3’b001 : sig = val3; endcase
RAM_STYLE
RAM_STYLE は、 合成での メ モ リ の推論方法を指定し ます。 有効な値は次の と お り です。 • block : RAMB タ イ プの コ ンポーネン ト が推論 さ れる よ う 指定 し ます。
• distributed : LUT RAM が推論 さ れ る よ う 指定し ます。
デフ ォル ト では、 ほ と んど のデザ イ ンで最適な結果が生成 さ れ る RAM が推論 さ れます。
RAM_STYLE の Verilog 例
(* ram_style = "distributed" *) reg [data_size-1:0] myram [2**addr_size-1:0];
RAM_STYLE の VHDL 例
attribute ram_style : string;
attribute ram_style of myram : signal is "distributed";
RAM の コーデ ィ ン グ ス タ イ ルの詳細は、付録 C の 「RAM の HDL コー ド 記述のガ イ ド ラ イ ン」を参照 し て く だ さ い。
ROM_STYLE
ROM_STYLE は、 合成での ROM メ モ リ の推論方法を指定し ます。 有効な値は次の と お り です。 • block : RAMB タ イ プの コ ンポーネン ト が推論 さ れる よ う 指定 し ます。
• distributed :LUT ROM が推論 さ れ る よ う 指定し ます。 デフ ォ ル ト では、 ほ と んどのデザ イ ンで最適な結果 が生成 さ れ る ROM が推論 さ れます。
ROM_STYLE の Verilog 例
(* rom_style = "distributed" *) reg [data_size-1:0] myrom [2**addr_size-1:0];
ROM_STYLE の VHDL 例
attribute rom_style : string;
attribute rom_style of myrom : signal is "distributed";
ROM の コーデ ィ ン グ ス タ イ ルの詳細は、付録 C の 「ROM の HDL コーデ ィ ン グ手法」 を参照 し て く だ さ い。
SHREG_EXTRACT
SHREG_EXTRACT は、 SRL 構造を推論する かど う かを指定し ます。 有効な値は次の と お り です。 • Yes : SRL 構造が推論 さ れます。 • No : SRL 構造は推論 さ れず、 レ ジ ス タ が作成 さ れます。SHREG_EXTRACT の Verilog 例
(* shreg_extract = "no" *) reg [16:0] my_srl;