Vivado Design Suite ユーザー ガ イ ド : 合成 UG901 (v2012.2) 2012 年 7 月 25 日 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 2012 Xilinx, Inc. Xilinx, the Xilinx logo, Artix, ISE, Kintex, Spartan, Virtex, 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. 本資料は英語版 (v2012.2) を翻訳 し た も ので、 内容に相違が生 じ る 場合には原文を優先 し ます。 資料に よ っ ては英語版の更新に対応 し ていない も のがあ り ます。 日本語版は参考用 と し て ご使用の上、 最新情報につ き ま し ては、 必ず最新英語版を ご参照 く だ さ い。 こ の資料に関す る フ ィ ー ド バ ッ ク お よ び リ ン ク な ど の問題につ き ま し ては、[email protected] ま でお知 ら せ く だ さ い。 いただ き ま し た ご意見を参考に早急に対応 さ せていただ き ます。 なお、 こ の メ ール ア ド レ スへのお問い合わせは受け付け てお り ません。 あ ら か じ めご了承 く だ さ い。 改訂履歴 次の表に、 こ の文書の改訂履歴を示 し ます。 日付 バージ ョ ン 2012 年 7 月 25 日 2012.2 合成 UG901 (v2012.2) 2012 年 7 月 25 日 改訂内容 初版 japan.xilinx.com 2 目次 改訂履歴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Vivado 合成 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 合成手法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 プ ロ ジ ェ ク ト モー ド の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 フ ロ アプ ラ ンの表示 と リ ソ ース統計の レ ポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 ロ ジ ッ ク の解析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 XST ス ト ラ テジ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 非プ ロ ジ ェ ク ト モー ド での合成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 付録 A : 合成属性 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 サポー ト さ れ る 属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 付録 B : SystemVerilog サポー ト 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 特定の フ ァ イ ルで SystemVerilog を使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . デー タ 型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . プロセス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 手続 き プ ロ グ ラ ム代入文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . タ ス ク お よ び関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . モジ ュ ールお よ び階層 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 36 37 40 42 43 44 45 付録 C : その他の リ ソ ース ザ イ リ ン ク ス リ ソ ース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 ソ リ ュ ーシ ョ ン セ ン タ ー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Vivado 資料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 3 Vivado 合成 概要 合成は、 RTL で記述 さ れたデザ イ ン を ゲー ト レベル記述に変換す る プ ロ セ ス です。 Vivado™ 統合設計環境 (IDE) の 合成は タ イ ミ ン グ ド リ ブン であ り 、 メ モ リ 使用量お よ びパフ ォ ーマ ン ス で最適化 さ れてい ます。 SystemVerilog お よ び VHDL と Verilog の混合 も サポー ト さ れてい ます。 Vivado IDE では、 業界標準の Synopsys Design Constraints (SDC) に基づ く ザ イ リ ン ク ス デザ イ ン制約 (XDC) がサポー ト さ れてい ます。 重要 : UCF 制約は、 Vivado 合成ではサポー ト さ れません。 UCF 制約は XDC 制約に変換す る 必要があ り ます。 詳細は、 『Vivado Design Suite 移行手法ガ イ ド 』 (UG912) [参照 4] の 「UCF 制約の XDC 制約への移行」 を参照 し て く だ さ い。 合成を設定 し て実行する には、 次の 2 つの方法があ り ます。 • Vivado IDE のプ ロ ジ ェ ク ト モー ド を使用 • 非プ ロ ジ ェ ク ト モー ド を使用 (Tcl コ マン ド synth_design を実行 し 、 デザ イ ン フ ァ イ ルを ユーザーが制御) 操作モー ド の詳細は、 『Vivado Design Suite ユーザー ガ イ ド : デザ イ ン フ ロ ーの概要』 (UG892) [参照 8] を参照 し て く だ さ い。 こ の章では、 両方のモー ド を使用 し た合成を個別のセ ク シ ョ ンで説明 し ます。 合成手法 Vivado IDE では、 合成お よ び イ ンプ リ メ ン テーシ ョ ン run を ボ タ ン を ク リ ッ ク す る だけで実行可能な環境が提供 さ れ てい ます。 run のデー タ は自動的に管理 さ れ、 さ ま ざ ま な RTL ソ ース バージ ョ ン、 タ ーゲ ッ ト デバ イ ス、 合成お よ び イ ン プ リ メ ン テーシ ョ ン オプシ ョ ン、 物理制約お よ び タ イ ミ ン グ制約を使用 し て繰 り 返 し 実行で き ま す。 Vivado IDE では、 次の操作を実行で き ます。 • ス ト ラ テジ を作成お よ び保存。 ス ト ラ テジ と は、 合成ま たは イ ンプ リ メ ン テーシ ョ ンのデザ イ ン run に適用 さ れ る コ マ ン ド オプシ ョ ンの設定です。 詳細は、 7 ページの 「run ス ト ラ テジの作成」 を参照 し て く だ さ い。 • 複数の合成お よ び イ ンプ リ メ ン テーシ ョ ン run を設定 し 、 順次に、 ま たはマルチプ ロ セ ッ サ マシ ンで同時に実 行。 詳細は、 13 ページの 「合成の実行」 を参照 し て く だ さ い。 • 合成ま たは イ ンプ リ メ ン テーシ ョ ンの進捗状況を監視、 ロ グ レ ポー ト を確認、run を キ ャ ン セル。詳細は、17 ペー ジの 「合成実行の監視」 を参照 し て く だ さ い。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 4 プ ロ ジ ェ ク ト モー ド の使用 プ ロ ジ ェ ク ト モー ド の使用 こ のセ ク シ ョ ンでは、 Vivado IDE を使用 し て Vivado 合成を設定お よ び実行す る 方法を説明 し ます。 合成設定 デザ イ ンの合成オプシ ョ ン を設定する には、 次の手順に従い ます。 1. Flow Navigator で [Synthesis] → [Synthesis Settings] を ク リ ッ ク し ます (図 1)。 X-Ref Target - Figure 1 図 1 : Flow Navigator : [Synthesis] セ ク シ ョ ン 図 2 に示す [Project Settings] ダ イ ア ロ グ ボ ッ ク ス が開 き ます。 X-Ref Target - Figure 2 図 2 : [Project Settings] ダ イ ア ログ ボ ッ ク ス 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 5 プ ロ ジ ェ ク ト モー ド の使用 2. [Project Settings] ダ イ ア ロ グ ボ ッ ク ス で、 次の よ う に設定 し ます。 a. [Synthesis] ページの [Constraints] で、 [Default Constraint Set] にア ク テ ィ ブな制約セ ッ ト と な る 制約セ ッ ト を 選択 し ます。 制約セ ッ ト は、 ザ イ リ ン ク ス デザ イ ン制約 (XDC) で記述 さ れたデザ イ ン制約を含む複数の制 約フ ァ イ ルのセ ッ ト です。 デザ イ ン制約には、 次の 2 種類があ り ます。 - 物理制約 : ピ ン配置、 ブ ロ ッ ク RAM、 LUT、 フ リ ッ プ フ ロ ッ プな ど のセルの絶対配置ま たは相対配置、 お よ びデバ イ ス の コ ン フ ィ ギ ュ レーシ ョ ン設定を定義 し ます。 - タ イ ミ ン グ制約 : 業界標準の SDC で記述 し 、 デザ イ ンの周波数要件を定義 し ます。 タ イ ミ ン グ制約を設 定 し ない場合、 デザ イ ンが ワ イ ヤの長 さ お よ び配線の密集度にのみ基づいて最適化 さ れます。 選択 し た制約セ ッ ト は新 し い run に使用 さ れ、 デザ イ ンの変更 も こ の制約セ ッ ト に保存 さ れます。 b. [Options] エ リ アで、[Strategy] ド ロ ッ プダ ウ ン リ ス ト か ら 合成 run に使用する 合成ス ト ラ テジ を選択 し ます。 あ ら か じ め定義 さ れた ス ト ラ テジか ら 選択する か、 ま たは独自の ス ト ラ テジ を定義で き ます。 合成ス ト ラ テ ジ を選択する と 、Vivado ま たは XST の コ マ ン ド ラ イ ン オプシ ョ ンがダ イ ア ロ グ ボ ッ ク ス の下部に表示 さ れ ます。 オプシ ョ ンの値を変更する と 、 合成ス ト ラ テジの設定を変更で き ます。 図 3 では、 [Strategy] ド ロ ッ プダ ウ ン リ ス ト で [Vivado Synthesis Defaults] がハ イ ラ イ ト さ れてい ます。 X-Ref Target - Figure 3 図 3 : [Strategy] ド ロ ッ プ ダウン リ ス ト の [Vivado Synthesis Defaults] ス ト ラ テジ Vivado 合成 2012 ス ト ラ テジ を使用する こ と をお勧め し ます。XST ス ト ラ テジについては、26 ページの 「XST ス ト ラ テジ」 を参照 し て く だ さ い。 c. 表示 さ れてい る オプシ ョ ン を選択 し ます。 次のオプシ ョ ンがあ り ます。 - [tcl.pre] お よ び [tcl.post] : 合成の前後に実行す る Tcl フ ァ イ ルを指定 し ます。 - [-flatten_hierarchy] : 合成での階層の制御方法を指定 し ます。 - [none] : 階層を フ ラ ッ ト 化 し ません。 合成の出力には、 元の RTL と 同 じ 階層が含まれます。 - [full] : 最上位以外の階層をすべて フ ラ ッ ト 化 し ます。 - [rebuilt] : こ れがデフ ォ ル ト です。 階層を フ ラ ッ ト 化 し て合成を実行 し た後に、 元の RTL に基づいて階 層を再構築 し ま す。 こ の設定を使用す る と 、 境界を越え た最適化を実行で き る ので QoR が向上 し 、 最 終的な階層は RTL と 似た も のにな る ので解析 し やす く な り ます。 - [-gated_clock_conversion] : ゲーテ ッ ド ク ロ ッ ク を イ ネーブルに変換す る 機能を オン/オ フ に し ます。 ゲー テ ッ ド ク ロ ッ ク の変換を使用す る には、 RTL 属性 も 必要です。 詳細は、 付録 B 「SystemVerilog サポー ト 」 を参照 し て く だ さ い。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 6 プ ロ ジ ェ ク ト モー ド の使用 - [-no_iobuf] : 入力ま たは出力バ ッ フ ァ ーが推論 さ れない よ う に し ます。 こ れは、 ツールの出力が フ ロ ー の後の方で下位 と し て使用 さ れ る ボ ト ム ア ッ プ フ ロ ーで有益です。 こ の設定はグ ロ ーバル設定であ り 、 デザ イ ン全体に適用 さ れます。 こ の機能を ポー ト ご と に設定す る には、 付録 A 「合成属性」 に説明 さ れてい る BUFFER_TYPE 属性を 使用 し ます。 - [-bufg] : デザ イ ン で推論可能な BUFG の最大数を指定 し ます。 こ のオプシ ョ ンは、 ネ ッ ト リ ス ト のほか の BUFG が合成プ ロ セ ス で認識 さ れない場合に使用 し ます。 RTL に イ ン ス タ ン シエー ト さ れてい る BUFG の数が検出 さ れ、 指定 さ れた数ま での BUFG が推論 さ れ ます。 た と えば、 –bufg オプシ ョ ン を 12 に設定 し 、 RTL に 3 つの BUFG が イ ン ス タ ン シエー ト さ れて い る と する と 、 あ と 9 個の BUFG を推論可能です。 - [-fanout_limit] : 信号で駆動可能な ロ ー ド の最大数を指定 し ます。 ロ ー ド の数が こ れ よ り 大 き く な る 場合 は、 ロ ジ ッ ク が複製 さ れます。 こ のグ ローバル設定は一般的なガ イ ド ラ イ ンであ り 、 ツールで必要 と 判 断 さ れた場合は無視 さ れます。 制限を強制す る 必要があ る 場合は、 付録 A 「合成属性」 に説明 さ れてい る MAX_FANOUT を参照 し て く だ さ い。 - [–fsm_extraction] : 有限ス テー ト マシ ンの抽出お よ びマ ッ プ方法を指定 し ます。 デフ ォ ル ト では [off] に 設定 さ れてお り 、 ス テー ト マシ ンは ロ ジ ッ ク と し て合成 さ れます。 ス テー ト マシ ンのエン コ ー ド タ イ プを [one_hot]、 [sequential]、 [johnson]、 [gray]、 ま たは [auto] か ら 選択で き ます。 run ス ト ラ テ ジの作成 ス ト ラ テジは、 合成ツールお よ び イ ンプ リ メ ン テーシ ョ ンで実行 さ れ る さ ま ざ ま なユーテ ィ リ テ ィ やプ ロ グ ラ ムのオ プシ ョ ンのあ ら か じ め定義 さ れたセ ッ ト です。 ス ト ラ テジは、 ツールお よ びバージ ョ ン特定です。 各 メ ジ ャ ー リ リ ー ス には、 そのバージ ョ ン専用の ス ト ラ テジがあ り ます。 フ ロ ーの現在の ス ト ラ テジ を確認す る には、 [Tools] → [Options] を ク リ ッ ク し 、 左側のペ イ ンで [Strategies] を ク リ ッ ク し ます (図 4)。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 7 プ ロ ジ ェ ク ト モー ド の使用 X-Ref Target - Figure 4 図 4 : 合成ス ト ラ テジ [Flow] ド ロ ッ プダ ウ ン リ ス ト か ら [Vivado Synthesis] を選択 し ます。右側に表示 さ れ る オプシ ョ ンは、[Project Settings] ダ イ ア ロ グ ボ ッ ク ス の [Synthesis] ページに表示 さ れ る も の と 同 じ です。 カ ス タ ム ス ト ラ テジ を作成す る には、 次のいずれか を実行 し ます。 • [User Defined Strategies] を右 ク リ ッ ク し 、 [Create New Strategy] を ク リ ッ ク し ます。 • ツールバーの [Create New Strategy] ボ タ ン ます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 を ク リ ッ ク し 、 [New Strategy] ダ イ ア ロ グ ボ ッ ク ス (図 5) を開 き japan.xilinx.com 8 プ ロ ジ ェ ク ト モー ド の使用 . X-Ref Target - Figure 5 図 5 : [New Strategy] ダ イ ア ログ ボ ッ ク ス [New Strategy] ダ イ ア ロ グ ボ ッ ク ス で ス ト ラ テジの名前、 ス ト ラ テジの タ イ プ、 お よ びツール バージ ョ ン を指定 し ま す。 説明 も 入力で き ます。 オプシ ョ ン を設定 し た ら [OK] を ク リ ッ ク し ます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 9 プ ロ ジ ェ ク ト モー ド の使用 合成への入力 Vivado 合成には、 RTL ソ ース コ ー ド お よ び タ イ ミ ン グ制約を入力で き ます。 RTL ま た は制約 フ ァ イ ル を 追加す る には、 Flow Navigator で [Project Manager] → [Add Sources] を ク リ ッ ク し 、 Add Sources ウ ィ ザー ド (図 6) を開 き ます。 X-Ref Target - Figure 6 図 6 : Add Sources ウ ィ ザー ド 制約、 RTL、 ま たはその他のプ ロ ジ ェ ク ト フ ァ イ ルを追加 し ます。 Add Sources ウ ィ ザー ド の詳細は、 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 5] を参照 し て く だ さ い。 Vivado 合成では、 ザ イ リ ン ク ス ツールでサポー ト さ れ る VHDL、 Verilog、 ま たは SystemVerilog の フ ァ イ ルの合成可 能なサブセ ッ ト を読み込む こ と がで き ます。 付録 B 「SystemVerilog サポー ト 」 に、 サポー ト さ れ る SystemVerilog コ ン ス ト ラ ク ト が説明 さ れてい ます。 Vivado 合成では、 合成での処理を制御す る い く つかの RTL 属性 も サポー ト さ れてい ます。 こ れ ら の属性は、 付録 A 「合成属性」 を参照 し て く だ さ い。 Vivado 合成は、 タ イ ミ ン グ制約に XDC フ ァ イ ルが使用 さ れます。 重要 : Vivado Design Suite では、 UCF フ ォーマ ッ ト はサポー ト さ れません。 UCF か ら XDC への変換手順は、 『Vivado Design Suite 移行手法ガ イ ド 』 (UG912) [参照 7] を参照 し て く だ さ い。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 10 プ ロ ジ ェ ク ト モー ド の使用 フ ァ イルの コ ンパイル順 あ る フ ァ イ ルに宣言が含まれ、別の フ ァ イ ルがその宣言に依存 し てい る 場合、特定の コ ンパ イ ル順が必要にな り ます。 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) [参照 3] を参照し て く だ さ い。 グ ローバル イ ン クルー ド フ ァ イルの定義 Vivado IDE では、 1 つま たは複数の Verilog ま たは Verilog ヘ ッ ダー フ ァ イ ルを グ ロ ーバル イ ン ク ルー ド フ ァ イ ル と し て指定で き ます。グ ロ ーバル イ ン ク ルー ド と し てマー ク さ れてい る フ ァ イ ルは、ほかの ソ ース の前に処理 さ れます。 Verilog では通常、 別の Verilog フ ァ イ ルやヘ ッ ダー フ ァ イ ルか ら の内容を参照す る Verilog ソ ース フ ァ イ ルの冒頭に `include 文を含め る 必要があ り ます。 共通ヘ ッ ダー フ ァ イ ルを使用す る デザ イ ンでは、 複数の Verilog ソ ース にそ れぞれ複数の `include 文を含め る 必要があ る 場合 も あ り ます。 Verilog フ ァ イ ルま たは Verilog ヘ ッ ダー フ ァ イ ルを グ ロ ーバル イ ン ク ルー ド フ ァ イ ル と し て指定す る には、 次のい ずれかを実行 し ます。 1. [Sources] ビ ュ ーで フ ァ イ ルを右 ク リ ッ ク し ます。 2. [Set Global Include] を ク リ ッ ク し ます。 ま たは、 [Source Node Properties] ビ ュ ーで [Global Include] チ ェ ッ ク ボ ッ ク ス を オンに し ます (図 7)。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 11 プ ロ ジ ェ ク ト モー ド の使用 X-Ref Target - Figure 7 図 7 : [Source Node Properties] ビ ュ ー ヒ ン ト : 1 つの Verilog ソ ース のみに適用する 必要のあ る Verilog ヘ ッ ダー フ ァ イ ル (特定の `define マ ク ロ な ど) は、 グ ロ ーバル イ ン ク ルー ド フ ァ イ ル と し て指定す る のではな く `include 文を使用 し て参照す る 必要があ り ます。 [Sources] ビ ュ ーの詳細は、 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 3] を参照し て く だ さ い。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 12 プ ロ ジ ェ ク ト モー ド の使用 合成の実行 合成 run では、 合成中に使用 さ れ る デザ イ ンの詳細を定義お よ び設定で き ます。 合成 run は次を定義 し ます。 • 合成中に タ ーゲ ッ ト と する ザ イ リ ン ク ス デバ イ ス • 適用する 制約セ ッ ト • 1 つま たは複数の合成 run を起動す る オプシ ョ ン • 合成エン ジ ンの結果を制御する オプシ ョ ン RTL ソ ース フ ァ イ ルの run お よ び制約を定義す る には、 次の手順に従い ます。 1. 次のいずれかを実行 し ます。 - [Flow] → [Create Runs] を ク リ ッ ク - Flow Navigator で [Run Synthesis] を右 ク リ ッ ク し て [Create Synthesis Runs] を ク リ ッ ク Create New Runs ウ ィ ザー ド が開き ます。 ウ ィ ザー ド の最初のページは、 コ マ ン ド のサマ リ です。 2. [Next] を ク リ ッ ク し ます。 図 8 に示す [Create New Runs] ページが表示 さ れます。 X-Ref Target - Figure 8 図 8 : [Create New Runs] ページ 3. [Synthesis and Implementation] をオンに し 、 [Next] を ク リ ッ ク し ます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 13 プ ロ ジ ェ ク ト モー ド の使用 図 9 に示す [Set-Up Synthesis Runs] ページが表示 さ れます。 X-Ref Target - Figure 9 図 9 : [Set-Up Synthesis Runs] ページ 4. 制約セ ッ ト ([Constraints set]) お よ びデバ イ ス ([Part]) を選択 し 、 [Next] を ク リ ッ ク し ます。 図 10 に示す [Choose Synthesis Strategies] ページが表示 さ れます。 X-Ref Target - Figure 10 図 10 : [Choose Synthesis Strategies] ページ 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 14 プ ロ ジ ェ ク ト モー ド の使用 5. 定義済みの ス ト ラ テジ を選択 し ます。 Vivado IDE にはデフ ォ ル ト の ス ト ラ テジが含まれてい ます。 ス ト ラ テジ run の名前を指定する か、 デフ ォ ル ト 名 (synth_1、 synth_2 な ど) を使用 し ます。 ヒ ン ト : XST (Xilinx Synthesis Technology) の ス ト ラ テ ジ も 選択可能です。 XST の ス ト ラ テ ジ と レ ポー ト につい ては、 26 ページの 「XST ス ト ラ テジ」 を参照 し て く だ さ い。 独自の ス ト ラ テジの作成方法は、 7 ページの 「run ス ト ラ テジの作成」 を参照 し て く だ さ い。 [Next] を ク リ ッ ク し ます。 図 11 に示す [Launch Options] ページが表示 さ れます。 X-Ref Target - Figure 11 図 11 : [Launch Options] ページ 6. [Launch Options] ページで次のオプシ ョ ン を設定 し ます。 ° [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) [参照 6] の付録 A 「 リ モー ト ホ ス ト の使用」 を参照 し て く だ さ い。 [Configure Hosts] を ク リ ッ ク す る と 、 ホ ス ト を設定す る ダ イ ア ロ グ ボ ッ ク ス が開 き ます。 - [Generate scripts only] : 後で実行する ス ク リ プ ト を生成 し ます。runme.bat (Windows) ま たは runme.sh (Linux) を使用 し て run を開始 し ます。 - [Do not launch now] : 前のページの設定を保存 し 、 run を後で実行で き る よ う に し ます。 Create New Runs ウ ィ ザー ド でオプシ ョ ン を設定 し て run を実行す る と 、 [Design Runs] ビ ュ ーに結果が表示 さ れます (図 12)。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 15 プ ロ ジ ェ ク ト モー ド の使用 X-Ref Target - Figure 12 図 12 : [Design Runs] ビ ュ ー [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) [参 照 6] の付録 A 「 リ モー ト ホ ス ト の使用」 を参照 し て く だ さ い。 ヒ ン ト : run を実行す る たびに、 別のプ ロ セ ス が開始 さ れます。 メ ッ セージ を確認す る 際は、 プ ロ セ ス特定の も のに 注意 し て く だ さ い。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 16 プ ロ ジ ェ ク ト モー ド の使用 プ ロ セスのバ ッ ク グ ラ ウン ド への移動 Vivado IDE で合成ま たは イ ン プ リ メ ン テーシ ョ ン を実行す る と 、 ダ イ ア ロ グ ボ ッ ク ス にプ ロ セ ス を バ ッ ク グ ラ ウ ン ド で実行す る オプシ ョ ンが表示 さ れます。 run をバ ッ ク グ ラ ウ ン ド に移動す る と 、 レ ポー ト を表示す る な ど、 Vivado IDE でほかの機能を実行で き る よ う にな り ます。 合成実行の監視 合成 run の ス テー タ スは、 [Log] ビ ュ ー (図 13) で確認 し ます。 合成中に こ の ビ ュ ーに表示 さ れ る メ ッ セージは、 合成 ロ グ フ ァ イ ルに も 含まれます。 X-Ref Target - Figure 13 図 13 : [Log] ビ ュ ー 合成終了後の フ ロー run が完了す る と 、 [Synthesis Completed] ダ イ ア ロ グ ボ ッ ク ス が表示 さ れます (図 14)。 X-Ref Target - Figure 14 図 14 : [Synthesis Completed] ダ イ ア ログ ボ ッ ク ス 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 17 プ ロ ジ ェ ク ト モー ド の使用 次のいずれかを オンに し ます。 ° [Run Implementation] : イ ンプ リ メ ン テーシ ョ ン を現在の イ ンプ リ メ ン テーシ ョ ン プ ロ ジ ェ ク ト 設定を使用 し て実行 し ます。 ° [Open Synthesized Design] : 合成済みネ ッ ト リ ス ト 、 ア ク テ ィ ブな制約セ ッ ト 、 タ ーゲ ッ ト デバ イ ス を合成済 みデザ イ ン環境で開き 、 I/O ピ ン配置、 デザ イ ン解析、 フ ロ アプ ラ ン を実行で き る よ う に し ます。 ° [View Reports] : [Reports] ビ ュ ーを開 き 、 レ ポー ト を表示で き る よ う に し ます。 [Don't show this dialog again] をオンにす る と 、 次回か ら こ のダ イ ア ロ グ ボ ッ ク スは表示 さ れな く な り ます。 ヒ ン ト : こ のダ イ ア ロ グ ボ ッ ク ス を再び表示 さ れ る よ う にす る には、 [Tools] → [Options] を ク リ ッ ク し 、 左側のペ イ ンで [Window Behavior] を ク リ ッ ク し ます。 合成結果の解析 合成が終了 し た ら 、 合成レ ポー ト を表示 し 、 合成済みデザ イ ン を開いて解析で き ます。 [Reports] ビ ュ ーには、 合成お よ び イ ンプ リ メ ン テーシ ョ ンで生成 さ れた レ ポー ト の リ ス ト が表示 さ れます。 [Reports] ビ ュ ー (図 15) を開 き 、 レ ポー ト を開いて特定の run の詳細を確認 し ます。 X-Ref Target - Figure 15 図 15 : [Reports] ビ ュ ー 合成済みデザイ ン環境の使用 Vivado IDE には、 デザ イ ン を さ ま ざ ま な面か ら 解析す る 環境が含まれてい ます。 合成済みデザ イ ン を開 く と 、 合成済 みネ ッ ト リ ス ト 、 ア ク テ ィ ブな制約セ ッ ト 、 お よ び タ ーゲ ッ ト デバ イ ス が読み込まれます。 詳細は、 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 3] を参照 し て く だ さ い。 合成済みデザ イ ン を開 く には、 次のいずれかを実行 し ます。 • Flow Navigator で [Synthesis] → [Open Synthesized Design] を ク リ ッ ク し ます。 • メ イ ン メ ニ ュ ーか ら [Flow] → [Open Synthesized Design] を ク リ ッ ク し ます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 18 フ ロ ア プ ラ ンの表示 と リ ソ ース統計のレポー ト 合成済みデザ イ ン を開 く と 、 [Device] ビ ュ ー (図 16) が表示 さ れます。 X-Ref Target - Figure 16 図 16 : [Device] ビ ュ ー こ の環境か ら 、 デザ イ ン ロ ジ ッ ク と 階層の確認、 リ ソ ー ス 使用率お よ び タ イ ミ ン グ予測の表示、 デザ イ ン ルール チ ェ ッ ク (DRC) を実行で き ます。 フ ロ ア プ ラ ンの表示 と リ ソ ース統計のレ ポー ト リ ソ ース予測は、 展開可能な階層ツ リ ー と し て グ ラ フ ィ カルに表示 さ れます。 各 リ ソ ース タ イ プを展開す る と 、 論理 階層の各レベルを表示で き ます。 デバ イ ス リ ソ ース予測を グ ラ フ ィ カルに表示す る には、 合成済みデザ イ ン を開いて次のいずれか を ク リ ッ ク し ます。 • Flow Navigator → [Report Utilization] • [Tools] → [Report Utilization] 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 19 フ ロ ア プ ラ ンの表示 と リ ソ ース統計のレポー ト [Utilization] ビ ュ ー (図 17) が開き ます。 X-Ref Target - Figure 17 図 17 : [Utilization] ビ ュ ー ロ ジ ッ ク イ ン ス タ ン スの リ ソ ース統計の表示 Vivado IDE には、 デザ イ ンに含まれ る デバ イ ス リ ソ ース数を予測する 機能があ り ます。 最上位を含む ロ ジ ッ ク イ ン ス タ ン ス の リ ソ ー ス統計は、 [Instance Properties] ビ ュ ーに表示 さ れ ます。 [Netlist] ビ ュ ー で最上位モジ ュ ールま たは任意の イ ン ス タ ン ス を選択 し ます (図 18)。 X-Ref Target - Figure 18 図 18 : [Netlist] ビ ュ ー 表示 さ れない場合は、モジ ュ ールを右 ク リ ッ ク し 、ポ ッ プア ッ プ メ ニ ュ ーで [Net Properties] ま たは [Instance Properties] を ク リ ッ ク し ます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 20 フ ロ ア プ ラ ンの表示 と リ ソ ース統計のレポー ト [Netlist Properties] ま たは [Instance Properties] ビ ュ ーで [Statistics] タ ブ を ク リ ッ ク し ます (図 19)。 X-Ref Target - Figure 19 図 19 : [Instance Properties] ビ ュ ー [Statistics] タ ブには、 [Primitive Statistics] (プ リ ミ テ ィ ブ統計) お よ び [Net Boundary Statistics] (ネ ッ ト 境界統計) な ど の 情報が表示 さ れます。 [Instance Properties] ビ ュ ーには、 ほかに次の タ ブがあ り ます。 • [General] : 選択 し た イ ン ス タ ン ス の名前 ([Name])、 セル ([Cell])、 お よび タ イ プ ([Type]) を示 し ます。 • [Attributes] : フ ァ イ ル属性を リ ス ト し ます。 • [Instance Pins] : イ ン ス タ ン ス ピ ンの ID、 名前、 方向、 BEL ピ ン、 お よ びネ ッ ト を リ ス ト し ます。 • [Children] : 子 イ ン ス タ ン ス の ID、 名前、 セル、 お よ び イ ン ス タ ン ス ピ ン数を リ ス ト し ます。 • [Nets] : ネ ッ ト の ID、 名前、 イ ン ス タ ン ス ピ ン、 フ ラ ッ ト ピ ン数、 お よ び ド ラ イ バーが存在する かを示 し ます。 • [Power] : 信号レー ト ([Signal Rate]) お よ び統計確率 ([Static Probability]) の ス ピ ン ボ ッ ク ス、 階層のチ ェ ッ ク ボ ッ ク ス ([Hierarchy]) を表示 し ます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 21 フ ロ ア プ ラ ンの表示 と リ ソ ース統計のレポー ト リ ソ ース統計レ ポー ト のエ ク スポー ト 表示 さ れてい る デー タ を ス プ レ ッ ド シー ト フ ァ イ ルに保存で き ます。 Vivado IDE では、 階層形式の レ ポー ト が生成 さ れ、 レ ポー ト する 階層数お よ びレベル別に各モジ ュ ールの予測値を定義で き ます。 リ ソ ー ス 統計 レ ポー ト を エ ク ス ポー ト す る には、 [Netlist] ビ ュ ーで統計 を 取得す る 階層 を 右 ク リ ッ ク し 、 [Export Statistics] を ク リ ッ ク し ます (図 20)。 X-Ref Target - Figure 20 図 20 : [Netlist] ビ ュ ーのポ ッ プ ア ッ プ メ ニ ュ ー 図 21 に示す [Export Netlist Statistics] ダ イ ア ロ グ ボ ッ ク ス が開 き ます。 X-Ref Target - Figure 21 図 21 : [Export Instance Statistics] ダ イ ア ログ ボ ッ ク ス [Export Instance Statistics] ダ イ ア ロ グ ボ ッ ク ス で、 次の情報を指定 し ます。 • [File Name] : ス プ レ ッ ド シー ト フ ァ イ ルの名前 と 保存場所を入力 し ます。 • [Format] : 出力フ ァ イ ルの フ ォーマ ッ ト を テキ ス ト 、 XML、 CSV か ら 選択 し ます。 • [Levels] : レ ポー ト に含め る 階層レベル数を設定 し ます。 • [Reports to Generate] : 出力レ ポー ト フ ァ イ ルに含め る ネ ッ ト リ ス ト 統計の タ イ プを定義 し ます。 エ ク ス ポー ト する フ ァ イ ルのオプシ ョ ン を選択 し 、 [OK] を ク リ ッ ク し ます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 22 ロ ジ ッ ク の解析 ロ ジ ッ クの解析 Vivado IDE では、 ロ ジ ッ ク を解析す る ビ ュ ーが複数あ り ます。 • [Netlist] お よ び [Hierarchy] ビ ュ ーには、 ナビ ゲー ト 可能な階層ツ リ ー形式の表示が含まれます。 • [Schematic] ビ ュ ーでは、 選択 し た ロ ジ ッ ク を展開 し た り 階層表示にで き ます。 • [Device] ビ ュ ーは、 デバ イ ス、 配置 ロ ジ ッ ク オブジ ェ ク ト 、 お よ び接続を グ ラ フ ィ カルに表示 し ます。 1 つの ビ ュ ーで選択 し た情報はほかのビ ュ ーで も 選択 さ れ る よ う にな っ てお り 、 必要な情報をすばや く 見つけ る こ と がで き ます。 ロ ジ ッ ク 階層の表示 [Netlist] ビ ュ ーには、 合成済みデザ イ ンの ロ ジ ッ ク 階層が表示 さ れます。 ネ ッ ト リ ス ト 内の ロ ジ ッ ク イ ン ス タ ン ス ま たはネ ッ ト を、 展開 し て選択で き ます。 別の ビ ュ ーで ロ ジ ッ ク オブジ ェ ク ト を選択す る と 、[Netlist] ビ ュ ーが自動的に展開 さ れて選択 し た ロ ジ ッ ク オブジ ェ ク ト が表示 さ れ、 [Instance Properties] ま たは [Net Properties] ビ ュ ーに イ ン ス タ ン ス ま たはネ ッ ト に関す る 情報が表示 さ れます。 [Netlist] ビ ュ ーのポ ッ プア ッ プ メ ニ ュ ーで [Show Hierarchy] を ク リ ッ ク す る と 表示 さ れ る [Hierarchy] ビ ュ ーには、RTL ロ ジ ッ ク 階層がグ ラ フ ィ カルに表示 さ れます。 各モジ ュ ールの大 き さ が、 その他のモジ ュ ールに相対的な比率で表示 さ れ る ので、 選択 し た ロ ジ ッ ク モジ ュ ールのサ イ ズや位置を判断で き ます。 ロ ジ ッ ク 回路図の解析 [Schematic] ビ ュ ーでは、 選択 し た ロ ジ ッ ク を展開 し て表示で き ます。 [Schematic] ビ ュ ーを表示す る には、 少な く と も 1 つの ロ ジ ッ ク オブジ ェ ク ト を選択す る 必要があ り ます。 [Schematic] ビ ュ ーで、 任意の ロ ジ ッ ク を選択お よ び表示 し ます。 タ イ ミ ン グ パ ス のグループ を表示 し て、 そのパ ス 上のすべての イ ン ス タ ン ス を表示で き ます。 こ れに よ り 、 タ イ ミ ン グ ク リ テ ィ カルなモジ ュ ールが含まれ る 箇所を視 覚的に表示で き る ので、 フ ロ アプ ラ ン し やす く な り ます。 [Schematic] ビ ュ ーを開 く には、 次の手順に従い ます。 1. 1 つま たは複数の イ ン ス タ ン ス、 ネ ッ ト 、 タ イ ミ ン グ パ ス を選択 し ます。 2. ツールバーま たはポ ッ プア ッ プ メ ニ ュ ーで [Schematic] を ク リ ッ ク する か、 F4 キーを押 し ます。 [Schematic] ビ ュ ーが開 き 、 選択 し たモジ ュ ールが表示 さ れます (図 22)。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 23 ロ ジ ッ ク の解析 X-Ref Target - Figure 22 図 22 : [Schematic] ビ ュ ー こ の後、 ピ ン、 イ ン ス タ ン ス、 階層モジ ュ ールを選択 し て、 ロ ジ ッ ク を展開で き ます。 タ イ ミ ング解析の実行 合成済みデザ イ ンの タ イ ミ ン グ解析は、 パ ス に イ ンプ リ メ ン テーシ ョ ン を効率的に実行す る ために必要な制約が設定 さ れてい る か ど う か を確認す る のに有益です。 Vivado 合成は タ イ ミ ン グ ド リ ブン であ り 、 設定 し た制約に基づいて 出力が調整 さ れます。 Pblock や LOC 制約の よ う な物理制約をデザ イ ンに割 り 当て てい く と 、 よ り 正確な タ イ ミ ン グ解析結果が得 ら れ る よ う にな り ますが、 こ れ ら の結果に含まれ る のはパ ス遅延の予測値です。 合成済みデザ イ ンでは、 予測 さ れ る 配線遅延 を使用 し て解析が実行 さ れます。 こ の時点で タ イ ミ ン グ解析を実行する と 、 パ ス が正 し く 制約 さ れてい る か、お よ び タ イ ミ ン グ パ ス の全体的な状況を 確認で き ます。 重要 : 実際の配線遅延が含まれ る のは、 配置配線後の タ イ ミ ン グ解析のみです。 合成済みデザ イ ンの タ イ ミ ン グ解析 は、 イ ンプ リ メ ン ト 済みデザ イ ンの タ イ ミ ン グ解析ほど正確ではあ り ません。 [Report Timing Summary] コ マ ン ド の使用 タ イ ミ ン グ解析を実行する には、 次のいずれかを実行 し ます。 • [Tools] → [Timing] → [Report Timing Summary] を ク リ ッ ク し ます。 • Flow Navigator で [Synthesis] → [Synthesized Design] → [Report Timing Summary] を ク リ ッ ク し ます。 図 23 に示す [Report Timing Summary] ダ イ ア ロ グ ボ ッ ク ス が開き ます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 24 ロ ジ ッ ク の解析 X-Ref Target - Figure 23 図 23 : [Report Timing Summary] ダ イ ア ログ ボ ッ ク ス 次の よ う にオプシ ョ ン を設定 し ます。 • [Results name] : レ ポー ト 結果の名前を指定 し ます。 • [Report] : [Path delay type] (パ ス遅延 タ イ プ) を [Max]、 [Min]、 ま たは [Min_Max] に設定 し 、 制約 さ れていないパ ス を レ ポー ト する かど う かを [Report unconstrained paths] チ ェ ッ ク ボ ッ ク ス で指定 し ます。 • [Path Limits] : こ のセ ク シ ョ ンでは、 次のオプシ ョ ン を設定 し ます。 • ° [Maximum number of paths per clock or path group] : ク ロ ッ ク ま たはパ ス グループご と に レ ポー ト す る パ ス の 最大数を指定 し ます。 ° [Maximum number of worst paths per endpoint] : エン ド ポ イ ン ト ご と にレ ポー ト する パ スの最大数を指定し ます。 [Command] : 現時点での report_timing コ マ ン ド を選択 さ れたオプシ ョ ン も 含めて表示 し ます。 ま た、 [Open in a new tab] チ ェ ッ ク ボ ッ ク ス で別の タ ブに表示す る かを指定 し ます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 25 XST ス ト ラ テ ジ XST ス ト ラ テ ジ Vivado Synthesis Defaults が推奨 さ れ る ス ト ラ テ ジです。 合成に XST を使用す る 場合は、 あ ら か じ め定義 さ れた XST ス ト ラ テジ を使用で き ます。 主要な XST ス ト ラ テジは、 次の 2 つです。 • PlanAhead Defaults : 再構築 さ れた階層ネ ッ ト リ ス ト を生成 し ます。 • XST Defaults : 階層の再構築を オ フ に し ます。 図 24 に、 [Strategies] ド ロ ッ プダ ウ ン リ ス ト に表示 さ れ る [XST 14] → [PlanAhead Defaults] お よ び [XST Defaults] を示 し ます。 X-Ref Target - Figure 24 図 24 : Vivado の XST ス ト ラ テ ジ XST オプシ ョ ンお よ びレ ポー ト の詳細は、 次の資料を参照 し て く だ さ い。 • 『PlanAhead ユーザー ガ イ ド 』 (UG632) [参照 9] • 『XST ユーザー ガ イ ド (Virtex-6、 Spartan-6、 7 シ リ ーズ デバ イ ス』 (UG687) [参照 10] 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 26 非プ ロ ジ ェ ク ト モー ド での合成 非プ ロ ジ ェ ク ト モー ド での合成 合成を実行す る 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 -help synth_design Description: Synthesize a design using Vivado Synthesis and open that design 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>] [-effort_level <arg>] [-rtl] [-no_iobuf] [-bufg <arg>] [-fanout_limit <arg>] [-fsm_extraction <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 [-effort_level] Synthesis effort level.Values: quick, med Default: med [-rtl] Elaborate and open an rtl design [-no_iobuf] Disable setting of I/O buffers [-bufg] Max number of global clock buffers used by synthesis.Default: 12 [-fanout_limit] Fanout limit Default: 100 [-fsm_extraction] FSM Extraction Encoding.Values: off, one_hot, sequential, johnson, gray, auto.Default: off [-quiet] Ignore command errors [-verbose] Suspend message limits during command execution 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 27 非プ ロ ジ ェ ク ト モー ド での合成 コ マ ン ド の詳細は、 『Rodin Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 4] を参照 し て く だ さ い。 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, report utilization and timing estimates, write design checkpoint synth_design -top bft -part xc7k70tfbg484-2 -flatten rebuilt write_checkpoint -force $outputDir/post_synth 制約の設定 表 1 に、 Vivado タ イ ミ ン グ制約にサポー ト さ れ る Tcl コ マン ド を示 し ます。 こ れ ら の コ マ ン ド の詳細は、 次の資料を参照 し て く だ さ い。 • 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 3] • 『Vivado Design Suite Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 4] 表 1 : サポー ト さ れる合成 Tcl コ マ ン ド コ マン ド タ イ プ タ イ ミ ン グ制約 オブ ジ ェ ク ト ア ク セス コ マン ド create_clock set_output_delay create_generate_clock set_max_delay set_false_path set_multicycle_path set_clock_latency set_clock_groups set_disable_timing all_clocks get_clocks all_inputs get_nets all_outputs get_pins 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com set_input_delay get_cells get_ports 28 付録 A 合成属性 概要 Vivado™ 合成では、 XST 合成属性の多 く を使用で き ます。 ほ と ん ど の場合、 こ れ ら の属性は同 じ 構文で、 同 じ 動作に な り ます。 • Vivado 合成で属性がサポー ト さ れ る 場合、 その属性が使用 さ れ、 その属性を反映 し た ロ ジ ッ ク が作成 さ れます。 • 指定 し た属性が ツールで認識 さ れない場合、 その属性 と 値は生成 さ れたネ ッ ト リ ス ト に渡 さ れます。 認識 さ れない属性は、 フ ロ ーのダ ウ ン ス ト リ ームで使用 さ れ る と 想定 さ れます。 た と えば、 LOC 制約は合成では使用 さ れませんが、 配置ツールで使用 さ れ る ので、 合成ツールか ら 転送 さ れます。 サポー ト さ れる属性 次のセ ク シ ョ ンに、 サポー ト さ れ る 属性を リ ス ト し ます。 BLACK_BOX BLACK_BOX 属性は、 すべての階層レベルを オ フ に し 、 合成でそのモジ ュ ールま たはエン テ ィ テ ィ に対 し てブ ラ ッ ク ボ ッ ク ス を作成で き る よ う にする デバ ッ グ用の属性です。 こ の属性を指定す る と 、 モジ ュ ールま たはエン テ ィ テ ィ に 対 し て有効な ロ ジ ッ ク があ っ た と し て も 、 合成ツールでその レベルに対 し てブ ラ ッ ク ボ ッ ク ス が作成 さ れます。 BLACK_BOX の Verilog 例 (* black_box *) module test(in1, in2, clk, out1); BLACK_BOX の VHDL 例 attribute black_box attribute black_box : string; of beh : architecture is "yes"; Verilog では、 値は必要あ り ません。 こ の属性があれば、 ブ ラ ッ ク ボ ッ ク ス が作成 さ れます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 29 サポー ト さ れる属性 BUFFER_TYPE BUFFER_TYPE は入力に設定 し 、 使用する バ ッ フ ァ ーの タ イ プを指定 し ます。 デフ ォル ト では、 ク ロ ッ ク には IBUF/BUFG ま たは BUFGP が、 入力には IBUF が使用 さ れます。 有効な値は次の と お り です。 • ibuf : IBUF/BUFG ペアに ク ロ ッ ク ポー ト が不要な場合に使用 し ます。 こ の場合にのみ、 ク ロ ッ ク に対 し て IBUF が推論 さ れます。 • none : 入力ま たは出力バ ッ フ ァ ーを使用 し ない よ う 指定 し ます。 ク ロ ッ ク ポー ト に none を指定す る と 、 バ ッ フ ァ ーは使用 さ れません。 注記 : XST では、 ibufg、 bufr、 bufgp、 お よ び bufg な ど の値 も サポー ト さ れます。 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 DONT_TOUCH 属性は、 KEEP ま たは KEEP_HIERARCHY と 同 じ よ う に機能 し ますが、 KEEP お よ び KEEP_HIERARCHY と は異な り 配置配線に フ ォ ワ ー ド ア ノ テー ト さ れ る ので、 ロ ジ ッ ク 最適化は実行 さ れません。 注記 : KEEP お よ び KEEP_HIERARCHY 属性を DONT_TOUCH に置換 し ます。 DONT_TOUCH の Verilog 例 (* dont_touch = "true" *) wire sig1; assign sig1 = in1 & in2; assign out1 = sig1 & 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; 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 30 サポー ト さ れる属性 FULL_CASE (Verilog のみ) FULL_CASE は、 可能性のあ る すべての case 値が case、 casex ま たは casez 文で指定 さ れ る こ と を示 し ます。 case 値が指定 さ れてい る 場合、 Vivado 合成で case 値に対 し て余分な ロ ジ ッ ク は作成 さ れません。 (* full_case case select 3’b100 : sig 3’b010 : sig 3’b001 : sig endcase *) = val1; = val2; = val3; 重要 : こ の属性は、 RTL でのみ制御で き ます。 GATED_CLOCK Vivado 合成では、ゲーテ ッ ド ク ロ ッ ク の変換が可能です。こ の変換を実行す る には、次の 2 つの方法を使用で き ます。 • 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_clk = "true" *) input clk; 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; 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 31 サポー ト さ れる属性 KEEP KEEP 属性は、 信号が削除 さ れた り ロ ジ ッ ク ブ ロ ッ ク に吸収 さ れ る よ う な最適化が実行 さ れない よ う に指定 し ます。 こ の属性が設定 さ れた信号は保持 さ れ、 ネ ッ ト リ ス ト に含まれ ます。 た と えば、 2 ビ ッ ト の AND ゲー ト の出力で別 の AND ゲー ト を駆動する 信号に KEEP 制約を設定する と 、 信号は両方の AND ゲー ト を含む よ り 大き い LUT には統 合 さ れません。 KEEP は、 タ イ ミ ン グ制約 と も よ く 併用 さ れます。 通常は最適化 さ れ る 信号に タ イ ミ ン グ制約が設定 さ れてい る 場合、 KEEP を設定す る と 最適化 さ れな く な り 、 正 し い タ イ ミ ン グ規則が使用 さ れます。 有効な値は、 次の と お り です。 • 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)); 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 32 サポー ト さ れる属性 KEEP_HIERARCHY の VHDL 例 モ ジ ュ ールの場合 attribute keep_hierarchy : string; attribute heep_hierarchy of beh : architecture is "yes"; イ ン ス タ ン スの場合 attribute keep_hierarchy : string; attribute keep_hierarchy of u0 : label is "yes"; MAX_FANOUT MAX_FANOUT は、 レ ジ ス タ お よ び信号の フ ァ ン ア ウ ト の制限を設定 し ます。 信号に KEEP 制約 も 設定す る 必要があ り ます。 こ れは、 RTL ま たはプ ロ ジ ェ ク ト への入力 と し て指定で き ます。 整数値を指定 し ます。 • こ の属性を RTL で指定 し た場合はハー ド リ ミ ッ ト にな り ます。 • プ ロ ジ ェ ク ト で指定 し た場合は ソ フ ト リ ミ ッ ト にな り ます。 ソ フ ト リ ミ ッ ト の場合、 ツールは制限に従 う よ う 試みますが、 無視 し た方が結果が良 く な る 場合は無視 し ます。 こ の属性は、 レ ジ ス タ お よ び組み合わせ信号にのみ使用で き ます。 フ ァ ン ア ウ ト の制限に従 う ため、 レ ジ ス タ ま たは組み合わせ信号を駆動する 信号が複製 さ れます。 注記 : 入力お よ びブ ラ ッ ク ボ ッ ク スは、 現在の と こ ろサポー ト さ れません。 MAX_FANOUT の Verilog 例 Vivado の場合 (* keep = "true", max_fanout = 50 *) reg sig1; XST の場合 (* 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 合成では整数です。 ° VHDL XST では文字列です。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 33 サポー ト さ れる属性 PARALLEL_CASE (Verilog のみ) PARALLEL_CASE は、 case 文がパ ラ レル構文で構築 さ れ る 必要のあ る こ と を示 し ます。 ロ ジ ッ ク は if-elsif 構文 では作成 さ れません。 (* parallel_case *) 3’b100 : sig = val1; 3’b010 : sig = val2; 3’b001 : sig = val3; endcase case select 重要 : こ の制約は、 Verilog RTL でのみ制御で き ます。 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"; 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"; TRANSLATE_OFF/TRANSLATE_ON TRANSLATE_OFF お よ び TRANSLATE_ON は、 合成で コ ー ド のブ ロ ッ ク を無視す る よ う 指定 し ます。 こ れ ら の属性は、 RTL の コ メ ン ト 内で指定 し ます。 コ メ ン ト は、 次のいずれかのキー ワー ド で開始 し ます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 34 サポー ト さ れる属性 • synthesis • synopsys • pragma translate_off で無視が開始 さ れ、 translate_on で終了 し ます。 こ れ ら の コ マ ン ド はネ ス ト 化で き ません。 TRANSLATE_OFF/TRANSLATE_ON の Verilog 例 // synthesis translate_off Code.... // synthesis translate_on TRANSLATE_OFF/TRANSLATE_ON の VHDL 例 -- synthesis translate_off Code... -- synthesis translate_on 注意 : translate 文の間に含め る コ ー ド の種類には、 注意が必要です。 デザ イ ンの動作に影響す る コ ー ド の場合、 シ ミ ュ レー タ で使用 さ れ、 シ ミ ュ レーシ ョ ンで不一致が発生する こ と があ り ます。 USE_DSP48 USE_DSP48 は、 合成の演算構造を ど の よ う に処理す る か を指定 し ます。 デフ ォ ル ト では、 乗算器、 乗加算器、 乗減 算器、 乗累算器 タ イ プの構造が DSP48 ブ ロ ッ ク に含ま れ ます。 加算器、 減算器、 ア キ ュ ム レー タ も こ れ ら のブ ロ ッ ク に含め る こ と はで き ま すが、 デフ ォ ル ト では DSP48 ブ ロ ッ ク ではな く フ ァ ブ リ ッ ク に イ ン プ リ メ ン ト さ れ ます。 USE_DSP48 制約を使用する と 、 こ のデフ ォル ト 動作が変更 さ れ、 こ れ ら の構造が DSP48 ブ ロ ッ ク に含まれ る よ う に な り ます。 有効な値は、 yes お よ び no です。 こ の属性は、 RTL の信号、 アーキテ ク チ ャ お よ びコ ン ポーネ ン ト 、 エン テ ィ テ ィ お よ びモジ ュ ールに指定で き ます。 優先順位は次の と お り です。 1. 信号 2. アーキテ ク チ ャ お よ びコ ンポーネ ン ト 3. モジ ュ ールお よ びエン テ ィ テ ィ こ の属性を指定 し ない場合は、 Vivado 合成で最適な動作が決定 さ れます。 USE_DSP48 の Verilog 例 (* use_dsp48 = "yes" *) module test(clk, in1, in2, out1); USE_DSP48 の VHDL 例 attribute use_dsp48 : string attribute use_dsp48 of P_reg : signal is "no" 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 35 付録 B SystemVerilog サポー ト 概要 Vivado™ 合成では、 次のセ ク シ ョ ンで説明する 、 合成可能な SystemVerilog RTL の一部がサポー ト さ れます。 特定の フ ァ イルで SystemVerilog を使用 デフ ォル ト では、 *.v フ ァ イ ルは Verilog 2001 構文で、 *.sv フ ァ イ ルは SystemVerilog 構文で コ ンパ イ ル さ れます。 Vivado IDE で特定の *.v フ ァ イ ルに SystemVerilog を使用する には、 次の手順に従い ます。 1. フ ァ イ ルを右 ク リ ッ ク し 、 [Source Node Properties] を ク リ ッ ク し ます。 2. [Source Node Properties] ビ ュ ーで、[Type] を [Verilog] か ら [SystemVerilog] に変更 し し 、[Apply] を ク リ ッ ク し ます。 ま たは、 [Tcl Console] ビ ュ ーで次の Tcl コ マン ド を使用 し ます。 set_property file_type SystemVerilog [get_files <filename>.v] 次のセ ク シ ョ ンで、 Vivado IDE でサポー ト さ れ る SystemVerilog のデー タ 型を説明 し ます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 36 デー タ 型 デー タ 型 次のデー タ 型 と その制御方法がサポー ト さ れてい ます。 宣言 RTL の変数は次の よ う に宣言 し ます。 [var] [DataType] name; 説明 : ° var はオプシ ョ ンで、 宣言文にない場合は自動的に推測 さ れます。 ° DataType は次のいずれかにな り ます。 - integer_vector_type : bit、 logic、 ま たは reg - integer_atom_type : byte、 shortint、 int、 longint、 integer、 ま たは time - non_integer_type : shortreal、 real、 ま たは realtime - struct - enum 整数デー タ 型 SystemVerilog では、 次の整数型がサポー ト さ れます。 • shortint : 2 値の 16 ビ ッ ト 符号付 き 整数 • int : 2 値の 32 ビ ッ ト 符号付 き 整数 • longint : 2 値の 64 ビ ッ ト 符号付き 整数 • byte : 2 値の 8 ビ ッ ト 符号付き 整数 • bit : 2 値のユーザー定義のベ ク タ ー サ イ ズ • logic : 4 値のユーザー定義のベ ク タ ー サ イ ズ • reg : 4 値のユーザー定義のベ ク タ ー サ イ ズ • integer : 4 値の 32 ビ ッ ト 符号付き 整数 • time : 4 値の 64 ビ ッ ト 符号な し 整数 4 値お よ び 2 値 と は、 こ れ ら のデー タ 型に割 り 当て る こ と ので き る 値を示 し てい ます。 • 2 値の場合は 0 お よ び 1 を使用で き ます。 • 4 値の場合は X と Z も 使用で き ます。 X と Z 値は常に合成で き る わけではないので、 2 値 と 4 値は同 じ よ う に合成 さ れます。 注意 : 4 値の変数を使用する場合、RTL と シ ミ ュ レーシ ョ ンの不一致が発生する可能性があ る ので、注意し て く だ さ い。 • デフ ォル ト では、byte、shortint、int、integer、お よ び longint のデー タ 型は符号付き の値にな り ます。 • bit、 reg、 お よ び logic は符号な し の値にな り ます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 37 デー タ 型 実数 合成で実数がサポー ト さ れますが、ビヘ イ ビ アーには使用で き ず、パ ラ メ ー ター値 と し て使用で き ます。SystemVerilog では、 次の実数型がサポー ト さ れます。 • real • shortreal • realtime Void デー タ 型 void デー タ 型は、 戻 り 値のない関数でのみサポー ト さ れます。 ユーザー定義型 Vivado 合成では、 typedef キーワ ー ド を使用 し てユーザーが定義 し たデー タ 型がサポー ト さ れます。 次の構文を使 用 し ます。 typedef data_type type_identifier {size}; ま たは typedef [enum, struct, union] type_identifier; 列挙型 列挙型は、 次の構文で宣言で き ます。 enum [type] {enum_name1, enum_name2...enum_namex} identifier デー タ 型を指定 し ない場合は、 デフ ォル ト で int にな り ます。 次に例を示 し ます。 enum {sun, mon, tues, wed, thurs, fri, sat} day_of_week; こ の コ ー ド では、 7 つの値を含む int の enum が生成 さ れ ます。 こ れ ら の名前には 0 か ら 開始す る 値が割 り 当て ら れ、 sun = 0 お よ び sat = 6 と な り ます。 デフ ォル ト 値を変更する には、 次の例の よ う な コ ー ド を使用 し ます。 enum {sun=1, mon, tues, wed, thurs, fri, sat} day_of week; こ の場合、 sun の値は 1 で sat の値は 7 にな り ます。 次の例は、 デフ ォル ト 値を変更する 別の方法を示 し ます。 enum {sun, mon=3, tues, wed, thurs=10, fri=12, sat} day_of_week; こ の場合、 sun=0、 mon=3、 tues=4、 wed=5、 thurs=10、 fri=12、 お よ び sat=13 にな り ます。 列挙型は、 typedef キーワ ー ド で も 使用で き ます。 typedef enum {sun,mon,tues,wed,thurs,fri,sat} day_of_week; day_of_week my_day; こ の例では、 day_of_week と い う デー タ 型の my_day と い う 信号を定義 し てい ます。 enum の範囲を指定す る こ と も で き ます。 た と えば、 上記の例の場合は次の よ う に指定で き ます。 enum {day[7]} day_of_week; 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 38 デー タ 型 こ れに よ り 、 day0、 day1…day6 と い う N-1 個の要素を含む day_of_week と い う 列挙型が作成 さ れます。 次は、 こ れを別の方法で使用 し た例です。 enum {day[1:7]} day_of_week; // creates day1,day2...day7 enum {day[7] = 5} day_of_week; //creates day0=5, day1=6... day6=11 定数 SystemVerilog には、 次の 3 種類のエ ラ ボ レーシ ョ ン時間定数があ り ます。 • parameter : Verilog 規格 と 同 じ で、 同様に使用で き ます。 • localparam : parameter と 似てい ますが、 上位モジ ュ ールの も の よ り も 優先 さ れます。 • specparam : 遅延 と タ イ ミ ン グ値を指定する ために使用 さ れますが、 Vivado 合成ではサポー ト さ れません。 const と い う ラ ン タ イ ム定数宣言 も あ り ます。 型演算子 型演算子を使用する と 、 パ ラ メ ー タ ーをデー タ 型 と し て指定で き 、 モジ ュ ールの異な る イ ン ス タ ン ス に異な る デー タ 型のパ ラ メ ー タ ーを設定で き ます。 キ ャ ス ト 演算子 SystemVerilog では、 あ る デー タ 型の値を別のデー タ 型の値に割 り 当て る こ と はで き ませんが、 キ ャ ス ト 演算子 (’) を 使用する と 可能にな り ます。 キ ャ ス ト 演算子を使用する と 、 デー タ 型を変換で き ます。 次の よ う に使用 し ます。 casting_type’(expression) casting_type は次のいずれかにな り ます。 ° integer_type ° non_integer_type ° real_type ° 符号な し の定数値 ° ユーザーが作成 し た符号付き 値型 複合デー タ 型 複合デー タ 型には、 構造体 (struct) と 共用体 (union) があ り ます。 次に こ れ ら について説明 し ます。 構造体 (struct) 構造体 と は、 異な る デー タ 型の値を 1 つに ま と めて格納 し 、 参照で き る よ う に し た も のです。 各要素は メ ンバー と 呼 ばれます。 こ れは、 VHDL の レ コ ー ド 型 と 類似 し てい ます。 構造体の構文は次の よ う にな り ます。 struct {struct_member1; struct_member2;...struct_memberx;} structure_name; 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 39 プ ロ セス 共用体 (union) 共用体は、 複数のデー タ 型を含むデー タ 型ですが、 その う ち 1 つのみが使用 さ れます。 こ れは、 デー タ 型が使用方法 に よ っ て変化する 場合な ど に便利な方法です。 次に例を示 し ます。 typedef union {int i; logic [7:0] j} my_union; my_union sig1; my_union sig2; sig1.i = 32; //sig1 will get the int format sig2.j = 8’b00001111; //sig2 will get the 8bit logic format. パ ッ ク 配列 と ア ンパ ッ ク配列 Vivado 合成では、 パ ッ ク 配列 と ア ンパ ッ ク 配列の ど ち ら も サポー ト さ れます。 logic [5:0] sig1; //packed array logic sig2 [5:0]; //unpacked array 幅が決ま っ てい る デー タ 型では、 パ ッ ク さ れ る 次元を宣言する 必要はあ り ません。 integer sig3; //equivalent to logic signed [31:0] sig3 プ ロ セス always プ ロ シージ ャ always プ ロ シージ ャ には、 次の 4 つがあ り ます。 • always • always_comb • always_latch • always_ff always_comb プ ロ シージ ャ は、 組み合わせ ロ ジ ッ ク を記述 し ます。 セン シテ ィ ビ テ ィ リ ス ト は、 always_comb 文 を駆動する ロ ジ ッ ク に よ り 推論 さ れます。 always 文では、 ユーザーがセ ン シテ ィ ビ テ ィ リ ス ト を指定す る 必要があ り ます。 次の例では、 in1 お よ び in2 セ ン シテ ィ ビ テ ィ リ ス ト が使用 さ れます。 always@(in1 or in2) out1 = in1 & in2; always_comb out1 = in1 & in2; always_latch プ ロ シージ ャ では、 ラ ッ チをすばや く 作成で き ます。 always_comb と 同様、 セ ン シテ ィ ビ テ ィ リ ス ト は推論 さ れますが、 次の例に示す よ う に ラ ッ チ イ ネーブルの制御信号を指定す る 必要があ り ます。 always_latch if(gate_en) q <= d; always_ff プ ロ シージ ャ では、 フ リ ッ プ フ ロ ッ プが作成 さ れます。 always と 同様、 ユーザーがセン シテ ィ ビ テ ィ リ ス ト を指定する 必要があ り ます。 always_ff@(posedge clk) out1 <= in1; 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 40 プ ロ セス ブロ ッ ク文 ブ ロ ッ ク 文は、 複数の文を グループ化 し ます。 シーケ ン シ ャ ル ブ ロ ッ ク の場合は、 文が begin と end で囲ま れ ま す。 ブ ロ ッ ク では、 そのブ ロ ッ ク 特有の変数を宣言で き ます。 シーケ ン シ ャ ル ブ ロ ッ ク には、 そのブ ロ ッ ク に関連 し た名前を付け る こ と も で き ます。 フ ォーマ ッ ト は次の と お り です。 begin [: block name] [declarations] [statements] end [: block name] begin : my_block logic temp; temp = in1 & in2; out1 = temp; end : my_block 上記の例では、 ブ ロ ッ ク 名が end の後に も 指定 さ れてい ますが、 こ れは コ ー ド を読みやす く す る ためで、 必須では あ り ません。 注記 : パ ラ レル ブ ロ ッ ク (fork-join ブ ロ ッ ク ) は Vivado 合成ではサポー ト さ れません。 手続き タ イ ミ ング制御 SystemVerilogでは、 次の 2 種類の タ イ ミ ン グ制御がサポー ト さ れます。 • 遅延制御 : 文 と それが実行 さ れ る ま での時間を指定 し ます。 こ れを合成に使用す る 利点はないので、 Vivado 合成 では、 代入する ロ ジ ッ ク は作成 さ れますが、 タ イ ム文は無視 さ れます。 • イ ベン ト 制御 : always@(posedge clk) な ど、 指定 し た イ ベン ト が発生 し た と き に代入が実行 さ れ る よ う に し ます。 こ れは Verilog の規格ですが、 SystemVerilog では機能が追加 さ れてい ます。 論理 or 演算子を使用す る と 、 任意の数の イ ベン ト を指定で き 、 いずれかの イ ベン ト で文の実行を ト リ ガーで き ます。 こ れには、セン シテ ィ ビ テ ィ リ ス ト で イ ベン ト を or ま たはカ ンマで区切 り ます。た と えば、次の 2 つの文は同 じ です。 always@(a or b or c) always@(a,b,c) SystemVerilog では、 event_expression @* も サポー ト さ れ る ので、 セ ン シテ ィ ビ テ ィ リ ス ト の問題に よ る シ ミ ュ レーシ ョ ンでの不一致を回避で き ます。 次に例を示 し ます。 Logic always@* begin 演算子 Vivado 合成では、 次の SystemVerilog の演算子がサポー ト さ れます。 • 代入演算子 (=、 +=、 -=、 *=、 /=、 %=、 &=、 |=、 ^=、 <<=、 >>=、 <<<=、 >>>=) • 単項演算子 (+、 -、 !、 ~、 &、 ~&、 |、 ~|、 ^、 ~^、 ^~) • イ ン ク リ メ ン ト /デ ク リ メ ン ト 演算子 (++、 --) • 2 項演算子 (+、-、*、/、%、==、~=、===、~==、&&、||、**、< 、<=、>、>=、&、|、^、^~、~^、>>、<<、>>>、<<<) 注記 : A**B は、 A が 2 のべ き 乗であ る か、 B が定数の場合にサポー ト さ れます。 • 条件演算子 ( ? :) • 連結演算子 ({…}) 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 41 手続き プ ログ ラ ム代入文 符号付き演算式 Vivado 合成では、 符号付 き 演算 と 符号な し 演算の ど ち ら も サポー ト さ れます。 信号は、 符号あ り と な し の ど ち ら にで も 宣言で き ます。 次に例を示 し ます。 logic [5:0] reg1; logic signed [5:0] reg2; 手続き プ ロ グ ラ ム代入文 if-else 条件文 if-else 条件文の構文は、 次の よ う にな り ます。 if (expression) command1; else command2; else 文はオプシ ョ ンで、 ク ロ ッ ク 文の有無に よ っ て ラ ッ チ ま たはフ リ ッ プ フ ロ ッ プが想定 さ れます。 次の よ う な複 数の if お よ び else 文 も サポー ト さ れます。 If (expression1) Command1; else if (expression2) command2; else if (expression3) command3; else command4; こ の コ ー ド は、 priority if 文 と し て合成 さ れ、 最初の条件文が true であ る 場合、 その他の条件文は評価 さ れません。 Vivado 合成では、 unique if-else 文は parallel_case と し て、 priority if-else 文は full_case と し て処理 さ れます。 case 文 case 文の構文は、 次の よ う にな り ます。 case (expression) value1: statement1; value2: statement2; value3: statement3; default: statement4; endcase case 文内の default 文はオプシ ョ ン です。 値は順番に評価 さ れ る ので、 value1 と value3 の両方が true の場 合、 statement1 が実行 さ れます。 case 文のほかに casex 文お よ び casez 文があ り ます。 casex では ド ン ト ケ ア を、 casez では ト ラ イ ス テー ト 条件 を処理で き ます。 Vivado 合成では、 unique case 文は parallel_case と し て、 priority case 文は full_case と し て処理 さ れます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 42 タ ス ク および関数 ループ文 Vivado 合成お よ び SystemVerilog では、 数種のループ文がサポー ト さ れます。 最 も よ く 使用 さ れ る のは for ループ文 です。 構文は次の と お り です。 for (initialization; expression; step) statement; for 文では、 まず初期化が実行 さ れてか ら 、 条件式が評価 さ れます。 結果が 0 の場合は停止 し 、 1 の場合は文の実行 が続行 さ れます。 文の実行が終了 し た ら 、 ス テ ッ プ関数が実行 さ れます。 • repeat ループ文では、 指定 し た回数分だけ関数が繰 り 返 し 実行 さ れます。 構文は次の と お り です。 repeat (expression) statement; 条件式を あ る 値に対 し て評価 し 、 文を その回数だけ実行 し ます。 • for-each ループ文では、 配列内の各エ レ メ ン ト に対 し て文が実行 さ れます。 • while ループ文では、 演算式が false にな る ま でその文が実行 さ れます。 • do-while ループ文は while ループ文 と 同 じ ですが、 文の後に条件式が評価 さ れ る 点が異な り ます。 • forever ループはずっ と 実行 さ れ続け ます。 無限ループにな ら ない よ う にす る ため、 ループを脱出す る ための break 文 と 共に使用 し て く だ さ い。 タ ス ク お よび関数 タスク タ ス ク 宣言の構文は、 次の と お り です。 task name (ports); [optional declarations]; statements; endtask タ ス ク には、 次の 2 種類があ り ます。 • ス タ テ ィ ッ ク タ ス ク : 宣言文に、 次に タ ス ク が呼び出 さ れた と き に前の値が保持 さ れます。 • 自動 タ ス ク : 宣言文には前の値は保持 さ れません。 注意 : Vivado 合成ではすべての タ ス ク が自動 タ ス ク と し て処理 さ れ る ので、 タ ス ク を使用す る 際は注意が必要です。 多 く のシ ミ ュ レー タ では、 ス タ テ ィ ッ ク か自動か を指定 し ない場合のデフ ォ ル ト が ス タ テ ィ ッ ク タ ス ク なので、 シ ミ ュ レーシ ョ ンで不一致が発生する 可能性があ り ます。 タ ス ク を自動ま たは ス タ テ ィ ッ ク に指定す る 方法は、 次の と お り です。 task automatic my_mult...//or task static my_mult ... 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 43 モ ジ ュ ールおよび階層 関数 (自動またはス タ テ ィ ッ ク) 関数は タ ス ク と 類似 し てい ますが、 値が返 さ れ る 点が異な り ます。 関数の構文は、 次の と お り です。 function data_type function_name(inputs); declarations; statements; endfunction : function_name 最後の function_name はオプシ ョ ンですが、こ の方が コ ー ド が読みやす く な り ます。関数は値を返すので、return 文を使用する か、 文で特定 し てお く 必要があ り ます。 function_name = .... タ ス ク と 同様、 関数 も 自動ま たはス タ テ ィ ッ ク にで き ます。 Vivado 合成ではすべての関数が自動 と し て処理 さ れます が、 シ ミ ュ レー タ に よ っ ては動作が異な り ます。 関数を使用する 場合は注意が必要です。 モ ジ ュ ールお よび階層 SystemVerilog のモジ ュ ールは Verilog と 似てい ますが、 次のセ ク シ ョ ンで説明す る よ う に さ ら に機能が追加 さ れてい ます。 モ ジ ュ ールの接続 モジ ュ ールの イ ン ス タ ン シエー ト お よ び接続には、 主に 3 つの方法があ り ますが、 最初の 2 つ (順序付 き リ ス ト お よ び名前に よ る 方法) は Verilog と 同 じ です。 3 つ目はポー ト 名に よ る 方法です。 モジ ュ ールのポー ト 名が イ ン ス タ ン シエー ト モジ ュ ールの信号 と 名前お よ び タ イ プが同 じ 場合、下位モジ ュ ールを名 前で接続で き ます。 次に例を示 し ます。 module lower ( output [4:0] myout; input clk; input my_in; input [1:0] my_in2; ...... endmodule //in the instantiating level. lower my_inst (.myout, .clk, .my_in, .my_in2); ワ イル ド カ ー ド ポー ト を使用 し たモ ジ ュ ールの接続 ワ イ ル ド カー ド を使用 し てモジ ュ ールを接続する こ と も で き ます。 た と えば、 上記の例は次の よ う にな り ます。 // in the instantiating module lower my_inst (.*); 上位モジ ュ ールの名前 と タ イ プが正 し ければ、 イ ン ス タ ン ス全体が接続 さ れます。 ま た、 こ れ ら を混合 し て使用で き ます。 次に例を示 し ます。 lower my_inst (.myout(my_sig), .my_in(din), .*); こ の例では、 myout ポー ト が my_sig 信号に、 my_in ポー ト が din 信号に、 clk お よ び my_in2 が clk お よ び my_in2 信号に接続 さ れます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 44 イン ターフ ェ イス イ ン ターフ ェ イス イ ン タ ーフ ェ イ ス は、 ブ ロ ッ ク 間の通信を指定す る ために使用 し ます。 イ ン ターフ ェ イ ス と は、 モジ ュ ール間の接続 を記述 し やす く する 目的で ま と め ら れたネ ッ ト お よ び変数のグループです。 基本的な イ ン タ ーフ ェ イ ス の構文は、 次の と お り です。 interface interface_name; parameters and ports; items; endinterface : interface_name 最後の interface_name はオプシ ョ ンで、 コ ー ド を読みやす く す る 目的で追加 さ れてい ます。 次に例を示 し ます。 module bottom1 ( input clk, input [9:0] d1,d2, input s1, input [9:0] result, output logic sel, output logic [9:0] data1, data2, output logic equal); //logic// endmodule module bottom2 ( input clk, input sel, input [9:0] data1, data2, output logic [9:0] result); //logic// endmodule module top ( input clk, input s1, input [9:0] d1, d2, output equal); logic [9:0] data1, data2, result; logic sel; bottom1 u0 (clk, d1, d2, s1, result, sel, data1, data2, equal); bottom2 u1 (clk, sel, data1, data2, result); endmodule 上記の コ ー ド では、 共通す る 信号を持つ 2 つの下位モジ ュ ールが イ ン ス タ ン シエー ト さ れてい ます。 こ れ ら の共通信 号はすべて イ ン タ ーフ ェ イ ス を使用 し て指定で き ます。 interface my_int logic sel; logic [9:0] data1, data2, result; endinterface : my_int 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 45 イン ターフ ェ イス こ れで 2 つの bottom モジ ュ ールを次の よ う に変更で き ます。 module bottom1 ( my_int int1, input clk, input [9:0] d1, d2, input s1, output logic equal); および module bottom2 ( my_int int1, input clk); こ れ ら のモジ ュ ール内では、 sel、 data1、 data2、 result へのア ク セ ス方法を変更す る こ と も で き ます。 こ れは、 モジ ュ ールの視点か ら は、 こ れ ら の名前のポー ト が存在 し ないか ら です。 その代わ り に、 my_int と い う 名前のポー ト があ り ます。 こ れには、 次の変更を加え る 必要があ り ます。 if (sel) result <= data1; 上記を次の よ う に変更 し ます。 if (int1.sel) int1.result <= int1.data1; 最後に、 最上位にその イ ン タ ーフ ェ イ ス を イ ン ス タ ン シエー ト す る 必要があ り ます。 こ れで、 イ ン ス タ ン ス でその イ ン タ ーフ ェ イ ス が参照 さ れます。 module top( input clk, input s1, input [9:0] d1, d2, output equal); my_int int3(); //instantiation bottom1 u0 (int2, clk, d1, d2, s1, equal); bottom2 u1 (int2, clk); endmodule 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 46 イン ターフ ェ イス modport キーワー ド 上記の例では、 イ ン タ ーフ ェ イ ス内の信号が入力ま たは出力 と し て記述 さ れな く な っ てい ます。 イ ン タ ーフ ェ イ ス が 追加 さ れ る 前は、 sel ポー ト が bottom1 の出力お よ び bottom2 の入力で し た。 イ ン タ ーフ ェ イ ス が追加 さ れ る と 、 それが明確ではな く な り ま す。 実際、 Vivado 合成エ ン ジ ン では こ れ ら が双方向 ポー ト と 考慮 さ れ る よ う にな っ た こ と に対 し て警告 メ ッ セージは表示 さ れず、 階層を使用 し て生成 さ れたネ ッ ト リ ス ト では こ れ ら が入出力 と し て定義 さ れます。 こ れは、 生成 さ れた ロ ジ ッ ク の観点か ら は問題ではあ り ませんが、 混乱 の原因 と な り ます。 方向を指定する には、 次の コ ー ド 例に示す よ う に modport キーワ ー ド を使用 し ます。 interface my_int; logic sel; logic [9:0] data1, data2, result; modport b1 (input result, output sel, data1, data2); modport b2 (input sel, data1, data2, output result); endinterface : my_int こ の後、 bottom モジ ュ ールの宣言に次を使用 し ます。 module bottom1 ( my_int.b1 int1, こ れで、 入力 と 出力が正 し く 関連付け ら れます。 その他のイ ン タ ー フ ェ イ ス機能 イ ン タ ーフ ェ イ ス には、 信号だけでな く 、 タ ス ク お よび関数 も 含め る こ と がで き 、 その イ ン タ ーフ ェ イ ス に特有の タ ス ク を作成で き ます。 イ ン タ ーフ ェ イ ス のパ ラ メ ー タ ー も 指定で き ます。前述の例の場合、 data1 お よび data2 は両方 と も 10 ビ ッ ト のベ ク タ ーですが、 パ ラ メ ー タ ーを設定する こ と に よ り 任意のサ イ ズに変更で き ます。 package 文 package 文を使用す る と 、 さ ま ざ ま な コ ン ス ト ラ ク ト を共有で き ます。 こ れは、 VHDL のパ ッ ケージ文 と 同 じ よ う に 動作 し ます。 package 文には、 関数、 タ ス ク 、 デー タ 型、 列挙型な ど を含め る こ と がで き ます。 package 文の構文は、 次の と お り です。 package package_name; items endpackage : package_name 最後の package_name は、 コ ー ド を読みやす く す る ためで、 必須ではあ り ません。 パ ッ ケージは、 ほかのモジ ュ ールで import コ マ ン ド を使用 し て参照 さ れます。 構文は次の と お り です。 import package_name::item or *; import コ マン ド では、 イ ン ポー ト す る パ ッ ケージか ら のア イ テ ム を指定す る か、 パ ッ ケージ全体を指定す る 必要が あ り ます。 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 47 付録 C その他の リ ソ ース ザイ リ ン ク ス リ ソ ース ア ンサー、 資料、 ダ ウ ン ロ ー ド 、 フ ォー ラ ム な ど のサポー ト リ ソ ースは、 次のザ イ リ ン ク ス サポー ト サ イ ト を参照 し て く だ さ い。 http://japan.xilinx.com/support ザ イ リ ン ク ス資料で使用 さ れ る 用語集は、 次を参照 し て く だ さ い。 http://japan.xilinx.com/company/terms.htm ソ リ ュ ーシ ョ ン セ ン タ ー デバ イ ス、 ツール、 IP のサポー ト については、 ザ イ リ ン ク ス ソ リ ュ ーシ ョ ン セ ン タ ーを参照 し て く だ さ い。 ト ピ ッ ク には、 デザ イ ン ア シ ス タ ン ス、 ア ド バ イ ザ リ 、 ト ラ ブルシ ュ ー ト ヒ ン ト な ど が含まれます。 Vivado 資料 Vivado™ Design Suite 2012.2 資料ページ http://japan.xilinx.com/support/documentation/dt_vivado_vivado2012-2.htm 1. 『ザ イ リ ン ク ス デザ イ ン ツール : リ リ ース ノ ー ト ガ イ ド 』 (UG631) 2. 『ザ イ リ ン ク ス デザ イ ン ツール : イ ン ス ト ールお よ び ラ イ セ ン ス ガ イ ド 』 (UG798) 3. 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) 4. 『Vivado Design Suite Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) 5. 『Vivado Design Suite ユーザー ガ イ ド : Tcl ス ク リ プ ト 機能の使用』 (UG894) 6. 『Vivado Design Suite ユーザー ガ イ ド : イ ンプ リ メ ン テーシ ョ ン』 (UG904) 7. 『Vivado Design Suite 移行手法ガ イ ド 』 (UG912) 8. 『Vivado Design Suite ユーザー ガ イ ド : デザ イ ン フ ロ ーの概要』 (UG892) 9. 『PlanAhead ユーザー ガ イ ド 』 (UG632) 10. 『XST ユーザー ガ イ ド (Virtex-6、 Spartan-6、 7 シ リ ーズ デバ イ ス』 (UG687) 合成 UG901 (v2012.2) 2012 年 7 月 25 日 japan.xilinx.com 48
© Copyright 2024 Paperzz