Vivado Design Suite
ユーザー
ガ イ ド
合成
UG901 (v2014.1) 2014 年 5 月 1 日本資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。 資料
によっては英語版の更新に対応していないものがあります。 日本語版は参考用としてご使用の上、最新情報に
つきましては、必ず最新英語版をご参照ください。
次の表に、 こ の文書の改訂履歴を示 し ます。
日付 バージ ョ ン 改訂内容
2014 年 4 月 23 日 2014.1 2014.1 用の リ リ ース
改訂履歴 . . . 2
第 1 章 : Vivado 合成
概要 . . . 5 合成手法 . . . 6 合成の使用 . . . 6 レ ポー ト の表示 . . . 26 ロ ジ ッ ク の解析 . . . 28 Tcl での合成の実行 . . . 30第 2 章 : 合成属性
概要 . . . 33 サポー ト さ れ る 属性 . . . 33第 3 章 : SystemVerilog サポー ト
概要 . . . 47 特定の フ ァ イ ルで SystemVerilog を使用 . . . 47 デー タ 型 . . . 48 プ ロ セ ス . . . 52 手続 き プ ロ グ ラ ム代入文 . . . 54 タ ス ク お よ び関数 . . . 55 モジ ュ ールお よ び階層 . . . 56 イ ン タ ーフ ェ イ ス . . . 58第 4 章 : HDL コ ーデ ィ ング手法
概要 . . . 61 VHDL の利点 . . . 61 Verilog の利点 . . . 61 SystemVerilog の利点 . . . 62 フ リ ッ プ フ ロ ッ プ、 レ ジ ス タ 、 お よ び ラ ッ チ . . . 62 ラ ッ チ . . . 66 ト ラ イ ス テー ト . . . 68 シ フ ト レ ジ ス タ . . . 72 ダ イ ナ ミ ッ ク シ フ ト レ ジ ス タ . . . 76 乗算器 . . . 78 FIR フ ィ ル ター . . . 86 RAM の HDL コ ーデ ィ ン グ手法 . . . 88 RAM の HDL コ ー ド 記述のガ イ ド ラ イ ン . . . 89 ブ ラ ッ ク ボ ッ ク ス . . . 141 FSM コ ンポーネ ン ト . . . 143 ROM の HDL コ ーデ ィ ン グ手法 . . . 148ソ リ ュ ーシ ョ ン セン ター . . . 151 Vivado 資料 . . . 151 法的通知 . . . 152
Vivado 合成
概要
合成は、RTL で記述 さ れたデザ イ ン を ゲー ト レベル記述に変換す る プ ロ セ ス です。 Vivado® 合成は タ イ ミ ン グ ド リ ブンであ り 、 メ モ リ 使用量お よ びパフ ォーマ ン ス で最適化 さ れてい ます。Vivado 合成では、 次の言語の合成可能なサ ブセ ッ ト がサポー ト さ れます。 • SystemVerilogSystemVerilog (統合ハー ド ウ ェ ア設計、 仕様、 および検証言語) の IEEE 規格 (IEEE 標準規格 1800-2012) • Verilog
Verilog ハー ド ウ ェ ア記述言語の IEEE 標準規格 (IEEE 標準規格 1364-2005)
• VHDL
VHDL 言語の IEEE 標準規格 (IEEE 標準規格 1076-2002)
• 混合言語
VHDL、 Verilog、 および SystemVerilog を混合し て使用する こ と も サポー ト さ れてい ます。
Vivado ツールでは、業界標準の Synopsys Design Constraints (SDC) に基づ く ザ イ リ ン ク ス デザ イ ン制約 (XDC) も サポー ト さ れてい ます。
重要 : Vivado 合成では、UCF 制約はサポー ト されません。 UCF 制約は XDC 制約に変換する必要があ り ます。詳細は、
『ISE か ら Vivado Design Suite への移行ガ イ ド 』 (UG911) [参照 6] の 「UCF 制約の XDC 制約への移行」 を参照し て く だ さ い。
合成を設定 し て実行する には、 次の 2 つの方法があ り ます。
• プ ロ ジ ェ ク ト モー ド を使用
• 非プ ロ ジ ェ ク ト モー ド を使用 (Tcl コ マン ド ま たは ス ク リ プ ト を実行 し、 デザ イ ン フ ァ イ ルをユーザーが制御)
操作モー ド の詳細は、 『Vivado Design Suite ユーザー ガ イ ド : デザ イ ン フ ローの概要』 (UG892) [参照 7] を参照し て く だ さ い。 こ の章では、 両方のモー ド を使用 し た合成を個別のセ ク シ ョ ンで説明 し ます。
合成手法
Vivado IDE では、 合成およびイ ンプ リ メ ンテーシ ョ ン run を ボ タ ン を ク リ ッ ク する だけで実行可能な環境が提供 さ れ
てい ます。run のデータ は自動的に管理 さ れ、 さ ま ざ ま な RTL ソ ース バージ ョ ン、 タ ーゲ ッ ト デバ イ ス、 合成お よ び イ ンプ リ メ ン テーシ ョ ン オプシ ョ ン、 物理制約およびタ イ ミ ン グ制約を使用 し て繰 り 返 し実行で き ます。 Vivado IDE では、 次の操作を実行で き ます。 • ス ト ラ テジ を作成お よ び保存。 ス ト ラ テジ と は、 合成ま たは イ ンプ リ メ ン テーシ ョ ンのデザ イ ン run に適用 さ れ る コ マ ン ド オプシ ョ ンの設定です。 詳細は、10 ページの 「run ス ト ラ テジの作成」 を参照 し て く だ さ い。 • 複数の合成お よ び イ ンプ リ メ ン テーシ ョ ン run を設定し 、 順次に、 ま たはマルチプ ロ セ ッ サ マシ ンで同時に実 行。 詳細は、14 ページの 「合成の実行」 を参照 し て く だ さ い。 • 合成ま たは イ ンプ リ メ ン テーシ ョ ンの進捗状況を監視、 ロ グ レ ポー ト を確認、run を キ ャ ンセル。詳細は、22 ペー ジの 「合成実行の監視」 を参照 し て く だ さ い。
合成の使用
こ のセ ク シ ョ ンでは、Vivado 統合設計環境 (IDE) を使用 し て Vivado 合成を設定および実行する方法を説明し ます。各
Vivado IDE 操作の下に、 同等の Tcl コ マン ド を示し ます。
Tcl コ マン ド の詳細および Tcl の使用方法は、 次のガ イ ド を参照し て く だ さ い。 • 『Vivado Design Suite Tcl コ マン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 3]
合成設定
デザ イ ンの合成オプシ ョ ン を設定する には、 次の手順に従い ます。
1. Flow Navigator で [Synthesis] → [Synthesis Settings] を ク リ ッ ク し ます (図 1-1)。
図 1-2 に示す [Project Settings] ダ イ ア ロ グ ボ ッ ク ス が開き ます。
X-Ref Target - Figure 1-1
図 1-1 : Flow Navigator : [Synthesis] セ ク シ ョ ン
X-Ref Target - Figure 1-2
2. [Project Settings] ダ イ ア ロ グ ボ ッ ク ス で、 次の よ う に設定 し ます。
a. [Synthesis] ページの [Constraints] で、 [Default Constraint Set] にア ク テ ィ ブな制約セ ッ ト と する制約セ ッ ト を 選択 し ます。 制約セ ッ ト は、 ザ イ リ ン ク ス デザ イ ン制約 (XDC) で記述 さ れたデザ イ ン制約を含む複数の制 約フ ァ イ ルのセ ッ ト です。 デザ イ ン制約には、 次の 2 種類があ り ます。 - 物理制約 : ピ ン配置、 ブ ロ ッ ク RAM、 LUT、 フ リ ッ プフ ロ ッ プな どのセルの絶対配置ま たは相対配置、 お よ びデバ イ ス の コ ン フ ィ ギ ュ レーシ ョ ン設定を定義 し ます。 - タ イ ミ ン グ制約 : デザ イ ンの周波数要件を定義し ます。 タ イ ミ ン グ制約を設定し ない場合、 デザ イ ンが ワ イ ヤの長 さ お よ び配線の密集度にのみ基づいて最適化 さ れます。
詳細は、 『Vivado Design Suite ユーザー ガ イ ド : 制約の使用』 (UG903) [参照 8] を参照し て く だ さ い。
選択 し た制約セ ッ ト は新 し い run に使用 さ れ、 デザ イ ンの変更 も こ の制約セ ッ ト に保存 さ れます。
タ ーゲ ッ ト 制約セ ッ ト を設定する Tcl コ マン ド : -constrset <arg>
b. [Options] エ リ アで、 [Strategy] ド ロ ッ プダ ウ ン リ ス ト か ら 合成 run に使用する合成ス ト ラ テジ を選択 し ます。 あ ら か じ め定義 さ れた ス ト ラ テジか ら 選択する か、 ま たは独自の ス ト ラ テジ を定義で き ます。 合成ス ト ラ テ ジ を選択す る と 、 使用可能な Vivado ス ト ラ テ ジがダ イ ア ロ グ ボ ッ ク ス に表示 さ れます。 オプシ ョ ンの値を 変更する と 、10 ページの 「run ス ト ラ テジの作成」 に説明 さ れてい る よ う に、 合成ス ト ラ テジの設定を変更 で き ます。 表 1-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] を参照 し て く だ さ い。
表 1-1 : Vivado Defaults と Flow_RunTimeOptimized ス ト ラ テジ
オプ シ ョ ン/ス ト ラ テ ジ Defaults Flow_RuntimeOptimized
-flatten_hierarchy rebuilt none
-gated_clock_conversion off off
-bufg 12 12
-fanout_limit 10,000 10,000
-directive default RunTimeOptimized
-fsm_extraction auto off
-keep_equivalent_registers オ フ オ フ
-resource_sharing auto auto
-control_set_opt_threshold 4 4
-no_lc オ フ オ フ
-shreg_min_size 3 3
-max_bram -1 -1
現在のプ ロ ジ ェ ク ト ま たは現在の run の DIRECTORY プ ロ パテ ィ を使用し て、 ス ク リ プ ト 内の相対パス を定義で き ます。
プ ロパテ ィ を取得する Tcl コ マン ド
- get_property DIRECTORY [current_project] - get_property DIRECTORY [current_run]
- [-flatten_hierarchy] : Vivado 合成での階層の制御方法を指定し ます。 - [none] : 階層を フ ラ ッ ト 化し ません。 合成の出力には、 元の RTL と 同 じ階層が含まれます。 - [full] : 最上位以外の階層をすべて フ ラ ッ ト 化 し ます。 - [rebuilt] : 階層を フ ラ ッ ト 化し て合成を実行し た後に、 元の RTL に基づいて階層を再構築し ます。 こ の 設定を使用する と 、 境界を越え た最適化を実行で き る ので QoR が向上し 、 最終的な階層は RTL と 似た も のにな る ので解析 し やす く な り ます。 - [-gated_clock_conversion] : ゲーテ ッ ド ク ロ ッ ク を イ ネーブルに変換する機能をオン/オ フに し ます。 ゲーテ ッ ド ク ロ ッ ク の変換を使用する には、RTL 属性も 必要です。詳細は、38 ページの「GATED_CLOCK」 を参照 し て く だ さ い。 - [-bufg] : デザ イ ンで推論可能な BUFG の最大数を指定 し ます。 こ のオプシ ョ ンは、 デザ イ ン ネ ッ ト リ ス ト のほかの BUFG が合成プ ロ セ ス で認識 さ れない場合に使用し ます。 RTL に イ ン ス タ ン シエー ト さ れてい る BUFG の数が検出 さ れ、 指定 さ れた数ま での BUFG が推論 さ れ ます。 た と えば、 –bufg オプシ ョ ン を 12 に設定 し、 RTL に 3 つの BUFG が イ ン ス タ ン シエー ト さ れて い る と する と 、 あ と 9 個の BUFG を推論可能です。 - [-fanout_limit] : 信号で駆動可能な ロー ド の最大数を指定し ます。 ロー ド の数が こ れよ り 大き く な る場合 は、 ロ ジ ッ ク が複製 さ れます。 こ のグ ローバル設定は一般的なガ イ ド ラ イ ンであ り 、 ツールで必要 と 判 断 さ れた場合は無視 さ れます。 制限を強制す る 必要があ る 場合は、第 2 章 「合成属性」 に説明 さ れてい る MAX_FANOUT を参照 し て く だ さ い。 注記 : -fanout_limit オプシ ョ ンは、 制御信号 (セ ッ ト 、 リ セ ッ ト 、 ク ロ ッ ク イ ネーブルな ど) には適 用 さ れません。 こ れ ら の信号を複製する 必要があ る 場合は、 MAX_FANOUT を使用し て く だ さ い。
- [-directive] : [-effort_level] に置き換わ る オプシ ョ ンで、 Vivado 合成の最適化方法を指定し ます。 設定可
能な値は [Default] と [RuntimeOptimized] です。 [RuntimeOptimized] を選択する と 、 合成が最適化を少な く し て高速に実行 さ れます。 - [-fsm_extraction] : 有限ス テー ト マシ ンの抽出およびマ ッ プ方法を指定し ます。 オプシ ョ ンは、36 ページ の 「FSM_ENCODING」 お よ び 143 ページの 「FSM 記述」 で詳細に説明 さ れてい ます。 - [-keep_equivalent_registers] : 同じ 入力ロ ジ ッ ク を使用する レ ジ ス タ が統合 さ れない よ う に し ます。 詳細 は、39 ページの 「KEEP」 を参照 し て く だ さ い。 - [-resource_sharing] : 異な る信号間での算術演算子の共有を設定 し ます。設定可能な値は [auto]、[on]、[off] です。 [auto] に設定す る と リ ソ ー ス の共有はデザ イ ン の タ イ ミ ン グ に応 じ て実行 さ れ、 [on] に設定す る と リ ソ ース の共有は常にオン、[off] に設定する と 常にオ フです。 - [-control_set_opt_threshold] : ク ロ ッ ク イ ネーブル最適化の し き い値を設定し 、 制御セ ッ ト の数を削減し ます。 デフ ォル ト 値は 1 です。 制御セ ッ ト を レ ジ ス タ の D ロ ジ ッ ク に移動する ために必要な フ ァ ン ア ウ ト の数を指定 し ます。 フ ァ ン ア ウ ト が指定の値 よ り 大 き い場合は、 その信号で レ ジ ス タ の制御セ ッ ト ピ ンが駆動 さ れ る よ う 試み ら れ ます。 - [-no_lc] : オンにする と 、 LUT の結合がオフにな り ます。
ヒ ン ト : レ ジ ス タ が統合さ れないよ う にするには、 KEEP 属性を使用で き ます。 KEEP 属性は、 信号が削除さ れた り ロ ジ ッ ク ブ ロ ッ ク に吸収 さ れる よ う な最適化が実行 さ れない よ う に し ます。 こ の属性が設定 さ れた信号は保持 さ れ、 ネ ッ ト リ ス ト に含まれます。 詳細は、39 ページの 「KEEP」 を参照 し て く だ さ い。 - [-shreg_min_size] : SRL の推論の し き い値を設定し ます。 デフ ォ ル ト 値は 3 です。 こ の値は、 遅延が固定 さ れたチ ェ ーン の SRL ( ス タ テ ィ ッ ク SRL) が推論 さ れ る 順次エ レ メ ン ト の数を設定 し ます。 詳細は、 44 ページの 「SHREG_EXTRACT」 を参照 し て く だ さ い。 - [-max_bram] : デザ イ ンで使用可能なブ ロ ッ ク RAM の最大数を指定し ます。 こ のオプシ ョ ンは通常、 デ ザ イ ン にブ ラ ッ ク ボ ッ ク ス ま たはサー ド パーテ ィ ネ ッ ト リ ス ト が含まれてお り 、 こ れ ら のネ ッ ト リ ス ト 用にエ リ ア を確保する ために使用 し ます。 注記 : デフ ォル ト 設定は -1 で、 指定のパーツで使用可能な最大数が選択 さ れます。 - [-max_dsp] : デザ イ ンで使用可能な DSP ブ ロ ッ ク の最大数を指定し ます。 こ のオプシ ョ ンは通常、 デザ イ ンにブ ラ ッ ク ボ ッ ク ス ま たはサー ド パーテ ィ ネ ッ ト リ ス ト が含まれてお り 、 こ れ ら のネ ッ ト リ ス ト 用にエ リ ア を確保する ために使用 し ます。 注記 : デフ ォル ト 設定は -1 で、 指定のパーツで使用可能な最大数が選択 さ れます。
run ス ト ラ テ ジの作成
ス ト ラ テジは、 合成ツールお よ び イ ンプ リ メ ン テーシ ョ ンで実行 さ れ る さ ま ざ ま なユーテ ィ リ テ ィ やプ ロ グ ラ ムのオ プシ ョ ンのあ ら か じ め定義 さ れたセ ッ ト です。 ス ト ラ テジは、 ツールお よ びバージ ョ ン特定です。 各 メ ジ ャ ー リ リ ー ス には、 そのバージ ョ ン専用の ス ト ラ テジがあ り ます。1. フ ロ ーの現在の ス ト ラ テジ を確認する には、[Tools] → [Options] を ク リ ッ ク し、 左側のペ イ ンで [Strategies] を ク リ ッ ク し ます。
2. [Flow] ド ロ ッ プダ ウ ン リ ス ト か ら [Vivado Synthesis] を選択し ます。 右側に表示 さ れ る オプシ ョ ンは、 [Project Settings] ダ イ ア ロ グ ボ ッ ク ス の [Synthesis] ページに表示 さ れ る も の と 同じ です。
カ ス タ ム ス ト ラ テジ を作成する には、 次のいずれかを実行 し ます。
° [User Defined Strategies] を右 ク リ ッ ク し、 [Create New Strategy] を ク リ ッ ク し ます。
° ツールバーの [Create New Strategy] ボ タ ン を ク リ ッ ク し 、[New Strategy] ダ イ ア ロ グ ボ ッ ク ス (図 1-3) を
開き ます。
3. [New Strategy] ダ イ ア ロ グ ボ ッ ク ス で ス ト ラ テジの名前 ([Name])、 ス ト ラ テジの タ イ プ ([Type])、 およびツール バージ ョ ン ([Tool version]) を指定 し ま す。 説明 ([Description]) も 入力で き ます。
4. オプシ ョ ン を設定 し た ら [OK] を ク リ ッ ク し ます。
X-Ref Target - Figure 1-3
合成への入力
Vivado 合成には、 RTL ソ ース コ ー ド およびタ イ ミ ン グ制約を入力で き ます。
RTL ま たは制約 フ ァ イ ル を 追加す る には、 Flow Navigator で [Project Manager] → [Add Sources] を ク リ ッ ク し 、 Add
Sources ウ ィ ザー ド (図 1-4) を開き、 追加する フ ァ イ ルに対応する オプシ ョ ン をオンに し ます。図 1-5 は、 最初のペー
ジ で [Add or Create Design Sources] を オ ン に し て [Next] を ク リ ッ ク し た と き に 表示 さ れ る [Add or Create Design Sources] ページ を示 し ます。
X-Ref Target - Figure 1-4
図 1-4 : Add Sources ウ ィ ザー ド
X-Ref Target - Figure 1-5
制約、RTL、 ま たはその他のプ ロ ジ ェ ク ト フ ァ イ ルを追加し ます。 Add Sources ウ ィ ザー ド の詳細は、 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 2] を参照し て く だ さ い。
Vivado 合成では、 ザ イ リ ン ク ス ツールでサポー ト さ れる VHDL、 Verilog、 ま たは SystemVerilog のフ ァ イ ルの合成可 能なサブセ ッ ト を読み込む こ と がで き ます。第 3 章 「SystemVerilog サポー ト 」 に、 サポー ト さ れ る SystemVerilog コ ン ス ト ラ ク ト が説明 さ れてい ます。
Vivado 合成では、 合成での処理を制御す る い く つかの RTL 属性 も サポー ト さ れてい ます。 こ れ ら の属性の説明は、
第 2 章 「合成属性」 を参照 し て く だ さ い。
Vivado 合成は、 タ イ ミ ン グ制約に XDC フ ァ イ ルが使用 さ れます。
重要 : Vivado Design Suite では、 UCF フ ォーマ ッ ト はサポー ト されません。 UCF か ら XDC への変換手順は、 『ISE か ら Vivado Design Suite への移行ガ イ ド 』 (UG911)[参照 6] を参照 し て く だ さ い。
フ ァ イルの コ ンパイル順
あ る フ ァ イ ルに宣言が含まれ、別の フ ァ イ ルがその宣言に依存 し てい る 場合、特定の コ ンパ イ ル順が必要にな り ます。 Vivado IDE では、 RTL ソ ース フ ァ イ ルの コ ンパ イ ル順は、 [Sources] ビ ューの [Compile Order] タ ブに上か ら 下への順 序で表示 さ れます。
Vivado ツールでは、 最上位モジ ュール と し て最適なモジ ュールが自動的に特定 さ れ、 コ ンパ イ ル順が自動的に管理 さ
れます。ア ク テ ィ ブ階層に含まれ る 最上位モジ ュ ール フ ァ イ ルおよびすべての ソ ース フ ァ イ ルが、合成およびシ ミ ュ
レーシ ョ ンで正 し い順序で使用 さ れます。
[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 File Properties] ビ ューで [Global Include] チ ェ ッ ク ボ ッ ク ス を オンに し ます (図 1-6)。
ヒ ン ト : Verilog では、 1 つの Verilog ソースのみに適用するヘ ッ ダー フ ァ イル (特定の `define マ ク ロ な ど) は、 グ
ロ ーバル イ ン ク ルー ド フ ァ イ ル と し て指定する のではな く `include 文を使用し て参照する必要があ り ます。
[Sources] ビ ューの詳細は、 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 2] を参照し て く だ さ い。
X-Ref Target - Figure 1-6
合成の実行
合成 run では、 合成中に使用 さ れ るデザ イ ンの詳細を定義および設定で き ます。 合成 run は次を定義 し ます。 • 合成中に タ ーゲ ッ ト と する ザ イ リ ン ク ス デバ イ ス • 適用する 制約セ ッ ト • 1 つま たは複数の合成 run を起動する オプシ ョ ン • 合成エン ジ ンの結果を制御する オプシ ョ ン RTL ソ ース フ ァ イ ルの run および制約を定義する には、 次の手順に従い ます。1. メ イ ン メ ニ ューか ら [Flow] → [Create Runs] を ク リ ッ ク する か、[Design Runs] ビ ューのツールバーの [Create Runs]
ボ タ ン を ク リ ッ ク し ます。
Create New Runs ウ ィ ザー ド が開き ます (図 1-7)。
2. [Synthesis] をオンに し、 [Next] を ク リ ッ ク し ます。
[Configure Synthesis Runs] ページが表示 さ れます (15 ページの図 1-8)。
X-Ref Target - Figure 1-7
run の名前 ([Name])、 制約セ ッ ト ([Constraints Set])、 デバ イ ス ([Part])、 ス ト ラ テジ ([Strategy]) を選択し 、 こ の run を ア ク テ ィ ブ run と する場合は [Make Active] をオンに し ます。
Vivado IDE にはデフ ォ ル ト の ス ト ラ テジが含まれています。 ス ト ラ テジ run には、 特定の名前を指定する か、 デ
フ ォル ト 名 (synth_1、 synth_2 な ど) を使用し ます。
制約の詳細は、 『Vivado Design Suite ユーザー ガ イ ド : 制約の使用』 (UG903) [参照 8] を参照し て く だ さ い。
カ ス タ ム ス ト ラ テジの作成方法は、10 ページの 「run ス ト ラ テジの作成」 を参照 し て く だ さ い。
[Next] を ク リ ッ ク し ます。 [Launch Options] ページが表示 さ れます (図 1-9)。
X-Ref Target - Figure 1-8
図 1-8 : Create New Runs ウ ィ ザー ド : [Configure Synthesis Runs] ページ
X-Ref Target - Figure 1-9
3. [Launch Options] ページで次のオプシ ョ ン を設定し 、 [Next] を ク リ ッ ク し ます。
° [Launch Directory] ド ロ ッ プダ ウ ン リ ス ト か ら run を実行する デ ィ レ ク ト リ を選択し ます。
° [Options] エ リ アで次のいずれかをオンに し ます。
- [Launch runs on local host] : 作業中のマシ ンで run を実行し ます。 [Number of jobs] で起動する run の数を 指定 し ます。
- [Launch runs on local host] : Linux のみのオプシ ョ ンで、 run を リ モー ト ホ ス ト で実行し 、 そのホ ス ト を設 定 し ます。
Linux の リ モー ト ホ ス ト での run の実行については、 『Vivado Design Suite ユーザー ガ イ ド : イ ンプ リ メ ン テーシ ョ ン』 (UG904) [参照 5] の付録 A 「 リ モー ト ホ ス ト および LSF の使用」 を参照し て く だ さ い。 [Configure Hosts] を ク リ ッ ク する と 、 ホ ス ト を設定する ダ イ ア ロ グ ボ ッ ク ス が開き ます。
- [Generate scripts only] : 後で実行する ス ク リ プ ト を生成し ます。runme.bat (Windows) ま たは runme.sh (Linux) を使用し て run を開始 し ます。
- [Do not launch now] : 前のページの設定を保存し 、 run を後で実行で き る よ う に し ます。
4. [Finish] を ク リ ッ ク し て run を作成し ます。 作成し た run を実行する と 、 [Design Runs] ビ ューに結果が表示 さ れま す (図 1-10)。
[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] コ マン ド を ク リ ッ ク し ます。
X-Ref Target - Figure 1-10
合成 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 を実行する たびに、 別のプ ロ セスが開始 さ れます。 メ ッ セージを確認する際は、 プ ロ セ ス特定の も のに 注意 し て く だ さ い。
アウ ト オブ コ ン テキス ト (OOC) フ ローを使用 し たボ ト ムア ッ プ
フ ローの設定
HDL オブジ ェ ク ト を独立階層モジ ュール と し て実行する こ と に よ り 、 ボ ト ム ア ッ プ フ ローを設定で き ます。 次の手 順に従い ます。1. オブジ ェ ク ト を右 ク リ ッ ク し て [Set As Out-of-Context Module] を ク リ ッ ク し ます (図 1-11)。
2. [Set as Out-of-Context Module] ダ イ ア ロ グ ボ ッ ク ス で次を実行し ます。
a. [Block File Set Name] フ ィ ール ド に独立階層モジ ュール用の run の名前を入力し ます。
b. オプシ ョ ンで、 [Use auto-generated blackbox stub for top level synthesis] をオンに し て独立階層モジ ュールを イ
ン ス タ ン シエー ト する 合成 run で使用する ス タ ブ フ ァ イ ルを作成し ます。
注記 : ス タ ブ フ ァ イ ルは、 ブ ラ ッ ク ボ ッ ク ス属性セ ッ ト の入力 と 出力を示し ます。 デフ ォ ル ト では、 こ のオ
プシ ョ ンはオンにな っ てい ます。 こ のオプシ ョ ン を オフ に し た場合、run 用にユーザーが ス タ ブ フ ァ イ ルま
たは コ ンポーネ ン ト 文を作成する 必要があ り ます。
X-Ref Target - Figure 1-11
3. ア ウ ト オブ コ ンテ キ ス ト (OOC) フ ローを設定する と 、 新 し い run が設定 さ れます。 こ の run を実行する には、 run を 右 ク リ ッ ク し て [Launch Runs] を ク リ ッ ク し ま す (17 ページ の 「合成 run の起動」 を 参照)。図 1-13 に、 [Launch Runs] コ マン ド を示 し ます。 こ れに よ り 下位モジ ュ ールが最上位モジ ュ ール と し て設定 さ れ、I/O バ ッ フ ァ ーを作成せずに合成が実行 さ れま す。 合成で生成 さ れたネ ッ ト リ ス ト が保存 さ れ、 後で使用で き る よ う に ス タ ブ フ ァ イ ルが作成 さ れます。 ス タ ブ フ ァ イ ルは、 ブ ラ ッ ク ボ ッ ク ス属性が設定 さ れた、 入力 と 出力を持つ下位モジ ュ ールです。 最上位モジ ュールを 再実行す る と 、 ボ ト ム ア ッ プ合成に よ り ス タ ブ フ ァ イ ルがフ ローに挿入 さ れ、 下位モジ ュールがブ ラ ッ ク ボ ッ ク ス と し て コ ンパ イ ル さ れます。 イ ンプ リ メ ン テーシ ョ ン run では下位ネ ッ ト リ ス ト が挿入 さ れ、 デザ イ ン を完 了 し ます。 注記 : OOC モジ ュールの下位に IP が含まれ る場合は、 こ のフ ローは使用で き ません。 フ ローの後の方で問題が発生 し ます。 ま た、OOC モジ ュールにパ ラ メ ーターが設定 さ れてい る場合や、 OOC モジ ュ ールのポー ト がユーザー定義 タ イ プであ る 場合 も 、 こ の フ ローを使用 し ないで く だ さ い。 こ れ ら の状況では、 フ ロ ーの後の方で問題が発生 し ます。 [Synthesis Settings] を ク リ ッ ク し て [More Options] に 「-mode out_of_context」 と 入力する こ と も 可能です (19 ペー
ジの図 1-14)。 こ の よ う に設定する と 、 合成でモジ ュ ールに I/O バ ッ フ ァ ーは挿入 さ れません。
X-Ref Target - Figure 1-12
図 1-12 : [Set as Out-of-Context Module] ダ イ ア ログ ボ ッ ク ス
X-Ref Target - Figure 1-13
OOC フ ローでの制約の設定
デフ ォル ト では、 作成 し た新 し い フ ァ イ ル セ ッ ト に関連付け ら れてい る XDC フ ァ イ ルはあ り ません。 制約は最上位
か ら 継承 さ れません。
下位 OOC フ ローに タ イ ミ ン グ制約を関連付け る には、 まず新し い制約セ ッ ト を作成 し ます。 こ れには、 次の手順に従い ます。
1. Flow Navigator で [Add Sources] を ク リ ッ ク し 、 [Add or Create Constraints] をオンに し て、 [Next] を ク リ ッ ク し ます。
2. Add Sources ウ ィ ザー ド の [Add or Create Constraints] ページで、[Specify Constraint Set] ド ロ ッ プダ ウ ン リ ス ト か ら [Create Constraint Set] を選択し 、 次の名前を入力し ます。
<block file set name>_constraints
X-Ref Target - Figure 1-14
制約セ ッ ト を設定 し た ら 、 新規フ ァ イ ルを作成する か、 既存の フ ァ イ ルを追加 し ます。 こ の制約セ ッ ト は OOC モジ ュールに関連付け ら れる ので、 XDC フ ァ イ ルに リ ス ト さ れてい る信号およびポー ト はそのモジ ュ ールか ら の信号を参照 し ます。 3. フ ァ イ ルを作成する か追加 し た ら 、OOC ブ ロ ッ ク に関連付け ます。 こ れには、 次の Tcl コ マン ド を使用し ます。 重要 : Tcl コ マン ド は、 [Tcl Console] ビ ューに入力し ます。 制約セ ッ ト を OOC ブ ロ ッ クに関連付ける Tcl コ マン ド
add_files -fileset <block file set name> [get_files <name>.xdc]
4. XDC フ ァ イ ルが OOC フ ロー中にのみ使用 さ れる よ う 設定し ます。 XDC フ ァ イ ルを設定する には、 次の Tcl コ マ
ン ド を使用 し ます。
XDC フ ァ イルを OOC フ ローで使用する よ う 設定する Tcl コ マン ド
set_property USED_IN {out_of_context synthesis implementation} \ [get_files <name>.xdc]
X-Ref Target - Figure 1-15
手動ボ ト ムア ッ プ フ ローの設定およびサー ド パーテ ィ 合成ツー
ルから のネ ッ ト リ ス ト のイ ンポー ト
ボ ト ム ア ッ プ フ ローを手動で実行する には、 下位ネ ッ ト リ ス ト ま たはサー ド パーテ ィ ネ ッ ト リ ス ト をブ ラ ッ ク ボ ッ ク ス と し て イ ン ス タ ン シエー ト し ます。 こ の よ う にす る と 、Vivado ツールに よ り 合成の完了後にデザ イ ンにブ ラ ッ ク ボ ッ ク ス が挿入 さ れます。 次のセ ク シ ョ ンに、 こ のプ ロ セ ス について説明 し ます。下位ネ ッ ト リ ス ト の作成
下位ネ ッ ト リ ス ト を作成する には、 ネ ッ ト リ ス ト を最上位モジ ュ ール と し て指定 し てプ ロ ジ ェ ク ト を設定 し ます。 合 成を実行する 前に、19 ページの図 1-14 に示すよ う に OOC モー ド を設定 し ます。合成が終了し た ら 合成済みデザ イ ン を開き 、[Tcl Console] ビ ューに次の コ マン ド を入力し ます。 下位ネ ッ ト リ ス ト を作成する Tcl コ マン ド write_edif <design_name>.edf下位ネ ッ ト リ ス ト のデザイ ンへのイ ン ス タ ン シ エーシ ョ ン
最上位デザ イ ン を下位ネ ッ ト リ ス ト ま たはサー ド パーテ ィ ネ ッ ト リ ス ト と 共に実行する には、下位ネ ッ ト リ ス ト をブ ラ ッ ク ボ ッ ク ス と し て イ ン ス タ ン シエー ト し ます。 こ れには、 下位ネ ッ ト リ ス ト のポー ト を Vivado ツールに示す必 要があ り ます。 重要 : Vivado ツールに示すポー ト 名 と ネ ッ ト リ ス ト のポー ト 名が一致し ている必要があ り ます。 VHDL では、 次の コー ド 例に示すよ う に、 component 文にポー ト を記述 し ます。 component <name>port (in1, in2 : in std_logic; out1 : out std_logic);
end component;
Verilog には コ ンポーネン ト に相当する も のはないので、 ラ ッ パー フ ァ イ ルを使用 し て Vivado ツールにポー ト を示し
ます。 ラ ッ パー フ ァ イ ルは通常の Verilog フ ァ イ ル と 同 じ ですが、 次の例に示すよ う に、 ポー ト リ ス ト のみが含まれ
ます。
module <name> (in1, in2, out1); input in1, in2;
output out1; endmodule
下位ネ ッ ト リ ス ト のプ ロ ジ ェ ク ト への追加
下位ネ ッ ト リ ス ト を作成 し て最上位ネ ッ ト リ ス ト に正 し く イ ン ス タ ン シエー ト し た ら 、プ ロ ジ ェ ク ト モー ド では下位
ネ ッ ト リ ス ト を Vivado プ ロ ジ ェ ク ト に追加し 、非プ ロ ジ ェ ク ト モー ド では read_edif ま たは read_verilog コ マ ン ド を使用 し て下位ネ ッ ト リ ス ト を読み込みます。
ど ち ら のモー ド で も 、 合成後にネ ッ ト リ ス ト が結合 さ れます。
注記 : デザ イ ンがサー ド パーテ ィ ネ ッ ト リ ス ト でのみ構成 さ れてお り 、 プ ロ ジ ェ ク ト にほかの RTL フ ァ イ ルがない
場合は、 プ ロ ジ ェ ク ト を それ ら のネ ッ ト リ ス ト のみで作成す る か、 非プ ロ ジ ェ ク ト モー ド では read_edif お よ び
Vivado IP と サー ド パーテ ィ 合成ツール
Vivado IP カ タ ロ グか ら 使用可能なザ イ リ ン ク ス IP は、 Vivado Design Suite で作成、 制約、 および検証 し ます。 ザ イ リ ン ク ス が提供する ほ と んど の IP には IEEE P1735 で暗号化 さ れた HDL があ り 、サー ド パーテ ィ 合成ツールでのサポー ト は提供 さ れてい ません。 Vivado IDE で提供 さ れ る ザ イ リ ン ク ス IP をサー ド パーテ ィ 合成ツールに イ ン ス タ ン シエー ト する には、 次のフ ロー を使用する こ と をお勧め し ます。 1. [Manage IP] 環境で IP カ ス タ マ イ ズ を作成し ます。 2. 合成デザ イ ン チ ェ ッ ク ポ イ ン ト (DCP) を含めた IP の出力フ ァ イ ルを生成 し ます。
Vivado IDE で ス タ ブ HDL フ ァ イ ル (_stub.v|.vhd) が作成 さ れます。 こ の ス タ ブ HDL フ ァ イ ルをサー ド パー
テ ィ 合成ツールで使用 し て、IP のブ ラ ッ ク ボ ッ ク ス を推論し ます。
ス タ ブ フ ァ イ ルには、 I/O バ ッ フ ァ ーが推論 さ れない よ う にす る Synopsys® Synplify Pro 指示子が含まれてい ま す。 ほかの合成ツールの指示子をサポー ト する には、 こ れ ら の フ ァ イ ルを変更する 必要があ る 場合があ り ます。
3. ザ イ リ ン ク ス IPの ス タ ブ フ ァ イ ルを含むデザ イ ン を合成し ます。
4. サー ド パーテ ィ 合成ツールで生成 さ れたネ ッ ト リ ス ト と ザ イ リ ン ク ス IP の DCP フ ァ イ ルを使用し て、 Vivado イ ンプ リ メ ン テーシ ョ ン を実行 し ます。
詳細は、 『Vivado Design Suite ユーザー ガ イ ド : IP を使用し た設計』 (UG896) [参照 18] を参照し て く だ さ い。
プ ロ セスのバ ッ ク グ ラ ウン ド への移動
Vivado IDE で合成ま たは イ ンプ リ メ ン テーシ ョ ン を実行す る と 、 ダ イ ア ロ グ ボ ッ ク ス にプ ロ セ ス をバ ッ ク グ ラ ウ ン ド で実行す る オプシ ョ ンが表示 さ れます。run をバ ッ ク グ ラ ウ ン ド に移動する と 、 レ ポー ト を表示す る な ど、 Vivado IDE でほかの機能を実行で き る よ う にな り ます。合成実行の監視
合成 run の ス テータ ス は、 [Log] ビ ュ ー (図 1-16) で確認し ます。 合成中に こ のビ ューに表示 さ れる メ ッ セージは、 合 成 ロ グ フ ァ イ ルに も 含まれます。X-Ref Target - Figure 1-16
合成終了後の フ ロー
run が完了する と 、 [Synthesis Completed] ダ イ ア ロ グ ボ ッ ク ス が表示 さ れます (図 1-17)。
次のいずれかを オンに し ます。
° [Run Implementation] : イ ンプ リ メ ン テーシ ョ ン を現在の イ ンプ リ メ ン テーシ ョ ン プ ロ ジ ェ ク ト 設定を使用
し て実行 し ます。
° [Open Synthesized Design] : 合成済みネ ッ ト リ ス ト 、 ア ク テ ィ ブな制約セ ッ ト 、 ターゲ ッ ト デバ イ ス を合成済
みデザ イ ン環境で開き 、I/O ピ ン配置、 デザ イ ン解析、 フ ロ アプ ラ ン を実行で き る よ う に し ます。
° [View Reports] : [Reports] ビ ューを開き、 レ ポー ト を表示で き る よ う に し ます。
[Don't show this dialog again] をオンにする と 、 次回か ら こ のダ イ ア ロ グ ボ ッ ク スは表示 さ れな く な り ます。 ヒ ン ト : こ のダ イ ア ロ グ ボ ッ ク スが再び表示 される よ う にするには、 [Tools] → [Options] を ク リ ッ ク し、 左側のペイ ンで [Window Behavior] を ク リ ッ ク し ます。
X-Ref Target - Figure 1-17
合成結果の解析
合成が終了 し た ら 、 合成レ ポー ト を表示 し 、 合成済みデザ イ ン を開いて解析で き ます。[Reports] ビ ュ ーには、 合成お よ び イ ンプ リ メ ン テーシ ョ ンで生成 さ れた レ ポー ト の リ ス ト が表示 さ れます。 [Reports] ビ ュー (図 1-18) を開き 、 レ ポー ト を開いて特定の run の詳細を確認し ます。合成済みデザイ ン環境の使用
Vivado IDE には、 デザ イ ン を さ ま ざ ま な面か ら 解析する環境が含まれてい ます。 合成済みデザ イ ン を開 く と 、 合成済 みネ ッ ト リ ス ト 、 ア ク テ ィ ブな制約セ ッ ト 、 お よ び タ ーゲ ッ ト デバ イ ス が読み込まれます。 詳細は、 次の資料を参照 し て く だ さ い。• 『Vivado Design Suite チ ュー ト リ アル : デザ イ ン解析および ク ロージ ャ テ ク ニ ッ ク 』 (UG938) [参照 10]
• 『Vivado Design Suite ユーザー ガ イ ド : デザ イ ン解析および ク ロージ ャ テ ク ニ ッ ク 』 (UG906) [参照 9]
合成済みデザ イ ン を開 く には、Flow Navigator で [Synthesis] → [Open Synthesized Design] を ク リ ッ ク する か、 メ イ ン メ ニ ュ ーか ら [Flow] → [Open Synthesized Design] を ク リ ッ ク し ます。
X-Ref Target - Figure 1-18
合成済みデザ イ ン を開 く と 、[Device] ビ ュー (図 1-19) が表示 さ れます。
こ の環境か ら 、 デザ イ ン ロ ジ ッ ク と 階層の確認、 リ ソ ー ス 使用率お よ び タ イ ミ ン グ予測の表示、 デザ イ ン ルール
チ ェ ッ ク (DRC) を実行で き ます。
X-Ref Target - Figure 1-19
レ ポー ト の表示
レ ポー ト を表示する には、[Tools] → [Report] を ク リ ッ ク し ます。 ド ロ ッ プダ ウ ン メ ニ ューに生成可能な レ ポー ト が表 示 さ れます (図 1-20)。
ロ ジ ッ ク イ ン ス タ ン スの使用率の表示
Vivado IDE には、 デザ イ ンに含まれ るデバ イ ス リ ソ ース数を予測する 機能があ り ます。
最上位お よ び ロ ジ ッ ク セルの使用率は、 [Netlist Properties] お よ び [Cell Properties] ビ ュ ーに表示 さ れ ま す。 [Netlist]
ビ ュ ーで最上位モジ ュ ールま たは任意の イ ン ス タ ン ス を選択 し ます (図 1-21)。
[Netlist Properties] ま たは [Cell Properties] ビ ューが表示 さ れない場合は、モジ ュールを右 ク リ ッ ク し 、[Netlist Properties] ま たは [Cell Properties] を ク リ ッ ク し ます。 リ ソ ース使用率を表示する には、 [Netlist Properties] ま たは [Cell Properties] ビ ュ ーで [Statistics] タ ブを ク リ ッ ク し ます (図 1-22)。
X-Ref Target - Figure 1-20
図 1-20 : [Tools] → [Report] を ク リ ッ ク
X-Ref Target - Figure 1-21
[Properties] ビ ューには、 選択 し たオブジ ェ ク ト の タ イ プに応 じ て さ ま ざ ま な タ ブが表示 さ れます。図 1-22 の clkgen に対 し ては、 次の タ ブが表示 さ れます。
• [General] : 選択し たセルの名前、 参照名、 タ イ プ、 セル ピ ンの数、 ネ ッ ト の数を示し ます。
• [Properties] : セルのプ ロ パテ ィ を リ ス ト し ます。
• [Power] : 信号レー ト ([Signal Rate])、 High に駆動 さ れる 期間の割合 ([Percentage High]) を示し ます (設定可能)。
• [Nets] : ネ ッ ト の ID、名前、イ ン ス タ ン ス ピ ン、フ ラ ッ ト ピ ン数、 ド ラ イ バー、および配線ス テー タ ス を示 し ます。
• [Cell Pins] : イ ン ス タ ン ス ピ ンの ID、 名前、 方向、 BEL ピ ン、 およびネ ッ ト を リ ス ト し ます。
• [Children] : 子イ ン ス タ ン ス の ID、 名前、 セル、 およびイ ン ス タ ン ス ピ ン数を リ ス ト し ます。
X-Ref Target - Figure 1-22
ロ ジ ッ クの解析
Vivado IDE では、 ロ ジ ッ ク を解析する ビ ューが複数あ り ます。 1 つのビ ューで選択し た情報はほかのビ ューで も 選択 さ れ る よ う にな っ てお り 、 必要な情報をすばや く 見つけ る こ と がで き ます。 • [Netlist] および [Hierarchy] ビ ュ ーには、 ナビゲー ト 可能な階層ツ リ ー形式の表示が含まれます。 • [Schematic] ビ ューでは、 選択 し た ロ ジ ッ ク を展開 し た り 階層表示にで き ます。 • [Device] ビ ューは、 デバ イ ス、 配置ロ ジ ッ ク オブジ ェ ク ト 、 および接続を グ ラ フ ィ カルに表示し ます。ロ ジ ッ ク 階層の表示
[Netlist] ビ ューには、 合成済みデザ イ ンの ロ ジ ッ ク 階層が表示 さ れます。 ネ ッ ト リ ス ト 内の ロ ジ ッ ク イ ン ス タ ン ス ま たはネ ッ ト を、 展開 し て選択で き ます。 別の ビ ュ ーで ロ ジ ッ ク オブジ ェ ク ト を選択する と 、[Netlist] ビ ューが自動的に展開 さ れて選択 し た ロ ジ ッ ク オブジ ェク ト が表示 さ れ、[Instance Properties] ま たは [Net Properties] ビ ュ ーに イ ン ス タ ン ス ま たはネ ッ ト に関する 情報が表示 さ れます。
[Hierarchy] ビ ュ ーには、 RTL ロ ジ ッ ク 階層がグ ラ フ ィ カルに表示 さ れます。 各モジ ュ ールの大 き さ が、 その他のモ ジ ュ ールに相対的な比率で表示 さ れ る ので、 選択 し た ロ ジ ッ ク モジ ュールのサ イ ズや位置を判断で き ます。
[Hierarchy] ビ ュ ーを開 く には、 次の手順に従い ます。 1. [Netlist] ビ ューを右 ク リ ッ ク し ます。
2. [Show Hierarchy] を ク リ ッ ク し ます (図 1-23)。 F6 キーを押 し て も [Hierarchy] ビ ューを開 く こ と がで き ます。
ロ ジ ッ ク 回路図の解析
[Schematic] ビ ューでは、 選択し た ロ ジ ッ ク を展開し て表示で き ます。 [Schematic] ビ ューを表示する には、 少な く と も 1 つの ロ ジ ッ ク オブジ ェ ク ト を選択する必要があ り ます。 [Schematic] ビ ュ ーで、 任意の ロ ジ ッ ク を選択およ び表示 し ます。 タ イ ミ ン グ パ ス のグループを表示 し て、 そのパ ス 上のすべての イ ン ス タ ン ス を表示で き ます。 こ れに よ り 、 タ イ ミ ン グ ク リ テ ィ カルなモジ ュールが含まれる箇所を視 覚的に表示で き る ので、 フ ロ アプ ラ ン し やす く な り ます。 [Schematic] ビ ューを開 く には、 次の手順に従い ます。 1. 1 つま たは複数の イ ン ス タ ン ス、 ネ ッ ト 、 タ イ ミ ン グ パス を選択 し ます。 2. ツールバーま たは右 ク リ ッ ク メ ニ ューで [Schematic] を ク リ ッ ク する か、 F4 キーを押 し ます。X-Ref Target - Figure 1-23
[Schematic] ビ ューが開き、 選択 し たモジ ュールが表示 さ れます (図 1-24)。 こ の後、 ピ ン、 イ ン ス タ ン ス、 階層モジ ュ ールを選択 し て、 ロ ジ ッ ク を展開で き ます。
タ イ ミ ング解析の実行
合成済みデザ イ ンの タ イ ミ ン グ解析は、 イ ンプ リ メ ン テーシ ョ ン を効率的に実行す る ために必要な制約がパ ス に設定 さ れてい る か ど う か を確認す る のに有益です。Vivado 合成は タ イ ミ ン グ ド リ ブンであ り 、 設定 し た制約に基づいて 出力が調整 さ れます。 Pblock や LOC 制約の よ う な物理制約をデザ イ ンに割 り 当て てい く と 、 よ り 正確な タ イ ミ ン グ解析結果が得 ら れ る よ う にな り ますが、 こ れ ら の結果に含まれ る のはパ ス遅延の予測値です。 合成済みデザ イ ンでは、 予測 さ れ る 配線遅延 を使用 し て解析が実行 さ れます。 こ の時点で タ イ ミ ン グ解析を実行する と 、 パ ス が正 し く 制約 さ れてい る か、お よ び タ イ ミ ン グ パス の全体的な状況を 確認で き ます。 重要 : 実際の配線遅延が含まれるのは、 イ ンプ リ メ ンテーシ ョ ン (配置配線) 後の タ イ ミ ング解析のみです。 合成済み デザ イ ンの タ イ ミ ン グ解析は、 イ ンプ リ メ ン ト 済みデザ イ ンの タ イ ミ ン グ解析ほど正確ではあ り ません。X-Ref Target - Figure 1-24
Tcl での合成の実行
合成を実行す る Tcl コ マン ド は synth_design です。 通常 こ の コ マン ド は、 次の例の よ う に複数のオプシ ョ ン を使
用 し て実行 し ます。
synth_design -part xc7k30tfbg484-2 -top my_top
こ の例では、 synth_design が –part オプシ ョ ンおよび –top オプシ ョ ン を使用し て実行 さ れます。
Tcl コ ン ソ ールか ら 、Tcl コ マン ド オプシ ョ ン を使用し て合成オプシ ョ ン を設定し て合成を実行で き ます。[Tcl Console] ビ ュ ーで 「synth_design –help」 と 入力す る と 、 オプシ ョ ンの リ ス ト を取得で き ます。 次に、 -help オプシ ョ ン を使用 し た と き の コ マ ン ド 出力の一部を示 し ます。
次に、 -help オプシ ョ ン を使用し た と き の コ マン ド 出力の一部を示し ます。 Syntax:
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>] [-shreg_min_size <arg>] [-mode <arg>] [-fsm_extraction <arg>] [-keep_equivalent_registers] [-resource_sharing <arg>] [-control_set_opt_threshold <arg>] [-max_bram <arg>] [-max_dsp <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
[-shreg_min_size] Minimum length for chain of registers to be mapped onto SRL. Default: 3
[-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 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: 4
[-max_bram] Maximum number of block RAM allowed in design. (Note -1 means that the tool will choose the max number allowed for the part in question. Default: -1
[-max_dsp] Maximum number of block DSP allowed in design. (Note -1 means that the tool will choose the max number allowed for the part in question. 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 ベ ク ターを値 0010 に設定する には、 次の よ う に指定し ます。 -generic my_gen=4‘b0010 重要 : 文字列ジ ェ ネ リ ッ ク ま たはパ ラ メ ーターの変更はサポー ト さ れていません。
コ マ ン ド の詳細は、 『Vivado Design Suite Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 3] を参照 し て く だ さ い。 Vivado IDE での操作に対応する Tcl コ マン ド を確認する には、 Vivado IDE で コ マン ド を実行 し、 [Tcl Console] ビ ュー ま たは ロ グ フ ァ イ ルを参照 し て く だ さ い。
Tcl ス ク リ プ ト 例
次に、 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
制約の設定
表 1-2 に、 Vivado タ イ ミ ン グ制約にサポー ト さ れる Tcl コ マン ド を示し ます。 こ れ ら の コ マ ン ド の詳細は、 次の資料を参照 し て く だ さ い。
• 『Vivado Design Suite Tcl コ マン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 3]
• 『Vivado Design Suite ユーザー ガ イ ド : 制約の使用』 (UG903) [参照 8]
• 『Vivado Design Suite ユーザー ガ イ ド : デザ イ ン解析および ク ロージ ャ テ ク ニ ッ ク 』 (UG906) [参照 9]
• 『Vivado Design Suite チ ュー ト リ アル : デザ イ ン解析および ク ロージ ャ テ ク ニ ッ ク 』 (UG938) [参照 10]
• 『Vivado Design Suite チ ュー ト リ アル : 制約の使用』 (UG945) [参照 11]
表 1-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 制約は合成では使用 さ れませんが、 配置ツールで使用 さ れ る ので、 合成ツールか ら 転送 さ れます。サポー ト さ れる属性
ASYNC_REG
ASYNC_REG 属性は、 Vivado ツール フ ローの さ ま ざ ま なプ ロ セ ス に影響し ます。 こ の属性は、 レ ジ ス タ の D 入力ピ ン で ソ ース ク ロ ッ ク に非同期のデータ を受信で き る こ と 、ま たはレ ジ ス タ が同期化チ ェーン内の同期化レ ジ ス タ であ る こ と を示 し ます。Vivado 合成では、 こ の属性は DONT_TOUCH 属性 と し て処理 さ れ、ASYNC_REG プ ロ パテ ィ を ネ ッ ト リ ス ト に挿入し ま す。 こ れに よ り 、 ASYNC_REG プ ロ パテ ィ が設定 さ れたオブジ ェ ク ト が最適化で削除 さ れ る こ と はな く な り 、 フ ロー の後のほ う の ツールで適切に処理 さ れます。
Vivado のほかのツールで こ の属性がどの よ う に処理 さ れる かは、 『Vivado Design Suite プ ロ パテ ィ リ フ ァ レ ン ス ガ イ ド 』 (UG912) [参照 12] を参照 し て く だ さ い。
こ の属性はレ ジ ス タ に設定で き、有効な値は FALSE (デフ ォル ト ) および TRUE です。RTL ま たは XDC で設定で き ます。
ASYNC_REG の Verilog 例
(* ASYNC_REG = "TRUE" *) reg [2:0] sync_regs;
ASYNC_REG の VHDL 例
attribute ASYNC_REG : string;
BLACK_BOX
BLACK_BOX 属性は、 すべての階層レベルをオ フに し 、 合成でそのモジ ュールま たはエンテ ィ テ ィ に対し てブ ラ ッ ク ボ ッ ク ス を作成で き る よ う にする デバ ッ グ用の属性です。 こ の属性を指定す る と 、 モジ ュ ールま たはエン テ ィ テ ィ に 対 し て有効な ロ ジ ッ ク があ っ た と し て も 、合成ツールでその レベルに対 し てブ ラ ッ ク ボ ッ ク ス が作成 さ れます。 こ の 属性はモジ ュ ール、 エン テ ィ テ ィ 、 コ ン ポーネ ン ト に設定で き ます。 こ の属性は合成コ ンパ イ ラ に影響する ので、RTL でのみ設定可能です。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";
ブ ラ ッ ク ボ ッ ク ス の コ ーデ ィ ン グ ス タ イ ルの よ り 詳細な情報は、141 ページの 「ブ ラ ッ ク ボ ッ ク ス」 を参照 し て く だ さ い。
CLOCK_BUFFER_TYPE
CLOCK_BUFFER_TYPE 属性は入力 ク ロ ッ ク に設定 し、 使用する ク ロ ッ ク バ ッ フ ァ ーの タ イ プを指定し ます。
デフ ォル ト では、 ク ロ ッ ク バ ッ フ ァ ー と し て BUFG が使用 さ れます。
有効な値は、BUFG、 BUFH、 BUFIO、 BUFMR、 BUFR、 および none です。 none に設定する と 、 どの タ イ プの ク ロ ッ
ク バ ッ フ ァ ー も 推論 さ れません。
CLOCK_BUFFER_TYPE 属性は、 最上位 ク ロ ッ ク ポー ト に設定で き ます。 RTL でのみ設定可能で、 XDC ではサポー ト さ れてい ません。
CLOCK_BUFFER_TYPE の Verilog 例
(* clock_buffer_type = "none" *) input clk1;
CLOCK_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 clock_buffer_type : string;
attribute clock_buffer_type of clk: signal is "BUFR"; 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 です。 こ の属性は信号、 モジ ュール、 エン テ ィ テ ィ 、 コ ンポーネ ン ト に設定で き ます。
注記 : モ ジ ュ ール ま たはエ ン テ ィ テ ィ のポー ト には設定で き ま せん。 特定のポー ト を保持す る 必要が あ る 場合は、 -flatten_hierarchy none 設定を使用する か、モジ ュールま たはエンテ ィ テ ィ 自体に DONT_TOUCH を設定し ます。
推奨 : こ の属性は RTL のみで設定し て く だ さ い。 XDC フ ァ イルが読み込まれる前に、 保持する必要のあ る信号が最
適化で削除 さ れて し ま う こ と があ り ます。 こ の属性を RTL で設定し ておけば、 必ず適用 さ れます。
DONT_TOUCH の Verilog 例
Verilog のワ イ ヤ例
(* dont_touch = "true" *) wire sig1; assign sig1 = in1 & in2;
assign out1 = sig1 & in2;
Verilog のモ ジ ュ ール例
(* DONT_TOUCH = "true|yes" *) module example_dt_ver (clk, In1, In2, out1);Verilog のイ ン ス タ ン ス例
(* DONT_TOUCH = "true|yes" *) example_dt_ver U0 (.clk(clk), .in1(a), .in2(b), out1(c));
DONT_TOUCH の VHDL 例
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;
VHDL のエ ン テ ィ テ ィ 例
entity example_dt_vhd is port ( clk : in std_logic; In1 : in std_logic; In2 : in std_logic; out1 : out std_logic );attribute dont_touch : string;
attribute dont_touch of example_dt_vhd : entity is "true|yes"; end example_dt_vhd;
VHDL の コ ンポーネ ン ト 例
entity rtl of test is
attribute dont_touch : string; component my_comp
port (
in1 : in std_logic; out1 : out std_logic); end component;
atribute dont_touch of my_comp : component is “yes”;
VHDL のアーキテ ク チ ャ例
entity rtl of test is
attribute dont_touch : string;
attribute dont_touch of rtl : architecture is “yes”;
FSM_ENCODING
FSM_ENCODING 属性は、 ス テー ト マシ ンのエン コー ド 方法を指定し ます。 通常は、 Vivado ツールに よ り ス テー ト マ
シ ンに対 し てほ と んど のデザ イ ンで最適な結果が生成 さ れ る エン コ ー ド プ ロ ト コ ルが選択 さ れます。デザ イ ンの タ イ
プに よ っ ては、 特定のエン コ ー ド プ ロ ト コ ルが適 し てい る も の も あ り ます。
FSM_ENCODING 属性は、ス テー ト マシ ン レ ジ ス タ に設定で き ます。有効な値は one_hot、sequential、johnson、 gray、 auto です。 デフ ォル ト は auto で、 ツールに よ り 最適なエン コー ド が選択 さ れます。 RTL ま たは XDC で設 定で き ます。
FSM_ENCODING の Verilog 例
(* fsm_encoding = "one_hot" *) reg [7:0] my_state;
FSM_ENCODING の VHDL 例
type count_state is (zero, one, two, three, four, five, six, seven); signal my_state : count_state;
attribute fsm_encoding : string;
FSM_SAFE_STATE
FSM_SAFE_STATE 属性は、ス テー ト マシ ンが不正な ス テー ト にな っ た と き に次の ク ロ ッ ク サ イ ク ルで既知の ス テー ト にす る ロ ジ ッ ク を、 ス テー ト マシ ンに挿入 し ます。 た と えば、 onehot エ ン コ ー ド に設定 さ れた ス テー ト マシ ン が不正な 0101 ス テー ト にな っ た場合に回復可能です。 FSM_ENCODING 属性は、 ス テー ト マシ ン レ ジ ス タ に設定で き ます。RTL ま たは XDC で設定で き ます。 有効な値は、 次の と お り です。 • auto : 1 ビ ッ ト /フ リ ッ プの自動訂正にハ ミ ン グ 3 エン コー ド を使用し ます。 • reset_state : 1 ビ ッ ト /フ リ ッ プのハ ミ ン グ 2 エン コー ド 検出を使用し て、 ス テー ト マシ ン を強制的に リ セ ッ ト ス テー ト に し ます。 • power_on_state : 1 ビ ッ ト /フ リ ッ プのハ ミ ン グ 2 エン コー ド 検出を使用し て、 ス テー ト マシ ン を強制的にパ ワ ーオ ン ス テー ト に し ます。 • default_state : 1 ビ ッ ト /フ リ ッ プのハ ミ ン グ 2 エン コー ド 検出を使用し て、ス テー ト マシ ン を RTL でデフ ォ ル ト ス テー ト と し て指定 さ れた ス テー ト に、 その ス テー ト に到達で き ない場合で も 強制 し ます。FSM_SAFE_STATE の Verilog 例
(* fsm_safe_state = "reset_state" *) reg [7:0] my_state;
FSM_SAFE_STATE の VHDL 例
type count_state is (zero, one, two, three, four, five, six, seven); signal my_state : count_state;
attribute fsm_safe_state : string;
attribute fsm_safe_state of my_state : signal is "power_on_state";
FULL_CASE (Verilog のみ)
FULL_CASE は、 case、 casex ま たは casez 文で可能性のあ るすべての case 値が指定 さ れる こ と を示し ます。 case
値が指定 さ れてい る 場合、Vivado 合成で case 値に対 し て余分な ロ ジ ッ ク は作成 さ れません。 こ の属性は、 case 文に
設定で き ます。 こ の属性は合成 コ ンパ イ ラ に影響 し 、 デザ イ ンの論理動作を変更する 可能性があ る ので、RTL でのみ 設定可能です。