Vivado Design Suite ユーザー ガ イ ド ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 本資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資 料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情 報につきましては、必ず最新英語版をご参照ください。 改訂履歴 次の表に、 こ の文書の改訂履歴を示 し ます。 日付 バージ ョ ン 改訂内容 2015 年 6 月 24 日 2015.2 第 2 章 「シ ミ ュ レーシ ョ ンの準備」 ° 「Verilog UNIFAST ラ イ ブ ラ リ の使用」 を ア ッ プデー ト 第 7 章 「バ ッ チ ま たは ス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用」 ° 「xelab コ マ ン ド 構文オプシ ョ ン」 を新 し く 追加、 「xelab、 xvhd、 xvlog コ マ ン ド オプ シ ョ ン」 の表を ア ッ プデー ト 第 8 章 「サー ド パーテ ィ シ ミ ュ レー タ の使用」 ° 「シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ の コ ンパ イ ル」 を ア ッ プデー ト ° 「シ ミ ュ レー タ 別の run デ ィ レ ク ト リ の生成」 セ ク シ ョ ン を追加 全体的な変更 ° 2015.2 リ リ ース での機能変更に合わせて図を ア ッ プデー ト 、一部の図を見やす く 変更 2015 年 4 月 1 日 2015.1 第 1 章 「 ロ ジ ッ ク シ ミ ュ レーシ ョ ンの概要」 ° サポー ト さ れ る シ ミ ュ レー タ の リ ス ト に Aldec Active-HDL お よ び Rivera-PRO を追加 第 2 章 「シ ミ ュ レーシ ョ ンの準備」 「GTXE2_CHANNEL/GTXE2_COMMON」 セ ク シ ョ ンに、 ° 「UNIFAST ラ イ ブ ラ リ 」 UNIFAST モデルを使用す る 際の DRP プ ロ ダ ク シ ョ ン リ セ ッ ト シーケ ン ス をバ イ パ スす る 注記を追加 第 3 章 「Vivado シ ミ ュ レー タ について」 ° 「[Objects] ビ ュ ー」 に新 し い右 ク リ ッ ク のオプシ ョ ンの詳細を追加 第 5 章 「Vivado シ ミ ュ レー タ を使用 し たデザ イ ンのデバ ッ グ」 ° 新 し いセ ク シ ョ ン 「[Objects] ビ ュ ー、 波形ビ ュ ー、 テ キ ス ト エデ ィ タ ーでの信号の ク ロ ス プ ロ ーブ」 を追加 第 7 章 「バ ッ チ ま たは ス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用」 ° 新 し く 「xelab コ マ ン ド 構文オプシ ョ ン」 を追加 : °-Oenable_pass_through_elimination、 °-Odisable_pass_through_elimination、 -Oenable_always_combine、 °-Odisable_always_combine 第 8 章 「サー ド パーテ ィ シ ミ ュ レー タ の使用」 ° サポー ト さ れ る サー ド パーテ ィ シ ミ ュ レー タ の リ ス ト に Riviera PRO シ ミ ュ レー タ (Aldec) を追加 付録 D 「Vivado シ ミ ュ レー タ でサポー ト さ れ る SystemVerilog コ ン ス ト ラ ク ト 」 ° 表 D-1、 合成可能なSystemVerilog 1800-2009 セ ッ ト に新 し く サポー ト さ れ る コ ン ス ト ラ ク ト に関す る 注記を追加 表 D-2、 サポー ト さ れ る ダ イ ナ ミ ッ ク タ イ プの コ ン ス ト ラ ク ト : 早期ア ク セ ス を追加 ° 付録 E 「Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ロ グ ラ ミ ン グ イ ン タ ーフ ェ イ ス (DPI)」 ° 表 E-2、 C お よ び SystemVerilog バ ウ ン ダ リ で使用可能なデー タ 型を ア ッ プデー ト 全体的な変更 ° デザ イ ン フ ロ ー構造を反映 さ れ る ために本書の内容を並び替え内容を拡張 ° 2015.1 リ リ ース での機能変更に合わせて図を ア ッ プデー ト 、一部の図を見やす く 変更 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 2 目次 第 1 章 : ロ ジ ッ ク シ ミ ュ レーシ ョ ンの概要 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . シ ミ ュ レーシ ョ ン フ ロ ー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . サポー ト さ れ る シ ミ ュ レー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 言語お よ び暗号化サポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OS サポー ト お よ び リ リ ース の変更点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 9 9 9 第 2 章 : シ ミ ュ レーシ ョ ンの準備 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . テ ス ト ベンチお よ びス テ ィ ミ ュ ラ ス フ ァ イ ルの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . シ ミ ュ レーシ ョ ン ソ ース フ ァ イ ルの追加ま たは作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ザ イ リ ン ク ス シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . シ ミ ュ レーシ ョ ン設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . シ ミ ュ レー タ 言語オプシ ョ ンについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 推奨 さ れ る シ ミ ュ レーシ ョ ン精度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ネ ッ ト リ ス ト の生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 10 11 13 20 23 25 25 第 3 章 : Vivado シ ミ ュ レー タ について 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vivado シ ミ ュ レー タ の機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vivado シ ミ ュ レー タ の実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 論理お よ び タ イ ミ ン グ シ ミ ュ レーシ ョ ンの実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . シ ミ ュ レーシ ョ ン結果の保存 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 複数シ ミ ュ レーシ ョ ン run の区別 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . シ ミ ュ レーシ ョ ン を閉 じ る . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . シ ミ ュ レーシ ョ ン起動ス ク リ プ ト フ ァ イ ルの追加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . シ ミ ュ レーシ ョ ン メ ッ セージの表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . launch_simulation コ マ ン ド の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 27 27 39 42 42 42 42 44 45 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 波形 コ ン フ ィ ギ ュ レーシ ョ ン と 波形ビ ュ ーの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 前に保存 し たシ ミ ュ レーシ ョ ン run を開 く . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 波形 コ ン フ ィ ギ ュ レーシ ョ ンの HDL オブジ ェ ク ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 波形のカ ス タ マ イ ズ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 波形表示の制御 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 波形の分類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 波形の解析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 47 48 49 51 57 59 60 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 3 ソ ース レベルでのデバ ッ グ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 波形オブジ ェ ク ト を特定値に設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vivado シ ミ ュ レー タ を使用 し た消費電力解析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tcl コ マ ン ド report_drivers の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VCD 機能の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tcl コ マ ン ド log_wave の使用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [Objects] ビ ュ ー、 波形ビ ュ ー、 テ キ ス ト エデ ィ タ ーでの信号の ク ロ ス プ ロ ーブ . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 66 73 74 75 76 77 第 6 章 : 特殊なケースの処理 グ ロ ーバル リ セ ッ ト と ト ラ イ ス テー ト の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . デル タ サ イ ク ル と レース コ ンデ ィ シ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ASYNC_REG 制約の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . コ ン フ ィ ギ ュ レーシ ョ ン イ ン タ ーフ ェ イ ス のシ ミ ュ レーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . シ ミ ュ レーシ ョ ンでのブ ロ ッ ク RAM の競合チ ェ ッ ク のデ ィ ス エーブル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 消費電力解析のための SAIF フ ァ イ ルのダ ンプ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AXI バ ス フ ァ ン ク シ ョ ン モデルを使用 し たデザ イ ンのシ ミ ュ レーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . コ ンパ イ ルま たはシ ミ ュ レーシ ョ ンの ス キ ッ プ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 80 82 83 86 86 86 87 第 7 章 : バ ッ チ またはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Vivado シ ミ ュ レー タ の コ マ ン ド ラ イ ンの ス テ ッ プ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 デザ イ ン スナ ッ プシ ョ ッ ト のエ ラ ボ レー ト お よ び生成 (xelab) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 デザ イ ン スナ ッ プシ ョ ッ ト のシ ミ ュ レーシ ョ ン (xsim) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 ス タ ン ド ア ロ ン モー ド での Vivado シ ミ ュ レー タ の実行例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 プ ロ ジ ェ ク ト フ ァ イ ル (.prj) の構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 定義済みマ ク ロ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 ラ イ ブ ラ リ マ ッ プ フ ァ イ ル (xsim.ini) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 シ ミ ュ レーシ ョ ン モー ド の実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Tcl コ マ ン ド と ス ク リ プ ト の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . サー ド パーテ ィ ツールを使用 し たシ ミ ュ レーシ ョ ンの準備 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tcl モー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . サー ド パーテ ィ ツールでのシ ミ ュ レーシ ョ ンの実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . サー ド パーテ ィ ツールでシ ミ ュ レーシ ョ ン を実行 し た後 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IP のシ ミ ュ レーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verilog UNIFAST ラ イ ブ ラ リ の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AXI バ ス フ ァ ン ク シ ョ ン モデルを使用 し たデザ イ ンのシ ミ ュ レーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 統合 さ れたシ ミ ュ レーシ ョ ンの実行中のカ ス タ ム DO フ ァ イ ルの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . シ ミ ュ レー タ 別の run デ ィ レ ク ト リ の生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 108 112 114 121 123 123 123 124 124 付録 A : Vivado シ ミ ュ レー タ の Tcl コ マ ン ド の値の規則 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 文字列の値の解釈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Vivado Design Suite シ ミ ュ レーシ ョ ン ロ ジ ッ ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 付録 B : Vivado シ ミ ュ レー タ の混合言語サポー ト および例外 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 混合言語シ ミ ュ レーシ ョ ンの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 4 VHDL 言語サポー ト の例外 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Verilog 言語サポー ト の例外 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 付録 C : Vivado シ ミ ュ レー タ ク イ ッ ク リ フ ァ レ ン ス ガ イ ド 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 付録 D : Vivado シ ミ ュ レー タ でサポー ト さ れる SystemVerilog コ ン ス ト ラ ク ト 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 ダ イ ナ ミ ッ ク タ イ プ : アー リ ー ア ク セ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 付録 E : Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ログ ラ ミ ング イ ン タ ー フ ェ イ ス (DPI) 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C コ ー ド の コ ンパ イ ル. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xsc コ ンパ イ ラ ーの説明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xelab を使用 し た コ ンパ イ ル済み C コ ー ド の SystemVerilog への統合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C お よ び SystemVerilog のバ ウ ン ダ リ で使用可能なデー タ 型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ユーザー定義型のマ ッ ピ ン グ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . svdpi.h 関数のサポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 例 .............................................................................................. Vivado Design Suite に含まれ る DPI 例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 150 150 152 152 153 155 155 160 付録 F : その他の リ ソ ースおよび法的通知 ザ イ リ ン ク ス リ ソ ース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ソ リ ュ ーシ ョ ン セ ン タ ー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 参照資料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . サー ド パーテ ィ シ ミ ュ レー タ に関す る 情報への リ ン ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 言語お よ び暗号化サポー ト 規格への リ ン ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ト レーニ ン グ リ ソ ース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 法的通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 161 161 161 162 162 162 163 5 第 1 章 : ロ ジ ッ ク シ ミ ュ レーシ ョ ンの概要 第 1章 ロ ジ ッ ク シ ミ ュ レーシ ョ ンの概要 概要 シ ミ ュ レーシ ョ ンは、 現実のデザ イ ン ビヘ イ ビ アーを ソ フ ト ウ ェ ア環境でエ ミ ュ レー ト す る プ ロ セ ス です。 シ ミ ュ レーシ ョ ン をす る と 、 ス テ ィ ミ ュ ラ ス を挿入 し てデザ イ ン出力を観察す る こ と で、 デザ イ ンの機能を検証で き ます。 こ の章では、シ ミ ュ レーシ ョ ン プ ロ セ ス の概要お よ び Vivado® Design Suite の資料 のシ ミ ュ レーシ ョ ン オプシ ョ ンに ついて記述 し ます。 Vivado 統合設計環境 (IDE) では、 Vivado シ ミ ュ レー タ を使用 し た統合シ ミ ュ レーシ ョ ン環境が提 供 さ れてい ます。 Vivado IDE お よ び Vivado Design Suite フ ロ ーの詳細は、 次を参照 し て く だ さ い。 • 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 3] • 『Vivado Design Suite ユーザー ガ イ ド : デザ イ ン フ ロ ーの概要』 (UG892) [参照 11] シ ミ ュ レーシ ョ ン フ ロー シ ミ ュ レーシ ョ ンは、 デザ イ ン フ ロ ーの さ ま ざ ま な段階で実行で き ます。 シ ミ ュ レーシ ョ ンは、 デザ イ ン入力に続 く 初期段階の 1 つであ り 、 ま た、 最終的な機能やデザ イ ンのパフ ォーマ ン ス を検証す る 、 イ ンプ リ メ ン テーシ ョ ン後の 最終段階の 1 つ で も あ り ます。 シ ミ ュ レーシ ョ ンは イ ン タ ラ ク テ ィ ブなプ ロ セ ス で、 通常はデザ イ ン機能 と タ イ ミ ン グの両方の要件が満た さ れ る ま で繰 り 返 し 行われます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 www.xilinx.com 6 第 1 章 : ロ ジ ッ ク シ ミ ュ レーシ ョ ンの概要 図 1-1 は、 一般的なデザ イ ンのシ ミ ュ レーシ ョ ン フ ロ ーを示 し てい ます。 X-Ref Target - Figure 1-1 57/'HVLJQ %HKDYLRUDO6LPXODWLRQ 9HULI\'HVLJQ%HKDYHVDV,QWHQGHG 6\QWKHVL]H 3RVW6\QWKHVLV6LPXODWLRQ ,PSOHPHQW3ODFHDQG5RXWH 3RVW,PSOHPHQWDWLRQ6LPXODWLRQ &ORVHWR(PXODWLQJ+: 'HEXJWKH'HVLJQ 図 1‐1 : シ ミ ュ レーシ ョ ン フ ロー レ ジス タ ト ラ ン ス フ ァ ー レベルのビヘイ ビアー シ ミ ュ レーシ ョ ン レ ジ ス タ ト ラ ン ス フ ァ ー レベル (RTL) のビヘ イ ビ アー シ ミ ュ レーシ ョ ンには、 次の も のが含まれます。 • RTL コ ー ド • イ ン ス タ ン シエー ト 済み UNISIM ラ イ ブ ラ リ コ ン ポーネ ン ト • イ ン ス タ ン シエー ト 済み UNIMACRO コ ン ポーネ ン ト • UNISIM ゲー ト レベル モデル (Vivado ロ ジ ッ ク 解析用) • SECUREIP ラ イ ブ ラ リ ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 7 第 1 章 : ロ ジ ッ ク シ ミ ュ レーシ ョ ンの概要 RTL シ ミ ュ レーシ ョ ン では、 合成ま たは イ ン プ リ メ ン テーシ ョ ン ツールを実行す る 前にデザ イ ン を シ ミ ュ レーシ ョ ンお よ び検証で き ます。 デザ イ ンは、 モジ ュ ールま たはエン テ ィ テ ィ 、 ブ ロ ッ ク 、 デバ イ ス、 ま たはシ ス テ ム レベル で検証で き ます。 RTL シ ミ ュ レーシ ョ ンは、 通常 コ ー ド の構文を検証 し 、 コ ー ド が記述 し た と お り に機能 し てい る か ど う か を確認す る ために実行 さ れます。 こ の段階では、 デザ イ ンは主に RTL で記述 さ れてい る ので、 タ イ ミ ン グ情報は不要です。 RTL シ ミ ュ レーシ ョ ンは、 デザ イ ンに イ ン ス タ ン シエー ト さ れたデバ イ ス ラ イ ブ ラ リ コ ン ポーネ ン ト が含ま れない 限 り 、 アーキ テ ク チ ャ ご と に異な る こ と はあ り ません。 ザ イ リ ン ク ス では、 イ ン ス タ ン シエーシ ョ ン をサポー ト す る ため、 UNISIM ラ イ ブ ラ リ を提供 し てい ます。 デザ イ ン を ビヘ イ ビ アー RTL で検証す る と 、 早期にデザ イ ンに関す る 問題を修正で き る ため、 デザ イ ン サ イ ク ルを 無駄な く 有効に利用す る こ と がで き ます。 最初のデザ イ ン作成を ビヘ イ ビ アー コ ー ド のみに限定する と 、 次の利点があ り ます。 • よ り 読みやすい コ ー ド • よ り 高速でシ ンプルなシ ミ ュ レーシ ョ ン • コ ー ド ポー タ ビ リ テ ィ (別のデバ イ ス フ ァ ミ リ へ移行で き る ) • コ ー ド 再利用 (後で別のデザ イ ンに同 じ コ ー ド を再利用で き る ) 合成後のシ ミ ュ レーシ ョ ン 合成済みのネ ッ ト リ ス ト を シ ミ ュ レーシ ョ ンす る と 、 合成後のデザ イ ンが ロ ジ ッ ク の要件を満た し てい る か、 予期ど お り に動作す る か ど う か を検証で き ます。 一般的ではあ り ませんが、 こ の段階のシ ミ ュ レーシ ョ ンで も 、 予測 タ イ ミ ン グ値を使用 し て タ イ ミ ン グ シ ミ ュ レーシ ョ ン を実行で き ます。 論理シ ミ ュ レーシ ョ ン ネ ッ ト リ ス ト は階層にな っ てお り 、 プ リ ミ テ ィ ブ モジ ュ ールお よ びエン テ ィ テ ィ レベルに展 開で き ます。 階層の最下位にはプ リ ミ テ ィ ブお よ びマ ク ロ プ リ ミ テ ィ ブが含まれます。 こ れ ら のプ リ ミ テ ィ ブは、 Verilog の場合は UNISIMS_VER ラ イ ブ ラ リ に、 VHDL の場合は UNISIM ラ イ ブ ラ リ に含 まれてい ます。 詳細は、 14 ページの 「UNISIM ラ イ ブ ラ リ 」 を参照 し て く だ さ い。 イ ン プ リ メ ン テーシ ョ ン後のシ ミ ュ レーシ ョ ン イ ンプ リ メ ン テーシ ョ ン後は論理シ ミ ュ レーシ ョ ン ま たは タ イ ミ ン グ シ ミ ュ レーシ ョ ン を実行で き ます。タ イ ミ ン グ シ ミ ュ レーシ ョ ンは、 デバ イ ス にデザ イ ン を実際にダ ウ ン ロ ー ド する のに近い状態で行われます。 イ ンプ リ メ ン ト さ れたデザ イ ンが ロ ジ ッ ク 要件お よ び タ イ ミ ン グ要件を満た し 、 デバ イ ス で予測どお り の動作をす る こ と を確認で き ま す。 重要 : タ イ ミ ン グ シ ミ ュ レーシ ョ ン を し っ か り やっ てお く と 、 デザ イ ンはエ ラ ーのない状態にす る こ と がで き ます。 た と えば、 次の よ う な問題を タ イ ミ ン グ シ ミ ュ レーシ ョ ンで検証で き ます。 • • 合成後お よ び イ ンプ リ メ ン テーシ ョ ン後の機能変更。 こ の タ イ プの変更は次の よ う な こ と が原因で行われます。 ° full_case や parallel_case な ど の不一致を引 き 起 こ す合成プ ロ パテ ィ ま たは制約 ° ザ イ リ ン ク ス デザ イ ン制約 (XDC) フ ァ イ ルへ適用 さ れたUNISIM プ ロ パテ ィ ° 異な る シ ミ ュ レー タ に よ る シ ミ ュ レーシ ョ ン中の言語解析 デ ュ アル ポー ト RAM の競合 • タ イ ミ ン グ制約が抜けていた り 、 不正適用 さ れてい る • 非同期パ ス の動作 • 最適化に よ っ て発生す る 機能上の問題 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 8 第 1 章 : ロ ジ ッ ク シ ミ ュ レーシ ョ ンの概要 サポー ト さ れる シ ミ ュ レー タ Vivado Design Suite では、 次のシ ミ ュ レー タ がサポー ト さ れます。 • Vivado シ ミ ュ レー タ : Vivado IDE 内に完全統合 さ れてお り 、シ ミ ュ レーシ ョ ンは IDE 内の ウ ィ ン ド ウ で実行 さ れ ます。 第 3 章 「Vivado シ ミ ュ レー タ について」 を参照 し て く だ さ い。 • ザ イ リ ン ク ス では、 次のサー ド パーテ ィ シ ミ ュ レー タ がサポー ト さ れます。 ° Mentor Graphics 社の QuestaSim/ModelSim : Vivado IDE に統合 さ れてい ます。 ° Cadence 社の Incisive Enterprise Simulator (IES) : Vivado IDE に統合 さ れてい ます。 ° Synopsys 社の VCS お よ び VCS MX : Vivado IDE に統合 さ れてい ます。 ° Aldec 社の Active-HDL お よ び Rivera-PRO Aldec 社か ら こ れ ら のシ ミ ュ レー タ のサポー ト が提供 さ れてい ます。 注記 : 詳細は、 第 8 章 「サー ド パーテ ィ シ ミ ュ レー タ の使用」 を参照 し て く だ さ い。 サー ド パーテ ィ シ ミ ュ レ ー タ のサポー ト バージ ョ ン につい ては、 『Vivado Design Suite ユーザー ガ イ ド : リ リ ー ス ノ ー ト 、 イ ン ス ト ールお よ び ラ イ セ ン ス』 (UG973) [参照 1] を参照 し て く だ さ い。 言語および暗号化サポー ト Vivado シ ミ ュ レー タ では、 次がサポー ト さ れます。 • VHDL、 Verilog、 SystemVerilog、 標準遅延フ ォーマ ッ ト (SDF)[参照 4]。 付録 D 「Vivado シ ミ ュ レー タ でサポー ト さ れ る SystemVerilog コ ン ス ト ラ ク ト 」 も 参照 し て く だ さ い。 • 言語お よ び暗号化の IEEE 規格。 「Recommended Practice for Encryption and Management of Electronic Design Intellectual Property (IP)」 (P1735) [参照 5] を参照 し て く だ さ い。 OS サポー ト および リ リ ースの変更点 最新の リ リ ース の変更点、 OS サポー ト 、 ラ イ セ ン ス要件については、 『Vivado Design Suite ユーザー ガ イ ド : リ リ ー ス ノ ー ト 、 イ ン ス ト ールお よ び ラ イ セ ン ス』 (UG973) [参照 1] を参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 9 第 2 章 : シ ミ ュ レーシ ョ ンの準備 第 2章 シ ミ ュ レーシ ョ ンの準備 概要 本章では、ザ イ リ ン ク ス デバ イ ス を Vivado® 統合設計環境 (IDE) でシ ミ ュ レーシ ョ ンす る 際に必要な コ ン ポーネ ン ト について説明 し ます。 シ ミ ュ レーシ ョ ン プ ロ セ ス では次を実行する 必要があ り ます。 • 実行す る シ ミ ュ レーシ ョ ン ア ク シ ョ ン を反映する テ ス ト ベンチを作成 • 使用す る 必要のあ る ラ イ ブ ラ リ を選択 し て宣言 • ラ イ ブ ラ リ を コ ンパ イ ル (Vivado シ ミ ュ レー タ を使用 し ない場合) • ネ ッ ト リ ス を生成 (合成後ま たは イ ンプ リ メ ン テーシ ョ ン後のシ ミ ュ レーシ ョ ン を実行する 場合) • ザ イ リ ン ク ス デバ イ ス のグ ロ ーバル リ セ ッ ト と ト ラ イ ス テー ト の使用を理解 テ ス ト ベン チおよびス テ ィ ミ ュ ラ ス フ ァ イルの使用 テ ス ト ベンチは、 シ ミ ュ レー タ 用に記述 さ れたハー ド ウ ェ ア記述言語 (HDL) コ ー ド で、 次を実行 し ます。 • デザ イ ン を イ ン ス タ ン シエー ト し 初期化す る • ス テ ィ ミ ュ ラ ス を生成 し デザ イ ンに適用す る • デザ イ ン出力結果を モニ タ ー し 、 機能を検証す る (オプシ ョ ン) ま た、 シ ミ ュ レーシ ョ ン出力を フ ァ イ ル、 波形、 表示画面に出力す る よ う 、 テ ス ト ベンチを設定す る こ と も で き ます。 テ ス ト ベンチの構造はシ ンプルに し 、 特定入力に ス テ ィ ミ ュ ラ ス を順次適用す る こ と がで き ます。 ま た、 テ ス ト ベンチを複雑にす る こ と も で き 、 次の も のを含め る こ と が可能です。 • サブルーチン呼び出 し • 外部フ ァ イ ルか ら 読み出 さ れ る ス テ ィ ミ ュ ラ ス • 条件付 き ス テ ィ ミ ュ ラ ス • その他の よ り 複雑な構造 イ ン タ ラ ク テ ィ ブなシ ミ ュ レーシ ョ ン と 比較す る と 、 テ ス ト ベンチには次の よ う な利点があ り ます。 • デザ イ ン プ ロ セ ス を通 し て反復シ ミ ュ レーシ ョ ンが可能 • テ ス ト 条件の記述を提供 効果的なテ ス ト ベンチを作成す る にあ っ た り 、 次の点が推奨 さ れます。 • Verilog テ ス ト ベンチ フ ァ イ ルで次の よ う に `timescale を常に指定 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 10 第 2 章 : シ ミ ュ レーシ ョ ンの準備 ‘timescale 1ns/1ps • テ ス ト ベンチ内のデザ イ ンへのすべての入力を シ ミ ュ レーシ ョ ン時間 0 で初期化 し 、 既知の値でシ ミ ュ レーシ ョ ンが正 し く 始ま る よ う に し ます。 • 論理お よ び タ イ ミ ン グ ベース のシ ミ ュ レーシ ョ ンで使用 さ れ る デフ ォ ル ト のグ ロ ーバル セ ッ ト / リ セ ッ ト (GSR) パルス用に、 100ns 後に ス テ ィ ミ ュ ラ ス デー タ を適用 し ます。 • グ ロ ーバル セ ッ ト / リ セ ッ ト (GSR) が解放 さ れ る 前に ク ロ ッ ク ソ ース を開始 し ます。 詳細は、 79 ページの 「グ ロ ーバル リ セ ッ ト と ト ラ イ ス テー ト の使用」 を参照 し て く だ さ い。 テ ス ト ベンチの詳細は、 『Writing Efficient Testbenches』 (XAPP199) [参照 5] を参照 し て く だ さ い、。 ヒ ン ト : テ ス ト ベンチ を作成す る と き 、 合成後お よ び イ ン プ リ メ ン テーシ ョ ン後の タ イ ミ ン グ シ ミ ュ レ ーシ ョ ン で GSR が自動的に発生す る 点に注意 し て く だ さ い。 こ の GSR に よ り 、 すべての レ ジ ス タ がシ ミ ュ レーシ ョ ンの最初の 100ns 間 リ セ ッ ト 状態にな り ます。 シ ミ ュ レーシ ョ ン ソ ース フ ァ イルの追加または作成 シ ミ ュ レーシ ョ ン ソ ース を Vivado Design Suite プ ロ ジ ェ ク ト に追加す る には、 次の手順に従い ます。 1. [File] → [Add Sources] を ク リ ッ ク す る か、 ま たは [Add Sources] ボ タ ン を ク リ ッ ク し ます。 Add Sources ウ ィ ザー ド が表示 さ れます。 2. [Add or Create Simulation Sources] をオンに し 、 [Next] を ク リ ッ ク し ます。 [Add or Create Simulation Sources] ページが開き ます。 こ のダ イ ア ロ グ ボ ッ ク ス には、 次の よ う なオプシ ョ ンがあ り ます。 ° [Specify Simulation Set] : シ ミ ュ レーシ ョ ン ソ ース を保存す る シ ミ ュ レーシ ョ ン セ ッ ト の名前 (デフ ォ ル ト は sim_1、 sim_2...) を入力 し ます。 ド ロ ッ プダ ウ ン リ ス ト か ら [Create Simulation Set] を選択す る と 、 新 し く シ ミ ュ レーシ ョ ン セ ッ ト を定義で き ます。 複数のシ ミ ュ レーシ ョ ン セ ッ ト が使用可能な場合は、 Vivado シ ミ ュ レー タ に、 ど のシ ミ ュ レーシ ョ ン セ ッ ト が現在使用中なのかが表示 さ れます。 ビデオ : こ の機能の詳細は、 Vivado Design Suite ビデオ チ ュ ー ト リ アル : ロ ジ ッ ク シ ミ ュ レーシ ョ ン を参照 し て く だ さ い。 ° [Add Files] : プ ロ ジ ェ ク ト に追加す る シ ミ ュ レーシ ョ ン ソ ース フ ァ イ ルを選択 し ます。 ° [Add Directories] : 選択 し たデ ィ レ ク ト リ にあ る すべてのシ ミ ュ レーシ ョ ン ソ ース フ ァ イ ルを追加 し ます。指 定デ ィ レ ク ト リ にあ る 、 有効な拡張子の ソ ース フ ァ イ ルがすべてプ ロ ジ ェ ク ト に追加 さ れます。 ° ° ° [Create File] : 新規シ ミ ュ レーシ ョ ン フ ァ イ ルを作成する [Create Source File] ダ イ ア ロ グ ボ ッ ク ス が開 き ま す。 プ ロ ジ ェ ク ト ソ ース フ ァ イ ルの詳細は、 『Vivado Design Suite ユーザー ガ イ ド : シ ス テ ム レベル デザ イ ン入力』 (UG895) [参照 2] の 「 ソ ース フ ァ イ ルの操作」 を参照 し て く だ さ い。 ダ イ ア ロ グ ボ ッ ク ス には、 次の よ う なボ タ ンがあ り ます。 - [Remove] : 選択 し た ソ ース フ ァ イ ルを削除 し ます。 - [Move Selected File Up] : 指定フ ァ イ ルを リ ス ト の上に移動 さ せます。 - [Move Selected File Down] : 指定フ ァ イ ルを リ ス ト の下に移動 さ せます。 ウ ィ ザー ド には次の よ う なチ ェ ッ ク ボ ッ ク ス があ り ます。 - [Scan and add RTL include files into project] : 追加 し た RTL フ ァ イ ルを ス キ ャ ン し 、参照 さ れてい る イ ン ク ルー ド フ ァ イ ルを追加 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 11 第 2 章 : シ ミ ュ レーシ ョ ンの準備 - [Copy sources into project] : ソ ース フ ァ イ ルをプ ロ ジ ェ ク ト デ ィ レ ク ト リ に コ ピー し ます。プ ロ ジ ェ ク ト では ロ ーカルに コ ピー さ れたバージ ョ ンが使用 さ れます。 [Add Directories] ボ タ ン を ク リ ッ ク し て ソ ース フ ァ イ ルのデ ィ レ ク ト リ を追加 し た場合は、 フ ァ イ ルが プ ロ ジ ェ ク ト に ロ ーカルに コ ピー さ れ る と き 、 デ ィ レ ク ト リ 構造 も その ま ま の状態で コ ピー さ れます。 - [Add sources from subdirectories] : [Add Directories] で指定 し たデ ィ レ ク ト リ のサブデ ィ レ ク ト リ に含まれ る ソ ース フ ァ イ ルをすべて追加 し ます。 - [Include all design sources for simulation] : シ ミ ュ レーシ ョ ン用にデザ イ ン ソ ースすべて を含め ます。 シ ミ ュ レーシ ョ ン セ ッ ト の操作 Vivado IDE では、シ ミ ュ レーシ ョ ン ソ ース フ ァ イ ルはシ ミ ュ レーシ ョ ン フ ァ イ ル セ ッ ト に保存 さ れ、[Sources] ビ ュ ー に フ ォ ルダー と し て表示 さ れ ます。 リ モー ト の も の を参照 し た り 、 ロ ーカル プ ロ ジ ェ ク ト デ ィ レ ク ト リ に保存 さ れ てい る も のを使用で き ます。 シ ミ ュ レーシ ョ ン セ ッ ト を使用す る と 、 それぞれのデザ イ ン段階にあわせて ソ ース を定義 し て使用で き ます。 た と え ば、 あ る テ ス ト ベンチ ソ ース は、 エ ラ ボ レー ト さ れたデザ イ ン、 ま たはデザ イ ンのモジ ュ ールのビヘ イ ビ アー シ ミ ュ レーシ ョ ン用に ス テ ィ ミ ュ ラ ス を供給す る ための も のであ っ た り 、 別のテ ス ト ベンチは、 イ ンプ リ メ ン ト 済みデザ イ ンの タ イ ミ ン グ シ ミ ュ レーシ ョ ン用に ス テ ィ ミ ュ ラ ス を供給する ための も の、 と 使い分け る こ と がで き ます。 シ ミ ュ レーシ ョ ン ソ ース をプ ロ ジ ェ ク ト に追加す る と き に、 ど のシ ミ ュ レーシ ョ ン ソ ース セ ッ ト を使用す る か指定 で き ます。 シ ミ ュ レーシ ョ ン セ ッ ト は次の手順で変更で き ます。 1. [Sources] ビ ュ ーで [Simulation Sources] を右 ク リ ッ ク し 、 [Edit Simulation Sets] を ク リ ッ ク し ます (図 2-1)。 X-Ref Target - Figure 2-1 図 2‐1 : [Edit Simulation Sets] オプ シ ョ ン [Add or Create Simulation Sources] ページが表示 さ れます。 2. [Add Files] を ク リ ッ ク し て フ ァ イ ルを選択 し ます。 こ れで、 プ ロ ジ ェ ク ト に関連付け ら れてい る ソ ース が、 新 し く 作成 さ れたシ ミ ュ レーシ ョ ン セ ッ ト に追加 さ れま す。 3. 必要であればほかの フ ァ イ ル も 追加 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 12 第 2 章 : シ ミ ュ レーシ ョ ンの準備 選択 し た シ ミ ュ レーシ ョ ン セ ッ ト がア ク テ ィ ブなデザ イ ン run に使用 さ れます。 ザイ リ ン ク ス シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ の使用 重要 : Vivado シ ミ ュ レー タ を使用す る 場合、 シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ を コ ンパ イ ルす る 必要はあ り ません。 し か し 、 サー ド パーテ ィ シ ミ ュ レー タ を使用す る 場合は、 ラ イ ブ ラ リ を コ ンパ イ ルする 必要があ り ます。 詳細は、 第 8 章 「サー ド パーテ ィ シ ミ ュ レー タ の使用」 を参照 し て く だ さ い。 ザ イ リ ン ク ス シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ は、 VHDL-93 お よ び Verilog-2001 言語規格をサポー ト す る シ ミ ュ レー タ で使用で き ます。 ラ イ ブ ラ リ にはザ イ リ ン ク ス ハー ド ウ ェ ア デバ イ ス を正 し く シ ミ ュ レーシ ョ ンす る のに必要な特 定の遅延お よ びモデル情報がビル ト イ ン さ れてい ます。 ク ロ ッ ク エ ッ ジ内のブ ロ ッ ク には ノ ンブ ロ ッ キ ン グ割 り 当て を使用 し ます。 こ れ以外の場合、 Verilog のブ ロ ッ キ ン グ割 り 当て を使用 し て コ ー ド を記述 し ます。 同様に、 プ ロ セ ス内の ロ ーカル計算には変数割 り 当て を、 プ ロ セ ス間の デー タ フ ロ ーが必要な場合は信号割 り 当て を使用 し ます。 デー タ が ク ロ ッ ク と 同時に変わ る 場合は、 シ ミ ュ レ ー タ でデー タ 入力が ク ロ ッ ク エ ッ ジ後に発生す る よ う に ス ケ ジ ュ ールで き ます。 最初の ク ロ ッ ク エ ッ ジの前にデー タ を入力 さ せ る こ と は可能ではあ る のですが、 デー タ は次の ク ロ ッ ク エ ッ ジ ま で通過 し ません。 推奨 : こ の よ う な思わぬシ ミ ュ レーシ ョ ン結果にな ら ない よ う にする ため、 デー タ 信号 と ク ロ ッ ク 信号は同時に切 り 替え ない よ う に し て く だ さ い。 デザ イ ンに コ ン ポーネ ン ト を イ ン ス タ ン シエー ト す る 際、 シ ミ ュ レー タ で コ ン ポーネ ン ト の機能を記述 し た ラ イ ブ ラ リ が参照 さ れていない と 、 シ ミ ュ レーシ ョ ンが正 し く 実行 さ れません。 ザ イ リ ン ク ス ラ イ ブ ラ リ は、 モデルの機能に 基づいて カ テ ゴ リ に分類 さ れます。 表 2-1 は、 ザ イ リ ン ク ス の提供す る シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ を リ ス ト し てい ます。 表 2‐1 : シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ ラ イブラ リ名 説明 VHDL ラ イ ブ ラ リ 名 Verilog ラ イ ブ ラ リ 名 UNISIM ザ イ リ ン ク ス プ リ ミ テ ィ ブの論理シ ミ ュ レーシ ョ ン UNISIM UNISIMS_VER UNIMACRO ザ イ リ ン ク ス マ ク ロ の論理シ ミ ュ レーシ ョ ン UNIMACRO UNIMACRO_VER UNIFAST 高速シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ UNIFAST UNIFAST_VER SIMPRIM ザ イ リ ン ク ス プ リ ミ テ ィ ブの タ イ ミ ン グ シ ミ ュ レーシ ョ ン なし SIMPRIMS_VERa SECUREIP PCIe® IP、 ギガ ビ ッ ト ト ラ ン シーバーな ど のザ イ リ ン ク ス デ SECUREIP バ イ ス機能の論理シ ミ ュ レーシ ョ ンお よ び タ イ ミ ン グ シ ミ ュ レーシ ョ ン両方のシ ミ ュ レーシ ョ ン ラ イ ブ ラ リ 次のデ ィ レ ク ト リ に IP の リ ス ト があ り ます。 <Vivado_Install_Dir>/data/secureip SECUREIP a. SIMPRIMS_VER は Verilog SIMPRIM 物理 ラ イ ブ ラ リ がマ ッ プ さ れてい る 論理 ラ イ ブ ラ リ 名です。 重要 : - シ ミ ュ レーシ ョ ン ポ イ ン ト に よ っ て異な る シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ を指定す る 必要があ り ます。 - イ ンプ リ メ ン テーシ ョ ン前 と イ ンプ リ メ ン テーシ ョ ン後のネ ッ ト リ ス ト のゲー ト レベル セルは異な り ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 13 第 2 章 : シ ミ ュ レーシ ョ ンの準備 表 2-2 は、 各シ ミ ュ レ ーシ ョ ン ポ イ ン ト で必要な シ ミ ュ レ ーシ ョ ン ラ イ ブ ラ リ が リ ス ト さ れ ま す。 表 2‐2 : シ ミ ュ レーシ ョ ン ポ イ ン ト と 関連ラ イ ブ ラ リ シ ミ ュ レーシ ョ ン ポイ ン ト UNISIM UNIFAST UNIMACRO SECUREIP SIMPRIM (Verilog のみ) SDF 1. レ ジ ス タ ト ラ ン ス フ ァ ー レベル (RTL) (ビヘ イ ビ アー ) あり あり あり あり 該当な し なし 2.合成後シ ミ ュ レーシ ョ ン (論理) あり あり 該当な し あり 該当な し 該当な し 3.合成後シ ミ ュ レーシ ョ ン ( タ イ ミ ン グ) 該当な し 該当な し 該当な し あり あり あり 4. イ ン プ リ メ ン テーシ ョ ン後 シ ミ ュ レーシ ョ ン (論理) あり あり 該当な し あり 該当な し 該当な し 5. イ ン プ リ メ ン テーシ ョ ン後 シ ミ ュ レーシ ョ ン ( タ イ ミ ン グ) 該当な し 該当な し 該当な し あり あり あり 重要 : Vivado シ ミ ュ レー タ では、 あ ら か じ め コ ンパ イ ル さ れた シ ミ ュ レーシ ョ ン デバ イ ス ラ イ ブ ラ リ が使用 さ れ ま す。 ア ッ プデー ト が イ ン ス ト ール さ れ る と 自動的に こ れ ら の ラ イ ブ ラ リ がア ッ プデー ト さ れます。 注記 : Verilog の SIMPRIMS_VER では、 UNISIM と 同 じ ソ ース だけでな く 、 タ イ ミ ン グ ア ノ テーシ ョ ン用のブ ロ ッ ク も 使用 さ れます。 SIMPRIMS_VER は Verilog の物理的な SIMPRIM がマ ッ プ さ れてい る 論理 ラ イ ブ ラ リ 名です。 表 2-3 は、 ラ イ ブ ラ リ のデ ィ レ ク ト リ を リ ス ト し てい ます。 表 2‐3 : シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ のデ ィ レ ク ト リ ライブラ リ UNISIM UNIFAST UNIMACRO SECUREIP HDL タ イプ ディ レク ト リ Verilog <Vivado_Install_Dir>/data/verilog/src/unisims VHDL <Vivado_Install_Dir>/data/vhdl/src/unisims Verilog <Vivado_Install_Dir>/data/verilog/src/unifast VHDL <Vivado_Install_Dir>/data/vhdl/src/unifast Verilog <Vivado_Install_Dir>/data/verilog/src/unimacro VHDL <Vivado_Install_Dir>/data/vhdl/src/unimacro Verilog <Vivado_Install_Dir>/data/secureip/ 次のセ ク シ ョ ンでは、 こ れ ら の ラ イ ブ ラ リ について さ ら に詳細に説明 し ます。 UNISIM ラ イ ブ ラ リ 論理シ ミ ュ レーシ ョ ンでは UNISIM が使用 さ れ、こ の ラ イ ブ ラ リ にはデバ イ ス プ リ ミ テ ィ ブ ま たは下位の構築ブ ロ ッ ク の記述が含まれてい ます。 重要 : Vivado ツールでは、 IP を生成す る と き 、 出力フ ァ イ ル と し て IP シ ミ ュ レーシ ョ ン モデルが生成 さ れます。 こ のため、 compile_simlib コ マ ン ド を使用する 場合、 IP シ ミ ュ レーシ ョ ン モデルは あ ら か じ め コ ンパ イ ル さ れてい る ラ イ ブ ラ リ には含ま れません。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 14 第 2 章 : シ ミ ュ レーシ ョ ンの準備 暗号化 さ れた コ ンポーネ ン ト フ ァ イル 表 2-4 は、IP をデザ イ ンに含め る と き に、 あ ら か じ め コ ンパ イ ル さ れてい る 暗号化 さ れた ラ イ ブ ラ リ フ ァ イ ルを呼び 出す こ と がで き る 、 UNISIM ラ イ ブ ラ リ を リ ス ト し てい ます。 ラ イ ブ ラ リ 検索パ ス に必要なパ ス を含めて く だ さ い。 詳細は、 19 ページの 「方法 1 : 完全 UNIFAST ラ イ ブ ラ リ (推奨)」 を参照 し て く だ さ い。 表 2‐4 : コ ンポーネ ン ト フ ァ イル コ ンポーネ ン ト フ ァ イル 説明 <Vivado_Install_Dir>/data/verilog/src/unisim_retarget_comp.vp 暗号化 さ れた Verilog フ ァ イ ル <Vivado_Install_Dir>/data/vhdl/src/unisims/unisim_retarget_VCOMP.vhdp 暗号化 さ れた VHDL フ ァ イ ル VHDL UNISIM ラ イ ブ ラ リ VHDL の UNISIM ラ イ ブ ラ リ は、 ザ イ リ ン ク ス デバ イ ス フ ァ ミ リ のプ リ ミ テ ィ ブ を指定す る 次の フ ァ イ ルに分け ら れてい ます。 • コ ン ポーネ ン ト 宣言 (unisim_VCOMP.vhdp) • パ ッ ケージ フ ァ イ ル (unisim_VPKG.vhd) こ れ ら のプ リ ミ テ ィ ブ を使用す る には、 各フ ァ イ ルの最初に次の 2 行を追加す る 必要があ り ます。 library UNISIM; use UNISIM.Vcomponents.all; 重要 : ま た、 ラ イ ブ ラ リ を コ ンパ イ ル し 、シ ミ ュ レー タ にマ ッ プする 必要があ り ます。その方法はシ ミ ュ レー タ に よ っ て異な り ます。 注記 : Vivado シ ミ ュ レー タ の場合、 ラ イ ブ ラ リ コ ンパ イ ル と マ ッ ピ ン グは統合 さ れてい る ので、 ユーザーが さ ら に コ ンパ イ ルま たはマ ッ プす る 必要はあ り ません。 Verilog UNISIM ラ イ ブ ラ リ Verilog の場合、 個々の ラ イ ブ ラ リ モジ ュ ールが別々の HDL フ ァ イ ルで指定 さ れてい ます。 こ のため、 ラ イ ブ ラ リ を 指定す る -y オプシ ョ ン を使用す る と 、 指定デ ィ レ ク ト リ ですべての コ ン ポーネ ン ト が検索 さ れ、 ラ イ ブ ラ リ が自動 的に展開 し ます。 Verilog UNISIM ラ イ ブ ラ リ は、 モジ ュ ールを使用す る 前に HDL フ ァ イ ルで指定す る こ と はで き ません。 ラ イ ブ ラ リ モジ ュ ールを使用す る には、 すべて大文字でモジ ュ ール名を指定 し て く だ さ い。 次の例は、 イ ン ス タ ン シエー ト さ れ たモジ ュ ール名 と その フ ァ イ ル名です。 • BUFG モジ ュ ールは BUFG.v • IBUF モジ ュ ールは IBUF.v Verilog では大文字/小文字が区別 さ れ る ので、 UNISIM プ リ ミ テ ィ ブ イ ン ス タ ン シエーシ ョ ンには、 必ず大文字のみ を使用 し て く だ さ い。 あ ら か じ め コ ンパ イ ル さ れた ラ イ ブ ラ リ を使用す る 場合は、 正 し いシ ミ ュ レー タ コ マ ン ド ラ イ ン オプシ ョ ン を使用 し て、 ラ イ ブ ラ リ を指定 し て く だ さ い。 次は、 Vivado シ ミ ュ レー タ での例です。 -L unisims_ver ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 15 第 2 章 : シ ミ ュ レーシ ョ ンの準備 UNIMACRO ラ イ ブ ラ リ UNIMACRO は、 論理シ ミ ュ レーシ ョ ン で使用 さ れ る ラ イ ブ ラ リ で、 選択 さ れたデバ イ ス プ リ ミ テ ィ ブのマ ク ロ 記述 が含まれてい ます。 重要 : 『Vivado Design Suite 7 シ リ ーズ FPGA お よ び Zynq-7000 All Programmable SoC ラ イ ブ ラ リ ガ イ ド 』 (UG953) [参 照 6] に リ ス ト さ れてい る デバ イ ス マ ク ロ を含め る 場合は、UNIMACRO ラ イ ブ ラ リ を常に指定する 必要があ り ます。 VHDL UNIMACRO ラ イ ブ ラ リ こ れ ら のプ リ ミ テ ィ ブ を使用す る には、 各フ ァ イ ルの最初に次の 2 行を追加す る 必要があ り ます。 library UNIMACRO; use UNIMACRO.Vcomponents.all; Verilog UNIMACRO ラ イ ブ ラ リ Verilog の場合、 個々の ラ イ ブ ラ リ モジ ュ ールが別々の HDL フ ァ イ ルで指定 さ れてい ます。 こ のため、 ラ イ ブ ラ リ を 指定す る -y オプシ ョ ン を使用す る と 、 指定デ ィ レ ク ト リ ですべての コ ン ポーネ ン ト が検索 さ れ、 ラ イ ブ ラ リ が自動 的に展開 し ます。 Verilog UNIMACRO ラ イ ブ ラ リ は、 VHDL の よ う に、 モジ ュ ール使用前に HDL フ ァ イ ルで指定す る 必要はあ り ませ ん。 ラ イ ブ ラ リ モジ ュ ールを使用す る には、 すべて大文字でモジ ュ ール名を指定 し て く だ さ い。 ま た、 ラ イ ブ ラ リ を コ ンパ イ ルお よ びマ ッ プす る 必要があ り ます。 その方法は、 選択 し た シ ミ ュ レー タ に よ っ て異な り ます。 重要 : Verilog モジ ュ ール名 と フ ァ イ ル名は大文字です。 た と えば、 モジ ュ ール BUFG は BUFG.v、 モジ ュ ール IBUF は IBUF.v にな り ます。 UNISIM プ リ ミ テ ィ ブ イ ン ス タ ン シエーシ ョ ンには、 必ず大文字のみを使用 し て く だ さ い。 SIMPRIM ラ イ ブ ラ リ 合成ま たは イ ンプ リ メ ン テーシ ョ ン後に生成 さ れ る タ イ ミ ン グ シ ミ ュ レーシ ョ ン ネ ッ ト リ ス ト のシ ミ ュ レーシ ョ ン には、 SIMPRIM ラ イ ブ ラ リ を使用 し ます。 重要 : タ イ ミ ン グ シ ミ ュ レーシ ョ ンは Verilog でのみサポー ト さ れます。 VHDL バージ ョ ンの SIMPRIM ラ イ ブ ラ リ は あ り ません。 ヒ ン ト : VHDL を使用す る 場合は、 合成後お よ び イ ンプ リ メ ン テーシ ョ ン後の論理シ ミ ュ レーシ ョ ン を実行 し ます ( こ の場合、 標準のデ フ ォ ル ト フ ォ ーマ ッ ト (SDF) ア ノ テーシ ョ ン は不要で、 シ ミ ュ レ ーシ ョ ン ネ ッ ト リ ス ト に UNISIM ラ イ ブ ラ リ が使用 さ れ ます)。 ネ ッ ト リ ス ト は write_vhdl Tcl コ マ ン ド を使用 し て作成で き ます。 使用方法に ついては、 『Vivado Design Suite Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 7] を参照 し て く だ さ い。 こ の ラ イ ブ ラ リ は次の よ う に指定 し ます。 -L SIMPRIMS_VER 説明 : ° -L は ラ イ ブ ラ リ を指定す る コ マ ン ド です。 ° SIMPRIMS_VER は Verilog SIMPRIM がマ ッ プ さ れてい る 論理 ラ イ ブ ラ リ 名です。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 16 第 2 章 : シ ミ ュ レーシ ョ ンの準備 SECUREIP シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ SECUREIP ラ イ ブ ラ リ は GT な ど の複雑なデバ イ ス コ ン ポーネ ン ト の論理お よ び タ イ ミ ン グ シ ミ ュ レーシ ョ ン に使 用 し ます。 注記 : セキ ュ リ テ ィ 保護の付いてい る IP ブ ロ ッ ク は Vivado シ ミ ュ レー タ で完全にサポー ト さ れてい る ため、 追加設 定は不要です。 ザ イ リ ン ク ス では、 「Recommended Practice for Encryption and Management of Electronic Design Intellectual Property (IP)」 (IEEE-STD-P1735) [参照 5] と い う IEEE 規格で指定 さ れた暗号化手法を使用 し てい ます。 ラ イ ブ ラ リ コ ンパ イ ル プ ロ セ ス で自動的に暗号化処理が行われます。 注記 : シ ミ ュ レー タ で ラ イ ブ ラ リ を指定す る コ マ ン ド ラ イ ン オプシ ョ ンについては、それぞれのシ ミ ュ レー タ の資料 を参照 し て く だ さ い。 表 2-5 は、 こ れ ら の ラ イ ブ ラ リ を使用す る にあ た り 、 注意事項を シ ミ ュ レー タ ベン ダーご と に分けて リ ス ト し てい ま す。 表 2‐5 : SECUREIP ラ イ ブ ラ リ を使用する際の考慮事項 シ ミ ュ レー タ 名 ModelSim SE ベン ダー Mentor Graphics ModelSim PE 要件 デザ イ ン入力が VHDL で行われ る 場合は、 混合言語 ラ イ セ ン ス ま たは SECUREIP OP が必要です。 詳細はベン ダーにお問 い合わせ く だ さ い。 ModelSim DE QuestaSim VCS お よ び VCS MX Synopsys Active-HDL Aldec Riviera-PRO* デザ イ ン入力が VHDL のみの場合、 言語左右 さ れない タ イ プ の SECUREIP ラ イ セ ン ス が必要にな り ます。 詳細はベン ダー にお問い合わせ く だ さ い。 重要 : サー ド パーテ ィ シ ミ ュ レー タ のサポー ト さ れ る バージ ョ ンについては、 『Vivado Design Suite ユーザー ガ イ ド : リ リ ース ノ ー ト 、 イ ン ス ト ールお よ び ラ イ セ ン ス』 (UG973) [参照 1] を参照 し て く だ さ い。 VHDL SECUREIP ラ イ ブ ラ リ UNISIM ラ イ ブ ラ リ には、 VHDL SECUREIP の ラ ッ パーが含まれてい ます。 次の 2 行を各フ ァ イ ルの最初に追加す る と 、 エン テ ィ テ ィ にバ イ ン ド す る こ と がで き ます。 Library UNISIM; use UNISIM.vcomponents.all; Verilog SECUREIP ラ イ ブ ラ リ Verilog コ ー ド を使用 し て シ ミ ュ レーシ ョ ン を実行す る 場合、 ほ と ん ど のシ ミ ュ レー タ で SECUREIP ラ イ ブ ラ リ を参 照す る 必要があ り ます。 あ ら か じ め コ ンパ イ ル さ れた ラ イ ブ ラ リ を使用す る 場合は、 正 し い指示子を使用 し て ラ イ ブ ラ リ を指定す る 必要があ り ます。 次は、 Vivado シ ミ ュ レー タ での例です。 -L SECUREIP Verilog SECUREIP ラ イ ブ ラ リ は、 コ ン パ イ ル時に -f オ プ シ ョ ン を 付 け る と 使用 で き ま す。 フ ァ イ ル リ ス ト は、 <Vivado_Install_Dir>/data/secureip/secureip_cell.list.f か ら 入手で き ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 17 第 2 章 : シ ミ ュ レーシ ョ ンの準備 UNIFAST ラ イ ブ ラ リ UNIFAST ラ イ ブ ラ リ は RTL ビ ヘ イ ビ アー シ ミ ュ レ ーシ ョ ン で使用で き る 、 オプ シ ョ ン の ラ イ ブ ラ リ で、 シ ミ ュ レ ーシ ョ ン ラ ン タ イ ム を 速 く し ま す。 重要 : こ のモデルは、 タ イ ミ ン グ ド リ ブ ン シ ミ ュ レーシ ョ ンには使用で き ません。 UNIFAST ラ イ ブ ラ リ には、 フル モデル で使用可能なチ ェ ッ ク /機能がすべて含 ま れてい る わけではないので、 最終的な シ ミ ュ レーシ ョ ン には使用で き ませ ん。 推奨 : デザ イ ンの最初の検証には UNIFAST ラ イ ブ ラ リ を使用 し 、 完全な検証には UNISIM ラ イ ブ ラ リ を使用 し て く だ さ い。 シ ミ ュ レーシ ョ ン ラ ン タ イ ムは、 シ ミ ュ レーシ ョ ン モー ド でプ リ ミ テ ィ ブ機能のサブセ ッ ト をサポー ト す る と 、 短 縮で き ます。 注記 : こ のシ ミ ュ レーシ ョ ン モデルでは、 サポー ト さ れていない属性値のみがチ ェ ッ ク さ れます。 MMCME2 シ ミ ュ レーシ ョ ン ラ ン タ イ ム を短縮す る ため、 高速 MMCME2 シ ミ ュ レーシ ョ ン モデルでは、 フル モデルか ら 次の 点が変更 さ れてい ます。 1. 高速シ ミ ュ レーシ ョ ン モデルでは基本的な ク ロ ッ ク 生成フ ァ ン ク シ ョ ンのみが提供 さ れてい ます。 DRP、 フ ァ イ ン位相シ フ ト 、 ク ロ ッ ク 停止、 ク ロ ッ ク カ ス ケー ド な ど のほかの フ ァ ン ク シ ョ ンはサポー ト さ れてい ません。 2. 入力 ク ロ ッ ク は、 周波数お よ び位相が変わ る こ と な く 、 安定 し てい る も の と みな さ れます。 入力 ク ロ ッ ク 周波数 サンプルは LOCKED 信号が High にな る と 停止 し ます。 3. 出力 ク ロ ッ ク 周波数、 位相、 デ ュ ーテ ィ サ イ ク ルな ど の機能は入力 ク ロ ッ ク 周波数お よ びパ ラ メ ー タ ー設定か ら 直接計算 さ れます。 注記 : 出力 ク ロ ッ ク 周波数は、 入力か ら VCO ク ロ ッ ク ま で生成 さ れません。 4. MMCME2 シ ミ ュ レーシ ョ ン モデルの LOCKED 信号のアサー ト 時間は、 標準版 と 高速版 と では異な り ます。 ° 標準モデルの LOCKED 信号のアサー ト 時間は M お よ び D 設定に左右 さ れます。標準 MMCME2 シ ミ ュ レー シ ョ ン モデルの場合、 M お よ び D の値が大 き い と 、 ロ ッ ク 時間が比較的長 く な り ます。 ° 高速シ ミ ュ レーシ ョ ン モデルの場合は、 LOCKED アサー ト 時間は短 く な り ます。 DSP48E1 高速 DSP48E1 シ ミ ュ レーシ ョ ン モデルでは、 シ ミ ュ レーシ ョ ン ラ ン タ イ ム を短縮す る ため、 そのフル モデルの一部 の機能が削除 さ れてい ます。 • パ タ ーン検出 • OverFlow/UnderFlow • DRP イ ン タ ーフ ェ イ ス のサポー ト ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 18 第 2 章 : シ ミ ュ レーシ ョ ンの準備 GTHE2_CHANNEL/GTHE2_COMMON 高速 GTHE2 シ ミ ュ レーシ ョ ン モデルでは、 シ ミ ュ レーシ ョ ン ラ ン タ イ ム を短縮す る ため、 その フル モデル と 比較 す る と 、 次の点が異な り ます。 • GTH リ ン ク は、 同 じ PPM (Parts Per Million) レー ト で、 近端のエン ド リ ン ク パー ト ナー と 遠端のエン ド リ ン ク パー ト ナー間で同期 し てい る 必要があ り ます。 • GTH を介 し た レ イ テ ン シは、 ハー ド ウ ェ アではサ イ ク ル精度は高 く あ り ません。 • DRP プ ロ ダ ク シ ョ ン リ セ ッ ト シーケ ン ス を シ ミ ュ レー ト す る こ と はで き ません。UNIFAST モデルを使用 し てい る 場合は、 こ れを無視 し て く だ さ い。 GTXE2_CHANNEL/GTXE2_COMMON 高速 GTXE2 シ ミ ュ レーシ ョ ン モデルでは、 シ ミ ュ レーシ ョ ン ラ ン タ イ ム を短縮す る ため、 その フル モデル と 比較 す る と 、 次の点が異な り ます。 • GTX リ ン ク は、 同 じ PPM (Parts Per Million) レー ト で、 近端のエン ド リ ン ク パー ト ナー と 遠端のエン ド リ ン ク パー ト ナー間で同期 し てい る 必要があ り ます。 • GTX を介 し た レ イ テ ン シは、 ハー ド ウ ェ アではサ イ ク ル精度は高 く あ り ません。 Verilog UNIFAST ラ イ ブ ラ リ の使用 UNIFAST モデルを使用 し てシ ミ ュ レーシ ョ ンす る には、 次の 2 つの方法があ り ます。 • 方法 1 は、 すべての UNIFAST モデルを使用 し てシ ミ ュ レーシ ョ ンす る 場合に推奨 さ れ る 方法です。 • 方法 2 は、 UNIFAST モデル と 一緒に使用する モジ ュ ールを指定す る 方法で、 ア ド バン ス ユーザー向けです。 こ れ ら のシ ミ ュ レーシ ョ ン方法については、 次のセ ク シ ョ ンで説明 し ます。 方法 1 : 完全 UNIFAST ラ イ ブ ラ リ (推奨) Vivado シ ミ ュ レー タ 、 ModelSim、 IES、 VCS を使用 し てい る Vivado プ ロ ジ ェ ク ト 環境で UNIFAST サポー ト (高速シ ミ ュ レーシ ョ ン モデル) を イ ネーブルにす る には、 次の コ マ ン ド を実行 し ます。 Tcl コ ン ソ ールで次の Tcl コ マ ン ド を使用 し ます。 set_property unifast true [current_fileset –simset] コ ン ポーネ ン ト フ ァ イ ルに関す る 詳細は、 15 ページの 「暗号化 さ れた コ ン ポーネ ン ト フ ァ イ ル」 を参照 し て く だ さ い。 詳細は、 サー ド パーテ ィ シ ミ ュ レー タ のユーザー ガ イ ド を参照 し て く だ さ い。 方法 2 : 特定 UNIFAST モ ジ ュ ールの使用 個々の ラ イ ブ ラ リ コ ン ポーネ ン ト を指定する には、Verilog コ ン フ ィ ギ ュ レーシ ョ ン文を使用 し ます。config.v フ ァ イ ルで次の よ う に指定 し て く だ さ い。 • 最上位モジ ュ ールま たは コ ン フ ィ ギ ュ レーシ ョ ンの名前 (例 : config cfg_xilinx;) • デザ イ ン コ ン フ ィ ギ ュ レーシ ョ ン を適用する 名前 (例 : design test bench;) • 明示的に呼び出 さ れないセルま たは イ ン ス タ ン ス の ラ イ ブ ラ リ 検索順序 (例 : default liblist unisims_ver unifast_ver;) • 特定の CELL ま たは INSTANCE の ラ イ ブ ラ リ のマ ッ プ (例 : instance testbench.inst.O1 use unifast_ver.MMCME2;) 注記 : ModelSim (vsim) の場合のみ、 -genblk を階層名に追加 し ます。 (例 : instance testbench.genblk1.inst.genblk1.O1 use unifast_ver.MMCME2; - VSIM) ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 19 第 2 章 : シ ミ ュ レーシ ョ ンの準備 サン プルの config.v config cfg_xilinx; design testbench; default liblist unisims_ver unifast_ver; //Use fast MMCM for all MMCM blocks in design cell MMCME2 use unifast_ver.MMCME2; //use fast dSO48E1for only this specific instance in the design instance testbench.inst.O1 use unifast_ver.DSP48E1; //If using ModelSim or Questa, add in the genblk to the name (instance testbench.genblk1.inst.genblk1.O1 use unifast_ver.DSP48E1) endconfig VHDL UNIFAST ラ イ ブ ラ リ の使用 VHDL UNIFAST ラ イ ブ ラ リ は、 Verilog と 同 じ 基本構造を持つので、 アーキ テ ク チ ャ ま たは ラ イ ブ ラ リ と と も に使用 で き ます。 テ ス ト ベンチ フ ァ イ ルに こ の ラ イ ブ ラ リ を含め る こ と がで き ます。 次の例では、 for を使用 し て、 階層を 展開 し てい ます。 library unisim; library unifast; configuration cfg_xilinx of testbench is for xilinx .. for inst:netlist ... use entity work.netlist(inst); .......for inst .........for all:MMCME2 ..........use entity unifast.MMCME2; .........end for; .......for O1 inst:DSP48E1; .........use entity unifast.DSP48E1; .......end for; ...end for; ..end for; end for; end cfg_xilinx; シ ミ ュ レーシ ョ ン設定 Flow Navigator で [Simulation] → [Simulation Settings] を ク リ ッ ク す る と 、Vivado IDE でシ ミ ュ レーシ ョ ン設定がで き ま す。 図 2-2 は Flow Navigator の [Simulation] を示 し てい ます。 X-Ref Target - Figure 2-2 図 2‐2 : Flow Navigator のシ ミ ュ レーシ ョ ン オプ シ ョ ン • [Simulation Settings] : Vivado シ ミ ュ レー タ を選択お よ び設定する ダ イ ア ロ グ ボ ッ ク ス が開き ます。 22 ページの 「Vivado シ ミ ュ レー タ のプ ロ ジ ェ ク ト 設定」 を参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 20 第 2 章 : シ ミ ュ レーシ ョ ンの準備 • [Run Simulation] : シ ミ ュ レーシ ョ ン設定に基づいてデザ イ ン を コ ンパ イ ル、 エ ラ ボ レー ト 、 シ ミ ュ レーシ ョ ンす る コ マ ン ド オプシ ョ ン を設定 し ます。 デザ イ ン の合成前にシ ミ ュ レーシ ョ ン を実行す る と 、 Vivado シ ミ ュ レー タ ではビヘ イ ビ アー シ ミ ュ レーシ ョ ン が実行 さ れ、 波形ビ ュ ーが開 き (37 ページの図 3-11)、 信号お よ びバ ス の 値の付いた HDL オブジ ェ ク ト がデジ タ ルま たはアナ ロ グ形式で表示 さ れます。 各デザ イ ン段階 (合成後 と イ ン プ リ メ ン テーシ ョ ン後) で、 論理シ ミ ュ レーシ ョ ンお よ び タ イ ミ ン グ シ ミ ュ レー シ ョ ン を実行で き ます。 こ れに該当す る Tcl コ マ ン ド を使用す る 場合は、 launch_simulation と 入力 し ます。 ヒ ン ト : こ の コ マ ン ド に -scripts_only オプシ ョ ン を使用する と 、Vivado シ ミ ュ レー タ を実行す る ス ク リ プ ト が書 き 出 さ れます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 21 第 2 章 : シ ミ ュ レーシ ョ ンの準備 Vivado シ ミ ュ レー タ のプ ロ ジ ェ ク ト 設定 Flow Navigator で [Simulation Settings] を ク リ ッ ク し て [Project Settings] ダ イ ア ロ グ ボ ッ ク ス (図 2-3) を開き ます。 X-Ref Target - Figure 2-3 1 2 3 4 5 6 シ ミ ュ レー タ を選択 し ます。 シ ミ ュ レー タ の言語を選択 し ます。 シ ミ ュ レーシ ョ ン セ ッ ト を選択 し ます。 シ ミ ュ レーシ ョ ンの最上位デザ イ ン名を参照 し ます。 再実行前にシ ミ ュ レーシ ョ ン フ ァ イ ルを消去 し ます。 こ のオプ シ ョ ンはオンに し た ま ま に し てお く こ と を推奨 し ます。 シ ミ ュ レーシ ョ ン を実行せずに ス ク リ プ ト を生成 し ます。 7 8 9 10 それぞれのカ テ ゴ リ でオプシ ョ ン を設定す る ための タ ブ を選択 し ます。 [Compilation] のみです。 イ ン ク ルー ド パ ス を設定ま たはマ ク ロ を 定義す る デ ィ レ ク ト リ を指定 し ます。 [Compilation] のみです。 ジ ェ ネ リ ッ ク /パ ラ メ ー タ ーの ロ ケーシ ョ ン を選択す る デ ィ レ ク ト リ を指定 し ます。 それぞれのページに対 し 、 オプシ ョ ン リ ス ト が ウ ィ ン ド ウ に表示 さ れます。 オプシ ョ ン を選択す る と 、 その説明が表示 さ れます。 図 2‐3 : [Project Settings] ダ イ ア ロ グ ボ ッ ク スの [Simulation] ページ ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 22 第 2 章 : シ ミ ュ レーシ ョ ンの準備 重要 : 前に定義 さ れた シ ミ ュ レーシ ョ ン セ ッ ト の コ ンパ イ ルお よ びシ ミ ュ レ ーシ ョ ン設定は、 新 し く 定義 さ れた シ ミ ュ レーシ ョ ン セ ッ ト には適用 さ れません。 ヒ ン ト : Vivado シ ミ ュ レー タ にはあ ら か じ め コ ンパ イ ル さ れた ラ イ ブ ラ リ が含まれてい る ので、ラ イ ブ ラ リ デ ィ レ ク ト リ を指定す る 必要はあ り ません。 注 意 : ど う し て も 必 要 な 場 合 に の み [Advanced] タ ブ で 設 定 を 変 更 し て く だ さ い。 [Include all design sources for simulation] チ ェ ッ ク ボ ッ ク ス はデフ ォ ル ト でオンにな っ てい ます。 こ のチ ェ ッ ク ボ ッ ク ス をオ フ にす る と 、 予測 し な い結果にな る 可能性があ り ま す。 チ ェ ッ ク ボ ッ ク ス がオ ン にな っ てい る と 、 シ ミ ュ レーシ ョ ン セ ッ ト には、 ア ウ ト オブ コ ン テ キ ス ト (OOC) の IP、 IP イ ン テ グ レー タ ー フ ァ イ ル、 DCP が含まれます。 シ ミ ュ レー タ 言語オプ シ ョ ン について ザ イ リ ン ク ス IP では、 1 言語の ビヘ イ ビ アー シ ミ ュ レーシ ョ ン モデル し か提供 さ れていない も のがほ と ん ど です。 該当言語の ラ イ セ ン ス がない場合、 その言語 し か対応 し ていないシ ミ ュ レー タ でのシ ミ ュ レーシ ョ ンはで き ません。 simulator_language プ ロ パテ ィ を使用す る と 、 IP は指定 し た言語のシ ミ ュ レーシ ョ ン モデルを配布 し ます。 図 2-3 は、 シ ミ ュ レー タ 言語を設定で き る 箇所を示 し てい ます。 た と えば、 1 言語のシ ミ ュ レー タ を使用 し てい る 場合、 そのシ ミ ュ レー タ の言語 と 同 じ にな る よ う に simulator_language プ ロ パテ ィ を設定 し て く だ さ い。 Vivado Design Suite では、 言語別の構造シ ミ ュ レーシ ョ ン モデルを オンデマ ン ド で生成する ため、 IP の合成フ ァ イ ル を使用 し て、 シ ミ ュ レーシ ョ ン モデルが利用で き る よ う にな っ てい ます。 ビヘ イ ビ アー モデルがなか っ た り 、 シ ミ ュ レー タ の ラ イ セ ン ス が付与 さ れてい る 言語 と モデルの言語が一致 し ていない場合、Vivado ツールでは構造シ ミ ュ レー シ ョ ン モデルが自動的に生成 さ れ、 シ ミ ュ レーシ ョ ン がで き る よ う にな り ます。 そ う し た こ と がな ければ、 IP の既 存ビヘ イ ビ アー シ ミ ュ レーシ ョ ン モデルが使用 さ れます。合成ま たはシ ミ ュ レーシ ョ ン フ ァ イ ルが存在 し ない場合、 シ ミ ュ レーシ ョ ンはサポー ト さ れません。 注記 : simulator_language プ ロ パテ ィ では、生成 さ れた合成済みチ ェ ッ ク ポ イ ン ト (.dcp) がオ フ にな っ てい る と 、 言語別シ ミ ュ レーシ ョ ン ネ ッ ト リ ス ト フ ァ イ ルは提供 さ れません。 1. [Window] → [IP Catalog] を ク リ ッ ク し ます。 2. 該当す る IP を右 ク リ ッ ク し 、 [Customize IP] を ク リ ッ ク し ます。 3. [Customize IP] ダ イ ア ロ グ ボ ッ ク ス で [OK] を ク リ ッ ク し ます。 [Generate Output Products] ダ イ ア ロ グ ボ ッ ク ス (図 2-4) が表示 さ れます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 23 第 2 章 : シ ミ ュ レーシ ョ ンの準備 X-Ref Target - Figure 2-4 図 2‐4 : [Generate Synthesized Checkpoint (.dcp)] オプ シ ョ ン を含むダ イ ア ロ グ ボ ッ ク ス 表 2-6 は、 simulator_language プ ロ パテ ィ の機能を示 し てい ます。 表 2‐6 : simulator_language プ ロパテ ィ の機能 IP に含まれる シ ミ ュ レーシ ョ ン モデル IP は VHDL と Verilog ビ ヘ イ ビ アー モデルを配布 IP は Verilog ビヘ イ ビ アー モデル のみを配布 IP は VHDL ビ ヘ イ ビ アーモデル のみを配布 IP は ビ ヘ イ ビ アー モデル を 配布 し ない simulator_language の値 使用 さ れる シ ミ ュ レーシ ョ ン モデル Mixed ビヘ イ ビ アー モデル (target_language) Verilog Verilog ビヘ イ ビ アー モデル VHDL VHDL ビヘ イ ビ アー モデル Mixed Verilog ビヘ イ ビ アー モデル Verilog Verilog ビヘ イ ビ アー モデル VHDL DCP か ら 生成 さ れた VHDL シ ミ ュ レ ーシ ョ ン ネッ ト リ ス ト Mixed VHDL ビヘ イ ビ アー モデル Verilog DCP か ら 生成 さ れた Verilog シ ミ ュ レ ーシ ョ ン ネッ ト リ ス ト VHDL VHDL ビヘ イ ビ アー モデル Mixed/Verilog/VHDL DCP か ら 生成 さ れ た ネ ッ ト リ ス ト (target_language) 注記 : 1. ビヘ イ ビ アー シ ミ ュ レーシ ョ ン モデルが利用で き る 場合は、 それが構造シ ミ ュ レーシ ョ ン モデル よ り も 優先 さ れます。 Vivado ツールでは、 ど のモデルが使用可能であ る かに基づいて、 ビヘ イ ビ アー モデル ま たは構造モデルの ど ち ら かが自動的に選択 さ れます。 こ の自動選択は上書 き で き ません。 2. ど ち ら の言語 も シ ミ ュ レーシ ョ ンに使用で き る 場合は target_language プ ロ パテ ィ を使用 し ます。 Tcl コ マ ン ド : set_property target_language VHDL [current_project] ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 24 第 2 章 : シ ミ ュ レーシ ョ ンの準備 推奨 さ れる シ ミ ュ レーシ ョ ン精度 重要 : 1ps の時間精度を使用 し てシ ミ ュ レーシ ョ ン を実行 し ます。MMCM な ど の一部のザ イ リ ン ク ス プ リ ミ テ ィ ブ コ ン ポーネ ン ト は、 論理ま たは タ イ ミ ン グ シ ミ ュ レーシ ョ ンで正 し く 動作する のに 1ps の精度を必要 と し ます。 ザ イ リ ン ク ス シ ミ ュ レーシ ョ ン モデルでは こ れ よ り 荒い精度を使用 し て も シ ミ ュ レー タ パフ ォーマ ン ス が良 く な る こ と はあ り ません(ザ イ リ ン ク ス シ ミ ュ レーシ ョ ン モデルの場合、シ ミ ュ レーシ ョ ン時間の多 く はデル タ サ イ ク ルで 消費 さ れます。 ま た、 デル タ サ イ ク ルはシ ミ ュ レーシ ョ ン精度に左右 さ れません)。 重要 : テ ス ト 機器は最近似値の ピ コ 秒 (ps) で タ イ ミ ン グ を計測す る ので、 最小精度 と し て ピ コ 秒が使用 さ れます。 ネ ッ ト リ ス ト の生成 合成済みま たは イ ンプ リ メ ン ト 済みデザ イ ンのシ ミ ュ レーシ ョ ン を実行す る には、 ネ ッ ト リ ス ト 生成プ ロ セ ス を実行 す る 必要があ り ます。 Tcl のネ ッ ト リ ス ト 生成 コ マ ン ド は合成済みま たは イ ンプ リ メ ン ト 済みデザ イ ン デー タ ベース を読み込んで、 デザ イ ン全体に対 し て 1 つのネ ッ ト リ ス ト を書 き 出 し ます。 Vivado Design Suite では、Vivado IDE ま たは launch_simulation コ マ ン ド を使用 し てシ ミ ュ レー タ を起動す る と き に、 ネ ッ ト リ ス ト が自動的に生成 さ れます。 ネ ッ ト リ ス ト 生成 コ マ ン ド では、 SDF お よ びデザ イ ン ネ ッ ト リ ス ト を書 き 出す こ と がで き ます。 Vivado Design Suite には、 次の Tcl コ マ ン ド があ り ます。 • Tcl コ マ ン ド : ° write_verilog : Verilog ネ ッ ト リ ス ト ° write_vhdl : VHDL ネ ッ ト リ ス ト ° write_sdf : SDF 生成 ヒ ン ト : SDF 値は、 合成中な ど、 デザ イ ン プ ロ セ ス の早期段階では概算値で し かあ り ませんが、 デザ イ ン プ ロ セ ス が進むにつれ、 デー タ ベース に よ り 多 く の情報が含まれ、 タ イ ミ ン グ値が よ り 正確にな っ てい き ます。 論理ネ ッ ト リ ス ト の生成 Vivado Design Suite では論理シ ミ ュ レ ーシ ョ ン用の Verilog ま たは VHDL 構造ネ ッ ト リ ス ト の出力がサポー ト さ れて い ます。 こ のネ ッ ト リ ス ト は、 構造ネ ッ ト リ ス ト のビヘ イ ビ アー と 、 ビヘ イ ビ アー モデル (RTL) シ ミ ュ レーシ ョ ンの 予期値が一致す る こ と を チ ェ ッ ク す る ために、 シ ミ ュ レ ーシ ョ ン を実行す る ために使用 し ま す ( タ イ ミ ン グ シ ミ ュ レーシ ョ ンは実行 し ない) 。 論理シ ミ ュ レーシ ョ ン ネ ッ ト リ ス ト は階層構造にな っ ていて、モジ ュ ールま たはエン テ ィ テ ィ レベル (プ リ ミ テ ィ ブ お よ びマ ク ロ プ リ ミ テ ィ ブ を含む下位階層) に展開可能です。 こ れ ら のプ リ ミ テ ィ ブは、 次の ラ イ ブ ラ リ に含まれてい ます。 • Verilog シ ミ ュ レーシ ョ ンの場合は UNISIMS_VER シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ • VHDL シ ミ ュ レーシ ョ ンの場合は UNISIM シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ 一般的には、 ビヘ イ ビ アー シ ミ ュ レーシ ョ ンで使用 し たの と 同 じ テ ス ト ベンチを使用 し て、 さ ら に精度の高いシ ミ ュ レーシ ョ ン を実行で き ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 25 第 2 章 : シ ミ ュ レーシ ョ ンの準備 次の Tcl コ マ ン ド で、 Verilog お よ び VHDL の論理シ ミ ュ レーシ ョ ン ネ ッ ト リ ス ト がそれぞれ生成 さ れます。 write_verilog -mode funcsim <Verilog_Netlist_Name.v> write_vhdl -mode funcsim <VHDL_Netlist_Name.vhd> タ イ ミ ング ネ ッ ト リ ス ト の生成 Vivado ツールでの ワ ース ト ケース の配置配線後の遅延を計算 し た後に回路動作を検証す る には、 Verilog タ イ ミ ン グ シ ミ ュ レーシ ョ ン を使用 し ます。 一般的には、 論理シ ミ ュ レーシ ョ ンで使用 し たの と 同 じ テ ス ト ベンチを使用 し て、 さ ら に精度の高いシ ミ ュ レーシ ョ ン を実行で き ます。 2 つのシ ミ ュ レーシ ョ ン結果を比較 し 、 デザ イ ンが最初に指定 し た と お り に実行 さ れてい る か ど う か を検証 し ます。 タ イ ミ ン グ シ ミ ュ レーシ ョ ン ネ ッ ト リ ス ト を生成す る 手順は、 次の と お り です。 1. デザ イ ンのシ ミ ュ レーシ ョ ン ネ ッ ト リ ス ト フ ァ イ ルを生成 し ます。 2. タ イ ミ ン グ遅延すべて を ア ノ テー ト し て SDF 遅延フ ァ イ ルを生成 し ます。 重要 : Vivado IDE では、 Verilog タ イ ミ ン グ シ ミ ュ レーシ ョ ン し かサポー ト さ れません。 タ イ ミ ン グ シ ミ ュ レーシ ョ ン ネ ッ ト リ ス ト を生成す る Tcl 構文は次の と お り です。 write_verilog -mode timesim -sdf_anno true <Verilog_Netlist_Name> ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 26 第 3 章 : Vivado シ ミ ュ レー タ について 第 3章 Vivado シ ミ ュ レー タ について 概要 本章では、 Vivado® 統合設計環境 (IDE) で使用可能な Vivado® シ ミ ュ レー タ 機能について説明 し ます。 プ ッ シ ュ ボ タ ンで波形を ト レースお よ びデバ ッ グで き る 機能 も 含めて こ こ で説明 し ます。 Vivado シ ミ ュ レー タ は、 ハー ド ウ ェ ア記述言語 (HDL) の イ ベン ト ド リ ブン シ ミ ュ レー タ で、 VHDL、 Verilog、 System Verilog (SV)、 混合言語の VHDL/Verilog ま たは VHDL/SV の論理お よ び タ イ ミ ン グ シ ミ ュ レーシ ョ ンがサポー ト さ れ てい ます。 Vivado シ ミ ュ レーシ ョ ン を実行す る 詳細な手順は、 『Vivado Design Suite チ ュ ー ト リ アル : ロ ジ ッ ク シ ミ ュ レ ーシ ョ ン』 (UG937) [参照 10] を参照 し て く だ さ い。 Vivado シ ミ ュ レー タ の機能 Vivado シ ミ ュ レー タ では、 次の機能がサポー ト さ れます。 • ソ ース コ ー ド デバ ッ グ (ス テ ッ プ、 ブ レー ク ポ イ ン ト 、 現在値の表示) • タ イ ミ ン グ シ ミ ュ レーシ ョ ン用の SDF ア ノ テーシ ョ ン • VCD ダ ンプ • SAIF ダ ンプ (電力解析お よ び最適化用) • HardIP ブ ロ ッ ク (シ リ アル ト ラ ン シーバーお よ び PCIe® な ど) のネ イ テ ィ ブ サポー ト • マルチ ス レ ッ ド コ ンパ イ ル • 混合言語 (VHDL、 Verilog,、 ま たは SystemVerilog デザ イ ン コ ン ス ト ラ ク ト ) • 1 ク リ ッ ク でシ ミ ュ レーシ ョ ン を再 コ ンパ イ ルお よ び再起動 • 1 ク リ ッ ク で コ ンパ イ ルお よ びシ ミ ュ レーシ ョ ン • ザ イ リ ン ク ス シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ のビル ト イ ン サポー ト • リ アル タ イ ムの波形ア ッ プデー ト Vivado シ ミ ュ レー タ の実行 重要 : シ ミ ュ レーシ ョ ン を実行す る 前に、 デザ イ ンに適切なプ ロ ジ ェ ク ト 設定を指定 し てい る こ と を確認 し て く だ さ い。 Vivado シ ミ ュ レー タ を使用 し てい る 場合は、 第 2 章の 「Vivado シ ミ ュ レー タ のプ ロ ジ ェ ク ト 設定」 を参照 し て く だ さ い。 サポー ト さ れてい る サー ド パーテ ィ シ ミ ュ レー タ を使用 し てい る 場合は、 第 8 章 「サー ド パーテ ィ シ ミ ュ レー タ の使用」 を参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 27 第 3 章 : Vivado シ ミ ュ レー タ について Flow Navigator か ら [Run Simulation] を ク リ ッ ク し 、 次の図にあ る よ う に、 Vivado シ ミ ュ レー タ の ワー ク スペース を起 動 し ます。 X-Ref Target - Figure 3-1 1 2 3 4 メ イ ン ツールバー [Run] メ ニ ュ ー [Objects] ビ ュ ー [Simulation] ツールバー 5 6 7 8 波形オブジ ェ ク ト 波形ビ ュ ー [Scopes] ビ ュ ー [Sources] ビ ュ ー 図 3‐1 : Vivado シ ミ ュ レー タ のワー ク スペース ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 28 第 3 章 : Vivado シ ミ ュ レー タ について メ イ ン ツールバー Vivado IDE で最 も よ く 使用 さ れ る コ マ ン ド に 1 ク リ ッ ク でア ク セ ス で き ます。 オプシ ョ ンの上にカー ソ ルを置 く と 、 詳細を示すツール ヒ ン ト が表示 さ れます。 [Run] メ ニ ュ ー メ ニ ュ ーは Vivado IDE と 同 じ ですが、 シ ミ ュ レーシ ョ ン を実行 し た後には [Run] メ ニ ュ ーが追加 さ れます。 シ ミ ュ レーシ ョ ンの [Run] メ ニ ュ ーは、 図 3-2 の よ う にな り ます。 X-Ref Target - Figure 3-2 図 3‐2 : シ ミ ュ レーシ ョ ンの [Run] の メ ニ ュ ー オプ シ ョ ン Vivado シ ミ ュ レー タ ーの [Run] メ ニ ュ ー オプシ ョ ンは次の と お り です。 • [Restart] : 既存のシ ミ ュ レーシ ョ ン を時間 0 か ら 再開 し ます。 Tcl コ マ ン ド : restart • [Run All] : 開いてい る シ ミ ュ レーシ ョ ン を最後ま で実行 し ます。 Tcl コ マ ン ド : run all • [Run For] : 実行す る シ ミ ュ レーシ ョ ン時間を指定 し ます。 Tcl コ マ ン ド :run <time> • [Step] : 次の HDL ソ ース行ま でシ ミ ュ レーシ ョ ン を実行 し ます。 • [Break] : 実行中のシ ミ ュ レーシ ョ ン を停止 し ます。 • [Delete All Breakpoints] : すべてのブ レー ク ポ イ ン ト を削除 し ます。 • [Relaunch Simulation] : シ ミ ュ レーシ ョ ン フ ァ イ ルを再コ ンパ イ ル し て run を再実行 し ます。 [Simulation] ツールバー Vivado シ ミ ュ レー タ を実行す る と 、 シ ミ ュ レーシ ョ ン用の ツールバー (次の図を参照) が、 メ イ ン の ツールバーの右 側に開 き ます。 X-Ref Target - Figure 3-3 図 3‐3 : [Simulation] ツールバー こ れ ら は、 前出の 29 ページの図 3-2 にあ る の と 同 じ ボ タ ン で ([Delete All Breakpoints] オプシ ョ ンはな し )、 使いやす く す る ために提供 さ れてい ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 29 第 3 章 : Vivado シ ミ ュ レー タ について [Simulation] ツールバーのボ タ ンの説明 ツールバーのボ タ ンの上にカー ソ ルを移動 さ せ る と 、 ボ タ ン を説明す る ツールチ ッ プが表示 さ れます。 • [Restart] : シ ミ ュ レーシ ョ ン時間を 0 に リ セ ッ ト し ます。 • [Run all] : すべての イ ベン ト が完了す る ま で、 ま たはシ ミ ュ レーシ ョ ン を停止す る よ う HDL 文で表示 さ れ る ま で、 シ ミ ュ レーシ ョ ン を実行 し ます。 • [Run For] : 指定 さ れた時間実行 し ます。 • [Step] : 次の HDL 文ま でシ ミ ュ レーシ ョ ン を実行 し ます。 • [Break] : 現在のシ ミ ュ レーシ ョ ン を停止 し ます。 • [Relaunch] : シ ミ ュ レーシ ョ ン ソ ース を再コ ンパ イ ル し 、 シ ミ ュ レーシ ョ ン を再開始 し ます ( コ ー ド 変更 し た後な ど)。 [Sources] ビ ュ ー [Sources] ビ ュ ーには階層ツ リ ーでシ ミ ュ レーシ ョ ン ソ ース が [Hierarchy]、 [IP Sources]、 [Libraries]、 [Compile Order] な ど の タ ブで表示 さ れます (図 3-4)。 X-Ref Target - Figure 3-4 図 3‐4 : [Sources] ビ ュ ー [Sources] ビ ュ ーのボ タ ン の上にカー ソ ルを置 く と 、 その説明が ツール ヒ ン ト と し て表示 さ れ ま す。 ボ タ ン を使用す る と 、 フ ァ イ ルの検証、 展開/非展開、 追加、 開 く 、 フ ィ ル タ ーお よ びス ク ロ ールな ど がで き ます。 ソ ース フ ァ イ ルはオブジ ェ ク ト を右 ク リ ッ ク し て [Go to Source Code] を ク リ ッ ク し て も 開 く こ と がで き ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 30 第 3 章 : Vivado シ ミ ュ レー タ について [Scopes] ビ ュ ー ス コ ープ と は HDL デザ イ ン を階層に分けた も のです。 デザ イ ン ユニ ッ ト を イ ン ス タ ン シエー ト する たび、 ま たはプ ロ セ ス、 ブ ロ ッ ク 、 パ ッ ケージ、 サブプ ロ グ ラ ム を定義す る たびに、 ス コ ープを作成 し ます。 次の図に示す よ う に、 [Scopes] ビ ュ ーにはデザ イ ン階層が表示 さ れます。 こ の階層で ス コ ープ を選択する と 、 [Objects] ビ ュ ーに、 その ス コ ープの HDL オブジ ェ ク ト がすべて表示 さ れ ま す。 [Objects] ビ ュ ーで HDL オブジ ェ ク ト を選択 し 、 それを波形ビ ュ ーアに追加す る こ と がで き ます。 X-Ref Target - Figure 3-5 図 3‐5 : [Scopes] ビ ュ ー ス コ ープの フ ィ ル タ ー • フ ィ ル タ ー ボ タ ン を ク リ ッ ク す る と 、 その ス コ ープの表示/非表示を切 り 替え る こ と がで き ます。 ヒ ン ト : フ ィ ル タ ー ボ タ ン を使用 し て ス コ ープ を非表示にす る と 、 ス コ ープの種類に関係な く 、 その ス コ ープ内のす べての ス コ ープが非表示にな り ます。 た と えば、 上の図で、 すべての Verilog モジ ュ ール ス コ ープ を非表示にす る た め Verilog モジ ュ ールのボ タ ン を ク リ ッ ク す る と 、 bft_tb ス コ ープだけでな く 、 VHDL エン テ ィ テ ィ ス コ ープであ る uut も 非表示にな り ます。 • 特定の文字列を含むス コ ープに表示を制限す る には、 [Search] ボ タ ン を ク リ ッ ク し ます。 テ キ ス ト ボ ッ ク ス に文字列を入力 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 31 第 3 章 : Vivado シ ミ ュ レー タ について [Objects] ビ ュ ーで表示 さ れ る オブジ ェ ク ト は、 現在ど の ス コ ープが選択 さ れてい る かに よ っ て変わ り ます。 [Objects] ビ ュ ーでオブジ ェ ク ト を変更す る には、 該当す る ス コ ープを選択 し ます。 ス コ ープ を右 ク リ ッ ク す る と 、 ポ ッ プア ッ プ メ ニ ュ ーが表示 さ れ、 次の よ う な メ ニ ュ ー オプシ ョ ンがあ り ます (図 3-6)。 • [Add to Wave Window] : 選択 し た ス コ ープの HDL オブジ ェ ク ト すべて を波形 コ ン フ ィ ギ ュ レーシ ョ ンに追加 し ま す。 ヒ ン ト : ビ ッ ト 幅の大 き な HDL オブジ ェ ク ト を波形ビ ュ ーアに追加す る と 、表示に時間がかか っ て し ま い ます。[Add to Wave Window] コ マ ン ド を実行す る 前に、 波形 コ ン フ ィ ギ ュ レーシ ョ ン で表示制限を設定 し 、 その よ う なオブジ ェ ク ト を フ ィ ル タ ーにかけ る こ と がで き ます。それには、set_property DISPLAY_LIMIT <maximum bit width> [current_wave_config] と い う Tcl コ マ ン ド を使用 し ます。 [Add to Wave Window] コ マ ン ド を使用す る 場合、 [Objects] ビ ュ ーで表示 さ れてい る HDL オブジ ェ ク ト と は少 し 異な る HDL オブジ ェ ク ト が追加 さ れ る こ と があ り ま す。 [Scopes] ビ ュ ーで ス コ ープ を選択 し た場合は、 選択 さ れた ス コ ープに直接定義 さ れてい る オブジ ェ ク ト だけでな く 、 その ス コ ープ を囲むス コ ープの HDL オブジ ェ ク ト が表示 さ れ る こ と があ り ます。 [Add to Wave Window] コ マ ン ド の場合は、 選択 し た ス コ ープだけのオブジ ェ ク ト を追加 し ます。 ま たは、オブジ ェ ク ト を [Objects] ビ ュ ーか ら 波形ビ ュ ーの [Name] 列に ド ラ ッ グ ア ン ド ド ロ ッ プす る 方法 も あ り ます。 重要 : 波形ビ ュ ーには、 オブジ ェ ク ト が追加 さ れた時点か ら 継続的に、 シ ミ ュ レーシ ョ ン中のそのオブジ ェ ク ト の値 の変化が表示 さ れます。 ヒ ン ト : オブジ ェ ク ト 挿入以前のオブジ ェ ク ト 値を表示 さ せる には、シ ミ ュ レーシ ョ ン を再開始する 必要があ り ます。 シ ミ ュ レーシ ョ ンの再開を避け る には、デザ イ ンの表示可能な HDL オブジ ェ ク ト すべての値を取 り 込むため、シ ミ ュ レーシ ョ ン run を開始す る と き に、log_wave -r / Tcl コ マ ン ド を実行 し ます。詳細は、76 ページの「Tcl コ マ ン ド log_wave の使用」 を参照 し て く だ さ い。 波形 コ ン フ ィ ギ ュ レーシ ョ ンの作成や HDL オブジ ェ ク ト の追加な ど、波形 コ ン フ ィ ギ ュ レーシ ョ ンへの変更は、 WCFG フ ァ イ ルを保存す る ま で保存 さ れません。 • [Go To Source Code] : 選択 し た ス コ ープの定義で ソ ース コ ー ド を開 き ます。 • [Go To Instantiation Source Code] : Verilog モジ ュ ールお よ び VHDL エン テ ィ テ ィ イ ン ス タ ン ス の場合、 選択 し た イ ン ス タ ン ス の イ ン ス タ ン シエーシ ョ ン時点で ソ ース コ ー ド を開 き ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 32 第 3 章 : Vivado シ ミ ュ レー タ について X-Ref Target - Figure 3-6 図 3‐6 : [Scopes] ビ ュ ーの右ク リ ッ ク で表示 さ れる オプ シ ョ ン ソ ース コ ー ド テ キ ス ト エデ ィ タ ーで コ ー ド の識別子にカー ソ ルを置 く と 値が表示 さ れます (図 3-7)。 重要 : こ の機能を使用す る には、 [Scopes] ビ ュ ーで選択 し た ソ ース コ ー ド に ス コ ープが関連付け ら れてい る こ と を確 認 し て く だ さ い。 ヒ ン ト : 最上位モジ ュ ールが イ ン ス タ ン シエー ト さ れていないため、 そのモジ ュ ールを選択 し て も 、 上の図では、 [Go to Instantiation Source Code] がグ レー表示にな っ てい ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 33 第 3 章 : Vivado シ ミ ュ レー タ について X-Ref Target - Figure 3-7 図 3‐7 : 識別子が表示 さ れた ソ ース コ ー ド その他のス コ ープおよび ソ ース オプ シ ョ ン [Scopes] ま たは [Sources] ビ ュ ーでは、 [Show Search] ボ タ ン を ク リ ッ ク す る と 検索フ ィ ールが表示 さ れます。 [Scopes] お よ び [Objects] ビ ュ ーを使用す る 代わ り に、Tcl コ ン ソ ールに次を入力 し て HDL デザ イ ン を表示す る こ と も で き ます。 get_scopes current_scope report_scopes report_values ヒ ン ト : ソ ース フ ァ イ ルにア ク セ ス し て編集す る には、図 3-8 に示す [Go to Source Code] を ク リ ッ ク し て、[Scopes] ま たは [Objects] ビ ュ ーか ら フ ァ イ ルを開き ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 34 第 3 章 : Vivado シ ミ ュ レー タ について X-Ref Target - Figure 3-8 図 3‐8 : [Scopes] ビ ュ ーのコ ン テキス ト メ ニ ュ ー ヒ ン ト : ソ ー ス コ ー ド を編集 し 、 フ ァ イ ルを保存 し た ら 、 [Re-launch] ボ タ ン を ク リ ッ ク し て、 シ ミ ュ レーシ ョ ン を閉 じ て再び開かずに、 シ ミ ュ レーシ ョ ン を再 コ ンパ イ ルお よ び再起動 し ます。 [Objects] ビ ュ ー [Objects] ビ ュ ーには、 [Scopes] ビ ュ ーで選択 し た ス コ ープに関連付け ら れてい る HDL シ ミ ュ レーシ ョ ン オブジ ェ ク ト が表示 さ れます (図 3-9)。 X-Ref Target - Figure 3-9 図 3‐9 : [Objects] ビ ュ ー HDL オブジ ェ ク ト の横にあ る ア イ コ ンは、 各オブジ ェ ク ト の タ イ プ ま たはポー ト モー ド を示 し ます。 こ のビ ュ ーに はシ ミ ュ レーシ ョ ン オブジ ェ ク ト の名前、 値、 デー タ タ イ プな ど が リ ス ト さ れます。 次の コ マ ン ド を Tcl コ ン ソ ールに入力す る と 、 オブジ ェ ク ト の現在の値を取得で き ます。 get_value <hdl_object> 表 3-1 は、 [Objects] ビ ュ ーの上部のボ タ ン を 簡単に説明 し て い ま す。 こ れ ら のボ タ ン を ク リ ッ ク す る と 、 [Objects] ビ ュ ーで選択 さ れたオブジ ェ ク ト が表示 さ れます。 [Objects] ビ ュ ーの コ ン テ ン ツ を絞 り 込むには、 こ のボ タ ン を使用 し ます。 表 3‐1 : [Objects] ビ ュ ーのボ タ ン ボタ ン 説明 [Search] ボ タ ン を ク リ ッ ク す る と 、 検索する オブジ ェ ク ト 名を入力で き る フ ィ ール ド が開 き ます。 入力信号 出力信号 入力/出力信号 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 35 第 3 章 : Vivado シ ミ ュ レー タ について 表 3‐1 : [Objects] ビ ュ ーのボ タ ン (続き) ボタ ン 説明 内部信号 一定信号 可変信号 ヒ ン ト : ボ タ ンの上にカー ソ ルを置 く と 、 説明が表示 さ れます。 一部の HDL オブジ ェ ク ト タ イ プは、 1 つま たは複数のオブジ ェ ク ト フ ィ ル タ ー ボ タ ン を ク リ ッ ク し て、 表示/非表示を切 り 替え る こ と がで き ます。 ボ タ ンの上にカー ソ ルを置 く と 、 オブジ ェ ク ト タ イ プ を示すツール ヒ ン ト が表示 さ れます。 [Objects] ビ ュ ーの コ ン テキス ト メ ニ ュ ー [Objects] ビ ュ ーのオブジ ェ ク ト を右 ク リ ッ ク す る と 、 コ ン テ キ ス ト メ ニ ュ ーが表示 さ れます (図 3-10)。 コ ン テ キ ス ト メ ニ ュ ーのオプシ ョ ンは次の よ う にな っ てい ます。 X-Ref Target - Figure 3-10 図 3‐10 : [Objects] ビ ュ ーのコ ン テキス ト メ ニ ュ ー • [Add to Wave Window] : 選択 し たオブジ ェ ク ト を波形 コ ン フ ィ ギ ュ レーシ ョ ンに追加 し ます。 ま たは、 オブジ ェ ク ト を [Objects] ビ ュ ーか ら 波形ビ ュ ーの [Name] 列ま で ド ラ ッ グ ア ン ド ド ロ ッ プ し ます。 • [Show in Wave Window] : 波形ビ ュ ーで選択 さ れたオブジ ェ ク ト をハ イ ラ イ ト し ます。 • [Radix] : 選択 し たオブジ ェ ク ト の値を [Objects] ビ ュ ーお よ び ソ ース コ ー ド ビ ュ ーで表示す る 際に使用す る 数値 フ ォーマ ッ ト を選択 し ます。 それぞれのオブジ ェ ク ト の基数を次の よ う に変更で き ます。 a. [Objects] ビ ュ ーでオブジ ェ ク ト を右 ク リ ッ ク し ます。 b. コ ン テ キ ス ト メ ニ ュ ーか ら [Radix] を ク リ ッ ク し て、 フ ォーマ ッ ト を選択 し ます。 - [Binary] (デフ ォ ル ト ) - [Hexadecimal] (16 進数) - [Octal] (8 進数) - [ASCII] - [Unsigned Decimal] (符号な し 10 進数) - [Signed Decimal] (符号付 き 10 進数) ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 36 第 3 章 : Vivado シ ミ ュ レー タ について ヒ ン ト : [Objects] ビ ュ ーで基数を変更す る と 、 波形ビ ュ ーではその変更が反映 さ れません。 • [Report Drivers] : 選択 し たオブジ ェ ク ト に値を割 り 当て る HDL プ ロ セ ス の レ ポー ト が Tcl コ ン ソ ールに表示 さ れ ます。 • [Go To Source Code] : 選択 し たオブジ ェ ク ト の定義で ソ ース コ ー ド を開 き ます。 • [Force Constant] : 選択 し たオブジ ェ ク ト を定数に割 り 当て ます。 こ の詳細は、第 5 章の 「[Force Constant] オプシ ョ ン」 を参照 し て く だ さ い。 • [Force Clock] : 選択 し たオブジ ェ ク ト を定期的に変わ る 値に割 り 当て ます。 詳細は、 第 5 章の 「[Force Clock] オプ シ ョ ン」 を参照 し て く だ さ い。 • [Remove Force] : 選択 し たオブジ ェ ク ト に割 り 当てた値を削除 し ます。 詳細は、 第 5 章の 「[Remove Force] オプ シ ョ ン」 を参照 し て く だ さ い。 ヒ ン ト : 波形ビ ュ ーアで一部の HDL オブジ ェ ク ト が表示 さ れていない場合は、 そのオブジ ェ ク ト の波形 ト レース が Vivado シ ミ ュ レー タ でサポー ト さ れていない こ と を示 し ま す。 Verilog で名前が指定 さ れてい る イ ベン ト や、 ロ ーカ ル変数な ど がそ う いっ たオブジ ェ ク ト にあ た り ます。 波形ビ ュ ー Vivado シ ミ ュ レー タ を起動す る と 、 デフ ォ ル ト で波形ビ ュ ーが開き ます。 こ の ビ ュ ーには、 図 3-11 にあ る よ う に、 シ ミ ュ レ ーシ ョ ン の最上位モ ジ ュ ールか ら の ト レ ー ス 可能な HDL オブ ジ ェ ク ト か ら な る 、 新 し い波形 コ ン フ ィ ギ ュ レーシ ョ ンが表示 さ れます。 ヒ ン ト : プ ロ ジ ェ ク ト をいっ たん閉 じ てか ら も う 1 度開いた場合は、 波形ビ ュ ーを表示 さ せ る ためにシ ミ ュ レーシ ョ ン を再実行す る 必要があ り ます。 し か し 、 シ ミ ュ レーシ ョ ン中にデフ ォ ル ト の波形ビ ュ ーを う っか り と 閉 じ て し ま っ た場合は、 メ イ ン メ ニ ュ ーか ら [Window] → [Waveform] を ク リ ッ ク し て、 ビ ュ ーを復活 さ せる こ と がで き ます。 X-Ref Target - Figure 3-11 図 3‐11 : 波形ビ ュ ー 波形ビ ュ ーに個々の HDL オブジ ェ ク ト 、ま たはオブジ ェ ク ト のセ ッ ト を追加す る には、そのオブジ ェ ク ト を右 ク リ ッ ク し て [Add to Wave Window] を ク リ ッ ク し ます (35 ページの図 3-9)。 Tcl コ マ ン ド を使用 し てオブジ ェ ク ト を追加す る には、 add_wave <HDL_objects> と 入力 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 37 第 3 章 : Vivado シ ミ ュ レー タ について add_wave コ マ ン ド を使用す る と 、 HDL オブジ ェ ク ト への絶対パ ス ま たは相対パ ス を指定で き ます。 た と えば、 現在の ス コ ープが /bft_tb/uut の場合、 uut の下の リ セ ッ ト レ ジ ス タ への絶対パス は /bft_tb/uut/reset、 相対パ ス は reset にな り ます。 ヒント : add_wave コ マ ン ド には、 HDL ス コ ープお よ び HDL オブジ ェ ク ト が指定で き ます。 add_wave に ス コ ープ を指定 し た 場合、 [Sources] ビ ュ ーの [Add To Wave Window] コ マ ン ド と 同 じ 動作にな り ます。 ビ ッ ト 幅の大 き な HDL オブジ ェ ク ト を波形ビ ュ ーアに追加す る と 、 表示に時間がかか っ て し ま い ます。 [Add to Wave Window] コ マ ン ド を実行す る 前に、 波形 コ ン フ ィ ギ ュ レ ーシ ョ ン で表示制限を設定 し 、 その よ う なオブジ ェ ク ト を フ ィ ル タ ー に か け る こ と が で き ま す。 そ れ に は、 set_property DISPLAY_LIMIT <maximum bit width> [current_wave_config] と い う Tcl コ マ ン ド を使用 し ます。 波形オブ ジ ェ ク ト Vivado IDE の波形ビ ュ ーは、 多 く の Vivado Design Suite ツールで共通 し て使用 さ れ ま す。 次の図 3-12 は、 波形 コ ン フ ィ ギ ュ レーシ ョ ンに含まれ る 波形オブジ ェ ク ト の例を示 し てい ます。 X-Ref Target - Figure 3-12 図 3‐12 : 波形 コ ン フ ィ ギ ュ レーシ ョ ンの HDL オブ ジ ェ ク ト 波形ビ ュ ーには、 HDL オブジ ェ ク ト と その値お よ び波形に加え、 グループ、 仕切 り 、 仮想バ ス な ど の HDL オブジ ェ ク ト を見やす く す る ためのア イ テ ム も 表示 さ れます。 HDL オブジ ェ ク ト お よ びそれを見やす く する ためのア イ テ ムは、 ひ と ま と めに し て 「波形 コ ン フ ィ ギ ュ レーシ ョ ン」 と 呼ばれます。 波形ビ ュ ーの波形部分には、 カー ソ ル、 マーカー、 時間軸な ど の時間計測ためのア イ テ ム も 表示 さ れ ます。 Vivado IDE はシ ミ ュ レ ーシ ョ ン中に波形ビ ュ ーで HDL オブ ジ ェ ク ト を ト レ ー ス す る ので、 その波形 コ ン フ ィ ギ ュ レーシ ョ ン を使用 し てシ ミ ュ レーシ ョ ン結果を検証で き ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 38 第 3 章 : Vivado シ ミ ュ レー タ について デザ イ ン階層お よ びシ ミ ュ レーシ ョ ンの波形は波形 コ ン フ ィ ギ ュ レーシ ョ ンの一部ではな く 、 別の波形デー タ ベース フ ァ イ ル (WDB) に保存 さ れます。 波形ビ ュ ーの使用に関す る 詳細は、 第 4 章 「シ ミ ュ レーシ ョ ン波形の解析」 を参照 し て く だ さ い。 波形の保存 新規波形 コ ン フ ィ ギ ュ レーシ ョ ンはデ ィ ス ク に自動的には保存 さ れ ません。 [File] → [ave Waveform Configuration As] を ク リ ッ ク し て、 フ ァ イ ル名を指定 し て、 WCFG フ ァ イ ルを作成 し ます。 波形 コ ン フ ィ ギ ュ レ ー シ ョ ン を <filename.wcfg>」 と 入力 し ます。 WCFG フ ァ イ ル に 保存す る に は、 Tcl コ ン ソ ールに 「save_wave_config 指定 し た コ マ ン ド 引数の名前で WCFG フ ァ イ ルが保存 さ れます。 重要 : ズーム設定は波形 コ ン フ ィ ギ ュ レーシ ョ ンには保存 さ れません。 複数波形 コ ン フ ィ ギ ュ レーシ ョ ンの作成 と 使用 シ ミ ュ レーシ ョ ン セ ッ シ ョ ンでは、複数の波形 コ ン フ ィ ギ ュ レーシ ョ ン を それぞれの波形ビ ュ ーで作成お よ び使用で き ま す。 複数の波形ビ ュ ーが表示 さ れてい る 場合は、 一番最近に作成 し た ビ ュ ー ま たは最近使用 し た ビ ュ ーがア ク テ ィ ブ ビ ュ ーにな り ます。 ア ク テ ィ ブ ビ ュ ーは、 現在表示 さ れてい る ビ ュ ーだけでな く 、 外部 コ マ ン ド が適用 さ れ る 波形ビ ュ ーで も あ り ます。 た と えば、 [HDL Objects] → [Add to Wave Window] な ど の コ マ ン ド です。 別の波形ビ ュ ーを ア ク テ ィ ブ ビ ュ ーにする には、 そのビ ュ ーの タ イ ト ルを ク リ ッ ク し ます。 詳細は、 42 ページの 「複 数シ ミ ュ レーシ ョ ン run の区別」 お よ び47 ページの 「波形 コ ン フ ィ ギ ュ レーシ ョ ンの新規作成」 を参照 し て く だ さ い。 論理および タ イ ミ ング シ ミ ュ レーシ ョ ンの実行 Vivado Design Suite でプ ロ ジ ェ ク ト を作成す る と 、すぐ に ビヘ イ ビ アー シ ミ ュ レーシ ョ ン を実行す る こ と がで き ます。 合成 ま たは イ ン プ リ メ ン テーシ ョ ン を実行 し た後は、 論理お よ び タ イ ミ ン グ シ ミ ュ レーシ ョ ン を実行で き ます。 シ ミ ュ レーシ ョ ン を実行す る には、 Flow Navigator で [Run Simulation] を ク リ ッ ク し 、 次の図に示す よ う に、 ポ ッ プア ッ プ メ ニ ュ ーか ら 該当オプシ ョ ン を選択 し ます。 ヒ ン ト : ポ ッ プア ッ プ メ ニ ュ ーで ど のオプシ ョ ン を選択で き る かは、 デザ イ ン開発段階に よ っ て異な り ます。 た と え ば、 合成は実行 し たけれど も イ ンプ リ メ ン テーシ ョ ンは ま だであ る と い う 場合は、 ポ ッ プア ッ プ メ ニ ュ ーで イ ンプ リ メ ン テーシ ョ ンに関す る オプシ ョ ンがグ レー表示にな っ てい ます。 X-Ref Target - Figure 3-13 図 3‐13 : シ ミ ュ レーシ ョ ンの Run オプ シ ョ ン ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 39 第 3 章 : Vivado シ ミ ュ レー タ について 論理シ ミ ュ レーシ ョ ンの実行 合成後の論理シ ミ ュ レーシ ョ ン 合成を実行 し た後は、[Run Simulation] → [Post-Synthesis Functional Simulation] が使用で き る よ う にな り ます (図 3-13)。 合成後は、 一般的な ロ ジ ッ ク デザ イ ン がデバ イ ス別のプ リ ミ テ ィ ブに合成 さ れてい ま す。 合成後に論理シ ミ ュ レー シ ョ ン を実行す る こ と に よ り 、 合成の最適化に よ り デザ イ ン機能が変わ っ ていない こ と を確認で き ます。 合成後の論 理シ ミ ュ レーシ ョ ン を選択す る と 、 論理ネ ッ ト リ ス ト が生成 さ れ、 その UNISIM ラ イ ブ ラ リ がシ ミ ュ レーシ ョ ンに使 用 さ れます。 イ ン プ リ メ ン テーシ ョ ン後の論理シ ミ ュ レーシ ョ ン イ ンプ リ メ ン テーシ ョ ン を実行 し た後は、 [Run Simulation] → [Post-Implementation Functional Simulation] が使用で き る よ う にな り ます (図 3-13)。 イ ン プ リ メ ン テーシ ョ ン後は、 デザ イ ンはハー ド ウ ェ アに配置配線 さ れてい ます。 こ の段階で論理検証を し てお き 、 イ ンプ リ メ ン テーシ ョ ン中に行われた物理的最適化に よ り デザ イ ンの機能が変更 さ れていないか確認で き ます。 イ ンプ リ メ ン テーシ ョ ン後の論理シ ミ ュ レーシ ョ ン を選択す る と 、 論理ネ ッ ト リ ス ト が生成 さ れ、 その UNISIM ラ イ ブ ラ リ がシ ミ ュ レーシ ョ ンに使用 さ れます。 タ イ ミ ング シ ミ ュ レーシ ョ ンの実行 ヒ ン ト : 合成後の タ イ ミ ン グ シ ミ ュ レーシ ョ ンでは、デバ イ ス モデルの予測 タ イ ミ ン グ遅延が使用 さ れ、 イ ン タ ー コ ネ ク ト 遅延は含ま れません。イ ンプ リ メ ン テーシ ョ ン後の タ イ ミ ン グ シ ミ ュ レーシ ョ ン では実際の タ イ ミ ン グ遅延が 使用 さ れます。 合成後お よ び イ ンプ リ メ ン テーシ ョ ン後の タ イ ミ ン グ シ ミ ュ レーシ ョ ン を実行する と き 、シ ミ ュ レー タ には次の も の が含まれます。 • SIMPRIM ラ イ ブ ラ リ コ ン ポーネ ン ト を含むゲー ト レベルのネ ッ ト リ ス ト • SECUREIP • 標準遅延フ ォーマ ッ ト (SDF) フ ァ イ ル デザ イ ンの全体的な機能は最初に定義 し てい ます。 デザ イ ンが イ ンプ リ メ ン ト さ れ る と 、 正確な タ イ ミ ン グ情報が利 用で き る よ う にな り ます。 ネ ッ ト リ ス ト お よ び SDF を作成す る には、 Vivado Design Suite は次の作業を行い ます。 • -mode timesim オプシ ョ ン を使用 し てネ ッ ト リ ス ト ラ イ タ ー write_verilog、 お よ び write_sdf (SDF ア ノ テー タ ー ) を呼び出 し ます。 • 生成 さ れたネ ッ ト リ ス ト を タ ーゲ ッ ト シ ミ ュ レー タ に送 り ます。 こ れ ら の オ プ シ ョ ン は、 20 ペ ー ジ の 「シ ミ ュ レ ー シ ョ ン 設 定」 で 説 明 さ れ て い る る シ ミ ュ レ ー シ ョ ン 設 定 か ら 変更で き ます。 重要 : 合成後 と イ ン プ リ メ ン テーシ ョ ン 後の タ イ ミ ン グ シ ミ ュ レ ー シ ョ ン は、 Verilog で のみサ ポー ト さ れ ま す。 VHDL の タ イ ミ ン グ シ ミ ュ レーシ ョ ンはサポー ト さ れ ません。 VHDL を使用す る 場合、 合成後お よ び イ ン プ リ メ ン テーシ ョ ン後の論理シ ミ ュ レーシ ョ ン を実行で き ます ( こ の場合、 SDF ア ノ テーシ ョ ンは必要な く 、 シ ミ ュ レーシ ョ ン ネ ッ ト リ ス ト で UNISIM ラ イ ブ ラ リ が使用 さ れます)。 ネ ッ ト リ ス ト は write_vhdl Tcl コ マ ン ド を使用 し て作成で き ます。 使用方法の詳細は、 『Vivado Design Suite Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 7] を参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 40 第 3 章 : Vivado シ ミ ュ レー タ について 重要 : Vivado シ ミ ュ レー タ モデルは イ ン タ ー コ ネ ク ト 遅延を使用 し ます。 タ イ ミ ン グ シ ミ ュ レーシ ョ ン を正 し く 実 行す る には、 次の よ う な コ マ ン ド が追加で必要にな り ます。 -transport_int_delays -pulse_r 0 -pulse_int_r 0 合成後の タ イ ミ ング シ ミ ュ レーシ ョ ン 合成を実行 し た後は、 [Run Simulation] → [Post-Synthesis Timing Simulation] が使用で き る よ う にな り ます (図 3-13)。 合成後は、 一般的な ロ ジ ッ ク デザ イ ンがデバ イ ス別のプ リ ミ テ ィ ブに合成 さ れてお り 、 配線遅延お よ び コ ン ポーネ ン ト 遅延の予測値が利用で き ま す。 合成後の タ イ ミ ン グ シ ミ ュ レーシ ョ ン を実行す る こ と に よ り 、 イ ン プ リ メ ン テー シ ョ ン段階で調査す る 前に、 タ イ ミ ン グ ク リ テ ィ カル パ ス がないか確認す る こ と がで き ます。 合成後の タ イ ミ ン グ シ ミ ュ レーシ ョ ン を選択す る と 、 タ イ ミ ン グ ネ ッ ト リ ス ト が生成 さ れ、 SDF フ ァ イ ルで予測遅延値が生成 さ れます。 シ ミ ュ レー タ で生成 さ れた SDF フ ァ イ ルが含め ら れ る よ う 、 ネ ッ ト リ ス ト フ ァ イ ルには $sdf_annotate コ マ ン ド が含 まれてい ます。 イ ン プ リ メ ン テーシ ョ ン後の タ イ ミ ング シ ミ ュ レーシ ョ ン イ ンプ リ メ ン テーシ ョ ン を実行 し た後は、 [Run Simulation] → [Post-Implementation Timing Simulation] が使用で き る よ う にな り ます (図 3-13)。 イ ンプ リ メ ン テーシ ョ ン後は、 デザ イ ンはハー ド ウ ェ アに イ ンプ リ メ ン ト お よ び配線 さ れてい ます。 こ の段階で タ イ ミ ン グ シ ミ ュ レーシ ョ ン を実行す る と 、正確な タ イ ミ ン グ遅延を使用 し て、 指定速度でデザ イ ンが機能 し てい る か ど う か を確認す る こ と がで き ます。 こ のシ ミ ュ レーシ ョ ンは、 制約が設定 さ れていないパ スや、 非同期パ ス の タ イ ミ ン グ エ ラ ー ( リ セ ッ ト な ど で起 き る エ ラ ーな ど) を検出する のに便利です。 イ ンプ リ メ ン テーシ ョ ン後の タ イ ミ ン グ シ ミ ュ レーシ ョ ン を選択す る と 、 タ イ ミ ン グ ネ ッ ト リ ス ト と SDF フ ァ イ ルが生成 さ れます。 ネ ッ ト リ ス ト フ ァ イ ルに は $sdf_annotate コ マ ン ド が含まれ る ので、 生成 さ れた SDF フ ァ イ ルが自動的に指定 さ れます。 タ イ ミ ング シ ミ ュ レーシ ョ ン用の SDF フ ァ イルのア ノ テー ト シ ミ ュ レーシ ョ ン設定を指定 し た と き に、 SDF フ ァ イ ルを作成す る か ど う か、 そ し て、 プ ロ セ ス コ ーナーを高速に す る か低速にす る か を設定 し ま し た。 ヒ ン ト : SDF フ ァ イ ル オプシ ョ ンの設定を確認する には、 Vivado IDE の Flow Navigator で、 [Simulation Settings] を選 択 し ます。[Project Settings] ダ イ ア ロ グ ボ ッ ク ス の [Netlist] タ ブが開 き ます 第 2 章の「Vivado シ ミ ュ レー タ のプ ロ ジ ェ ク ト 設定」 も 参照 し て く だ さ い。 SDF フ ァ イ ルには、 指定 し たプ ロ セ ス コ ーナーに基づいて異な る min お よ び max 数値が含まれます。 推奨 : 2 つの異な る シ ミ ュ レーシ ョ ン を実行 し て、 セ ッ ト ア ッ プお よ びホール ド 違反をチ ェ ッ ク を し て く だ さ い。 セ ッ ト ア ッ プ チ ェ ッ ク を実行す る には、 –process コ ーナーを slow に し て SDF を作成 し 、 SDF フ ァ イ ルか ら の max 列 を使用 し ます。 ホール ド チ ェ ッ ク を実行す る には、 –process コ ーナーを fast に し て SDF フ ァ イ ルを作成 し 、 SDF フ ァ イ ルか ら の min 列を使用 し ます。 ど の SDF 遅延フ ィ ール ド を使用す る か指定す る 方法は、 使用す る シ ミ ュ レーシ ョ ン ツールに よ っ て異な り ます。 こ のオプシ ョ ンの設定方法については、 ご使用のシ ミ ュ レーシ ョ ン ツールの資料を参照 し て く だ さ い。 4 つの タ イ ミ ン グ シ ミ ュ レーシ ョ ンすべて を確認す る には、 次の よ う に指定 し ます。 ° 低速 コ ーナー : SDFMIN お よ び SDFMAX ° 高速 コ ーナー : SDFMIN お よ び SDFMAX ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 41 第 3 章 : Vivado シ ミ ュ レー タ について シ ミ ュ レーシ ョ ン結果の保存 Vivado シ ミ ュ レー タ は、project/simset デ ィ レ ク ト リ の波形デー タ ベース (WDB) フ ァ イ ル (<filename>.wdb) にオブジ ェ ク ト (VHDL 信号や Verilog レ ジ ス タ ま たは ワ イ ヤな ど) のシ ミ ュ レーシ ョ ン結果を保存 し ます。 オブジ ェ ク ト を波形ビ ュ ーに追加 し てシ ミ ュ レーシ ョ ン を実行す る と 、 デザ イ ン全体の階層 と 追加 し たオブジ ェ ク ト の ト ラ ンザ ク シ ョ ンが自動的に WDB フ ァ イ ルに保存 さ れます。 ま た、 log_wave コ マ ン ド を使用 し て、 波形ビ ュ ー には表示 さ れ な い オ ブ ジ ェ ク ト を 波形デー タ ベー ス に追加す る こ と も で き ま す。 log_wave コ マ ン ド の詳細は、 第 5 章の 「Tcl コ マ ン ド log_wave の使用」 を参照 し て く だ さ い。 複数シ ミ ュ レーシ ョ ン run の区別 デザ イ ン に対 し て複数のシ ミ ュ レーシ ョ ン を実行 し た場合、 Vivado シ ミ ュ レー タ では、 現在ハ イ ラ イ ト さ れてい る ビ ュ ーのシ ミ ュ レーシ ョ ンが ワー ク スペース上部に示 さ れます (図 3-14)。 X-Ref Target - Figure 3-14 図 3‐14 : ア ク テ ィ ブ なシ ミ ュ レーシ ョ ン タ イ プ シ ミ ュ レーシ ョ ン を閉 じ る シ ミ ュ レーシ ョ ン を閉 じ る には、 Vivado IDE で次を実行 し ます。 • [File] → [Exit] を ク リ ッ ク す る か、 プ ロ ジ ェ ク ト ビ ュ ーの右上の X マー ク を ク リ ッ ク し ます。 注意 : 複数のシ ミ ュ レーシ ョ ン を実行 し てい る 場合は、 青い タ イ ト ル バーの Xマー ク を ク リ ッ ク する と 、 すべてのシ ミ ュ レーシ ョ ンが閉 じ ます。 1 つのシ ミ ュ レーシ ョ ン を閉 じ る には、 青い タ イ ト ル バーの下の小 さ な グ レーま たは白 い タ ブの X マー ク を ク リ ッ ク し ます。 Tcl コ ン ソ ールか ら シ ミ ュ レーシ ョ ン を閉 じ る には、 次の コ マ ン ド を入力 し ます。 close_sim こ の コ マ ン ド が まず、保存 さ れていない波形 コ ン フ ィ ギ ュ レーシ ョ ンがないか ど う かチ ェ ッ ク し ます。あ っ た場合は、 エ ラ ー メ ッ セージが表示 さ れます。 close_sim コ マ ン ド を実行す る 前に未保存の波形 コ ン フ ィ ギ ュ レーシ ョ ン を閉 じ る か、 ま たは保存 し ます。 ま たは -force オプシ ョ ン を Tcl コ マ ン ド に追加 し ます。 シ ミ ュ レーシ ョ ン起動ス ク リ プ ト フ ァ イルの追加 カ ス タ ムの Tcl コ マ ン ド を シ ミ ュ レーシ ョ ンで実行する よ う に、 バ ッ チ フ ァ イ ルに Tcl コ マ ン ド を含めて、 プ ロ ジ ェ ク ト に追加す る こ と がで き ます。 こ れ ら の コ マ ン ド はシ ミ ュ レーシ ョ ン開始後に実行 さ れます。 こ のプ ロ セ ス は次の よ う にな り ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 42 第 3 章 : Vivado シ ミ ュ レー タ について 1. シ ミ ュ レーシ ョ ン ソ ース フ ァ イ ルに追加す る シ ミ ュ レーシ ョ ン コ マ ン ド を使用 し て Tcl ス ク リ プ ト を作成 し ま す。 た と えば、 1,000ns 間実行す る シ ミ ュ レーシ ョ ン があ り 、 それを も う 少 し 長 く 実行 し たい場合、 次の コ マ ン ド を含むフ ァ イ ルを作成 し ます。 run 5us ま たは、 最上位にはない信号を監視 し たい場合 (デフ ォ ル ト では最上位の信号のみが波形に追加 さ れ る よ う に な っ てい る ため)、 post.tcl ス ク リ プ ト に こ れ ら の信号を追加で き ます。 次はその例です。 add_wave/top/I1/<signalName> 2. こ の フ ァ イ ルの名前を 「post.tcl」 に し て、 保存 し ます。 3. [Add Sources] ボ タ ン し ます。 4. post.tcl フ ァ イ ルを シ ミ ュ レーシ ョ ン ソ ース と し て Vivado Design Suite プ ロ ジ ェ ク ト に追加 し ます。 [Simulation Sources] フ ォ ルダーに post.tcl フ ァ イ ルが表示 さ れます (図 3-15)。 を使用 し て Add Sources ウ ィ ザー ド を起動 し 、 [Add or Create Simulation Sources] を選択 X-Ref Target - Figure 3-15 図 3‐15 : post.tcl フ ァ イルの使用 5. [Simulation] ツールバーか ら [Relaunch] ボ タ ン を ク リ ッ ク し ます。 post.tcl フ ァ イ ルの指定時間 (元の時間に追加 さ れた時間) でシ ミ ュ レーシ ョ ン が再実行 さ れ ま す。 Vivado シ ミ ュ レー タ は、 その コ マ ン ド をすべて実行 し た後に、 post.tcl フ ァ イ ルを自動的に呼び出 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 43 第 3 章 : Vivado シ ミ ュ レー タ について シ ミ ュ レーシ ョ ン メ ッ セージの表示 Vivado IDE には、 情報、 警告、 エ ラ ーな ど の メ ッ セージが表示 さ れ る メ ッ セージ フ ィ ール ド が含ま れ ます。 図 3-16 に示す よ う に、 Vivado シ ミ ュ レー タ か ら の一部の メ ッ セージには問題の詳細 と 推奨回避策が記載 さ れてい ます。 X-Ref Target - Figure 3-16 図 3‐16 : シ ミ ュ レー タ メ ッ セージの説明 と 回避策情報 同 じ 詳細を Tcl コ ン ソ ールに表示す る には、 次を入力 し ます。 help -message {message_number} 具体的には、 次の よ う に入力 し ます。 help -message {simulator 43-3120} メ ッ セージ出力の管理 HDL デザ イ ン で生成 さ れ る メ ッ セージ数が非常に多い場合 ($display と い う Verilog シ ス テ ム タ ス ク や、 report と い う VHDL 文を介 し て生成 さ れ る も のな ど)、 Tcl コ ン ソ ールお よ び ロ グ フ ァ イ ルに出力 さ れ る メ ッ セージ文の量 を制限す る こ と がで き ます。 こ れに よ り 、 コ ン ピ ュ ー タ ーの メ モ リ やデ ィ ス ク 容量を節約す る こ と がで き ます。 こ の 設定を行 う には、 -maxlogsize オプシ ョ ン を使用 し ます。 1. Flow Navigator で [Simulation Settings] を ク リ ッ ク し ます。 2. [Project Settings] ダ イ ア ロ グ ボ ッ ク ス で次の作業を行い ます。 a. [Simulation] カ テ ゴ リ を ク リ ッ ク し ます。 b. [Simulation] タ ブ を ク リ ッ ク し ます。 c. xsim.simulate.xsim.more_options の次に、 -maxlogsize <size> を追加 し ます。 <size> には最 大テ キ ス ト 量を メ ガバ イ ト で指定 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 44 第 3 章 : Vivado シ ミ ュ レー タ について launch_simulation コ マ ン ド の使用 launch_simulation コ マ ン ド を使用する と 、 ス ク リ プ ト モー ド でサポー ト さ れてい る シ ミ ュ レー タ を実行で き ま す。 launch_simulation の構文は、 次の よ う にな り ます。 launch_simulation [-step <arg>] [-simset <arg>] [-mode <arg>] [-type <arg>] [-scripts_only] [-of_objects <args>] [-absolute_path <arg>] [-install_path <arg>] [-noclean_dir] [-quiet] [-verbose] 表 3-2 は、 launch_simulation のオプシ ョ ン を示 し てい ます。 表 3‐2 : launch_simulation オプ シ ョ ン オプ シ ョ ン 説明 [-step] 実行す る シ ミ ュ レ ー シ ョ ン の ス テ ッ プ を 指定 し ま す。 値は、 all、 compile、 elaborate、 simulate にな り ます。 デフ ォ ル ト は all (すべての ス テ ッ プを起動) です。 [-simset] シ ミ ュ レーシ ョ ン フ ァ イ ルセ ッ ト の名前を指定 し ます。 [-mode] シ ミ ュ レ ー シ ョ ン モ ー ド を 指定 し ま す。 有効 な 値 は post-implementation で、 デフ ォ ル ト は behavioral です。 [-type] ネ ッ ト リ ス ト の タ イ プ を指定 し ます。 有効な値は functional、 timing です。 こ のオプシ ョ ンは、 -mode を post-synthesis ま たは post-implementation に設定 し てい る 場合にのみ有効 です。 [-scripts_only] ス ク リ プ ト のみを生成 し ます。 [-of_objects] 指定 し たオブジ ェ ク ト の コ ンパ イ ル順序フ ァ イ ルを生成 し ます。 -scripts_only オプ シ ョ ン を使用 し てい る 場合にのみ有効です。 [-absolute_path] 参照デ ィ レ ク ト リ のすべての フ ァ イ ルパ ス を絶対パ ス に し ます。 [-install_path] イ ン ス ト ール デ ィ レ ク ト リ パ ス を指定 し ます。 [-noclean_dir] シ ミ ュ レーシ ョ ン実行デ ィ レ ク ト リ フ ァ イ ルを削除 し ません。 [-quiet] コ マ ン ド エ ラ ーを無視 し ます。 [-verbose] プ ロ グ ラ ム実行中 メ ッ セージの制限を解除 し 、 すべての メ ッ セージ を表示 し ます。 behavioral、 post-synthesis、 例 • vivado_simulator を使用 し て ビヘ イ ビ アー シ ミ ュ レーシ ョ ン を実行 し ます。 create_project project_1 project_1 -part xc7vx485tffg1157-1 add_files -norecurse tmp.v add_files -fileset sim_1 -norecurse testbench.v import_files -force -norecurse update_compile_order -fileset sources_1 update_compile_order -fileset sim_1 launch_simulation • QuestaSim を使用 し て ビヘ イ ビ アー シ ミ ュ レーシ ョ ン用の ス ク リ プ ト を生成 し ます。 create_project project_1 project_1 -part xc7vx485tffg1157-1 add_files -norecurse tmp.v add_files -fileset sim_1 -norecurse testbench.v import_files -force -norecurse update_compile_order -fileset sources_1 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 45 第 3 章 : Vivado シ ミ ュ レー タ について update_compile_order -fileset sim_1 set_property target_simulator ModelSim [current_project] set_property compxlib.compiled_library_dir <compiled_library_location> [current_project] launch_simulation -scripts_only • Synopsys VCS を使用 し て合成後の論理シ ミ ュ レーシ ョ ン を起動 し ます。 set_property target_simulator VCS [current_project] set_property compxlib.compiled_library_dir <compiled_library_location> [current_project] launch_simulation -mode post-synthesis -type functional • Cadence IUS を使用 し て イ ンプ リ メ ン テーシ ョ ン後の タ イ ミ ン グ シ ミ ュ レーシ ョ ン を実行 し ます。 set_property target_simulator IES [current_project] set_property compxlib.compiled_library_dir <compiled_library_location> [current_project] launch_simulation -mode post-implementation -type timing ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 46 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 第 4章 シ ミ ュ レーシ ョ ン波形の解析 概要 Vivado® シ ミ ュ レー タ では、波形を使用 し てデザ イ ン を解析 し 、コ ー ド をデバ ッ グで き ます。シ ミ ュ レー タ は、[Objects] ビ ュ ーや [Scopes] ビ ュ ーな ど、 ワー ク スペース のほかのエ リ アにデザ イ ン信号デー タ を自動入力 し ます。 通常、 シ ミ ュ レー ト をす る 必要のあ る HDL オブジ ェ ク ト を定義す る テ ス ト ベンチでシ ミ ュ レーシ ョ ン を設定 し ます。 テ ス ト ベンチの詳細は、 『Writing Efficient Testbenches』 (XAPP199) [参照 5] を参照 し て く だ さ い、。 Vivado シ ミ ュ レ ー タ を起動す る と 、 最上位 HDL オブジ ェ ク ト を含む波形 コ ン フ ィ ギ ュ レーシ ョ ン が表示 さ れ ます。 Vivado シ ミ ュ レー タ は、 [Objects] ビ ュ ーや [Scopes] ビ ュ ーな ど のほかのエ リ アにデザ イ ン デー タ を自動入力 し ます。 こ の後、 さ ら に HDL オブジ ェ ク ト を追加 し た り 、 シ ミ ュ レーシ ョ ン を実行 し た り で き ます。 次の 「波形 コ ン フ ィ ギ ュ レーシ ョ ン と 波形ビ ュ ーの使用」 を参照 し て く だ さ い。 波形 コ ン フ ィ ギ ュ レーシ ョ ン と 波形ビ ュ ーの使用 Vivado シ ミ ュ レー タ では、 波形ビ ュ ーを カ ス タ マ イ ズす る こ と がで き ます。 ビ ュ ーの現在の状態は波形 コ ン フ ィ ギ ュ レーシ ョ ン と 呼ばれ ます。 こ の コ ン フ ィ ギ ュ レーシ ョ ン を WCFG フ ァ イ ルに保存 し て、 後で ま た使用す る こ と がで き ます。 波形 コ ン フ ィ ギ ュ レーシ ョ ンには名前が付け ら れてい る か、「untitled」 にな っ てい ます。名前は波形 コ ン フ ィ ギ ュ レー シ ョ ン ビ ュ ーの タ イ ト ルバーに表示 さ れます。波形 コ ン フ ィ ギ ュ レーシ ョ ンが ま だ 1 度 も フ ァ イ ルに保存 さ れていな い場合は、 「untitled」 にな っ てい ます。 波形 コ ン フ ィ ギ ュ レーシ ョ ンの新規作成 波形を表示す る 新 し い波形 コ ン フ ィ ギ ュ レーシ ョ ン を作成 し ます。 1. [File] → [New Waveform Configuration] を ク リ ッ ク し ます。 新 し い波形ビ ュ ーが開 き 、 「untitled」 と い う 名前の新 し い波形 コ ン フ ィ ギ ュ レーシ ョ ンが表示 さ れます。 Tcl コ マ ン ド : add_wave <HDL_Object> 2. 49 ページの 「波形 コ ン フ ィ ギ ュ レーシ ョ ンの HDL オブジ ェ ク ト 」 で説明 さ れてい る 方法で HDL オブジ ェ ク ト を波形 コ ン フ ィ ギ ュ レーシ ョ ンに追加 し ます。 波形の新規作成についてはは、 第 3 章 「Vivado シ ミ ュ レ ー タ について」 を参照 し て く だ さ い。 複数の波形について は、 39 ページの 「複数波形 コ ン フ ィ ギ ュ レーシ ョ ンの作成 と 使用」 も 参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 47 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 WCFG フ ァ イルを開 く シ ミ ュ レーシ ョ ンで使用す る WCFG フ ァ イ ルを開 く には、 次の手順に従っ て く だ さ い。 1. [File] → [Open Waveform Configuration] を ク リ ッ ク し ます。 [Open Waveform Configuration] ダ イ ア ロ グ ボ ッ ク ス が開 き ます。 2. WCFG フ ァ イ ルを選択 し ます。 注記 : WCFG フ ァ イ ルに ス タ テ ィ ッ ク シ ミ ュ レーシ ョ ン の HDL デザ イ ン階層にはない HDL オブジ ェ ク ト への 参照が含まれてい る と 、Vivado シ ミ ュ レー タ は こ れ ら の HDL オブジ ェ ク ト を無視 し 、読み込まれた波形 コ ン フ ィ ギ ュ レーシ ョ ンか ら 省略 し ます。 波形ビ ュ ーが開 き 、 WCFG フ ァ イ ルに リ ス ト さ れた波形オブジ ェ ク ト に対 し 、 シ ミ ュ レー タ で検出 さ れた波形 デー タ が表示 さ れます。 Tcl コ マ ン ド : open_wave_config <waveform_name> 波形 コ ン フ ィ ギ ュ レーシ ョ ンの保存 波形 コ ン フ ィ ギ ュ レーシ ョ ン を変更 し て WCFG フ ァ イ ルに保存す る には、 [File] → [Save Waveform Configuration As] を ク リ ッ ク し 、 波形 コ ン フ ィ ギ ュ レーシ ョ ンの名前を指定 し ます。 Tcl コ マ ン ド : save_wave_config <waveform_name> 前に保存 し たシ ミ ュ レーシ ョ ン run を開 く 前に保存 し た シ ミ ュ レーシ ョ ン を Vivado Design Suite で開 く 方法には、 イ ン タ ラ ク テ ィ ブ手法 と プ ロ グ ラ ム手法の 2 つがあ り ます。 イ ン タ ラ ク テ ィ ブ手法 ° Vivado Design Suite プ ロ ジ ェ ク ト を読み込んだ ら 、 [View] → [Open Static Simulation] を ク リ ッ ク し 、 前に実行 し た シ ミ ュ レーシ ョ ンの波形を含む WDB フ ァ イ ルを選択 し ます。 ヒ ン ト : 「ス タ テ ィ ッ ク シ ミ ュ レーシ ョ ン」 と は Vivado シ ミ ュ レー タ のモー ド で、 シ ミ ュ レーシ ョ ン を実行 し て得た デー タ の代わ り に、 WDB フ ァ イ ルか ら のデー タ がビ ュ ーに表示 さ れます。 ° ま たは、 Tcl コ ン ソ ールに次を入力 し ます。 open_wave_database <name>.wdb プ ログ ラ ム手法 次の内容を含めた Tcl フ ァ イ ルを作成 し ます (design.tcl な ど)。 current_fileset open_wave_database <name>.wdb こ の フ ァ イ ルを次の よ う に実行 し ます。 vivado -source design.tcl ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 48 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 重要 : Vivado シ ミ ュ レー タ は、 サポー ト さ れてい る OS で作成 さ れた WDB フ ァ イ ルを開 く こ と がで き 、 ま た、 Vivado Design Suite 2014.3 以降のバージ ョ ンで作成 さ れた WDB フ ァ イ ル も 開 く こ と がで き ます。それ よ り も 前のバージ ョ ン の Vivado Design Suite で作成 さ れた WDB フ ァ イ ルは開 く こ と はで き ません。 シ ミ ュ レーシ ョ ン を実行 し て HDL オブジ ェ ク ト を波形ビ ュ ーで表示す る 場合、 シ ミ ュ レーシ ョ ン を実行す る と 、 表 示 さ れてい る HDL オブジ ェ ク ト の波形ア ク テ ィ ビ テ ィ を含む波形デー タ ベース (WDB) フ ァ イ ルが作成 さ れます。 WDB フ ァ イ ルには、 シ ミ ュ レー ト さ れたデザ イ ン の HDL ス コ ープ と オブジ ェ ク ト すべてに関す る 情報 も 含 ま れ ま す。 こ のモー ド の場合、 制御すべ き 基本 ラ イ ブ シ ミ ュ レーシ ョ ン モデルがないので、 run コ マ ン ド の よ う な シ ミ ュ レーシ ョ ン を制御ま たは監視す る コ マ ン ド は使用で き ません。 ただ し 、 ス タ テ ィ ッ ク シ ミ ュ レーシ ョ ンで波形お よ び HDL デザ イ ン階層を表示する こ と はで き ます。 波形 コ ン フ ィ ギ ュ レーシ ョ ンの HDL オブ ジ ェ ク ト HDL オブ ジ ェ ク ト を波形 コ ン フ ィ ギ ュ レ ーシ ョ ン に追加す る と 、 波形ビ ュ ーア で HDL オブジ ェ ク ト の 「波形オブ ジ ェ ク ト 」 が作成 さ れ ます。 波形オブジ ェ ク ト は、 関連付け ら れてい る HDL オブジ ェ ク ト に リ ン ク さ れ ますが、 そ れぞれ別の も のです。 1 つの HDL オブジ ェ ク ト か ら 複数の波形オブジ ェ ク ト を作成で き 、 各波形オブジ ェ ク ト の表示プ ロ パテ ィ を別々に 設定で き ます。 た と えば、 myBus と い う HDL オブジ ェ ク ト か ら 作成 さ れた あ る 波形オブジ ェ ク ト を 16 進数で表示 し 、 同 じ myBus の別の波形オブジ ェ ク ト を 10 進数で表示 さ せ る こ と がで き ます。 仕切 り 、 グループ、 仮想バ ス な ど の別の種類の波形オブジ ェ ク ト も 波形 コ ン フ ィ ギ ュ レーシ ョ ンに表示で き ます。 HDL オブジ ェ ク ト か ら 作成 さ れた波形オブジ ェ ク ト は特に 「デザ イ ン波形オブジ ェ ク ト 」 と 呼ばれ ます。 こ れ ら の オブジ ェ ク ト は、 それぞれア イ コ ンで表示 さ れます。 デザ イ ン波形オブジ ェ ク ト の場合、 ア イ コ ン を見る と 、 そのオ ブジ ェ ク ト が ス カ ラ ー なのか、 Verilog ベ ク タ ーや VHDL レ コ ー ド な ど の複合型 なのかがわか り ます。 ヒ ン ト : [Objects] ビ ュ ーでデザ イ ン波形オブジ ェ ク ト の HDL オブジ ェ ク ト を表示 さ せ る には、デザ イ ン波形オブジ ェ ク ト の名前を右 ク リ ッ ク し 、 [Show in Object Window] を ク リ ッ ク し ます。 図 4-1 に、 波形 コ ン フ ィ ギ ュ レーシ ョ ン ビ ュ ーの HDL オブジ ェ ク ト の例を示 し ます。 デザ イ ン オブジ ェ ク ト には、 名前 と 値が表示 さ れます。 • [Name] : デフ ォ ル ト では、 HDL オブジ ェ ク ト の名前が表示 さ れます。 表示 さ れ る のは名前だけで、 オブジ ェ ク ト の階層パ ス は表示 さ れません。 階層パ ス を含めた名前で表示 し た り 、 カ ス タ ム名を指定 し て表示す る こ と も で き ます。 • [Value] : オブジ ェ ク ト の値を波形ビ ュ ーの メ イ ン カー ソ ルに示 さ れ る 時間で表示 し ます。 値の フ ォーマ ッ ト ま た は基数は、 同 じ HDL オブジ ェ ク ト に リ ン ク さ れてい る ほかのデザ イ ン波形オブジ ェ ク ト の フ ォ ーマ ッ ト に関係 な く 、 ま た [Objects] ビ ュ ーお よ び ソ ース コ ー ド ビ ュ ーに表示 さ れ る 値の フ ォーマ ッ ト に関係な く 、 変更で き ま す。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 49 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 X-Ref Target - Figure 4-1 図 4‐1 : 波形 HDL オブ ジ ェ ク ト [Scopes] ビ ュ ーには、 選択 し た ス コ ープに対 し 表示可能なすべての HDL オブジ ェ ク ト を、 波形ビ ュ ーに追加す る 機 能があ り ます。 [Scopes] ビ ュ ーの使用方法については、 第 3 章 31 ページの 「[Scopes] ビ ュ ー」 を参照 し て く だ さ い。 基数 バ ス のデー タ タ イ プ を理解す る こ と は重要です。デジ タ ルお よ びアナ ロ グの波形を効果的に使用する には、 基数設定 と デー タ タ イ プの関係を認識す る 必要があ り ます。 重要 : 変更を加え たい ビ ュ ーで基数設定を変更 し て く だ さ い。 [Objects] ビ ュ ーで基数を変更 し て も 、 波形ビ ュ ーま た は Tcl コ ン ソ ールでは、 その変更は反映 さ れ ません。 た と えば、 [Objects] ビ ュ ーで wbOutputData[31:0] と い う ア イ テ ム を [Signed Decimal] に変更 し て も 、 波形ビ ュ ーでは [Binary] の ま ま です。 デ フ ォル ト 基数の変更 明示的に基数が設定 さ れていない波形オブジ ェ ク ト の数値は、 すべてデフ ォ ル ト の波形基数にな り ます。 デフ ォ ル ト の波形基数は、 2 進数です。 デフ ォ ル ト の波形基数を変更す る には、 次の手順に従っ て く だ さ い。 1. 波形ビ ュ ーのサ イ ド バーで [Waveform Options] ボ タ ン を ク リ ッ ク し ます。 波形オプシ ョ ンのビ ュ ーが開 き ます。 2.[General] ページで [Default Radix] ド ロ ッ プダ ウ ン メ ニ ュ ーを ク リ ッ ク し ます。 3. ド ロ ッ プダ ウ ン リ ス ト か ら 基数を選択 し ます。 オブ ジ ェ ク ト ご と の基数の変更 波形ビ ュ ーで波形オブジ ェ ク ト の基数を変更す る には、 次の操作を行い ます。 1. 波形オブジ ェ ク ト の名前を右 ク リ ッ ク し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 50 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 2. [Radix] を ク リ ッ ク し 、 ド ロ ッ プダ ウ ン メ ニ ュ ーか ら フ ォーマ ッ ト を選択 し ます。 ° [Binary] (デフ ォ ル ト ) [Hexadecimal] (16 進数) [Unsigned Decimal] (符号な し 10 進数) [Signed Decimal] (符号付 き 10 進数) [Octal] (8 進数) [ASCII] ° [Real] (実数) ° [Real Settings] (実数設定) ° ° ° ° ° Tcl コ ン ソ ールで、 表示 さ れた値の フ ォーマ ッ ト を変更す る には、 次の Tcl コ マ ン ド を入力 し ます。 set_property radix <radix> <wave_object> <radix> には、 bin、 unsigned,、 hex、 dec、 ascii、 ま たは oct を指定 し ます。 <wave_object> には、 add_wave コ マ ン ド で返 さ れたオブジ ェ ク ト 名にな り ます。 ヒ ン ト : 波形ビ ュ ーで基数を変更 し て も 、 [Objects] ビ ュ ーではその変更が反映 さ れません。 波形のカ ス タ マ イ ズ アナログ波形の使用 基数およびアナ ログ波形の使用 バ ス の値が数値 と し て処理 さ れ る 方法は、 バ ス波形オブジ ェ ク ト の基数設定に よ っ て決ま り ます。 • 2 進数、 8 進数、 16 進数、 ASCII、 お よ び符号な し の 10 進数の基数を使用す る と 、 バ ス の値が符号な し の整数 と し て処理 さ れます。 • バ ス内のビ ッ ト のいずれかが 0 で も 1 で も ない場合、 バス全体の値は 0 と 処理 さ れます。 • 符号付 き の 10 進数基数を使用す る と 、 バ ス の値が符号付 き 整数 と し て処理 さ れます。 • 実数基数 を 使用す る と 、 バ ス の値は固定小数点 ま た は浮動小数点の実数 と し て処理 さ れ ま す。 こ れは、 [Real Settings] ダ イ ア ロ グ ボ ッ ク ス の設定に よ っ て決ま り ます。 波形オブジ ェ ク ト の基数を実数に設定す る 手順は、 次の と お り です。 1. 波形 コ ン フ ィ ギ ュ レーシ ョ ン ビ ュ ーの [Name] 列で HDL オブジ ェ ク ト を右 ク リ ッ ク し 、 ド ロ ッ プダ ウ ン メ ニ ュ ーか ら [Radix] → [Real Settins] を ク リ ッ ク し て、 [Real Settings] ダ イ ア ロ グ ボ ッ ク ス を開 き ます (図 4-2)。 こ のダ イ ア ロ グ ボ ッ ク ス で、 バ ス の値を実数に変換す る 方法を指定する パ ラ メ ー タ ーを設定 し ます。 次の図はデ フ ォ ル ト 値を示 し てい ます。 実数の基数を使用す る 前に、 こ れ ら のパ ラ メ ー タ ーを設定する 必要があ り ます。 2. も う 1 度同 じ HDL オブジ ェ ク ト を右 ク リ ッ ク し 、 [Radix] → [Real] を ク リ ッ ク し て、 HDL オブジ ェ ク ト の値を実 数で表示 さ せます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 51 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 I X-Ref Target - Figure 4-2 図 4‐2 : [Real Settings] ダ イ ア ログ ボ ッ ク ス [Real Settings] ダ イ ア ログ ボ ッ ク スのオプ シ ョ ンの説明 • [Fixed Point] : 選択 し たバス波形オブジ ェ ク ト のビ ッ ト が固定小数点の符号付 き ま たは符号な し の実数 と し て処 理 さ れます。 ° [Binary Point] : 固定小数点の小数部分に何ビ ッ ト 使用す る か を指定 し ます。 注意 : [Binary Point] で指定す る 値が波形オブジ ェ ク ト のビ ッ ト 幅 よ り も 大 き い場合、 波形オブジ ェ ク ト の値は固定小 数点 と し ては処理 さ れず、 波形オブジ ェ ク ト がデジ タ ル波形で表示 さ れた と き にすべての値が <Bad Radix> と 表示 さ れます。 アナ ロ グ波形 と し て表示 さ れ る 場合、 すべての値は 0 と し て処理 さ れます。 • [Floating Point] :選択 し たバ ス波形オブジ ェ ク ト の ビ ッ ト が IEEE の浮動小数点の実数 と し て処理 さ れます。 注記 : 単精度お よ び倍精度 (お よ び単/倍精度に設定 さ れてい る 値のカ ス タ ム精度) のみがサポー ト さ れてい ます。 その他の値は、[Fixed Point] の場合 と 同様 <Bad Radix> 値にな り ます。 [Exponent Width] お よ び [Fraction Width] は、 波形オブジ ェ ク ト のビ ッ ト 幅に必ず追加 し てお く 必要があ り 、追加 さ れていない場合は <Bad Radix> にな り ます。 次の制限に注意 し て く だ さ い。 • 実数での最大バ ス幅は 64 ビ ッ ト です。 • Verilog real お よ び VHDL real はアナ ロ グ波形の よ う にサポー ト さ れません。 • 浮動小数点では 32 ビ ッ ト お よ び 64 ビ ッ ト のア レ イ のみがサポー ト さ れてい ます。 波形のアナ ロ グ表示 重要 : HDL バ ス オブジ ェ ク ト を アナ ロ グ波形で表示 し て予測 さ れ る 波形を出力す る 場合、 HDL オブジ ェ ク ト のデー タ と 一致す る 基数を選択 し て く だ さ い。 次に例を示 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 52 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 - バ ス でエン コ ー ド さ れ る デー タ が 2 の補数の符号付き 整数の場合は、 符号付き の基数を選択する 必要があ り ます。 - デー タ が IEEE フ ォーマ ッ ト でエン コ ー ド さ れ る 浮動小数点の場合は、 基数に実数を選択す る 必要があ り ます。 アナ ロ グ波形表示のカ ス タ マ イ ズ アナ ロ グ波形の表示は次の よ う にカ ス タ マ イ ズで き ます。 1. 波形 コ ン フ ィ ギ ュ レーシ ョ ン ビ ュ ーの [Name] 列で HDL オブジ ェ ク ト を右 ク リ ッ ク し 、 ド ロ ッ プダ ウ ン メ ニ ュ ーか ら [Waveform Style] を選択 し ます。 ポ ッ プア ッ プ メ ニ ュ ーが表示 さ れ、 次のオプシ ョ ンが含まれてい ま す。 ° [Analog] : 波形を アナ ロ グに設定 し ます。 ° [Digital] : 波形オブジ ェ ク ト をデジ タ ルに設定 し ます。 ° [Analog Settings] : アナ ロ グ波形表示に関す る オプシ ョ ン を設定する [Aanalog Settings] ダ イ ア ロ グ ボ ッ ク ス が開 き ます (図 4-3)。 重要 : 波形ビ ュ ーでは、 幅が 64 ビ ッ ト 以下のバ ス のアナ ロ グ波形のみを表示で き ます。 X-Ref Target - Figure 4-3 図 4‐3 : [Analog Settings] ダ イ ア ログ ボ ッ ク ス [Analog Settings] ダ イ ア ログ ボ ッ ク スのオプ シ ョ ンの説明 • [Row Height] : 選択 し た波形オブジ ェ ク ト の高 さ を ピ ク セルで指定 し ます。 行の高 さ を変更 し て も 波形の垂直方 向の表示域は変わ り ませんが、 波形の高 さ の伸縮が変わ り ます。 アナ ロ グ と デジ タ ルを切 り 替え る と き 、 行の高 さ はそれぞれに合っ た適切なデフ ォ ル ト の高 さ に設定 さ れます (デジ タ ルの場合は 20、 アナ ロ グの場合は 100)。 ヒ ン ト : 行を区切 る ラ イ ンが表示 さ れていない場合は、 [Waveform Options] ダ イ ア ロ グ ボ ッ ク ス のチ ェ ッ ク ボ ッ ク ス を オンに し て く だ さ い。 オプシ ョ ン設定の変更方法については、 56 ページの 「[Waveform Options] ダ イ ア ロ グ ボ ッ ク ス」 を参照 し て く だ さ い。 行を区切 る ラ イ ン を波形名の左お よ び下に ド ラ ッ グ し て、 行の高 さ を変更す る こ と も で き ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 53 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 • [Y Range] : 波形エ リ アに表示 さ れ る 数値の範囲を指定 し ます。 ° [Auto] : 表示 さ れてい る 時間の範囲の値が現在の範囲を超えた と き に、 表示範囲が拡大 さ れます。 ° [Fixed] : 時間範囲を一定に し ます。 - [Min] : 波形エ リ アの一番下に表示 さ れ る 値を指定 し ます。 - [Max] : 波形エ リ アの一番上に表示 さ れ る 値を指定 し ます。 注記 : ど ち ら の値 も 浮動小数点 と し て指定で き ますが、 波形オブジ ェ ク ト の基数が整数の場合、 値は整数に 切 り 捨て ら れます。 • • • [Interpolation Style] : デー タ ポ イ ン ト を接続する ラ イ ンの描画方法を指定 し ます。 ° [Linear] : 2 つのデー タ ポ イ ン ト 間の ラ イ ン を直線に し ます。 ° [Hold] : 2 つのデー タ ポ イ ン ト の う ち、 左のポ イ ン ト か ら 右のポ イ ン ト の X 軸に向か っ て水平 ラ イ ン を描画 し 、 その ラ イ ンか ら 右のポ イ ン ト に向かっ て別の ラ イ ン を L 字型に描画 し ます。 [Off Scale] : 波形エ リ アの Y 軸を超え た値を ど の よ う に描画する か を指定 し ます。 ° [Hide] : 範囲外にあ る 値を非表示に し ます。 波形エ リ アの上下の範囲外にあ る も のは、 範囲内に戻 る ま では 非表示にな り ます。 ° [Clip] : 範囲外にあ る 値は変更 さ れ、波形エ リ アの上下境界線を超え る と 範囲内に戻 る ま では水平 ラ イ ン と し て表示 さ れます。 ° [Overlap] : 波形エ リ アの境界線を越えていて、 ほかの波形 と 重な っ ていて も 、 波形ビ ュ ーの境界に達す る ま では波形の値が ど こ にあ っ て も 波形が描画 さ れます。 [Horizontal Line] : 指定 し た値で水平方向の ラ イ ン を描画す る か ど う か指定 し ます。 こ のチ ェ ッ ク ボ ッ ク ス がオン の場合、 グ リ ッ ド ラ イ ンが指定 し た Y 軸の位置で描画 さ れます (値が波形の Y 軸の範囲内にあ る 場合)。 [Min] お よ び [Max] の場合 と 同様、 Y 軸の値には浮動小数点値を指定で き ますが、 選択 し た波形オブジ ェ ク ト の 基数が整数の場合は、 整数値に切 り 捨て ら れます。 波形オブ ジ ェ ク ト の命名 オブジ ェ ク ト 名を変更お よ び表示す る オプシ ョ ンや、 名前の表示を変更す る オプシ ョ ンがあ り ます。 オブ ジ ェ ク ト 名の変更 デザ イ ン波形オブジ ェ ク ト 、 仕切 り 、 グループ、 仮想バ ス な ど の波形 コ ン フ ィ ギ ュ レ ーシ ョ ン に含 ま れ る 波形オブ ジ ェ ク ト の名前は変更で き ます。 1. [Name] 列でオブジ ェ ク ト 名を選択 し ます。 2. 右 ク リ ッ ク し 、 [Rename] を ク リ ッ ク し ます。 [Rename] ダ イ ア ロ グ ボ ッ ク ス が開 き ます。 3. [Rename] ダ イ ア ロ グ ボ ッ ク ス に新 し い名前を入力 し 、 [OK] を ク リ ッ ク し ます。 注記 : 波形 コ ン フ ィ ギ ュ レーシ ョ ンのデザ イ ン波形オブジ ェ ク ト の名前を変更 し て も 、その下位の HDL オブジ ェ ク ト の名前は変わ り ません。 オブ ジ ェ ク ト 名の表示変更 フル階層名 (long name)、 信号 ま たはバ ス名のみ (short name)、 ま たは各デザ イ ン波形オブジ ェ ク ト のカ ス タ ム名を表 示で き ます。 オブジ ェ ク ト 名は、 波形 コ ン フ ィ ギ ュ レーシ ョ ンの [Name] 列に表示 さ れ ます。 名前が非表示にな っ て い る 場合は、 次の操作を実行 し ます。 1. 名前全体が表示 さ れ る よ う に [Name] 列の幅を調整 し ます。 2. [Name] 列で ス ク ロ ール バーを使用 し て名前を表示 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 54 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 表示名を変更す る には、 次の手順に従い ます。 1. 信号名ま たはバ ス名を 1 つ以上選択 し ます。 複数の信号を選択す る 場合は、 Shift キーま たは Ctrl キーを押 し なが ら ク リ ッ ク し ます。 2. [Name] を ク リ ッ ク し 、 次を選択 し ます。 ° [Long] : デザ イ ン オブジ ェ ク ト の フル階層名を表示 し ます。 ° [Short] : 信号名ま たはバ ス名のみを表示 し ます。 ° [Custom] : オブジ ェ ク ト のカ ス タ ム名を表示 し ます。 54 ページの 「オブジ ェ ク ト 名の変更」 を参照 し て く だ さ い。 ヒ ン ト : 波形オブジ ェ ク ト の名前を変更する と 、名前表示モー ド が [Custom] に変わ り ます。元の表示モー ド に戻すに は、 表示モー ド を [Long] ま たは [Short] に戻す必要があ り ます。 [Long] お よ び [Short] はデザ イ ン波形オブジ ェ ク ト に 対 し ての設定です。 仕切 り 、 グループ、 仮想バ ス な ど、 その他のオブジ ェ ク ト の場合は、 デフ ォ ル ト の名前表示モー ド は [Custom] です。 表示モー ド が [Long] お よ び [Short] の場合は ID 文字列が表示 さ れます。 バス ビ ッ ト 順序の反転 波形 コ ン フ ィ ギ ュ レーシ ョ ンでバ ス ビ ッ ト 順序を反転す る こ と がで き ます。 MSB か ら 始ま る (ビ ッ グ エンデ ィ ア ン) と LSB か ら 始ま る ( リ ト ル デンデ ィ ア ン) のビ ッ ト 順序を切 り 替え る こ と で、 バ ス値を表示で き ます。 ビ ッ ト 順序を逆にす る には、 次の手順に従い ます。 1. バ ス を選択 し ます。 2. 右 ク リ ッ ク し 、 [Reverse Bit Order] を ク リ ッ ク し ます。 こ れでバ ス ビ ッ ト の順序が逆にな り ます。[Reverse Bit Order] コ マ ン ド の横にチ ェ ッ ク マー ク が表示 さ れ る ので、 順序が反転 し てい る こ と がわか り ます。 重要 : [Reverse Bit Order] コ マ ン ド はバ ス に表示 さ れてい る 値に対 し てのみ実行で き ま す。 こ の コ マ ン ド を実行 し て も 、 バ ス波形オブジ ェ ク ト を拡張す る と き にバ ス の下に表示 さ れ る バ ス エ レ メ ン ト の リ ス ト の順序は逆にな り ませ ん。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 55 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 [Waveform Options] ダ イ ア ロ グ ボ ッ ク ス [Waveforms Options] ボ タ ン を ク リ ッ ク する と 、 [Waveforms Options] ダ イ ア ロ グ ボ ッ ク ス が開 き ます (図 4-4)。 X-Ref Target - Figure 4-4 図 4‐4 : [Waveform Options] ダ イ ア ログ ボ ッ ク ス [General Waveform Options] には、 次のオプシ ョ ンがあ り ます。 • [Default Radix] : 新 し く 作成 し た波形オブジ ェ ク ト に使用す る 数値形式を設定 し ます。 • [Elide Setting] : 波形ビ ュ ーに対 し て長すぎ る 信号名を短 く し ます。 ° [Left] : 長い信号名の左端を切 り 捨て ます。 ° [Right] : 長い信号名の右端を切 り 捨て ます。 ° [Middle] : 長い信号名の真ん中を切 り 捨て、 左右両方端を残 し ます。 • [Draw Waveform Shadow] : 影付 き の波形が作成 さ れます。 • [Show signal indices] : こ のチ ェ ッ ク ボ ッ ク ス をオンにす る と 、 波形オブジ ェ ク ト 名の左に行番号を表示で き ます。 行を区切 る 線を ド ラ ッ グす る と 、 波形オブジ ェ ク ト の高 さ を変更で き ます。 • [Colors] ページでは、 波形ビ ュ ー内のア イ テ ムの色を設定で き ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 56 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 波形表示の制御 波形表示は、 次の よ う に制御で き ます。 • 波形ビ ュ ーのサ イ ド バーにあ る ズーム ボ タ ン • マ ウ ス ホ イ ールを使用 し たズームの組み合わせ • Vivado IDE Y 軸のズーム機能 • Vivado シ ミ ュ レーシ ョ ンの X 軸のズーム機能マ ウ ス ボ タ ン を使用 し たズーム表示については、 『Vivado Design Suite ユーザー ガ イ ド :Vivado IDE の使用』 (UG893) [参照 3] を参照 し て く だ さ い。 注記 : ほかの Vivado Design Suite のグ ラ フ ィ ッ ク ビ ュ ー と は異な り 、波形ビ ュ ーの拡大/縮小は X (時間) 軸に適用 さ れ ます。 こ のため、 ビ ュ ーを拡大/縮小す る 範囲を指定する には、 ほかの Vivado Design Suite ビ ュ ーでは [Zoom to Area] が使用 さ れてい ますが、 波形ビ ュ ーでは [Zoom Range X] が使用 さ れます。 ズーム ボ タ ンの使用 波形ビ ュ ーのサ イ ド バーにはズーム機能用のボ タ ン があ り 、 こ れを使用 し て波形コ ン フ ィ ギ ュ レーシ ョ ン を 適宜拡大/縮小表示 さ せ る こ と がで き ます。 マウス ホ イ ールを使用 し たズーム 波形を ク リ ッ ク し て Ctrl キーを押 し なが ら マ ウ ス ホ イ ールを使用する と 、 オシ ロ ス コ ープのダ イ ヤル操作の よ う に拡大/縮小す る こ と も で き ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 57 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 アナ ロ グ波形の Y 軸方向のズーム X 軸方向のズームでサポー ト さ れてい る 機能に加え、 アナ ロ グ波形の場合は、 図 4-5 に示す追加のズーム機能があ り ます。 X-Ref Target - Figure 4-5 5HVHW =RRP < =RRP 2XW < =RRP )LW ; =RRP 2XW ; =RRP ,Q ; =RRP ; 5DQJH =RRP ,Q < =RRP < 5DQJH 図 4‐5 : アナログ ズームのオプ シ ョ ン ズーム機能を使用す る には、 マ ウ ス の左ボ タ ン を押 し た ま ま、 図で示 さ れてい る 方向にマ ウ ス を ド ラ ッ グ し ます。 マ ウ ス の開始位置は図の中央です。 次の追加ズーム機能があ り ます。 • [Zoom Out Y] : 開始点か ら マ ウ ス ボ タ ン を放 し た位置ま での距離に よ り 、2 のべき 乗分 Y 軸方向にズーム ア ウ ト し ます。 開始点のマ ウ ス位置の Y 値を その ま ま維持 し てズームが実行 さ れます。 • [Zoom Y Range] : 縦方向に ラ イ ン を描 き 、 マ ウ ス ボ タ ン を離 し た位置ま での Y 軸の範囲を表示 し ます。 • [Zoom In Y] : 開始点か ら マ ウ ス ボ タ ン を放 し た位置ま での距離に よ り 、 2 のべ き 乗分 Y 軸方向にズーム イ ン し ます。 開始点のマ ウ ス位置の Y 値を その ま ま維持 し てズームが実行 さ れます。 • [Reset Zoom Y] : 波形ビ ュ ーに現在表示 さ れてい る 値に Y の範囲を リ セ ッ ト し 、 Y の範囲モー ド を [Auto] に設定 し ます。 Y 軸の方向のズーム機能はすべて Y の範囲のアナ ロ グ値を設定 し ます。 [Reset Zoom Y] は Y の範囲を [Auto] に設定 し ますが、 ほかのズーム機能は [Fixed] に設定 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 58 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 波形の分類 こ こ では、 波形内の情報をわか り やす く す る ためのオプシ ョ ンについて説明 し ます。 信号およびオブ ジ ェ ク ト のグループ 関連 し てい る 波形オブジ ェ ク ト を見やす く す る ため、 グループに ま と め る こ と がで き ます。 グループに含まれてい る も のは拡張表示 さ せ る こ と がで き ます。 グループ自体は波形デー タ を表示 し ませんが、 グループに含まれてい る も の の表示/非表示を切 り 替え る こ と がで き ます。 グループは追加、 変更、 削除で き ます。 グループ を追加す る には、 次の手順に従い ます。 1. 波形ビ ュ ーで、 グループに追加す る 波形オブジ ェ ク ト を 1 つま たは複数選択 し ます。 注記 : グループには、 仕切 り 、 仮想バ ス、 ほかのグループ を含め る こ と がで き ます。 2. [Edit] → [New Group] を ク リ ッ ク す る か、 右 ク リ ッ ク し て [New Group] を ク リ ッ ク し ます。 こ れで、 選択 し た波形オブジ ェ ク ト を含むグループが波形 コ ン フ ィ ギ ュ レーシ ョ ンに追加 さ れます。 Tcl コ ン ソ ールで 「add_wave_group」 と 入力する と 、 新 し いグループが追加 さ れます。 グループは、 グループ ア イ コ ン で表 さ れます。 信号やバ ス を追加す る こ と も で き ます。 HDL オブジ ェ ク ト を ド ラ ッ グ ア ン ド ド ロ ッ プ し て、 グループに 波形 コ ン フ ィ ギ ュ レーシ ョ ン フ ァ イ ルを保存する と 、新 し いグループ と それに含まれ る 波形オブジ ェ ク ト も 保存 さ れ ます。 グループは、 次の方法で移動ま たは削除で き ます。 • グループ を移動す る には、 [Name] 列のグループ名を別の位置に ド ラ ッ グ ア ン ド ド ロ ッ プ し ます。 • グループ を削除す る には、 グループを選択 し て [Edit] → [Wave Objects] → [Ungroup] を ク リ ッ ク す る か、 グループ を右 ク リ ッ ク し て [Ungroup] を ク リ ッ ク し ます。グループに含まれていた波形オブジ ェ ク ト は、波形 コ ン フ ィ ギ ュ レーシ ョ ンの一番上に配置 さ れます。 グループ名 も 変更で き ます。 詳細は、 54 ページの 「オブジ ェ ク ト 名の変更」 を参照 し て く だ さ い。 注意 : Delete キーを押す と 、 選択 さ れてい る グループ と 、 それに含まれてい る 波形オブジ ェ ク ト が波形 コ ン フ ィ ギ ュ レーシ ョ ンか ら 削除 さ れます。 仕切 り の使用 信号やオブジ ェ ク ト を見やす く す る ため、HDL オブジ ェ ク ト の間に仕切 り を作成す る こ と がで き ます。波形 コ ン フ ィ ギ ュ レーシ ョ ンに仕切 り を追加す る には次の手順に従い ます。 1. 波形ビ ュ ーの [Name] 列で信号を ク リ ッ ク し ます。 区切 り はその信号の下に追加 さ れます。 2. 右 ク リ ッ ク し 、 [New Divider] を ク リ ッ ク し ます。 新 し い仕切 り マー ク は、 波形 コ ン フ ィ ギ ュ レーシ ョ ン フ ァ イ ルを保存 し た と き に保存 さ れます。 Tcl コ マ ン ド : add_wave_divider 仕切 り は、 次の方法で移動ま たは削除で き ます。 • 仕切 り を移動す る には、 名前を別の位置に ド ラ ッ グ ア ン ド ド ロ ッ プ し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 59 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 • 仕切 り を削除す る には、 Delete キーを押すか、 ま たは右 ク リ ッ ク し てポ ッ プア ッ プ メ ニ ュ ーか ら [Delete] を ク リ ッ ク し ます。 仕切 り の名前 も 変更で き ます。 詳細は、 54 ページの 「オブジ ェ ク ト 名の変更」 を参照 し て く だ さ い。 仮想バスの定義 論理 ス カ ラ ーお よ びベ ク タ ーを グループに ま と めて追加で き る 仮想バ ス を波形 コ ン フ ィ ギ ュ レーシ ョ ン に定義す る こ と がで き ます。 仮想バ ス はバ ス波形を表示 し ます。 仮想バ ス の下に垂直方向に追加 さ れた ス カ ラ ーお よ びア レ イ の値を取 り 込み、 そ れ ら の値を 1 次元ベ ク タ ーに フ ラ ッ ト に し て、 バ ス波形は表示 さ れます。 仮想バ ス を追加す る には、 次の手順に従い ます。 1. 波形 コ ン フ ィ ギ ュ レーシ ョ ンで、 仮想バ ス に追加す る 波形オブジ ェ ク ト を 1 つま たは複数選択 し ます。 2. 右 ク リ ッ ク し て [New Virtual Bus] を ク リ ッ ク し ます。 仮想バ ス は、 仮想バ ス ア イ コ ン で表 さ れます。 Tcl コ マ ン ド :add_wave_virtual_bus 信号名やバ ス名を ド ラ ッ グ ア ン ド ド ロ ッ プす る と 、 仮想バ ス に論理ス カ ラ ーお よ びア レ イ を移動で き ます。 波形 コ ン フ ィ ギ ュ レーシ ョ ン フ ァ イ ルを保存す る と 、 新 し い仮想バ ス と その中に含ま れ る も のが保存 さ れ ます。 ま た、 仮想バ ス の名前は、 波形の別位置に ド ラ ッ グ ア ン ド ド ロ ッ プ し て移動す る こ と も で き ます。 仮想バ ス の名前を変更す る 場合は、 54 ページの 「オブジ ェ ク ト 名の変更」 を参照 し て く だ さ い。 仮想バ ス を削除 し 、 その中に含 ま れ る も の を グループ解除す る には、 仮想バ ス を選択 し て右 ク リ ッ ク し 、 [Ungroup] を ク リ ッ ク し ます。 注意 : Delete キーを押す と 、 仮想バ ス と 、 それに含まれてい る HDL オブジ ェ ク ト が波形 コ ン フ ィ ギ ュ レーシ ョ ンか ら 削除 さ れます。 波形の解析 こ こ では、 波形内のデー タ を解析す る 機能について説明 し ます。 カ ー ソルの使用 カー ソ ルは一時的な タ イ ム マーカーで、 2 つの波形エ ッ ジ間の時間を計測する ため、 頻繁に移動 さ せ る こ と がで き ま す。 ヒ ン ト : 波形 コ ン フ ィ ギ ュ レーシ ョ ン フ ァ イ ル (WCFG) には、 カー ソ ル位置は記録 さ れません。 複数の計測の時間軸 を設定す る 場合やシ ミ ュ レーシ ョ ンでの重要な イ ベン ト を印す場合な ど、波形コ ン フ ィ ギ ュ レーシ ョ ン フ ァ イ ルに保 存す る には、波形ビ ュ ーにマーカーを追加 し て く だ さ い。詳細は、61 ページの「マーカーの使用」 を参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 60 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 メ イ ン カ ー ソル と 2 つ目のカ ー ソル 波形ビ ュ ーを 1 回 ク リ ッ ク す る と 、 メ イ ン カー ソ ルが配置 さ れます。 2 つ目のカー ソ ルを配置す る には、 Ctrl キーを押 し なが ら ク リ ッ ク し 、 マ ウ ス を左ま たは右に ド ラ ッ グ し ます。 カー ソ ルの上に位置を示すフ ラ グが表示 さ れます。 ま たは、 Shift キーを押 し た ま ま波形の ど こ か を ク リ ッ ク し ます。 2 つ目のカー ソ ルが配置 さ れていない と 、2 つ目のカー ソ ルのつ も り で配置 し た も のが メ イ ン カー ソ ル と な り 、ク リ ッ ク し た位置に メ イ ン カー ソ ルが配置 さ れます。 注記 : 2 つ目のカー ソ ルの位置を保持 し なが ら メ イ ン カー ソ ルの位置を変更する には、 Shift キーを押 し なが ら ク リ ッ ク し ます。 2 つ目のカー ソ ルを ド ラ ッ グ し て配置す る 場合、 最小間隔以上 ド ラ ッ グ し ない と 2 つ目のカー ソ ルは表示 さ れません。 カ ー ソルの移動 カー ソ ルを移動す る には、 ポ イ ン タ ーが手のひ ら のマー ク にな る ま でマ ウ ス を動か し 、 ク リ ッ ク し て次の位置 ま で カー ソ ルを ド ラ ッ グ し ます。 カー ソ ルを ド ラ ッ グす る と き 、 [Snap to Transtion] がオンにな っ てい る と (デフ ォ ル ト )、 白抜 き の丸、 ま たは中が塗 り つぶ さ れた丸が表示 さ れます。 • 白抜 き の丸 • 中が塗 り つぶ さ れた丸 は、 選択 し た信号の波形が遷移中であ る こ と を示 し ます。 は、 マ ウ ス位置ま たはマーカー位置でカー ソ ルが ロ ッ ク さ れてい る こ と を示 し ます。 カー ソ ル、マーカー、フ ロ ー ト し てい る ルー ラ ー以外の場所を ク リ ッ ク す る と 、2 つ目のカー ソ ルが非表示にな り ます。 次または前の遷移の検索 波形ビ ュ ーのサ イ ド バーにあ る ボ タ ン を使用 し て、 メ イ ン カー ソ ルを、 選択 さ れてい る 波形の次の遷移ま たは前の遷 移に移動 さ せ る こ と がで き ます。 メ イ ン カー ソ ルを波形の次ま たは前の遷移に移動する には、 次を実行 し ます。 1. 波形の波形オブジ ェ ク ト 名を ク リ ッ ク し て ア ク テ ィ ブに し てお き ます。 こ れで波形オブジ ェ ク ト が選択 さ れ、 オブジ ェ ク ト の波形が通常 よ り も 太い ラ イ ンで表示 さ れます。 2. サ イ ド バーの [Next Transition] ま たは [Previous Transition] ボ タ ン ま たは左矢印キーを使用 し て、 次ま たは前の遷移に移動 し ます。 を ク リ ッ ク す る か、 キーボー ド の右矢印 ヒ ン ト : 複数の波形オブジ ェ ク ト を一緒に選択 し てお く と 、 それ ら を ま と めて一番近い遷移に移動 さ せ る こ と がで き ます。 マー カ ーの使用 波形内の重要 イ ベン ト を消え ない よ う に し っ か り と マー ク し てお く 必要があ る 場合はマーカーを使用 し ま す。 マー カーを使用す る と 、 マーカーの付いた イ ベン ト に関連 し た時間を計測で き ます。 マーカーは、 次の よ う に追加、 移動、 削除で き ます。 • メ イ ン カー ソ ルの位置に波形 コ ン フ ィ ギ ュ レーシ ョ ンにマーカーを追加 し ます。 a. 波形ビ ュ ーの時間ま たは遷移を ク リ ッ ク し て、 マーカーを追加す る 時間の箇所に メ イ ン カー ソ ルを置 き ま す。 b. 右 ク リ ッ ク し て [Maker] → [Add Marker] を選択 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 61 第 4 章 : シ ミ ュ レーシ ョ ン波形の解析 カー ソ ル位置にマーカーが配置 さ れます。 マーカーがその位置に既にあ る 場合は、 若干ず ら し た位置に配置 さ れ ます。 マーカーの時間が上部に表示 さ れます。 新 し い波形マーカーを作成す る には、 次の Tcl コ マ ン ド を使用 し ます。 add_wave_marker <-filename> <-line_number> • マーカーを波形ビ ュ ーの別の位置に移動す る には、 ド ラ ッ グ ア ン ド ド ロ ッ プ し ます。マーカー ラ ベル (マーカー 上部ま たはマーカー ラ イ ン) を ク リ ッ ク し て ド ラ ッ グ し ます。 ° ド ラ ッ グ シ ン ボル は、 マーカーが移動可能であ る こ と を示 し ます。 マーカーを ド ラ ッ グす る 際、 [Snap to Transtion] がオンにな っ てい る と (デフ ォ ル ト )、白抜き の丸ま たは中が塗 り つぶ さ れた丸が表示 さ れます。 ° 中が塗 り つぶ さ れてい る 丸 し ます。 ° マーカーの場合は、 丸は白 く 塗 り つぶ さ れてい ます。 ° 白抜 き の丸 し ます。 は、 選択 し た信号の波形の遷移上、 ま たは別のマーカー上であ る こ と を示 は、 マーカーがマ ウ ス の下の波形の遷移に、 ま たはマーカーに ロ ッ ク さ れてい る こ と を示 新 し い位置にマーカーを ド ロ ッ プす る には、 マ ウ ス のボ タ ン を放 し ます。 • 1 つの コ マ ン ド でマーカーを 1 つ、 ま たはすべて削除で き ます。 マーカーを右 ク リ ッ ク し て、 次のいずれかの操 作を実行 し ます。 ° マーカーを 1 つ削除す る には、 ポ ッ プア ッ プ メ ニ ュ ーか ら [Delete Marker] を ク リ ッ ク し ます。 ° マーカーをすべて削除す る には、 ポ ッ プア ッ プ メ ニ ュ ーか ら [Delete All Markers] を ク リ ッ ク し ます。 注記 : ま た、 Delete キーを使用 し て選択 し たマーカーを削除する こ と も で き ます。 コ マ ン ド の使用方法については、 Vivado Design Suite のヘルプ ま たは 『Vivado Design Suite Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 7] を参照 し て く だ さ い。 フ ロー ト ルー ラ ーの使用 波形ビ ュ ーの上部にあ る 標準ルー ラ ーの絶対シ ミ ュ レーシ ョ ン時間以外の時間ベー ス を使用 し て時間を計測す る に は、 フ ロ ー ト ルー ラ ーを使用す る と 便利です。 フ ロ ー ト ルー ラ ーの表示/非表示は切 り 替え る こ と がで き 、 波形ビ ュ ーで垂直方向に ド ラ ッ グ し て位置に変更す る こ と がで き ます。 こ のルー ラ ーの時間ベース (時間 0) は 2 番目のカー ソ ルで、 こ のカー ソ ルがない場合は、 選択 さ れた マーカーにな り ます。 フ ロ ー ト ルー ラ ー ボ タ ン 示 さ れます。 1. 2. お よ びフ ロ ー ト ルー ラ ーは、 2 番目のカー ソ ルま たはたマーカーがあ る 場合にのみ表 ルー ラ ーの表示/非表示を切 り 替え る には、 次のいずれか を実行 し ます。 ° 2 番目のカー ソ ルを配置 ° マーカーを選択 [Floating Ruler] ボ タ ン を ク リ ッ ク し ます。 こ の操作は最初に 1 回だけ実行 し 、 繰 り 返す必要はあ り ません。 フ ロ ー ト ルー ラ ーは 2 番目のカー ソ ルが置 く た び、 ま たはマーカーが選択 さ れ る たびに表示 さ れます。 ルー ラ ーを非表示にす る には、 こ の コ マ ン ド を も う 1 度 ク リ ッ ク し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 62 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ 第 5章 Vivado シ ミ ュ レー タ を使用 し たデザイ ンの デバ ッ グ 概要 Vivado® シ ミ ュ レー タ には次の機能があ り ます。 • ソ ース コ ー ド を確認 • ブ レー ク ポ イ ン ト を設定 し 、 ブ レー ク ポ イ ン ト に達す る ま でシ ミ ュ レーシ ョ ン を実行 • コ ー ド セ ク シ ョ ン を ス テ ッ プオーバー • 波形オブジ ェ ク ト を特定値に設定 本章では、 デバ ッ グ方法のほか、 デバ ッ グ プ ロ セ ス で有効な Tcl コ マ ン ド について も 説明 し ます。 ま た、 サー ド パー テ ィ シ ミ ュ レー タ を使用 し たデバ ッ グのフ ロ ーについて も 説明 し ます。 ソ ース レ ベルでのデバ ッ グ 予期 し ない動作をデザ イ ン で検出す る ため、 HDL ソ ース コ ー ド をデバ ッ グ で き ま す。 問題の原因を見極め る ため、 ソ ース コ ー ド を コ ン ト ロ ール し なが ら 実行する 方法でデバ ッ グ を行い ます。 デバ ッ グ ス ト ラ テジは次の と お り です。 • コ ー ド を 1 行ずつ実行 : 任意開発段階において、 [Step] コ マ ン ド を使用 し て、 デザ イ ンが予期動作を し てい る こ と を検証す る ため、 1 度に 1 行ずつ HDL ソ ー ス コ ー ド をデバ ッ グ し ます。 1 つの行でデバ ッ グ を終え た ら 、 次 の行で再び [Step] コ マ ン ド を実行 し て、 解析を続けてい き ます。 詳細は、 「シ ミ ュ レーシ ョ ンの ス テ ッ プ実行」 を 参照 し て く だ さ い。 • HDL コ ー ド の特定行にブ レー ク ポ イ ン ト を設定 し 、ブ レー ク ポ イ ン ト に達する ま でシ ミ ュ レーシ ョ ン を実行 : 大 き なデザ イ ンの場合、HDL ソ ース コ ー ド を 1 行ご と に停止す る 方法では、時間がかかっ て し ま い ます。HDL ソ ー ス コ ー ド の任意の位置にブ レー ク ポ イ ン ト を設定 し 、 テ ス ト ベンチの最初か ら 、 ま たは現在点か ら 、 シ ミ ュ レー シ ョ ン を実行 し 、各ブ レー ク ポ イ ン ト で停止す る よ う に し ます。停止後にシ ミ ュ レーシ ョ ン を進め る には、[Step]、 [Run All]、ま たは [Run For] コ マ ン ド を使用 し ます。詳細は、次の 「ブ レー ク ポ イ ン ト の使用」 を参照 し て く だ さ い。 • 条件を設定 し ます。 ツールが各条件を評価 し 、 その条件が当ては ま る 場合は、 Tcl コ マ ン ド を実行 し ます。 次の Tcl コ マ ン ド を使用 し ます。 add_condition <condition> <instruction> 詳細は、 65 ページの 「条件の追加」 を参照 し て く だ さ い。 シ ミ ュ レーシ ョ ンのス テ ッ プ実行 デザ イ ンが予期動作を し てい る こ と を検証す る ため、 [Step] コ マ ン ド を使用 し 、 1 度に 1 行ずつ HDL ソ ース コ ー ド を 実行す る こ と がで き ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 63 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ こ の コ マ ン ド が実行 さ れてい る コ ー ド 行はハ イ ラ イ ト さ れ、 矢印が表示 さ れます。 ま た、 ブ レ ー ク ポ イ ン ト を作成 し て、 ス テ ッ プ実行中に停止箇所を追加す る こ と も で き ま す。 シ ミ ュ レ ー タ でのデ バ ッ グ ス ト ラ テジについては、 「ブ レー ク ポ イ ン ト の使用」 を参照 し て く だ さ い。 1. シ ミ ュ レーシ ョ ンで ス テ ッ プ実行す る には、 次の手順に従っ て く だ さ い。 ° 現在の実行時間か ら [Run] → [Step] を ク リ ッ ク す る か、 [Step] ボ タ ン を ク リ ッ ク し ます。 最上位デザ イ ン ユニ ッ ト に関連付け ら れてい る HDL が波形ビ ュ ーに新 し く 表示 さ れます。 ° 開始点 (0ns) か ら シ ミ ュ レーシ ョ ン を再開 し ます。 テ ス ト ベンチの冒頭に時間を リ セ ッ ト す る には、 [Restart] コ マ ン ド を使用 し ます。 詳細は第 3 章 「Vivado シ ミ ュ レー タ について」 を参照 し て く だ さ い。 2. 波形 コ ン フ ィ ギ ュ レーシ ョ ン ビ ュ ーで、波形を右 ク リ ッ ク す る か、HDL の タ ブ を ク リ ッ ク し て、[Tile Horizontally] を ク リ ッ ク し 、 波形 と HDL コ ー ド を同時に表示 し ます。 3. デバ ッ グが終了す る ま で、 [Step] を繰 り 返 し ます。 コ マ ン ド が 1 行ずつ実行 さ れてい く ので、 それに従っ て矢印が コ ー ド の下方に移動 し てい き ます。 シ ミ ュ レー タ が別 の フ ァ イ ルの行を実行す る 場合は、 そのフ ァ イ ルが開き 、 同 じ よ う に ス テ ッ プが実行 さ れてい る 行に矢印が表示 さ れ ます。 複数の フ ァ イ ルを シ ミ ュ レー ト し てい る 場合は、 一般的には、 [Step] コ マ ン ド を実行す る と き に、 その フ ァ イ ルが開 き ます。 Tcl コ ン ソ ールに も step コ マ ン ド の進捗状況が表示 さ れます。 ブ レー ク ポ イ ン ト の使用 ブ レー ク ポ イ ン ト は、 ソ ース コ ー ド 内で、 ユーザーが指定で き る 停止地点で、 デザ イ ン をデバ ッ グす る と き に使用で き ます。 ヒ ン ト : ブ レー ク ポ イ ン ト は、 [Step] コ マ ン ド で 1 行ずつデバ ッ グ し てい く と 時間がかか り すぎ て し ま う よ う な大規 模なデザ イ ン をデバ ッ グす る 場合に使用す る と 、 特に便利です。 シ ミ ュ レー タ で HDL ソ ース コ ー ド にブ レー ク ポ イ ン ト を設定 し 、 そのブ レー ク ポ イ ン ト に達す る ま で コ ー ド を連 続 し て実行す る こ と がで き ます。 注記 : ブ レー ク ポ イ ン ト は実行可能な コ ー ド にのみ設定で き ます。 実行不可能な コ ー ド の行にブ レー ク ポ イ ン ト を設 定 し て も 、 ブ レー ク ポ イ ン ト は追加 さ れません。 ワー ク スペース (GUI) で ブ レー ク ポ イ ン ト を設定する方法 1. ブ レー ク ポ イ ン ト を設定す る には、 シ ミ ュ レーシ ョ ン を実行 し ます。 2. ソ ース フ ァ イ ルを表示 し て、ブ レー ク ポ イ ン ト を設定 し たい行の左側にあ る 白抜 き の丸を ク リ ッ ク し ます。 赤い点は、 ブ レー ク ポ イ ン ト が正 し く 設定 さ れた こ と を示 し ます。 こ の後、 シ ミ ュ レーシ ョ ン ブ レー ク ポ イ ン ト ボ タ ンが コ ー ド 行の横に表示 さ れ る よ う にな り ます。 Tcl コ ン ソ ールで ブ レー ク ポ イ ン ト を設定する方法 1. 次の Tcl コ マ ン ド を実行 し ます。 add_bp <file_name> <line_number> こ の コ マ ン ド に よ り 、 <file_name> の <line_number> にブ レー ク ポ イ ン ト が追加 さ れます。 コ マ ン ド の使用方法に つい ては、 Vivado Design Suite のヘルプ (-help) ま たは 『Vivado Design Suite Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 6] を参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 64 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ ブ レー ク ポ イ ン ト を使用 し てデザイ ン をデバ ッ グする方法 1. HDL ソ ース フ ァ イ ルを開 き ます。 2. HDL ソ ース フ ァ イ ルの実行可能な行にブ レー ク ポ イ ン ト を設定 し ます。 3. 手順 1 お よ び 2 を繰 り 返 し 、 ブ レー ク ポ イ ン ト をすべて設定 し ます。 4. 次の よ う にシ ミ ュ レーシ ョ ン を実行 し ます。 ° 最初か ら 実行す る 場合は、 [Run] → [Restart] を ク リ ッ ク し ます。 ° [Run] → [Run All] ま たは [Run] → [Run for Specified Time] コ マ ン ド を使用 し ます。 ブ レー ク ポ イ ン ト に到達す る ま でシ ミ ュ レーシ ョ ンが実行 さ れて、 停止 し ます。 HDL ソ ース フ ァ イ ルに矢印が表示 さ れ、 ブ レー ク ポ イ ン ト の停止ポ イ ン ト が示 さ れます。 5. 手順 4 を繰 り 返 し て、 結果に納得がい く ま で、 シ ミ ュ レーシ ョ ン をブ レー ク ポ イ ン ト ご と に進めてい き ます。 HDL ソ ース フ ァ イ ルに設定 し た各ブ レー ク ポ イ ン ト でシ ミ ュ レーシ ョ ン を停止 さ せなが ら 、 シ ミ ュ レーシ ョ ン を実行 し ます。 デザ イ ンのデバ ッ グ中に、 [Run] → [Step] コ マ ン ド を実行 し て 1 行ご と に コ ー ド を検証す る こ と で、 さ ら に詳細 にデザ イ ン をデバ ッ グす る こ と も で き ます。 HDL ソ ース コ ー ド か ら 1 つのブ レー ク ポ イ ン ト ま たはすべてのブ レー ク ポ イ ン ト を削除す る こ と がで き ます。 1 つのブ レー ク ポ イ ン ト を削除す る には、 [Breakpoint] ボ タ ン を ク リ ッ ク し ます。 すべてのブ レー ク ポ イ ン ト を削除す る には、 [Run] → [Breakpoint] → [Delete All Breakpoints] を ク リ ッ ク し ます。 ま たは [Delete All Breakpoints] ボ タ ン を ク リ ッ ク し ます。 すべてのブ レー ク ポ イ ン ト を削除す る には、 • 「 remove_bps -all」 と 入力 し ます。 指定 し たブ レー ク ポ イ ン ト オブジ ェ ク ト の リ ス ト でブ レー ク ポ イ ン ト 情報を表示 さ せる には • 「 report_bps」 と 入力 し ます。 条件の追加 ブ レー ク ポ イ ン ト を条件に基づいて追加 し 、 診断 メ ッ セージ を表示 さ せる には、 次の コ マ ン ド を使用 し ます。 add_condition <condition> <message> Vivado IDE BFT サンプル デザ イ ン を使用 し 、 wbClk 信号 と reset の両方がア ク テ ィ ブ High の と き に停止す る よ う に、 シ ミ ュ レーシ ョ ン開始時に次の コ マ ン ド を実行 し て、 診断 メ ッ セージ を出力 し 、 リ セ ッ ト が 1 にな り 、 wbClk が 1 に な っ た と き にシ ミ ュ レーシ ョ ン を停止 し ます。 add_condition {reset == 1 && wbClk == 1} {puts "Reset went to high"; stop} BFT サ ン プル デザ イ ン では、 追加 さ れた条件に よ り 、 条件が満た さ れた と き にシ ミ ュ レーシ ョ ン が 5ns 停止 し 、 リ セ ッ ト が High にな っ た こ と を知 ら せ る メ ッ セージが コ ン ソ ールに表示 さ れ ます。 シ ミ ュ レー タ は、 次の ス テ ッ プ ま たは run コ マ ン ド がシ ミ ュ レーシ ョ ン を再開する ま で待機 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 65 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ シ ミ ュ レーシ ョ ンの一時停止 シ ミ ュ レーシ ョ ン実行中に一時停止す る には、 [Break] コ マ ン ド を使用 し ます。 こ れに よ り 、 シ ミ ュ レーシ ョ ン セ ッ シ ョ ンは開いた ま ま にな り ます。 シ ミ ュ レーシ ョ ン を一時停止す る には、 [Simulation] → [Break] を ク リ ッ ク する か、 [Break] ボ タ ン を ク リ ッ ク し ます。 シ ミ ュ レー タ は次の実行可能な HDL 行で停止 し ます。 シ ミ ュ レーシ ョ ンの停止 し た行がテ キ ス ト エデ ィ タ ーで表示 さ れます。 注記 : デザ イ ン を -debug <kind> オプシ ョ ンで コ ンパ イ ル し た場合 も 、 こ の動作にな り ます。 [Run All]、 [Run]、 [Step] コ マ ン ド を使用す る と 、 シ ミ ュ レ ーシ ョ ン を いつで も 再開で き ま す。 詳細は、 63 ページの 「シ ミ ュ レーシ ョ ンの ス テ ッ プ実行」 を参照 し て く だ さ い。 波形オブ ジ ェ ク ト を特定値に設定 Force コ マ ン ド の使用 Vivado シ ミ ュ レー タ では、 信号、 ワ イ ヤ、 レ ジ ス タ を、 指定時間に、 ま たは指定期間中に、 特定値に設定す る こ と が で き ます。 ま た、 経時的に変更す る よ う 、 オブジ ェ ク ト に値を強制設定す る こ と も で き ます。 ヒ ン ト : 「force」 と は、 あ る 信号に対 し HDL で定義 さ れた動作を上書 き さ せ る 動作であ る と 同時に、 Tcl の第一級オ ブジ ェ ク ト であ り 、 Tcl 変数で保持で き る も のです。 HDL デザ イ ンで定義 さ れてい る 信号の動作を上書 き す る ため、 HDL 信号に force コ マ ン ド を使用 し ます。 た と えば、 信号の動作を次の目的で上書 き す る こ と がで き ます。 • HDL テ ス ト ベンチ自体が駆動 し ていないテ ス ト ベンチ信号に ス テ ィ ミ ュ ラ ス を供給する ため • デバ ッ グ中に一時的に不正値を正すため (問題を引 き 続 き 分析で き る よ う にす る ため) 使用可能な force コ マ ン ド は、 次の と お り です。 • 「[Force Constant] オプシ ョ ン」 • 「[Force Clock] オプシ ョ ン」 • 「[Remove Force] オプシ ョ ン」 重要 : restart コ マ ン ド を実行す る と 、remove_force コ マ ン ド で消去 さ れていない force 設定がすべて保持 さ れま す。 シ ミ ュ レーシ ョ ン を再び実行す る と 、 保存 さ れてい る force 設定が、 前回のシ ミ ュ レーシ ョ ン実行 と 同 じ 絶対シ ミ ュ レーシ ョ ン時間で行われます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 66 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ 図 5-1は、 add_force コ マ ン ド を次の よ う に実行 し た と き に、 その機能が ど の よ う に適用 さ れ る か を示 し てい ます。 add_force mySig {0 t1} {1 t2} {0 t3} {1 t4} {0 t5} -repeat_every tr -cancel_after tc X-Ref Target - Figure 5-1 ƚĐ ƵƌƌĞŶƚdŝŵĞ ƚƌ ƚϭ ƚϮ ƚϯ ƚϰ ƚϱ 図 5‐1 : ‐add_force オプ シ ョ ン を使用 し た結果 さ ら に詳細を表示す る には、 Tcl コ ン ソ ールに次を入力 し ます。 add_force -help [Force Constant] オプ シ ョ ン [Force Constant] オプシ ョ ン を使用す る と 、 信号を定数値に固定 し 、 HDL コ ー ド 内で割 り 当て ら れた値や前回適用 さ れた別の定数、 ま たは [Force Clock] を上書 き す る こ と がで き ます。 [Force Constant] お よ び [Force Clock] は、[Objects] ビ ュ ーま たは波形ビ ュ ーで右 ク リ ッ ク し て表示 さ れ る オプシ ョ ン で す (図 5-2を参照)。 あ る いは、 テ キ ス ト エデ ィ タ ーで ソ ース コ ー ド を開いて使用で き る オプシ ョ ンです。 ヒ ン ト : [Objects]、 [Sources]、 [Scopes] ビ ュ ーでア イ テ ム を ダブル ク リ ッ ク す る と 、 テ キ ス ト エデ ィ タ ーが開 き ます。 テ キ ス ト エデ ィ タ ーの詳細は、 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 3] を参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 67 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ X-Ref Target - Figure 5-2 図 5‐2 : Force 関連のオプ シ ョ ン [Force Constant] を ク リ ッ ク す る と 、[Force Constant] ダ イ ア ロ グ ボ ッ ク ス (図 5-3) が開 き 、関連す る 値を入力で き ます。 X-Ref Target - Figure 5-3 図 5‐3 : [Force Constant] ダ イ ア ログ ボ ッ ク ス [Force Constant] ダ イ ア ロ グ ボ ッ ク ス では、 次の こ と が設定で き ます。 • [Signal name] : デフ ォ ル ト の信号名 (選択 し たオブジ ェ ク ト のフル パ ス) が表示 さ れます。 • [Value radix] : 選択 し た信号の現在の基数設定が表示 さ れます。 サポー ト さ れてい る 基数 タ イ プ (2 進数、 16 進 数、 符号な し の10 進数、 符号つ き の 10 進数、 8 進数、 ASCII) の中か ら 、 1 つ選択で き ます。 GUI には、 こ の基数設定に基づいた値 し か入力で き な く な り ます。 た と えば、 [Binary] を選択す る と 、 0 と 1 以外の数値は入 力で き ません。 • [Force value] : 定義済みの基数値を使用 し て定数値を指定 し ます。 基数についての詳細は、 50 ページの 「基数」 お よ び51 ページの 「基数お よ びアナ ロ グ波形の使用」 を参照 し て く だ さ い。 • [Starting at time offset] : 指定時間の後に開始 し ます。 デフ ォ ル ト の開始時間は 0 です。 時間は、 10 や 10 ns の よ う に、 文字列で指定で き ます。 単位を付けずに数字だけ入力す る 場合、 Vivado シ ミ ュ レー タ ではデフ ォ ル ト 単位 の ns が使用 さ れます。 • [Cancel after time offset] : 指定時間の後にキ ャ ン セル し ます。 時間は、 10 や 10 ns の よ う に、 文字列で指定で き ま す。 単位を付けずに数字だけ入力す る 場合、 デフ ォ ル ト のシ ミ ュ レーシ ョ ン時間単位が使用 さ れます。 Tcl コ マ ン ド : add_force /testbench/TENSOUT 1 200 -cancel_after ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 500 68 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ [Force Clock] オプ シ ョ ン [Force Clock] コ マ ン ド を使用す る と 、 ク ロ ッ ク 信号 と し て、 指定時間内を 2 つの ス テー ト 間を指定レー ト で ト グルす る 値に、 信号を割 り 当て る こ と がで き ます。 [Objects] ウ ィ ン ド ウ の メ ニ ュ ーか ら [Force Clock] オプシ ョ ン を ク リ ッ ク す る と 、 [Force Clock] ダ イ ア ロ グ ボ ッ ク ス (図 5-4) が開 き ます。 X-Ref Target - Figure 5-4 図 5‐4 : [Force Clock] ダ イ ア ログ ボ ッ ク ス [Force Clock] ダ イ ア ロ グ ボ ッ ク ス のオプシ ョ ンは、 次の と お り です。 • [Signal name] : デフ ォ ル ト の信号名 ([Object] ビ ュ ーま たは波形で選択 し た ア イ テ ムのフル パ ス) が表示 さ れます。 ヒ ン ト : 切 り 替わ る 値を定義す る ため、 [Force Clock] コ マ ン ド は、 ク ロ ッ ク 信号だけでな く 任意の信号に適用す る こ と がで き ます。 • [Value radix] : 選択 し た信号の現在の基数設定が表示 さ れます。 ド ロ ッ プダ ウ ン メ ニ ュ ーに表示 さ れ る 、 [Binary]、 [Hexadecimal]、 [Unsigned Decimal]、 [Signed Decimal]、 [Octal]、 [ASCII] の中か ら 、 基数 タ イ プ を 1 つ 選択 し ます。 • [Leading edge value] : ク ロ ッ ク パ タ ーンの最初のエ ッ ジ を指定 し ます。 こ の値には [Value radix] で定義 し た基数 が使用 さ れます。 • [Trailing edge value] : ク ロ ッ ク パ タ ーンの 2 つ目のエ ッ ジ を指定 し ます。 こ の値には [Value radix] で定義 し た基 数が使用 さ れます。 • [Starting at time offset] : 現在のシ ミ ュ レーシ ョ ンか ら 指定 し た時間後 force コ マ ン ド を開始 し ます。 デフ ォ ル ト の 開始時間は 0 です。 時間は、 10 や 10 ns の よ う に、 文字列で指定で き ます。 単位を付けずに数字だけ入力す る 場 合、 Vivado シ ミ ュ レー タ ではデフ ォ ル ト のユーザー単位が使用 さ れます。 • [Cancel after time offset] : 現在のシ ミ ュ レーシ ョ ン時間か ら 指定 し た時間後 force コ マ ン ド を キ ャ ン セル し ます。 時間は、 10 や 10 ns の よ う に、 文字列で指定で き ます。 単位を付けずに数字だけ入力す る 場合、 Vivado シ ミ ュ レー タ ではデフ ォ ル ト のシ ミ ュ レーシ ョ ン時間単位が使用 さ れます。 • [Duty cycle (%)] : ク ロ ッ ク パルス がア ク テ ィ ブ ス テー ト にあ る 時間の割合を % で指定 し ます。 使用で き る 値は 0 か ら 100 で、 デフ ォ ル ト 値は 50 です。 • [Period] : 時間の値 と し て定義 さ れた ク ロ ッ ク パルス の長 さ を指定 し ます。 時間は、 10 や 10 ns の よ う に、 文字 列で指定で き ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 69 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ 注記 : 基数についての詳細は、 50 ページの 「基数」 お よ び51 ページの 「基数お よ びアナ ロ グ波形の使用」 を参照 し て く だ さ い。 Tcl コ マ ン ド ス ク リ プ ト 例 add_force /testbench/TENSOUT -radix binary {0} {1} -repeat_every 10ns -cancel_after 3us [Remove Force] オプ シ ョ ン オブジ ェ ク ト か ら 特定の force オプシ ョ ン を削除する 場合は、 次の Tcl コ マ ン ド を使用 し ます。 remove_forces <force object> remove_forces <HDL object> バ ッ チ モー ド での Force コ マ ン ド の使用 次の コ ー ド 例は、 add_force コ マ ン ド を使用 し て、 信号を指定値に設定す る 方法を示 し てい ます。 簡単な Verilog 回路が提供 さ れてい ます。 最初の例は、 add_force コ マ ン ド を イ ン タ ラ ク テ ィ ブに使用す る 例を、 2 番目は ス ク リ プ ト を使用 し た例を示 し てい ます。 例 1 : Add Force コ マ ン ド Verilog コ ー ド (tmp.v) 次の コ ー ド 例は Verilog 回路です。 module bot(input in1, in2,output out1); reg sel; assign out1 = sel? in1: in2; endmodule module top; reg in1, in2; wire out1; bot I1(in1, in2, out1); initial begin #10 in1 = 1'b1; in2 = 1'b0; #10 in1 = 1'b0; in2 = 1'b1; end initial $monitor("out1 = %b\n", out1); endmodule コ マン ド 例 add_force の効果を確認す る には、 次の コ マ ン ド を入力 し ます。 xelab -vlog tmp.v -debug all xsim work.top ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 70 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ コ マ ン ド プ ロ ンプ ト に次の よ う に入力 し ます。 add_force /top/I1/sel 1 run 10 add_force /top/I1/sel 0 run all Tcl コ マ ン ド add_force コ マ ン ド を使用す る と 、 信号、 ワ イ ヤ、 ま たはレ ジ ス タ を指定値に設定で き ます。 add_force [-radix <arg>] [-repeat_every <arg>] [-cancel_after <arg>] [-quiet] [-verbose] <hdl_object> <values>... Tcl コ マ ン ド の詳細は、『Vivado Design Suite Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 7].を参照 し て く だ さ い。 例 2 : remove_forces を使用 し た add_force のス ク リ プ ト 作成 Verilog コ ー ド (top.v) 次は、 カ ウ ン タ を イ ン ス タ ン シエー ト す る Verilog フ ァ イ ル top.v の例です。 こ の フ ァ イ ルを次の コ マ ン ド 例で使用 し ます。 module counter(input clk,reset,updown,output [4:0] out1); reg [4:0] r1; always@(posedge clk) begin if(reset) r1 <= 0; else if(updown) r1 <= r1 + 1; else r1 <= r1 - 1; end assign out1 = r1; endmodule module top; reg clk; reg reset; reg updown; wire [4:0] out1; counter I1(clk, reset, updown, out1); initial begin reset = 1; #20 reset = 0; end ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 71 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ initial begin updown = 1; clk = 0; end initial #500 $finish; initial $monitor("out1 = %b\n", out1); endmodule コ マン ド 例 1. 次の コ マ ン ド を使用 し て add_force.tcl と い う フ ァ イ ルを作成 し ます。 create_project add_force -force add_files top.v set_property top top [get_filesets sim_1] set_property -name xelab.more_options -value {-debug all} -objects [get_filesets sim_1] set_property runtime {0} [get_filesets sim_1] launch_simulation -simset sim_1 -mode behavioral add_wave /top/* 2. Vivado Design Suite を Tcl モー ド で起動 し て、 add_force.tcl フ ァ イ ルを読み込みます。 3. Tcl コ ン ソ ールに次の よ う に入力 し ます。 set force1 [add_force clk {0 1} {1 2} -repeat_every 3 -cancel_after 500] set force2 [add_force updown {0 10} {1 20} -repeat_every 30] run 100 out1 の値の増減を波形ビ ュ ーで確認 し ます。 start_gui コ マ ン ド を使用 し て、 Vivado IDE で波形を確認 し ま す。 updown 信号の値を波形ビ ュ ーで確認 し ます。 4. Tcl コ ン ソ ールに次を入力 し ます。 remove_forces $force2 run 100 out1 の値だけが増加 し た こ と を確認 し ます。 5. Tcl コ ン ソ ールに次を入力 し ます。 remove_forces $force1 run 100 clk 信号が ト グル し ないので、 out1 の値が変更 し ていない こ と を確認 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 72 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ Vivado シ ミ ュ レー タ を使用 し た消費電力解析 SAIF (Switching Activity Interchange Format) は、 シ ミ ュ レー タ ツールで生成 さ れた ス イ ッ チン グ ア ク テ ィ ビ テ ィ を抽 出 し て並び替え る こ と ので き る ASCII 形式の レ ポー ト です。 こ の ス イ ッ チン グ ア ク テ ィ ビ テ ィ は、 ザ イ リ ン ク ス ®の 消費電力解析お よ び最適化ツールにバ ッ ク ア ノ テー ト し て消費電力の測定お よ び見積 り に使用で き ます。 SAIF ダ ンプは、ザ イ リ ン ク ス電力ツールお よ び report_power Tcl コ マ ン ド 用に最適化 さ れてい ます。Vivado シ ミ ュ レー タ では、 SAIF フ ァ イ ルに次の HDL タ イ プ を記述す る こ と がで き ます。 その他の詳細は、 『Vivado Design Suite ユーザー ガ イ ド : 消費電力の解析お よ び最適化』 (UG907) [参照 8] の 「解析用 ス イ ッ チン グ ア ク テ ィ ビ テ ィ の指定」 を参照 し て く だ さ い。 • • Verilog : ° 入力、 出力、 入出力ポー ト ° 内部 ワ イ ヤ宣言 VHDL : ° std_logic、 std_ulogic、 お よ び bit (ス カ ラ ー、 ベ ク タ ー、 配列) 型の入力、 出力、 入出力ポー ト 注記 : タ イ ミ ン グ シ ミ ュ レーシ ョ ン用の VHDL ネ ッ ト リ ス ト は、 Vivado Design Suite で生成 さ れませんので、 VHDL ソ ース は RTL レベルの コ ー ド 専用で、 ネ ッ ト リ ス ト シ ミ ュ レーシ ョ ンには使用で き ません。 RTL レベルのシ ミ ュ レーシ ョ ンの場合、 ブ ロ ッ ク レベルのポー ト のみが生成 さ れ、 内部信号は生成 さ れません。 サー ド パーテ ィ シ ミ ュ レー タ を使用 し た消費電力解析については、第 8 章 「サー ド パーテ ィ シ ミ ュ レー タ の使用」、 121 ページの 「消費電力解析用の SAIF のダ ンプ」 を参照 し て く だ さ い。 SAIF ダ ン プの生成 log_saif コ マ ン ド を使用す る 前に、 open_saif を呼び出す必要があ り ます。 log_saif はオブジ ェ ク ト ま たは値を返 し ませ ん。 1. RTL コ ー ド を -debug typical オプシ ョ ンで コ ンパ イ ル し て、 SAIF ダ ンプ を イ ネーブルに し ます。 xelab -debug typical top -s mysim 2. 次の Tcl コ マ ン ド を使用 し て SAIF ダ ンプ を開始 し ます。 open_saif <saif_file_name> 3. 次の Tcl コ マ ン ド のいずれかを入力 し て生成す る 範囲お よ び信号を追加 し ます。 log_saif [get_objects] すべての イ ン ス タ ン ス を繰 り 返 し ロ グに記録す る には、 次の Tcl コ マ ン ド を入力 し ます。 log_saif [get_objects -r *] 4. run コ マ ン ド のいずれかを使用 し てシ ミ ュ レーシ ョ ン を実行 し ます。 5. シ ミ ュ レーシ ョ ン デー タ を SAIF 形式に イ ン ポー ト す る には、 次を入力 し ます。 close_saif SAIF コ マ ン ド の例 SAIF を記録す る には、 次の コ マ ン ド を使用 し ます。 • ス コ ープ内のすべての信号 : /tb: log_saif /tb/* • ス コ ープ内のすべてのポー ト : /tb/UUT ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 73 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ • a で始ま っ て b で終わ り 、 ab 間に数字が入る よ う な名前のオブジ ェ ク ト : log_saif [get_objects -regexp {^a[0-9]+b$}] • current_scope お よ び children_scope のオブジ ェ ク ト : log_saif [get_objects -r *] • current_scope のオブジ ェ ク ト : log_saif * or log_saif [get_objects] • ス コ ープ /tb/UUT のポー ト のみ : log_saif [get_objects -filter {type == in_port || type == out_port || type == inout_port || type == port } /tb/UUT/* ] • ス コ ープ /tb/UUT の内部信号のみ : log_saif [get_objects -filter { type == signal } /tb/UUT/* ] ヒ ン ト : HDL オブジ ェ ク ト を必要 と す る Tcl コ マ ン ド すべてに、 こ の フ ィ ル タ ー機能を適用で き ます。 Tcl シ ミ ュ レーシ ョ ン バ ッ チ フ ァ イルを使用 し た SAIF のダ ン プ sim.tcl: open_saif xsim_dump.saif log_saif /tb/dut/* run all close_saif quit Tcl コ マ ン ド report_drivers の使用 Tcl コ マ ン ド の report_drivers を使用す る と 、 ど の信号が HDL オブジ ェ ク ト の値を駆動 し てい る か を判断で き ます。 コ マ ン ド 構文は、 次の よ う にな り ます。 report_drivers <hdl_object> Tcl コ ン ソ ールには ド ラ イ バーが表示 さ れ、 wire ま たは signal 型の HDL オブジ ェ ク ト への代入の右側には現在の駆動 値が表示 さ れます。 ま た、 [Objects] ビ ュ ーま たは波形ビ ュ ーの コ ン テ キ ス ト メ ニ ュ ー、 あ る いはテ キ ス ト エデ ィ タ ーか ら report_drivers コ マ ン ド を呼び出す こ と も で き ます。 コ ン テ キ ス ト メ ニ ュ ーを開 く には (次の図を参照)、 信号 を右 ク リ ッ ク し て、 [Report Drivers] を選択 し ます。 結果は Tcl コ ン ソ ールに表示 さ れます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 74 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ X-Ref Target - Figure 5-5 図 5‐5 : コ ン テキス ト メ ニ ュ ーの [Report Drivers] コ マ ン ド オプ シ ョ ン VCD 機能の使用 シ ミ ュ レーシ ョ ン出力を取得す る には、 Value Change Dump (VCD) フ ァ イ ルを使用 し ます。 Tcl コ マ ン ド は、 ダ ンプ さ れ る 値に関連す る Verilog シ ス テ ム タ ス ク に基づき ます。 VCD 機能では、 次の表に リ ス ト さ れ る Tcl コ マ ン ド で Verilog シ ス テ ム タ ス ク が記述 さ れます。 表 5‐1 : VCD の Tcl コ マ ン ド Tcl コ マ ン ド 説明 open_vcd シ ミ ュ レーシ ョ ン出力を取 り 込むための VCD フ ァ イ ルを開 き ます。 こ の Tcl コ マ ン ド は、 $dumpfile Verilog シ ス テ ム タ ス ク の ビヘ イ ビ アーを モデル化 し てい ま す。 checkpoint_vcd $dumpall Verilog シ ス テ ム タ ス ク のビヘ イ ビ アーをモデル化 し てい ます。 start_vcd $dumpon Verilog シ ス テ ム タ ス ク のビヘ イ ビ アーをモデル化 し てい ます。 log_vcd 指定 し た HDL オブジ ェ ク ト の VCD フ ァ イ ルを記録 し ます。 こ の Tcl コ マ ン ド は、 $dumpvars Verilog シ ス テ ム タ ス ク のビヘ イ ビ アーをモデル化 し てい ます。 flush_vcd $dumpflush Verilog シ ス テ ム タ ス ク の ビヘ イ ビ アーを モデル化 し てい ます。 limit_vcd $dumplimit Verilog シ ス テ ム タ ス ク の ビヘ イ ビ アーを モデル化 し てい ます。 stop_vcd $dumpoff Verilog シ ス テ ム タ ス ク のビヘ イ ビ アーをモデル化 し てい ます。 close_vcd VCD の生成を閉 じ ます。 『Vivado Design Suite Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 6] を参照す る か、 Tcl コ ン ソ ールに次を入力 し ます。 <command> -help 例: open_vcd xsim_dump.vcd log_vcd /tb/dut/* run all close_vcd quit 詳細は、 付録 B の 「Verilog 言語サポー ト の例外」 を参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 75 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ VCD デー タ を使用 し て、 シ ミ ュ レーシ ョ ン エ ラ ーをデバ ッ グす る ためにシ ミ ュ レー タ の出力を検証す る こ と がで き ます。 Tcl コ マ ン ド log_wave の使用 log_wave コ マ ン ド を実行 し 、 Vivado シ ミ ュ レー タ の波形ビ ュ ーアーで指定 し た HDL オブジ ェ ク ト を表示す る ため に、 シ ミ ュ レーシ ョ ン出力を記録す る こ と がで き ます。 add_wave と は異な り 、 log_wave コ マ ン ド では波形ビ ュ ー アー (波形 コ ン フ ィ ギ ュ レ ーシ ョ ン) に波形オブ ジ ェ ク ト が追加 さ れず、 Vivado シ ミ ュ レ ー タ の波形デー タ ベー ス (wdb) への出力が記録 さ れ る よ う にな る だけです。 ヒ ン ト : オブジ ェ ク ト 挿入以前のオブジ ェ ク ト 値を表示 さ せる には、シ ミ ュ レーシ ョ ン を再開始する 必要があ り ます。 シ ミ ュ レーシ ョ ンの再開を避け る には、デザ イ ンの表示可能な HDL オブジ ェ ク ト すべての値を取 り 込むため、シ ミ ュ レーシ ョ ン run を開始す る と き に、 log_wave -r / Tcl コ マ ン ド を実行 し ます。 構文 : log_wave [-recursive] [-r] [-quiet] [-verbose] <hdl_objects>... Tcl コ マ ン ド log_wave の使用例 波形出力を記録す る には、 次の よ う に コ マ ン ド を使用 し ます。 • デザ イ ン内のすべての信号 (代替の最上位モジ ュ ールの も のを除 く ) : log_wave -r / • /tb ス コ ープ内のすべての信号 : log_wave /tb/* • a で始ま っ て b で終わ り 、 ab 間に数字が入る よ う な名前のオブジ ェ ク ト : log_wave [get_objects -regexp {^a[0-9]+b$}] • 現在の ス コ ープお よ びすべての下位ス コ ープ内のすべてのオブジ ェ ク ト : log_wave -r * • 現在の ス コ ープ内のオブジ ェ ク ト : log_wave * • ス コ ープ /tb/UUT のポー ト のみ : log_wave [get_objects -filter {type == in_port || type == out_port || type == inout_port || type == port} /tb/UUT/*] • ス コ ープ /tb/UUT の内部信号のみ : log_wave [get_objects -filter {type == signal} /tb/UUT/*] 信号順、 名前形式、 基数、 色な ど の波形 コ ン フ ィ ギ ュ レ ーシ ョ ン設定は必要に応 じ て波形 コ ン フ ィ ギ ュ レ ーシ ョ ン (WCFG) フ ァ イ ルに保存 さ れます。 第 4 章 「シ ミ ュ レーシ ョ ン波形の解析」 を参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 76 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ [Objects] ビ ュ ー、 波形ビ ュ ー、 テキス ト エデ ィ タ ー での信号のク ロ ス プ ローブ Vivado シ ミ ュ レー タ では、 [Objects] ビ ュ ー、 波形ビ ュ ー、 テ キ ス ト エデ ィ タ ーにあ る 信号に対 し 、 ク ロ ス プ ロ ーブ を実行す る こ と がで き ます。 [Objects] ビ ュ ーで、 波形ビ ュ ーに も 信号が表示 さ れてい る か ど う か確認 し ます (ま たはその逆のチ ェ ッ ク も 可能)。 次 の図に示す コ ン テ キ ス ト ビ ュ ーを開 く には、 信号を右 ク リ ッ ク し ま す。 [Show in Wave Window] を ク リ ッ ク す る か、 信号が ま だ波形 ウ ィ ン ド ウ に表示 さ れていない場合は [Add to Wave Window] を ク リ ッ ク し ます。 X-Ref Target - Figure 5-6 図 5‐6 : [Objects] ビ ュ ーのコ ン テキス ト メ ニ ュ ー オプ シ ョ ン ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 77 第 5 章 : Vivado シ ミ ュ レー タ を使用 し たデザイ ンのデバ ッ グ テ キ ス ト エデ ィ タ ーで信号を ク ロ ス プ ロ ーブする こ と も で き ます。次の図に示すコ ン テ キ ス ト ビ ュ ーを開 く には、信 号を右 ク リ ッ ク し ます。 [Add to Wave Window]、 [Show in Waveform]、 ま たは [Show in Objects] を ク リ ッ ク し ます。 波 形ビ ュ ーま たは [Objects] ビ ュ ーで信号がハ イ ラ イ ト さ れます。 X-Ref Target - Figure 5-7 図 5‐7 : テキス ト エデ ィ タ ーの コ ン テキス ト メ ニ ュ ー ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 78 第 6 章 : 特殊なケースの処理 第 6章 特殊なケースの処理 グローバル リ セ ッ ト と ト ラ イ ス テー ト の使用 ザ イ リ ン ク ス デバ イ ス には、 デバ イ ス のすべての レ ジ ス タ に接続する 、 専用の配線お よ び回路があ り ます。 グローバル セ ッ ト および リ セ ッ ト ネ ッ ト コ ン フ ィ ギ ュ レーシ ョ ン中には、 専用グ ロ ーバル セ ッ ト / リ セ ッ ト (GSR) 信号がアサー ト さ れます。 GSR 信号はデバ イ ス の コ ン フ ィ ギ ュ レーシ ョ ンが終了す る と デ ィ アサー ト さ れます。 すべての フ リ ッ プ フ ロ ッ プお よ び ラ ッ チは こ の リ セ ッ ト を受け、 レ ジ ス タ が ど の よ う に定義 さ れてい る かに よ っ て、 セ ッ ト ま たは リ セ ッ ト の ど ち ら かにな り ます。 推奨 : コ ン フ ィ ギ ュ レーシ ョ ン後に GSR ネ ッ ト にア ク セ ス はで き ますが、 手動 リ セ ッ ト の代わ り に GSR 回路を使用 す る のは避けて く だ さ い。 こ れは FPGA デバ イ ス が、 シ ス テ ム リ セ ッ ト の よ う な フ ァ ン ア ウ ト の大 き い信号に対 し て、 高速バ ッ ク ボーン配線を提供 し てい る ためです。 こ のバ ッ ク ボーン配線は専用 GSR 回路 よ り も 高速で、 GSR 信 号を転送す る 専用グ ロ ーバル配線 よ り も 簡単に解析がで き ます。 合成後お よ び イ ン プ リ メ ン テーシ ョ ン後のシ ミ ュ レーシ ョ ン では、 GSR 信号は自動的に最初の 100ns 間アサー ト さ れ、 コ ン フ ィ ギ ュ レーシ ョ ン後に発生す る リ セ ッ ト を シ ミ ュ レー ト し ます。 オプシ ョ ン で、 GSR パル ス を合成前の論理シ ミ ュ レーシ ョ ン で供給で き ま すが、 すべての レ ジ ス タ を リ セ ッ ト す る ロ ーカル リ セ ッ ト がデザ イ ンに含まれてい る 場合は必要あ り ません。 ヒ ン ト : テ ス ト ベンチを作成す る と き 、 GSR パルスは合成後お よ び イ ンプ リ メ ン テーシ ョ ン後のシ ミ ュ レーシ ョ ン で 自動的に発生 し ます。 こ れに よ り 、 すべての レ ジ ス タ がシ ミ ュ レーシ ョ ンの最初の 100ns 間 リ セ ッ ト 状態に保持 さ れ ます。 グローバル ト ラ イ ス テー ト ネ ッ ト 専用グ ロ ーバル GSR だけでな く 、 専用グ ロ ーバル ト ラ イ ス テー ト (GTS) ネ ッ ト を使用 し て コ ン フ ィ ギ ュ レーシ ョ ン モー ド 中に出力バ ッ フ ァ ーをハ イ イ ン ピーダ ン ス ス テー ト に設定す る こ と も で き ます。 標準操作中に汎用出力が標 準、 ト ラ イ ス テー ト 、 双方向出力であ る かに よ っ て、 汎用出力への影響は変わ り ます。 こ のため、 FPGA が コ ン フ ィ ギ ュ レーシ ョ ン さ れた と き に、 出力が間違っ てほかのデバ イ ス を駆動す る こ と はあ り ません。 シ ミ ュ レーシ ョ ン では、 GTS 信号は通常駆動 さ れ ません。 GTS を駆動す る 回路は、 合成後お よ び イ ン プ リ メ ン テー シ ョ ン後のシ ミ ュ レーシ ョ ンで使用で き 、 合成前の論理シ ミ ュ レーシ ョ ンにはオプシ ョ ンで追加で き ますが、 GTS パ ルス幅はデフ ォ ル ト で 0 に設定 さ れます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 79 第 6 章 : 特殊なケースの処理 グローバル ト ラ イ ス テー ト およびグ ローバル セ ッ ト / リ セ ッ ト 信 号の使用 図 6-1 は、 グ ロ ーバル ト ラ イ ス テー ト (GTS) お よ びグ ロ ーバル セ ッ ト / リ セ ッ ト (GSR) 信号が FPGA で ど の よ う に使 用 さ れてい る か を示 し てい ます。 X-Ref Target - Figure 6-1 ,2V8VHGIRU ,QLWLDOL]DWLRQ 8VHU 3URJUDPPDEOH /DWFK5HJLVWHU *OREDO7UL6WDWH *76 4 ' &( ,QLWLDOL]DWLRQ &RQWUROOHU 8VHU7UL6WDWH (QDEOH & *65 &/5 *76 ,2 3DG 8VHU 3URJUDPPDEOH /RJLF 5HVRXUFHV 8VHU2XWSXW 2XWSXW%XIIHU 8VHU $V\QF 5HVHW 8VHU,QSXW ,QSXW%XIIHU *OREDO 6HW5HVHW *65 *HQHUDO3XUSRVH ; 図 6‐1 : ビル ト イ ン FPGA 初期化回路図 Verilog の GSR および GTS グ ロ ーバル セ ッ ト / リ セ ッ ト (GSR) お よ びグ ロ ーバル ト ラ イ ス テー ト (GTS) 信号は <Vivado_Install_Dir>/data/verilog/src/glbl.v モジ ュ ールで定義 さ れてい ます。 ほ と ん ど の場合、 GSR お よ び GTS を テ ス ト ベンチで定義す る 必要はあ り ません。 glbl.v フ ァ イ ルはグ ロ ーバル GSR お よ び GTS 信号を宣言 し 、 自動的に GSR に 100 ns 間パルス を送 り ます。 VHDL の GSR および GTS グ ロ ーバル セ ッ ト / リ セ ッ ト (GSR) お よ びグ ロ ーバル ト ラ イ ス テー ト (GTS) 信号は <Vivado_Install_Dir>/data/vhdl/src/unisims/primitive/GLBL_VHD.vhd モジ ュ ールで定義 さ れてい ます。 GLBL_VHD コ ン ポーネ ン ト を使用す る には、 それを テ ス ト ベンチに イ ン ス タ ン シエー ト する 必要があ り ます。 GLBL_VHD フ ァ イ ルはグ ロ ーバル GSR お よ び GTS 信号を宣言 し 、 自動的に GSR に 100 ns 間パルス を送 り ます。 次の コ ー ド 例は、 テ ス ト ベンチに GLBL_VHD を イ ン ス タ ン シエー ト し 、 Reset on Configuration (ROC) のアサー ト パ ルス幅を 90ns に変更 し ます。 GLBL_VHD inst:GLBL_VHD generic map (ROC_WIDTH => 90000); デル タ サイ クル と レース コ ンデ ィ シ ョ ン 本書では、 イ ベン ト ベース のシ ミ ュ レー タ について説明 し ます。 イ ベン ト シ ミ ュ レー タ では、任意のシ ミ ュ レーシ ョ ン時間に複数の イ ベン ト を処理で き ます。 こ れ ら の イ ベン ト が処理中の と き 、 シ ミ ュ レー タ はシ ミ ュ レーシ ョ ン時間 を進め る こ と はで き ま せん。 こ の イ ベン ト 処理時間は、 一般的に 「デル タ サ イ ク ル」 と 呼ばれ ま す。 任意のシ ミ ュ レーシ ョ ン時間ス テ ッ プには複数のデル タ サ イ ク ルを含め る こ と がで き ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 80 第 6 章 : 特殊なケースの処理 シ ミ ュ レーシ ョ ン時間は、 そのシ ミ ュ レーシ ョ ン時間で処理する ト ラ ンザ ク シ ョ ンがない場合にのみ、 進め る こ と が で き ます。 こ のため、 イ ベン ト が時間ス テ ッ プ内で ス ケ ジ ュ ール さ れ る タ イ ミ ン グに よ っ て、 シ ミ ュ レー タ で予期せ ぬ結果が出 る 可能性があ り ます。 次の VHDL コ ー ド は、 予期 し ない結果が出 る 例を示 し てい ます。 予測 し ない結果にな る VHDL コ ー ド 例 clk_b <= clk; clk_prcs : process (clk) begin if (clk'event and clk='1') then result <= data; end if; end process; clk_b_prcs : process (clk_b) begin if (clk_b'event and clk_b='1') then result1 <= result; end if; end process; こ の例には、 2 つの同期プ ロ セ ス があ り ます。 • clk_prcs • clk_b_prcs シ ミ ュ レー タ は、 シ ミ ュ レーシ ョ ン時間を進め る 前に clk_b <= clk 割 り 当て を実行 し ます。 こ の結果、2 ク ロ ッ ク エ ッ ジ内で発生す る はずの イ ベン ト が 1 ク ロ ッ ク エ ッ ジ内で発生 し 、 レース コ ンデ ィ シ ョ ンにな り ます。 こ の よ う な状況を回避す る には、 次の点に注意 し て く だ さ い。 • ク ロ ッ ク と デー タ は同時に変更 し ないで く だ さ い。 出力ご と に遅延を挿入 し ます。 • 同 じ ク ロ ッ ク を使用 し ます。 • 次の例に示す よ う に一時的な信号を使用 し てデル タ 遅延を強制的に使用 し ます。 clk_b <= clk; clk_prcs : process (clk) begin if (clk'event and clk='1') then result <= data; end if; end process; result_temp <= result; clk_b_prcs : process (clk_b) begin if (clk_b'event and clk_b='1') then result1 <= result_temp; end if; end process; ほ と ん ど の イ ベン ト ベース シ ミ ュ レー タ は、 デル タ サ イ ク ルを表示で き る よ う にな っ てい ます。 シ ミ ュ レーシ ョ ン 問題をデバ ッ グす る 場合は こ の表示を利用 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 81 第 6 章 : 特殊なケースの処理 ASYNC_REG 制約の使用 ASYNC_REG 制約には、 次の よ う な機能があ り ます。 • デザ イ ンの非同期レ ジ ス タ を識別 し ます。 • こ れ ら の レ ジ ス タ の X 伝搬をデ ィ ス エーブルに し ます。 ASYNC_REG 制約は、 次のいずれか を使用 し て フ ロ ン ト エン ド デザ イ ンの レ ジ ス タ に適用で き ます。 • HDL コ ー ド の属性 • ザ イ リ ン ク ス デザ イ ン制約 (XDC) の制約 ASYNC_REG が適用 さ れてい る レ ジ ス タ は、 タ イ ミ ン グ シ ミ ュ レーシ ョ ン中に前の値を保持 し 、 シ ミ ュ レーシ ョ ン に X を出力 し ません。 新 し い値 も ク ロ ッ ク 信号が供給 さ れた可能性があ る ので、 注意 し て く だ さ い。 ASYNC_REG 制約は CLB お よ び入出力ブ ロ ッ ク (IOB) レ ジ ス タ お よ び ラ ッ チにのみ適用で き ます。 ASYNC_REG 制 約に関 し ては、 『Vivado Design Suite プ ロ パテ ィ リ フ ァ レ ン ス ガ イ ド 』 (UG912)[参照 12] の 「AYNC_REG」 を参照 し て く だ さ い。 推奨 : 非同期デー タ で ク ロ ッ キ ン グ を避け ら れない場合は、IOB ま たは CLB レ ジ ス タ にのみに ク ロ ッ ク を供給 し て く だ さ い。 RAM、 シ フ ト レ ジ ス タ LUT (SRL)、 ま たはその他の同期エ レ メ ン ト へ、 非同期信号で ク ロ ッ キ ン グす る 場 合は、 決定的な結果にはな ら ないので、 避けて く だ さ い。 で き る 限 り 、 まず、 レ ジ ス タ 、 ラ ッ チ、 ま たは FIFO で非 同期信号を正 し く 同期 し てか ら 、 RAM、 シ フ ト レ ジ ス タ LUT (SRL) な ど の同期エ レ メ ン ト へ書 き 込む よ う に し て く だ さ い。 詳細は、 『Vivado Design Suite ユーザー ガ イ ド :制約の使用』 (UG903) [参照 9] を参照 し て く だ さ い。 同期エ レ メ ン ト の X 伝搬のデ ィ ス エーブル タ イ ミ ン グ シ ミ ュ レーシ ョ ン中に タ イ ミ ン グ エ ラ ーが発生す る と 、 ラ ッ チ、 レ ジ ス タ 、 RAM ま たはその他の同期エ レ メ ン ト はデフ ォ ル ト で X を シ ミ ュ レー タ に出力 し ます。 実際の出力値が未知のために、 こ う な り ます。 可能性 と し ては、 レ ジ ス タ の出力は次の よ う にな り ます。 • 前の値を保持 • 新 し い値へア ッ プデー ト • 同期エ レ メ ン ト の ク ロ ッ ク 供給後 し ば ら く 経っ てか ら 、 値が決定 さ れない メ タ ス テーブル状態にな る こ の値は決定で き ず、 正確な シ ミ ュ レーシ ョ ン結果は得 ら れないので、 エ レ メ ン ト は未知の値を示す X を出力 し ま す。 X 出力は次の ク ロ ッ ク サ イ ク ル ま でその ま ま 保持 さ れ ます。 そのサ イ ク ルで、 ほかに違反がな ければ、 次の ク ロ ッ ク 供給を受けた値が出力を ア ッ プデー ト し ます。 X が出力 さ れ る と 、 シ ミ ュ レーシ ョ ンに大 き な影響が出 る こ と があ り ます。 た と えば、 1 つの レ ジ ス タ で X が生成 さ れ る と 、 続 く ク ロ ッ ク サ イ ク ルで、 その X がほかに伝搬 さ れ る 可能性があ り ます。 そ う な る と 、 テ ス ト 中のデザ イ ンの大部分が未知の ス テー ト にな っ て し ま い ます。 X が生成 さ れない よ う にする には、 次の作業を行っ て く だ さ い。 • 同期パ ス に関 し ては、 そのパ ス を解析 し 、 こ のパ ス ま たはほかのパ ス に関連 し た タ イ ミ ン グ問題を修正 し て、 回 路が正 し く 動作す る よ う に し ます。 • 非同期パ ス に関 し ては、 タ イ ミ ン グ違反を ほかの方法で回避で き ない場合にのみ、 ASYNC_REG プ ロ パテ ィ を使 用 し て、 タ イ ミ ン グ違反が発生 し てい る 間に同期エ レ メ ン ト の X 伝搬をデ ィ ス エーブルに し ます。 X 伝搬がデ ィ ス エーブルにな る と 、 、 レ ジ ス タ の出力には前の値が保持 さ れます。 実際のシ リ コ ン では、 レ ジ ス タ は 新 し い値に変更 さ れ る こ と も あ り ま す。 X 伝搬をデ ィ ス エーブルにす る と 、 シ リ コ ン の動作 と は一致 し ないシ ミ ュ レーシ ョ ン結果にな る こ と があ り ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 82 第 6 章 : 特殊なケースの処理 注意 : こ のオプシ ョ ン を使用す る 場合は注意が必要です。 タ イ ミ ン グ違反を こ れ以外の方法で回避で き ない場合にの み使用 し て く だ さ い。 コ ン フ ィ ギ ュ レーシ ョ ン イ ン タ ー フ ェ イ スのシ ミ ュ レーシ ョ ン こ のセ ク シ ョ ンでは、 次の コ ン フ ィ ギ ュ レーシ ョ ン イ ン タ ーフ ェ イ ス のシ ミ ュ レーシ ョ ンについて説明 し ます。 • JTAG シ ミ ュ レーシ ョ ン • SelectMAP シ ミ ュ レーシ ョ ン JTAG シ ミ ュ レーシ ョ ン BSCAN コ ン ポーネ ン ト のシ ミ ュ レーシ ョ ンはすべてのデバ イ ス でサポー ト さ れます。 シ ミ ュ レーシ ョ ンでは、 JTAG ポー ト と 一部の JTAG 操作 コ マ ン ド がサポー ト さ れます。 ス キ ャ ン チ ェーンへの イ ン タ ーフ ェ イ ス も 含め、 JTAG イ ン タ ーフ ェ イ ス は完全にはサポー ト さ れてい ません、 こ の イ ン タ ーフ ェ イ ス を シ ミ ュ レー ト す る には、 次の作業を行い ます。 1. BSCANE2 コ ン ポーネ ン ト を イ ン ス タ ン シエー ト し 、 デザ イ ンに接続 し ます。 2. JTAG_SIME2 コ ン ポーネ ン ト をデザ イ ンではな く 、 テ ス ト ベンチに イ ン ス タ ン シエー ト し ます。 こ の イ ン タ ーフ ェ イ ス は次の も のにな り ます。 • 外部 JTAG 信号 (TDI、 TDO、 TCK な ど) への イ ン タ ーフ ェ イ ス • BSCAN コ ン ポーネ ン ト への通信チ ャ ネル コ ン ポーネ ン ト 間の通信は VPKG VHDL パ ッ ケージ フ ァ イ ル ま たは Verilog グ ロ ーバル モジ ュ ール glbl で行われ ま す。 従っ て、 特定の JTAG_SIME2 コ ン ポーネ ン ト と デザ イ ン間、 ま たは特定の BSCANE2 シ ン ボル間に暗示的接続は 必要あ り ません。 JTAG/BSCAN の動作が理解す る ため、 ス テ ィ ミ ュ ラ ス はテ ス ト ベンチ内の特定の JTAG_SIME2 コ ン ポーネ ン ト か ら 駆動お よ び表示で き ます。 こ れ ら の コ ン ポーネ ン ト 両方の イ ン ス タ ン シエーシ ョ ン テ ンプ レー ト は、 Vivado® Design Suite テ ンプ レー ト お よ びそのデバ イ ス の ラ イ ブ ラ リ ガ イ ド か ら 入手で き ます。 SelectMAP シ ミ ュ レーシ ョ ン イ ン ス タ ン シエーシ ョ ン テ ンプ レー ト を含む コ ン フ ィ ギ ュ レーシ ョ ン シ ミ ュ レーシ ョ ン モデル (SIM_CONFIGE2 お よ び SIM_CONFIGE3) を使用す る と 、 最終的に DONE ピ ンが High にな る のを確認す る ために、 サポー ト さ れてい る コ ン フ ィ ギ ュ レーシ ョ ン イ ン タ ーフ ェ イ ス を シ ミ ュ レー ト で き ます。 こ れは、 サポー ト さ れてい る コ ン フ ィ ギ ュ レー シ ョ ン イ ン タ ーフ ェ イ ス で、 サポー ト デバ イ ス が ス テ ィ ミ ュ ラ ス に ど の よ う に反応す る かを示すモデルです。 表 6-1 には、 サポー ト さ れ る イ ン タ ーフ ェ イ スお よ びデバ イ ス を リ ス ト し てい ます。 表 6‐1 : サポー ト さ れる コ ン フ ィ ギ ュ レーシ ョ ン デバイ スおよびモー ド デバイ ス SelectMAP シ リ アル SPI BPI 7 シ リ ーズお よ び Zynq®-7000 AP SoC デバ イ ス あり あり なし なし UltraScale™ デバ イ ス あり あり なし なし ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 83 第 6 章 : 特殊なケースの処理 こ れ ら のモデルは、 制御信号ア ク テ ィ ビ テ ィ を処理 し 、 ビ ッ ト フ ァ イ ルを ダ ウ ン ロ ー ド し ます。 CRC、 IDCODE の よ う な内部レ ジ ス タ 設定 と ス テー タ ス レ ジ ス タ が含まれてい ます。 Sync Word がデバ イ ス に入力 さ れ、 ス タ ー ト ア ッ プ シーケ ン ス で処理 さ れ る と こ ろ が監視で き ま す。 図 6-2 は、 シ ス テ ム を ハー ド ウ ェ ア か ら シ ミ ュ レ ーシ ョ ン環境に マ ッ プす る 方法を示 し てい ます。 コ ン フ ィ ギ ュ レーシ ョ ン プ ロ セ ス は、各デバ イ ス の コ ン フ ィ ギ ュ レーシ ョ ン ユーザー ガ イ ド に ま と め ら れてい ます。 こ れ ら のガ イ ド には、 コ ン フ ィ ギ ュ レーシ ョ ン シーケ ン スお よ び コ ン フ ィ ギ ュ レーシ ョ ン イ ン タ ーフ ェ イ ス に関す る 情報が記載 さ れてい ます。 X-Ref Target - Figure 6-2 +RVW&RQWUROOHU,QSXW6WLPXOXVWR0RGHO &RQILJXUDWLRQ6LPXODWLRQ0RGHO 0HPRU\ ,'&2'(3DUDPHWHU &RQWUROOHU 7DUJHW)3*$ %LW)LOH 6HOHFW0$3 &RQWURO /RJLF 8VHU 0HPRU\ &&/. 'DWD>Q@ &6 5':5 352*B% ,1,7B% 0RGH3LQV>@ ; 図 6‐2 : モデル イ ン タ ラ ク シ ョ ン を示すブ ロ ッ ク図 シ ス テム レ ベルの記述 コ ン フ ィ ギ ュ レーシ ョ ン モデルを使用す る と 、 ハー ド ウ ェ アが利用可能にな る 前に、 コ ン フ ィ ギ ュ レーシ ョ ン イ ン タ ーフ ェ イ ス制御 ロ ジ ッ ク を テ ス ト で き ます。 こ のモデルはデバ イ ス全体を シ ミ ュ レー ト し 、 次の よ う にシ ス テ ム レ ベルで使用 さ れます。 • ワ イ ヤ、 制御信号処理、 デー タ 入力ア ラ イ メ ン ト が正 し く 実行 さ れ る よ う 、 コ ン フ ィ ギ ュ レーシ ョ ン ロ ジ ッ ク を 制御す る ためにプ ロ セ ッ サを使用す る アプ リ ケーシ ョ ン • デー タ ア ラ イ メ ン ト が正 し く 実行 さ れ る よ う CS (SelectMAP Chip Select) ま たは CLK 信号を使用 し てデー タ 読み 込みプ ロ セ ス を制御す る アプ リ ケーシ ョ ン • SelectMAP ABORT ま たは Readback を実行す る 必要のあ る シ ス テ ム こ のモデルに関連す る ZIP フ ァ イ ルは、 次か ら 入手で き ます。 http://www.xilinx.com/txpatches/pub/documentation/misc/config_test_bench.zip こ の ZIP フ ァ イ ルには、SelectMAP ロ ジ ッ ク を実行する プ ロ セ ッ サ を シ ミ ュ レー ト する サンプル テ ス ト ベンチが含ま れてい ます。 こ れ ら のテ ス ト ベンチには、 SelectMAP イ ン タ ーフ ェ イ ス を制御す る プ ロ セ ッ サを エ ミ ュ レー ト す る 制 御 ロ ジ ッ ク が含ま れ、 フル コ ン フ ィ ギ ュ レーシ ョ ン、 ABORT、 お よ び IDCODE と ス テー タ ス レ ジ ス タ の Readback な ど の機能があ り ます。 シ ミ ュ レー ト さ れた ホ ス ト シ ス テ ムには、 フ ァ イ ル配信お よ び制御信号管理な ど の機能が必要です。 こ れ ら の制御シ ス テ ムはデバ イ ス の コ ン フ ィ ギ ュ レーシ ョ ン ユーザー ガ イ ド の説明に し たがっ て設計す る 必要があ り ます。 コ ン フ ィ ギ ュ レーシ ョ ン モデルは、 BIT フ ァ イ ルがデバ イ ス に読み込ま れた と き に、 コ ン フ ィ ギ ュ レーシ ョ ン プ ロ シージ ャ 中にデバ イ ス内で起 き てい る こ と も 示 し ます。 BIT フ ァ イ ルのダ ウ ン ロ ー ド 中、 モデルは各 コ マ ン ド を実行 し 、 ハー ド ウ ェ アの変更 と 同 じ にな る よ う に レ ジ ス タ 設 定を変更 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 84 第 6 章 : 特殊なケースの処理 CRC レ ジ ス タ が CRC 値を累積す る のを監視す る こ と がで き ます。 ま た、 こ のモデルは、 デバ イ ス が さ ま ざ ま な コ ン フ ィ ギ ュ レーシ ョ ン ス テー ト を遷移 し てい く と き に設定 さ れ る ス テー タ ス レ ジ ス タ ビ ッ ト も 示 し ます。 モデルを使用 し たデバ ッ グ 各 コ ン フ ィ ギ ュ レーシ ョ ン モデルは、 正 し い コ ン フ ィ ギ ュ レーシ ョ ンの例を提供 し ます。 デバ イ ス プ ロ グ ラ ムの問 題が発生 し た と き に こ の例を参考にす る と 、 デバ ッ グが し やす く な り ます。 ス テー タ ス レ ジ ス タ は Vivado デバ イ ス プ ロ グ ラ マ を使用す る と 、 JTAG を介 し て読み出す こ と がで き ます。 レ ジ ス タ には、 デバ イ ス の現在の ス テー タ ス に関連 し た情報が含ま れ る ので、 デバ ッ グの と き に利用で き ます。 ボー ド に問 題があ る 場合は、 まず Vivado デバ イ ス プ ロ グ ラ マに ス テー タ ス レ ジ ス タ を読み込んでデバ ッ グ を始め ます。 ス テー タ ス レ ジ ス タ が読み込まれた ら 、 それを シ ミ ュ レーシ ョ ンにマ ッ プ し て、 デバ イ ス の コ ン フ ィ ギ ュ レーシ ョ ン 段階を確かめ る こ と がで き ます。 た と えば、 GHIGH ビ ッ ト はデー タ の読み込みが完了 し た後に High に設定 さ れます。 こ のビ ッ ト が設定 さ れていない 場合は、 デー タ の読み込みは完了 し ていない こ と にな り ます。 ま た、 ス タ ー ト ア ッ プ シーケ ン ス で解放 さ れ る BitGen で設定 さ れた GTW、 GWE お よ び DONE 信号 も 監視で き ます。 コ ン フ ィ ギ ュ レーシ ョ ン モデルでは、 エ ラ ー挿入 も 可能です。 デー タ の読み込みが一時停止 さ れ、 問題があ る ま ま読 み込みが再開 さ れ る と 、 ア ク テ ィ ブな CRC ロ ジ ッ ク が問題を検出 し ます。 BIT フ ァ イ ルに手動で挿入 さ れた ビ ッ ト フ リ ッ プ も 検出 し 、 デバ イ ス が こ のエ ラ ーを処理す る の と 同 じ よ う に、 処理 し ます。 サポー ト さ れる機能 デバ イ ス別の コ ン フ ィ ギ ュ レーシ ョ ン ユーザー ガ イ ド には、 各 コ ン フ ィ ギ ュ レーシ ョ ン イ ン タ ーフ ェ イ ス の使用に サポー ト さ れ る 方法の概要が示 さ れてい ます。 次の表は、 コ ン フ ィ ギ ュ レーシ ョ ン ユーザー ガ イ ド で説明 さ れ る 機 能の中で、 サポー ト さ れてい る も のを示 し てい ます。 SIM_CONFIGE2 モデルのサポー ト は次の よ う にな っ てい ます。 • コ ン フ ィ ギ ュ レーシ ョ ン デー タ の リ ー ド バ ッ ク はサポー ト さ れません。 • CRC 値は計算 さ れますが、 提供 さ れ る コ ン フ ィ ギ ュ レーシ ョ ン デー タ は格納 さ れません。 • 有効な コ マ ン ド シーケ ン スお よ び信号処理がデバ イ ス に対 し て提供 さ れてい る こ と を確認する ため、特定の レ ジ ス タ のみでの リ ー ド バ ッ ク が可能です。 • リ ー ド バ ッ ク デー タ フ ァ イ ルを生成す る ためのモデルではあ り ません。 表 6‐2 : モデルをサポー ト する ス レーブ SelectMAP およびシ リ アルの機能 ス レーブ SelectMAP およびシ リ アルの機能 サポー ト あ り マ ス タ ー モー ド なし デ イ ジー チ ェ ーン - ス レーブ パ ラ レル デ イ ジー チ ェーン なし SelectMAP デー タ 読み込み あり 連続 SelectMAP デー タ 読み込み あり 非連続 SelectMAP デー タ 読み込み あり SelectMAP ABORT あり SelectMAP リ コ ン フ ィ ギ ュ レーシ ョ ン なし SelectMAP デー タ 順序付け あり リ コ ン フ ィ ギ ュ レーシ ョ ンお よ びマルチブー ト なし コ ン フ ィ ギ ュ レーシ ョ ン CRC - コ ン フ ィ ギ ュ レーシ ョ ン中の CRC チェ ッ ク あり コ ン フ ィ ギ ュ レーシ ョ ン CRC - コ ン フ ィ ギ ュ レーシ ョ ン後の CRC なし ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 85 第 6 章 : 特殊なケースの処理 シ ミ ュ レーシ ョ ン でのブ ロ ッ ク RAM の競合チ ェ ッ クのデ ィ スエーブル ザ イ リ ン ク ス ブ ロ ッ ク RAM メ モ リ は真のデ ュ アル ポー ト RAM で、 ど ち ら のポー ト も いつで も ど の メ モ リ ロ ケー シ ョ ン か ら で も ア ク セ ス で き ますが、 同 じ ア ド レ ス空間が同時に読み出 し お よ び書 き 込み さ れ る と 、 ブ ロ ッ ク RAM ア ド レ ス の競合が発生 し ます。 こ れ ら は有効な競合で、 読み出 し ポー ト か ら 読み出 さ れ る デー タ が有効ではないため に発生 し ます。 ハー ド ウ ェ アでは、 読み出 さ れた値が古いデー タ か、 新 し いデー タ か、 古いデー タ と 新 し いデー タ の組み合わせであ る 可能性があ り ます。 シ ミ ュ レーシ ョ ンでは、 読み出 さ れた値が予期値でないため X が出力 さ れます。 ブ ロ ッ ク RAM の競合の詳細につい ては、 デバ イ ス のユーザー ガ イ ド を参照 し て く だ さ い。 アプ リ ケーシ ョ ンに よ っ ては、 こ の状態を回避で き なか っ た り 、 設計変更で き ない こ と があ り ます。 その よ う な場合 は、 ブ ロ ッ ク RAM で こ れ ら の違反が検出 さ れない よ う に設定す る こ と がで き ます。 こ れは、 ブ ロ ッ ク RAM プ リ ミ テ ィ ブのジ ェ ネ リ ッ ク (VHDL) ま たはパ ラ メ ー タ ー (Verilog) の SIM_COLLISION_CHECK 文字列で制御で き ます。 表 6-3 は、 競合が発生 し た と き のシ ミ ュ レーシ ョ ン動作を制御す る ため、 SIM_COLLISION_CHECK で使用で き る 文 字列オプシ ョ ン を示 し てい ます。 表 6‐3 : SIM_COLLISION_CHECK 文字列 文字列 書き込み競合 メ ッ セージ 出力での X の書き込み ALL あり あり WARNING_ONLY あり な し 。 競合発生時にのみ適用 さ れ、 同 じ ア ド レ ス空間の 後に続 く 読み出 し で、 出力に X が表示 さ れ る 可能性あ り GENERATE_X_ONLY なし あり None なし な し 。 競合発生時にのみ適用 さ れ、 同 じ ア ド レ ス空間の 後に続 く 読み出 し で、 出力に X が表示 さ れ る 可能性あ り イ ン ス タ ン ス レベルで SIM_COLLISION_CHECK を使用する と 、 各ブ ロ ッ ク RAM イ ン タ ーフ ェ イ ス の設定を変更で き ます。 消費電力解析のための SAIF フ ァ イルのダ ン プ • Vivado シ ミ ュ レー タ : 73 ページの 「Vivado シ ミ ュ レー タ を使用 し た消費電力解析」 • 第 8 章 「サー ド パーテ ィ シ ミ ュ レー タ の使用」 121 ページの 「消費電力解析用の SAIF のダ ンプ」 AXI バス フ ァ ン ク シ ョ ン モデルを使用 し たデザイ ン のシ ミ ュ レーシ ョ ン こ の ト ピ ッ ク の詳細は、 123 ページの 「AXI バス フ ァ ン ク シ ョ ン モデルを使用 し たデザ イ ンのシ ミ ュ レーシ ョ ン」 を 参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 86 第 6 章 : 特殊なケースの処理 コ ンパイルまたはシ ミ ュ レーシ ョ ンのスキ ッ プ コ ンパイルのスキ ッ プ 既存の スナ ッ プシ ョ ッ ト にシ ミ ュ レーシ ョ ン を実行 し 、シ ミ ュ レーシ ョ ン フ ァ イ ルセ ッ ト に SKIP_COMPILATION プ ロ パテ ィ を設定 し て、 デザ イ ンの コ ンパ イ ル (ま たは再コ ンパ イ ル) を ス キ ッ プす る こ と がで き ます。 set_property SKIP_COMPILATION 1 [get_filesets sim_1] 注記 : こ のプ ロ パテ ィ を設定す る と 、前回コ ンパ イ ル し た後のデザ イ ン フ ァ イ ルへの変更はシ ミ ュ レーシ ョ ンには反 映 さ れません。 シ ミ ュ レーシ ョ ンのスキ ッ プ シ ミ ュ レーシ ョ ン を実行せずに、 シ ミ ュ レーシ ョ ン ス ナ ッ プシ ョ ッ ト を エ ラ ボ レー ト お よ び コ ンパ イ ル し て、 デザ イ ン HDL フ ァ イ ル に 対 し て セ マ ン テ ィ ッ ク チ ェ ッ ク を 実行す る に は、 シ ミ ュ レ ー シ ョ ン フ ァ イ ル セ ッ ト に SKIP_SIMULATION プ ロ パテ ィ を設定 し ます。 set_property SKIP_SIMULATION true [get_filesets sim_1] 重要 : 上記のいずれかのプ ロ パテ ィ を使用す る 場合は、 シ ミ ュ レ ーシ ョ ン 設定で [clean up simulation files] チ ェ ッ ク ボ ッ ク ス を オ フ に し ます。ま た、バ ッ チ/Tcl モー ド で実行 し てい る 場合は、launch_simulation -noclean_dir を実行 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 87 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 第 7章 バ ッ チ またはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 概要 本章では、 コ マ ン ド ラ イ ンの コ ンパ イ ルお よ びシ ミ ュ レーシ ョ ン プ ロ セ ス について説明 し 、 Vivado® Design Suite シ ミ ュ レー タ の実行フ ァ イ ルお よ び対応す る オプシ ョ ン、 お よ びシ ミ ュ レーシ ョ ン を実行す る Tcl コ マ ン ド を リ ス ト し てい ます。 Vivado シ ミ ュ レー タ の Tcl コ マ ン ド の リ ス ト は、 次を入力す る と 表示 さ れます。 help -category sim Tcl コ マ ン ド の使用方法については、 『Vivado Design Suite Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 7] を参照 し て く だ さ い。 シ ミ ュ レー タ コ マ ン ド を実行す る と 、 Vivado シ ミ ュ レー タ は次の こ と を実行 し ます。 • xvlog お よ び xvhdl を実行 し て、 デザ イ ン を解析 • バ ッ ク グ ラ ン ド で xelab を実行 し 、 デザ イ ン をエ ラ ボ レー ト し 、 シ ミ ュ レーシ ョ ン スナ ッ プシ ョ ッ ト に コ ンパ イ ル (ス ナ ッ プシ ョ ッ ト は Vivado シ ミ ュ レー タ で実行可能) 2 番目のプ ロ セ ス が完了す る と 、 Vivado ツールは xsim を起動 し て、 シ ミ ュ レーシ ョ ン を実行 し ます。 Vivado シ ミ ュ レー タ の コ マ ン ド ラ イ ンのス テ ッ プ ビヘ イ ビ アーま たは タ イ ミ ン グ シ ミ ュ レーシ ョ ンのいずれか を コ マ ン ド ラ イ ン か ら 実行す る には、 次の ス テ ッ プ を 実行す る 必要があ り ます。 1. 「デザ イ ン フ ァ イ ル、 xvhdl お よ び xvlog の解析」 2. 「デザ イ ン ス ナ ッ プシ ョ ッ ト のエ ラ ボ レー ト お よ び生成 (xelab)」 3. 「デザ イ ン ス ナ ッ プシ ョ ッ ト のシ ミ ュ レーシ ョ ン (xsim)」 次のセ ク シ ョ ンでは、 こ れ ら の手順について説明 し ます。 次のセ ク シ ョ ンで説明す る よ う に、 タ イ ミ ン グ シ ミ ュ レーシ ョ ンには追加要件があ り ます。 • 第 2 章の 「 タ イ ミ ン グ ネ ッ ト リ ス ト の生成」 • 106 ページの 「合成後お よ び イ ンプ リ メ ン テーシ ョ ン後のシ ミ ュ レーシ ョ ン」 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 88 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 デザイ ン フ ァ イル、 xvhdl および xvlog の解析 xvhdl お よ び xvlog コ マ ン ド は、 それぞれ VHDL お よ び Verilog フ ァ イ ル を解析 し ま す。 各オプ シ ョ ン の詳細は、 96 ページの表 7-2を参照 し て く だ さ い。 xvhdl xvhdl コ マ ン ド は VHDL アナ ラ イ ザー (パーサー ) です。 xvhdl の構文 xvhdl [-encryptdumps] [-f [-file] <filename>] [-h [-help] [-initfile <init_filename>] [-L [-lib] <library_name> [=<library_dir>]] [-log <filename>] [-nolog] [-prj <filename>] [-relax] [-v [verbose] [0|1|2]] [-version] [-work <library_name> [=<library_dir>] こ の コ マ ン ド は VHDL ソ ース フ ァ イ ルを解析 し 、 解析済みデー タ をデ ィ ス ク の HDL ラ イ ブ ラ リ に保存 し ます。 xvhdl の例 xvhdl file1.vhd file2.vhd xvhdl -work worklib file1.vhd file2.vhd xvhdl -prj files.prj ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 89 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 xvlog xvlog コ マ ン ド は Verilog パーサーです。 xvlog コ マ ン ド は Verilog ソ ース フ ァ イ ルを解析 し 、 解析済みデー タ をデ ィ ス ク の HDL ラ イ ブ ラ リ に保存 し ます。 xvlog の構文 xvlog [-d [define] <name>[=<val>]] [-encryptdumps] [-f [-file] <filename>] [-h [-help]] [-i [include] <directory_name>] [-initfile <init_filename>] [-L [-lib] <library_name> [=<library_dir>]] [-log <filename>] [-nolog] [-noname_unamed_generate] [-relax] [-prj <filename>] [-sourcelibdir <sourcelib_dirname>] [-sourcelibext <file_extension>] [-sourcelibfile <filename>] [-sv] [-v [verbose] [0|1|2]] [-version] [-work <library_name> [=<library_dir>] xvlog の例 xvlog file1.v file2.v xvlog -work worklib file1.v file2.v xvlog -prj files.prj デザイ ン スナ ッ プ シ ョ ッ ト のエ ラ ボレー ト および生 成 (xelab) Vivado シ ミ ュ レー タ を使用す る シ ミ ュ レーシ ョ ンは、 次の 2 段階に分けて行われます。 • まず、シ ミ ュ レー タ コ ンパ イ ラ の xelab が、HDL モデルを ス ナ ッ プシ ョ ッ ト に コ ンパ イ ル し ます。スナ ッ プシ ョ ッ ト は、 シ ミ ュ レー タ が実行で き る 形式でモデルを表記 し た も のです。 • 次に、 そのモデルを シ ミ ュ レー ト す る ため、 シ ミ ュ レー タ がその ス ナ ッ プシ ョ ッ ト を読み込み、実行 し ます (xsim コ マ ン ド を使用)。 非プ ロ ジ ェ ク ト モー ド の場合は、 最初の段階を飛ば し て次の段階を繰 り 返す こ と で、 ス ナ ッ プシ ョ ッ ト を再利用で き ます。 シ ミ ュ レー タ で スナ ッ プシ ョ ッ ト が作成 さ れ る と 、 モデルの最上位モジ ュ ールの名前に基づいて、 スナ ッ プシ ョ ッ ト 名が割 り 当て ら れます。 し か し 、 コ ンパ イ ラ へのオプシ ョ ン と し て スナ ッ プシ ョ ッ ト 名を指定す る と 、 こ のデフ ォ ル ト 設定を上書 き で き ま す。 ス ナ ッ プシ ョ ッ ト 名は、 デ ィ レ ク ト リ ま たは SIMSET 内で重複 し ない よ う に し ま す。 デ フ ォ ル ト で も カ ス タ ムで も 、 同 じ ス ナ ッ プシ ョ ッ ト 名を使用す る と 、 前にビル ド し た スナ ッ プシ ョ ッ ト がその名前で 上書 き さ れて し ま い ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 90 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 重要 : 同 じ デ ィ レ ク ト リ ま たは SIMSET 内で同 じ ス ナ ッ プシ ョ ッ ト 名を使用 し て、 2 つのシ ミ ュ レーシ ョ ン を実行す る こ と はで き ません。 xelab xelab コ マ ン ド は、 指定 し た最上位ユニ ッ ト に対 し て次の こ と を実行 し ます。 • 言語結合ルールお よ び –L <library> コ マ ン ド ラ イ ンで指定 し た HDL ラ イ ブ ラ リ の ど ち ら か を使用 し て、 下位デ ザ イ ン ユニ ッ ト を読み込みます。 • デザ イ ンの ス タ テ ィ ッ ク エ ラ ボ レーシ ョ ン (パ ラ メ ー タ ーの設定、 ジ ェ ネ リ ッ ク の処理、 generate 文の実行な ど) を実行 し ます。 • 実行可能な コ ー ド を生成 し ます。 • 生成 さ れた実行可能 コ ー ド を シ ミ ュ レーシ ョ ン カーネル ラ イ ブ ラ リ に リ ン ク し て、 実行可能なシ ミ ュ レーシ ョ ン ス ナ ッ プシ ョ ッ ト を作成 し ます。 こ のあ と 、 出力 さ れた実行可能な シ ミ ュ レーシ ョ ン の ス ナ ッ プシ ョ ッ ト 名を xsim コ マ ン ド のオプシ ョ ン と し て、 別 のオプシ ョ ン と 共に使用 し ます。 ヒ ン ト : xelab は解析 コ マ ン ド の xvlog お よ び xvhdl を暗示的に呼び出す こ と がで き ます。解析ス テ ッ プは xelab -prj オ プシ ョ ン を使用 し て組み込む こ と がで き ます。 プ ロ ジ ェ ク ト フ ァ イ ルの詳細は、 103 ページの 「プ ロ ジ ェ ク ト フ ァ イ ル (.prj) の構文」 を参照 し て く だ さ い。 xelab コ マ ン ド 構文オプ シ ョ ン 各オプシ ョ ンの詳細は、 96 ページの表 7-2を参照 し て く だ さ い。 xelab [-d [define] <name>[=<val>] [-debug <kind>] [-f [-file] <filename>] [-generic_top <value>] [-h [-help] [-i [include] <directory_name>] [-initfile <init_filename>] [-log <filename>] [-L [-lib] <library_name> [=<library_dir>] [-maxdesigndepth arg] [-mindelay] [-typdelay] [-maxarraysize arg] [-maxdelay] [-mt arg] [-nolog] [-noname_unnamed_generate] [-notimingchecks] [-nosdfinterconnectdelays] [-nospecify] [-O arg] [-Odisable_acceleration arg] [-Odisable_always_combine] [-Odisable_pass_through_elimination] [-Odisable_process_opt] [-Odisable_unused_removal] [-Oenable_cdfg] L ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 91 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 [-Odisable_cdfg] [-Oenable_always_combine] [-Oenable_pass_through_elimination] [-Oenable_unused_removal] [-override_timeunit] [-override_timeprecision] [-prj <filename>] [-pulse_e arg] [-pulse_r arg] [-pulse_int_e arg] [-pulse_int_r arg] [-pulse_e_style arg] [-r [-run]] [-R [-runall [-rangecheck] [-relax] [-s [-snapshot] arg] [-sdfnowarn] [-sdfnoerror] [-sdfroot <root_path>] [-sdfmin arg] [-sdftyp arg] [-sdfmax arg] [-sourcelibdir <sourcelib_dirname>] [-sourcelibext <file_extension>] [-sourcelibfile <filename>] [-stats] [-timescale] [-timeprecision_vhdl arg] [-transport_int_delays] [-v [verbose] [0|1|2]] [-version] [-sv_root arg] [-sv_lib arg] [-sv_liblist arg] [-dpiheader arg] xelab の例 xelab xelab xelab xelab work.top1 lib1.top1 work.top1 lib1.top1 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 work.top2 lib2.top2 work.top2 lib2.top2 -s cpusim -s fftsim -prj files.prj -s pciesim -prj files.prj -s ethernetsim japan.xilinx.com 92 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 Verilog 検索順序 xelab コ マ ン ド は次の検索順序を使用 し て、 イ ン ス タ ン シエー ト さ れた Verilog デザ イ ン ユニ ッ ト を検索お よ び結合 し ます。 1. Verilog コ ー ド の ‘uselib 指示子で指定 さ れた ラ イ ブ ラ リ 。 次に例を示 し ます。 module full_adder(c_in, c_out, a, b, sum) input c_in,a,b; output c_out,sum; wire carry1,carry2,sum1; `uselib lib = adder_lib half_adder adder1(.a(a),.b(b),.c(carry1),.s(sum1)); half_adder adder1(.a(sum1),.b(c_in),.c(carry2),.s(sum)); c_out = carry1 | carry2; endmodule 2. -lib|-L オプシ ョ ン を使用 し て コ マ ン ド ラ イ ンで指定 さ れた ラ イ ブ ラ リ 3. 親デザ イ ン ユニ ッ ト の ラ イ ブ ラ リ 4. work ラ イ ブ ラ リ Verilog イ ン ス タ ン シ エーシ ョ ン ユニ ッ ト Verilog デザ イ ン に コ ン ポーネ ン ト が イ ン ス タ ン シ エー ト さ れ る と 、 xelab コ マ ン ド に よ り 、 コ ン ポーネ ン ト 名が Verilog ユニ ッ ト と し て処理 さ れ、ユーザーの指定 し たユニ フ ァ イ ド 論理 ラ イ ブ ラ リ の リ ス ト か ら ユーザーの指定 し た 順序で Verilog モジ ュ ールが検索 さ れます。 • 検出 さ れ る と 、 xelab はユニ ッ ト を結合 し て、 検索を停止 し ます。 • 大文字/小文字の区別をつけて検索がで き なか っ た場合、 xelab は、 ユーザーの指定 し た リ ス ト と ユニ フ ァ イ ド 論理 ラ イ ブ ラ リ の順序で、 拡張識別子 と し て コ ン ス ト ラ ク ト さ れた VHDL デザ イ ン ユニ ッ ト 名を、 大文字/小文 字の区別をつけて検索 し ます。 最初に一致す る 名前が見つか る と 、 検索は停止 さ れます。 • xelab で、 1 つの ラ イ ブ ラ リ に 1 つの結合が見つか っ た場合は、 その名前を選択 し て、 検索を停止 し ます。 注記 : 混合言語デザ イ ンの場合、Verilog モジ ュ ールで イ ン ス タ ン シエー ト さ れ る VHDL エン テ ィ テ ィ への関連付けに 使用 さ れ る ポー ト 名では、 常に大文字/小文字が区別 さ れ ます。 ま た、 VHDL ジ ェ ネ リ ッ ク の変更に defparam 文は 使用で き ないので注意 し て く だ さ い。 詳細は、 付録 B 「混合言語シ ミ ュ レーシ ョ ンの使用」 を参照 し て く だ さ い。 重要 : VHDL レ コ ー ド オブジ ェ ク ト 全体を Verilog オブジ ェ ク ト に接続す る こ と はサポー ト さ れてい ません。 VHDL イ ン ス タ ン シ エーシ ョ ン ユニ ッ ト VHDL デザ イ ンに コ ン ポーネ ン ト が イ ン ス タ ン シエー ト さ れ る と 、xelab コ マ ン ド はその コ ン ポーネ ン ト 名を VHDL ユニ ッ ト と し て処理 し 、 論理 work ラ イ ブ ラ リ でそれを検索 し ます。 • VHDL ユニ ッ ト が検出 さ れ る と 、 xelab コ マ ン ド でそれが結合 さ れて、 検索が停止 し ます。 • xelab で VHDL ユニ ッ ト が検出 さ れない場合、大文字/小文字の区別が維持 さ れた コ ン ポーネ ン ト 名が Verilog モ ジ ュ ール名 と し て処理 さ れ、ユーザーの指定 し た リ ス ト お よ びユニ フ ァ イ ド 論理 ラ イ ブ ラ リ の順序で大文字/小文 字の区別をつけた検索が引 き 続 き 行われます。 最初に一致す る 名前が見つか る と 、 検索は停止 し ます。 • 大文字/小文字の区別をつけて検索がで き なか っ た場合、 xelab は、 ユーザーの指定 し た リ ス ト と ユニ フ ァ イ ド 論理 ラ イ ブ ラ リ の順序で、 大文字/小文字の区別をつけて検索を実行 し ます。 1 つの ラ イ ブ ラ リ に 1 つの結合が見 つかれば、 検索は停止 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 93 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 Verilog の `uselib 指示子 ラ イ ブ ラ リ 検索順序を設定す る Verilog の `uselib 指示子がサポー ト さ れてい ます。 `uselib の構文 <uselib compiler directive> ::= `uselib [<Verilog-XL uselib directives>|<lib directive>] <Verilog-XL uselib directives> :== dir = <library_directory> | file = <library_file> | libext = <file_extension> <lib directive>::= <library reference> {<library reference>} <library reference> ::= lib = <logical library name> `uselib lib 指示子 `uselib lib 指示子は、Verilog-XL の `uselib 指示子 と は一緒に使用で き ません。た と えば、次の コ ー ド は不正にな り ます。 `uselib dir=./ file=f.v lib=newlib 1 つの `uselib ラ イ ブ ラ リ で複数の ラ イ ブ ラ リ が指定で き ます。 ラ イ ブ ラ リ が指定 さ れ る 順序が検索順序にな り ます。 次に例を示 し ます。 `uselib lib=mylib lib=yourlib こ れは、 イ ン ス タ ン シエー ト さ れたモジ ュ ールの検索が まず mylib で実行 さ れ、 その後に yourlib で実行 さ れ る よ う に指定 し てい ます。 `uselib dir、 `uselib file、 `uselib libext な ど の指示子 と 同様、 `uselib lib 指示子 も 、 解析が実行 さ れ る と 、 HDL フ ァ イ ル 全体で使用 さ れます。 別の `uselib 指示子が処理 さ れ る ま では、 HDL ソ ース の `uselib (すべての Verilog XL `uselib を含 む) 指示子が使用 さ れます。 引数な し で `uselib を使用す る と 、 実行中の `uselib <lib|file|dir|libext> は無効にな り ます。 次のモジ ュ ール検索 メ カ ニズ ムは、イ ン ス タ ン シエー ト さ れたモジ ュ ールま たは UDP の解決のため、Verific の Verilog エ ラ ボ レーシ ョ ン アルゴ リ ズ ムに よ っ て使用 さ れます。 • まず、 イ ン ス タ ン シエー ト さ れたモジ ュ ールを `uselib lib の論理 ラ イ ブ ラ リ の順序 リ ス ト で検索 し ます。 • 見つか ら ない場合は、 xelab コ マ ン ド ラ イ ンで検索 ラ イ ブ ラ リ と し て指定 さ れてい る ラ イ ブ ラ リ の順序 リ ス ト で イ ン ス タ ン シエー ト さ れたモジ ュ ールを検索 し ます。 • 見つか ら ない場合は、親モジ ュ ールの ラ イ ブ ラ リ で イ ン ス タ ン シエー ト 済みモジ ュ ールを検索 し ます。た と えば、 work ラ イ ブ ラ リ のモジ ュ ール A が mylib ラ イ ブ ラ リ のモジ ュ ール B を イ ン ス タ ン シエー ト し 、 モジ ュ ール B が モジ ュ ール C を イ ン ス タ ン シエー ト す る 場合、 mylib ラ イ ブ ラ リ (C の親モジ ュ ール B の ラ イ ブ ラ リ ) でモジ ュ ー ル C を検索 し ます。 • 見つか ら ない場合は、 次のいずれかの work ラ イ ブ ラ リ で イ ン ス タ ン シエー ト さ れたモジ ュ ールを検索 し ます。 ° HDL ソ ース が コ ンパ イ ル さ れ る ラ イ ブ ラ リ ° work ラ イ ブ ラ リ と し て明示的に設定 さ れ る ラ イ ブ ラ リ ° work と い う 名前のデフ ォ ル ト の作業 ラ イ ブ ラ リ ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 94 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 `uselib の例 表 7‐1 : ‘uselib の例 adder_lib と い う 名前の論理 ラ イ ブ ラ リ に コ ンパイル さ れる half_adder.v フ ァ イル work と い う 名前の論理 ラ イ ブ ラ リ に コ ンパイル さ れる full_adder.v フ ァ イル module half_adder(a,b,c,s); input a,b; output c,s; s = a ^ b; c = a & b; endmodule module full_adder(c_in, c_out, a, b, sum) input c_in,a,b; output c_out,sum; wire carry1,carry2,sum1; `uselib lib = adder_lib half_adder adder1(.a(a),.b(b),. c(carry1),.s(sum1)); half_adder adder1(.a(sum1),.b(c_in),.c (carry2),.s(sum)); c_out = carry1 | carry2; endmodule ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 95 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 xelab、 xvhdl、 xvlog コ マ ン ド オプ シ ョ ン 表 7-2 は、 xelab、 xvhdl、 xvlog コ マ ン ド のオプシ ョ ン を リ ス ト し てい ます。 表 7‐2 : xelab、 xvhd、 xvlog コ マ ン ド オプ シ ョ ン コ マ ン ド オプ シ ョ ン 説明 コ マ ン ド で使用 -d [define] <name>[=<val>] Verilog マ ク ロ を定義 し ます。各 Verilog マ ク ロ に対 し て -d|--define を使用 し ます。 マ ク ロ の フ ォーマ ッ ト は <name>[=<val>] で、 <name> はマ ク ロ の名前、 <value> はマ ク ロ のオプシ ョ ンの値を示 し ます。 「xelab」 「xvlog」 -debug <kind> 指定 し たデバ ッ グ機能を オンに し て コ ンパ イ ル し ます。 <kind> オプシ ョ ンには、 次のいずれかを指定で き ます。 • typical :一般的に使用 さ れ る も のは line お よ び wave です。 • line : HDL のブ レー ク ポ イ ン ト • wave : 波形生成、 条件付き 実行、 強制値 • xlibs : ザ イ リ ン ク ス プ リ コ ンパ イ ル ラ イ ブ ラ リ 。 こ の コ マ ン ド は、 コ マ ン ド ラ イ ンでのみ使用で き ま す。 • off : すべてのデバ ッ グ機能を オ フ に し ます (デフ ォ ル ト )。 • all : すべてのデバ ッ グ オプシ ョ ン を使用 し ます。 「xelab」 -encryptdumps コ ンパ イ ル さ れ る デザ イ ン ユニ ッ ト の解析済みダ ンプ を暗号化 し ます。 「xvhdl」 「xvlog」 -f [-file] <filename> 指定 し た フ ァ イ ルか ら 追加オプシ ョ ン を読み出 し ます。 「xelab」 xsim 「xvhdl」 「xvlog」 -generic_top <value> 最上位デザ イ ン ユニ ッ ト のジ ェ ネ リ ッ ク ま たはパ ラ メ ー タ ーを指定 し た値で上書 き し ます。 例 :-generic_top "P1=10" 「xelab」 -h [-help] こ のヘルプ メ ッ セージ を表示 し ます。 「xelab」 xsim 「xvhdl」 「xvlog」 -i [include] <directory_name> Verilog の `include を使用 し て、 含まれ る フ ァ イ ルを検 索す る デ ィ レ ク ト リ を指定 し ます。 指定検索デ ィ レ ク ト リ ご と に -i|--include を使用 し ます。 「xelab」 「xvlog」 -initfile <init_filename> デフ ォ ル ト のxsim.ini フ ァ イ ルで設定 さ れてい る 設定に 追加 し た り 、 それを上書 き す る ユーザー定義のシ ミ ュ レー タ 初期化フ ァ イ ルを指定 し ます。 「xelab」 「xvhdl」 「xvlog」 -L [-lib] <library_name> [=<library_dir>] イ ン ス タ ン シエー ト さ れた VHDL 以外のデザ イ ン ユ ニ ッ ト (Verilog デザ イ ン ユニ ッ ト な ど) の検索 ラ イ ブ ラ リ を指定 し ます。 検索 ラ イ ブ ラ リ ご と に -L|--lib を使用 し ます。 引数の フ ォーマ ッ ト は <name>[=<dir>] で、 <name> は ラ イ ブ ラ リ の論理名、 <library_dir> は ラ イ ブ ラ リ のオプシ ョ ンの 物理的なデ ィ レ ク ト リ を表 し ます。 「xelab」 「xvhdl」 「xvlog」 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 96 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 表 7‐2 : xelab、 xvhd、 xvlog コ マ ン ド オプ シ ョ ン (続き) コ マ ン ド オプ シ ョ ン -log <filename> 説明 コ マ ン ド で使用 ロ グ フ ァ イ ルの名前を指定 し ます。 「xelab」 xsim デフ ォ ル ト : <xvlog|xvhdl|xelab|xsim>.log 「xvhdl」 「xvlog」 -maxarraysize arg 最大 vhdl 配列サ イ ズ を 2**n (デフ ォ ル ト : n = 28、 つま り 2**28) に設定 し ます。 「xelab」 -maxdelay Verilog デザ イ ン ユニ ッ ト を最大遅延で コ ンパ イ ル し ま す。 「xelab」 -maxdesigndepth arg エ ラ ボ レー タ ーで指定可能なデザ イ ン階層の深 さ の最 大値 (デフ ォ ル ト = 5000) を上書 き し ます。 「xelab」 -maxlogsize arg (=-1) ロ グ フ ァ イ ルの最大サ イ ズ を MB で設定 し ます。 デ フ ォ ル ト 設定に制限はあ り ません。 -mindelay Verilog デザ イ ン ユニ ッ ト を最小遅延で コ ンパ イ ル し ま す。 「xelab」 -mt arg 並列実行可能なサブ コ ンパ イ ル ジ ョ ブの数を指定 し ま す。 使用で き る 値は、 auto、 off、 ま たは 1 よ り 大 き い 整数です。 auto が指定 さ れ る と 、 xelab でホ ス ト コ ン ピ ュ ー タ ー の CPU 数に基づいて並列ジ ョ ブの数が選択 さ れます (デフ ォ ル ト = auto)。 -mt オプシ ョ ン を さ ら に詳細に制御する には、 Tcl プ ロ パテ ィ を次の よ う に設定 し ます。 set_property XELAB.MT_LEVEL off|N [get_filesets sim_1] 「xelab」 -nolog ロ グ フ ァ イ ルが生成 さ れない よ う に し ます。 「xelab」 xsim xsim 「xvhdl」 「xvlog」 -noieeewarnings VHDL IEEE 機能か ら の警告をオ フ に し ます。 「xelab」 -noname_unnamed_generate 名前の付いていない生成ブ ロ ッ ク に対 し て名前を付け ない よ う に し ます。 「xelab」 「xvlog」 -notimingchecks Verilog 指定ブ ロ ッ ク で タ イ ミ ン グ チ ェ ッ ク コ ン ス ト ラ ク ト を無視 し ます。 「xelab」 -nosdfinterconnectdelays SDF の SDF ポー ト お よ び イ ン タ ー コ ネ ク ト 遅延 コ ン ス ト ラ ク ト を無視 し ます。 「xelab」 -nospecify Verilog パ ス遅延 と タ イ ミ ン グ チ ェ ッ ク を無視 し ます。 「xelab」 -O arg 最適化を イ ネーブルま たはデ ィ ス エーブルに し ます。 -O0 = 最適化をデ ィ ス エーブル -O1 = 基本的な最適化を イ ネーブル -O2 = 最 も よ く 必要 と さ れ る 最適化を イ ネーブル (デフ ォ ル ト ) -O3 = ア ド バン ス最適化を イ ネーブル 「xelab」 注記 : 値が低い と シ ミ ュ レーシ ョ ンが遅 く な り ます。 ま た、 値が高い と コ ンパ イ ルは遅 く な り ますが、 シ ミ ュ レーシ ョ ンは速 く な り ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 97 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 表 7‐2 : xelab、 xvhd、 xvlog コ マ ン ド オプ シ ョ ン (続き) 説明 コ マ ン ド で使用 -Odisable_acceleration arg コ マ ン ド オプ シ ョ ン 指定 し た HDL パ ッ ケージのア ク セ ラ レーシ ョ ン を オ フ に し ます。 選択肢は all、 math_real、 math_complex、 numeric_std、 std_logic_signed、 std_logic_unsigned です (デフ ォ ル ト ではア ク セ ラ レーシ ョ ンはオン)。 「xelab」 -Odisable_process_opt プ ロ セ ス レベルの最適化をオ フ に し ます (デフ ォ ル ト ではオン)。 「xelab」 -Oenable_cdfg -Odisable_cdfg コ ン ト ロ ール + デー タ フ ロ ー グ ラ フ の構築をオン ま た はオ フ に し ます (デフ ォ ル ト ではオン)。 「xelab」 -Oenable_unused_removal -Odisable_unused_removal 最適化での未使用の信号 と 文の削除を オン ま たはオ フ に し ます (デフ ォ ル ト ではオン)。 「xelab」 -override_timeunit -timescale オプシ ョ ンで指定 し た値で、 すべての Verilog モジ ュ ールの時間単位を上書 き し ます。 「xelab」 -override_timeprecision -timescale オプシ ョ ンで指定 し た時間精度で、 すべての Verilog モジ ュ ールの時間精度を上書き し ます。 「xelab」 -pulse_e arg パ ス遅延のパーセ ン ト 値でパ ス パルス エ ラ ー制限を指 定 し ます。 使用で き る 値は 0 ~ 100 です (デフ ォ ル ト は 100)。 「xelab」 -pulse_r arg パ ス遅延のパーセ ン ト 値でパ ス パルス却下制限を指定 し ます。 使用で き る 値は 0 ~ 100 です (デフ ォ ル ト は 100)。 「xelab」 -pulse_int_e arg 遅延のパーセ ン ト 値で イ ン タ ー コ ネ ク ト パルス却下制 限を指定 し ます。 使用で き る 値は 0 ~ 100 です (デフ ォ ル ト は 100)。 「xelab」 -pulse_int_r arg 遅延のパーセ ン ト 値で イ ン タ ー コ ネ ク ト パルス却下制 限を指定 し ます。 使用で き る 値は 0 ~ 100 です (デフ ォ ル ト は 100)。 「xelab」 -pulse_e_style arg パルス がモジ ュ ール パス遅延 よ り も 短い こ と を知 ら せ る エ ラ ーを処理すべ き か ど う か を指定 し ます。 選択肢 は次の と お り です。 ondetect : 違反が検出 さ れ る と エ ラ ーを レ ポー ト 「xelab」 onevent : モジ ュ ールのパ ス遅延後にエ ラ ーを レ ポー ト デフ ォ ル ト : onevent -prj <filename> vhdl|verilog <work lib> <HDL file name> の入力が 1 つま たは複数含まれ る Vivado シ ミ ュ レー タ プ ロ ジ ェ ク ト フ ァ イ ルを指定 し ます。 「xelab」 「xvhdl」 「xvlog」 -r [-run] コ マ ン ド ラ イ ンの イ ン タ ラ ク テ ィ ブ モー ド で生成 し た 実行可能スナ ッ プシ ョ ッ ト フ ァ イ ルを実行 し ます。 「xelab」 -rangecheck ラ ン タ イ ム値の範囲のチ ェ ッ ク を イ ネーブルに し ます (VHDL)。 「xelab」 -R [-runall シ ミ ュ レーシ ョ ンの最後ま で生成 し た実行可能スナ ッ プシ ョ ッ ト フ ァ イ ルを実行 し ます。 「xelab」 xsim ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 98 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 表 7‐2 : xelab、 xvhd、 xvlog コ マ ン ド オプ シ ョ ン (続き) コ マ ン ド オプ シ ョ ン 説明 コ マ ン ド で使用 -relax 厳 し い言語ルールを緩和 し ます。 「xelab」 「xvhdl」 「xvlog」 -s [-snapshot] arg 出力 さ れ る シ ミ ュ レーシ ョ ン ス ナ ッ プシ ョ ッ ト の名前 を指定 し ます。デフ ォ ル ト は <worklib>.<unit> です (例 : work.top)。 追加のユニ ッ ト 名は # で連結 し ます (例 : work.t1#work.t2)。 「xelab」 -sdfnowarn SDF 警告を出力 し ません。 「xelab」 -sdfnoerror SDF フ ァ イ ルで見つかっ たエ ラ ーを警告 と し て処理 し ます。 「xelab」 -sdfmin arg <root=file> SDF は <file> を最小遅延を含めて <root> で ア ノ テー ト し ます。 「xelab」 -sdftyp arg <root=file> SDF は <file> を標準遅延を含めて <root> で ア ノ テー ト し ます。 「xelab」 -sdfmax arg <root=file> SDF は <file> を最大遅延を含めて <root> で ア ノ テー ト し ます。 「xelab」 -sdfroot <root_path> SDF ア ノ テーシ ョ ンが適用 さ れ る デフ ォ ル ト デザ イ ン 階層 「xelab」 -sourcelibdir <sourcelib_dirname> コ ンパ イ ル さ れていないモジ ュ ールの Verilog ソ ース フ ァ イ ルのデ ィ レ ク ト リ 。 ソ ース デ ィ レ ク ト リ ご と に -sourcelibdir <sourcelib_dirname> を使用 し ます。 「xelab」 「xvlog」 -sourcelibext <file_extension> コ ンパ イ ル さ れていないモジ ュ ールの Verilog ソ ース フ ァ イ ルの フ ァ イ ル拡張子。 ソ ース フ ァ イ ル拡張子に -sourcelibext <file extension> を 使用 し ます。 「xelab」 「xvlog」 -sourcelibfile <filename> コ ンパ イ ル さ れていないモジ ュ ールを使用 し た Verilog ソ ース フ ァ イ ルのフ ァ イ ル名。 -sourcelibfile <filename> を使用 し ます。 「xelab」 「xvlog」 -stat CPU、 メ モ リ 使用量、 デザ イ ン統計を表示 し ます。 「xelab」 -sv SystemVerilog モー ド で入力フ ァ イ ルを コ ンパ イ ル し ま す。 「xvlog」 -timescale Verilog モジ ュ ールのデフ ォ ル ト の時間単位を指定 し ま す。 デフ ォ ル ト は 1ns/1ps です。 「xelab」 -timeprecision_vhdl arg VHDL デザ イ ンの時間精度を指定 し ます。 デフ ォ ル ト は 1ps です。 「xelab」 -transport_int_delays イ ン タ ー コ ネ ク ト 遅延に転送モデルを使用 し ます。 「xelab」 -typdelay Verilog デザ イ ン ユニ ッ ト を標準遅延 (デフ ォ ル ト ) で コ ンパ イ ル し ます。 「xelab」 -v [verbose] [0|1|2] 表示 メ ッ セージの詳細レベルを指定 し ます。 デフ ォ ル ト は 0 です。 「xelab」 「xvhdl」 「xvlog」 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 99 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 表 7‐2 : xelab、 xvhd、 xvlog コ マ ン ド オプ シ ョ ン (続き) コ マ ン ド オプ シ ョ ン 説明 -version コ マ ン ド で使用 コ ンパ イ ラ バージ ョ ン を画面に表示 し ます。 「xelab」 xsim 「xvhdl」 「xvlog」 -work <library_name> [=<library_dir>] work ラ イ ブ ラ リ を指定 し ます。 こ の引数の フ ォーマ ッ ト は <name>[=<dir>] です。 • <name> : ラ イ ブ ラ リ の論理名 • <library_dir> : ラ イ ブ ラ リ のオプシ ョ ンの物理的な ディ レク ト リ 「xvhdl」 「xvlog」 -sv_root arg DPI ラ イ ブ ラ リ が検索 さ れ る ルー ト デ ィ レ ク ト リ デフ ォ ル ト は <current_directory/xsim.dir/xsc> です。 「xelab」 -sv_lib arg DPI イ ン ポー ト さ れた フ ァ ン ク シ ョ ンの共有 ラ イ ブ ラ リ 名 (.dll/.so)。 フ ァ イ ル拡張子は不要。 「xelab」 -sv_liblist arg DPI 共有 ラ イ ブ ラ リ を ポ イ ン ト す る ブー ト ス ト ラ ッ プ フ ァ イル 「xelab」 -dpiheader arg エ ク ス ポー ト お よ び イ ン ポー ト さ れた フ ァ ン ク シ ョ ン のヘ ッ ダー フ ァ イ ル名 「xelab」 デザイ ン スナ ッ プシ ョ ッ ト のシ ミ ュ レーシ ョ ン (xsim) xsim コ マ ン ド は、 シ ミ ュ レーシ ョ ン スナ ッ プシ ョ ッ ト を読み込んで、 バ ッ チ モー ド のシ ミ ュ レーシ ョ ン を実行す る か、 ワー ク スペース (GUI) ま たは Tcl ベース の イ ン タ ラ ク テ ィ ブなシ ミ ュ レーシ ョ ン環境を提供 し ます。 xsim の構文 コ マ ン ド 構文は、 次の よ う にな り ます。 xsim <options> <snapshot> 説明 : • xsim は コ マ ン ド です。 • <options> はオプシ ョ ンです (表 7-3)。 • <snapshot> はシ ミ ュ レーシ ョ ン ス ナ ッ プシ ョ ッ ト です。 xsim のオプ シ ョ ン 表 7‐3 : xsim コ マ ン ド のオプ シ ョ ン xsim オプ シ ョ ン 説明 -f [-file] <filename> フ ァ イ ルか ら コ マ ン ド ラ イ ン オプシ ョ ン を読み込みます。 -g [-gui] イ ン タ ラ ク テ ィ ブな ワー ク スペース で実行 し ます。 -h [-help] ヘルプ メ ッ セージ を画面に表示 し ます。 -log <filename> ロ グ フ ァ イ ルの名前を指定 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 100 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 表 7‐3 : xsim コ マ ン ド のオプ シ ョ ン (続き) xsim オプ シ ョ ン 説明 -maxdeltaid arg (=-1) 最大デル タ 値を指定 し ます。 同時に最大シ ミ ュ レーシ ョ ン ループ を上回 る 場合は エ ラ ーを レ ポー ト し ます。 -maxlogsize arg (=-1) ロ グ フ ァ イ ルの最大サ イ ズ を MB で設定 し ます。 デフ ォ ル ト 設定に制限はあ り ま せん。 -ieeewarnings VHDL IEEE 関数か ら の警告を イ ネーブルに し ます。 -nolog ロ グ フ ァ イ ルが生成 さ れない よ う に し ます。 -nosignalhandlers OS レベルの信号ハン ド ラ ーの イ ン ス ト ールがシ ミ ュ レーシ ョ ン でデ ィ ス エーブル にな り ます。 シ ミ ュ レー タ はパフ ォーマ ン ス の理由か ら 、 0 での整数除算な ど、 OS レベルの致命的 ラ ン タ イ ム エ ラ ーにな る 可能性のあ る よ う な一部の コ ンデ ィ シ ョ ン を明示的にはチ ェ ッ ク し ません。 その代わ り に、 シ ミ ュ レー タ は信号ハン ド ラ ー を イ ン ス ト ール し て、 こ う いっ たエ ラ ーを検出 し て レ ポー ト を生成 し ます。 信号ハン ド ラ ーがデ ィ ス エーブルにな っ てい る と 、 セキ ュ リ テ ィ ソ フ ト ウ ェ アが あ っ て も シ ミ ュ レーシ ョ ンは実行で き ますが、 OS レベルの致命的エ ラ ーに よ り 、 エ ラ ーの原因が判然 と し ない ま ま、 突然シ ミ ュ レーシ ョ ンが停止 し て し ま う こ と が あ り ます。 注意 : こ のオプシ ョ ンは、 セキ ュ リ テ ィ ソ フ ト ウ ェ アが原因でシ ミ ュ レー タ が う ま く 動作 し ない場合にのみ使用 し て く だ さ い。 -onfinish <quit|stop> シ ミ ュ レーシ ョ ン終了時のビヘ イ ビ アーを指定 し ます。 -onerror <quit|stop> シ ミ ュ レーシ ョ ン ラ ン タ イ ム エ ラ ーの発生 し た場合の ビヘ イ ビ アーを指定 し ます。 -R [-runall] シ ミ ュ レーシ ョ ン を最後ま で実行 し ます (例 : do 'run all;quit’)。 -stats 終了す る と き に メ モ リ お よ び CPU の統計を表示 し ます。 -testplusarg <arg> plusargs が $test$plusargs お よ び $value$plusargs シ ス テ ム関数で使用 さ れ る よ う に指 定 し ます。 -t [-tclbatch] <filename> バ ッ チ モー ド 実行用の Tcl フ ァ イ ルを指定 し ます。 -tp 実行 さ れてい る プ ロ セ ス の階層名が画面に表示 さ れ る よ う にな り ます。 -tl 実行 さ れてい る 文の フ ァ イ ル名お よ び行番号が画面に表示 さ れ る よ う にな り ます。 -wdb <filename.wdb> 波形デー タ ベース出力フ ァ イ ルを指定 し ます。 -version コ ンパ イ ラ バージ ョ ン を画面に表示 し ます。 -view <wavefile.wcfg> 波形 コ ン フ ィ ギ ュ レーシ ョ ン フ ァ イ ルを開き ます。 こ のオプシ ョ ンは -gui オプ シ ョ ン と 一緒に使用 し ます。 ヒ ン ト : バ ッ チ フ ァ イ ル ま た は ス ク リ プ ト で xelab、 xsc、 xsim、 xvhdl、 ま た は xvlog コ マ ン ド を 実行す る 場合、 XILINX_VIVADO 環境変数が Vivado Design Suite の イ ン ス ト ール デ ィ レ ク ト リ を ポ イ ン ト す る よ う に定義す る 必要が 出て く る こ と も あ り ます。 XILINX_VIVADO 変数を設定する には、 次のいずれか を ス ク リ プ ト ま たはバ ッ チ フ ァ イ ル に追加 し ます。 Windows の場合 :set XILINX_VIVADO=<vivado_install_area>/Vivado/<version> Linux の場合 :setenv XILINX_VIVADO vivado_install_area>/Vivado/<version> (<version> は、 2014.3,、 2014.4、 2015.1 な ど、 使用 し てい る Vivado ツールのバージ ョ ンにな り ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 101 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 ス タ ン ド ア ロ ン モー ド での Vivado シ ミ ュ レー タ の 実行例 Vivado シ ミ ュ レー タ を ス タ ン ド ア ロ ン モー ド で実行す る 場合、 次の コ マ ン ド を実行で き ます。 • デザ イ ン フ ァ イ ルを解析 • デザ イ ン を エ ラ ボ レー ト し 、 スナ ッ プシ ョ ッ ト を作成 • Vivado シ ミ ュ レータ のワー ク スペース と 波形コ ン フ ィ ギ ュ レーシ ョ ン フ ァ イ ルを開いてシ ミ ュ レーシ ョ ン を実行 手順 1 : デザイ ン フ ァ イルを解析 まず、 次の表に示す よ う に HDL ソ ース フ ァ イ ルを タ イ プ別に解析 し ます。 各 コ マ ン ド で複数フ ァ イ ルを処理で き ま す。 表 7‐4 : デザイ ン フ ァ イル解析に使用する フ ァ イル タ イ プおよび関連 コ マ ン ド フ ァ イル タ イ プ コマン ド Verilog xvlog <VerilogFileName(s)> SystemVerilog xvlog -sv <SystemVerlilogFileName(s)> VHDL xvhdl <VhdlFileName(s)> 手順 2 : エ ラ ボ レー ト およびスナ ッ プ シ ョ ッ ト の作成 解析を実行 し た ら 、 xelab コ マ ン ド を使用 し てデザ イ ン を エ ラ ボ レー ト し 、 シ ミ ュ レーシ ョ ン の ス ナ ッ プシ ョ ッ ト を 作成 し ます。 xelab <topDesignUnitName> -debug typical 重要 : xelab を使用す る と 、 複数の最上位デザ イ ン ユニ ッ ト 名を指定で き ます。 launch_simulator 実行中 と 同様の目的 で Vivado シ ミ ュ レー タ の ワー ク スペース を使用す る には、 デバ ッ グ レベルを typical に設定す る 必要があ り ます。 手順 3 : シ ミ ュ レーシ ョ ンの実行 xelab が終了す る と 、 Vivado シ ミ ュ レー タ でシ ミ ュ レーシ ョ ン を実行する ために ス ナ ッ プシ ョ ッ ト が作成 さ れます。 Vivado シ ミ ュ レー タ の ワ ー ク スペース を起動する には、 次の コ マ ン ド を使用 し ます。 xsim <SnapShotName> -gui 波形 コ ン フ ィ ギ ュ レーシ ョ ン フ ァ イ ルを開 く には、 次の よ う に入力 し ます。 xsim <SnapShotName> -view <wcfg FileName> -gui -view オプシ ョ ン を複数使用すれば、 複数の wcfg フ ァ イ ルを指定で き ます。 次に例を示 し ます。 xsim <SnapShotName> -view <wcfg FileName> -view <wcfg FileName> ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 102 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 プ ロ ジ ェ ク ト フ ァ イル (.prj) の構文 注記 : こ こ で説明す る プ ロ ジ ェ ク ト フ ァ イ ルは、 Vivado シ ミ ュ レー タ のテ キ ス ト ベース のプ ロ ジ ェ ク ト フ ァ イ ルで す。 Vivado Design Suite で作成 さ れ る プ ロ ジ ェ ク ト フ ァ イ ル (.xpr) と は別の も のです。 プ ロ ジ ェ ク ト フ ァ イ ルを使用 し てデザ イ ン フ ァ イ ルを解析す る には、 <proj_name>.prj と い う フ ァ イ ル名でテ キ ス ト フ ァ イ ルを作成 し 、 そのプ ロ ジ ェ ク ト フ ァ イ ル内で次の構文を使用 し ます。 verilog <work_library> <file_names>...[-d <macro>]...[-i <include_path>]... vhdl <work_library> <file_name> sv <work_library> <file_name> 説明 : <work_library> : 指定 し た行の HDL フ ァ イ ルが コ ンパ イ ル さ れ る ラ イ ブ ラ リ <file_names> : Verilog ソ ース フ ァ イ ル。 各行に複数の Verilog フ ァ イ ルを指定で き ます。 <File_name> : VHDL ソ ース フ ァ イ ル。 各行に複数の VHDL フ ァ イ ルを指定で き ます。 ° Verilog ま たは SystemVerilog の場合、 [-d <macro>] で 1 つま たは複数のマ ク ロ を定義で き ます。 ° Verilog ま たは SystemVerilog の場合、 [-i <include_path>] で 1 つま たは複数の <include_path> デ ィ レ ク ト リ を 定義で き ます。 定義済みマ ク ロ XILINX_SIMULATOR は Verilog の定義済みマ ク ロ です。 こ のマ ク ロ の値は 1 です。 定義済みマ ク ロ では、 ツール専用 の関数が実行 さ れ る か、 デザ イ ン フ ロ ーで使用する ツールが認識 さ れます。 次は使用例です。 `ifdef VCS // VCS specific code `endif `ifdef INCA // NCSIM specific code `endif `ifdef MODEL_TECH // MODELSIM specific code `endif `ifdef XILINX_ISIM // ISE Simulator (ISim) specific code `endif `ifdef XILINX_SIMULATOR // Vivado Simulator (XSim) specific code `endif ラ イ ブ ラ リ マ ッ プ フ ァ イル (xsim.ini) HDL コ ンパ イ ラ プ ロ グ ラ ム の xvhdl、 xvlog、 xelab では、 xsim.ini コ ン フ ィ ギ ュ レーシ ョ ン フ ァ イ ルを使用 し て、 VHDL お よ び Verilog 論理 ラ イ ブ ラ リ の定義お よ び物理的な位置が検出 さ れます。 コ ンパ イ ラ は こ れ ら の位置か ら 次の順序で xsim.ini を読み出そ う と し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 103 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 1. <Vivado_Install_Dir>/data/xsim 2. ユーザー フ ァ イ ルは -initfile オプシ ョ ンで指定 し ます。 -initfile が指定 さ れない場合、 プ ロ グ ラ ムは現 在の作業デ ィ レ ク ト リ で xsim.ini を検索 し ます。 xsim.ini フ ァ イ ルの構文は、 次の と お り です。 <logical_library1> = <physical_dir_path1> <logical_library2> = <physical_dir_path2> 次は xsim.ini フ ァ イ ルの例です。 std=<Vivado_Install_Area>/xsim/vhdl/std ieee=<Vivado_Install_Area>/xsim/vhdl/ieee vl=<Vivado_Install_Area>/xsim/vhdl/vl synopsys=<Vivado_Install_Area>/xsim/vhdl/synopsys unisim=<Vivado_Install_Area>/xsim/vhdl/unisim unimacro=<Vivado_Install_Area>/xsim/vhdl/unimacro unifast=<Vivado_Install_Area>/xsim/vhdl/unifast simprims_ver=<Vivado_Install_Area>/xsim/verilog/simprims_ver unisims_ver=<Vivado_Install_Area>/xsim/verilog/unisims_ver unimacro_ver=<Vivado_Install_Area>/xsim/verilog/unimacro_ver unifast_ver=<Vivado_Install_Area>/xsim/verilog/unifast_ver secureip=<Vivado_Install_Area>/xsim/verilog/secureip work=./work xsim.ini フ ァ イ ルの機能お よ び制限は、 次の と お り です。 • xsim.ini フ ァ イ ルには、 1 行に 1 つの ラ イ ブ ラ リ パ ス し か指定で き ません。 • 物理的なパ ス に対応す る デ ィ レ ク ト リ がな い場合、 コ ン パ イ ラ がそのパ ス に最初に書 き 込 も う と す る と き に、 xvhd ま たは xvlog に よ り デ ィ レ ク ト リ が作成 さ れます。 • 物理的なパ ス は環境変数を使用 し て記述で き ます。 環境変数は必ず $ 文字か ら 始めて く だ さ い。 • 論理 ラ イ ブ ラ リ のデフ ォ ル ト の物理的なデ ィ レ ク ト リ は、xsim/<language>/<logical_library_name> で す。 た と えば、 次は論理 ラ イ ブ ラ リ 名の例です。 <Vivado_Install_Area>/xsim/vhdl/unisim • フ ァ イ ル コ メ ン ト は -- で開始す る 必要があ り ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 104 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 シ ミ ュ レーシ ョ ン モー ド の実行 シ ミ ュ レーシ ョ ン モー ド はすべて コ マ ン ド ラ イ ンか ら 実行で き ます。 次は、 コ マ ン ド ラ イ ンか ら 実行 さ れ る 場合の シ ミ ュ レーシ ョ ン モー ド について説明 し てい ます。 ビヘ イ ビ アー シ ミ ュ レーシ ョ ン 図 7-1 は、 ビヘ イ ビ アー シ ミ ュ レーシ ョ ン プ ロ セ ス を示 し てい ます。 X-Ref Target - Figure 7-1 'ĂƚŚĞƌ&ŝůĞƐ WĂƌƐĞhƐŝŶŐys>K'ͬys,> ŽŵƉŝůĞĂŶĚůĂďŽƌĂƚĞhƐŝŶŐ y>;ƌĞĂƚĞ^ŶĂƉƐŚŽƚͿ džĞĐƵƚĞhƐŝŶŐ y^/DфƐŶĂƉƐŚŽƚх ĞďƵŐŽŶtĂǀĞĨŽƌŵ 図 7‐1 : ビヘ イ ビ アー シ ミ ュ レーシ ョ ン プ ロ セス Vivado Design Suite か ら ビ ヘ イ ビ ア ー シ ミ ュ レ ー シ ョ ン を 実行す る に は、 Tcl コ マ ン ド launch_simulator -mode behavioral. を使用 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 105 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 合成後および イ ン プ リ メ ン テーシ ョ ン後のシ ミ ュ レーシ ョ ン 合成後お よ び イ ン プ リ メ ン テーシ ョ ン後のシ ミ ュ レーシ ョ ン では、 論理シ ミ ュ レーシ ョ ン ま たは Verilog タ イ ミ ン グ シ ミ ュ レーシ ョ ンが実行で き ます。 図 7-2は、 合成後お よ び イ ンプ リ メ ン テーシ ョ ン後のシ ミ ュ レーシ ョ ン プ ロ セ ス を示 し てい ます。 X-Ref Target - Figure 7-2 3RVW6\QWKHVLV 3RVW,PSOHPHQWDWLRQ 6LPXODWLRQ 5XQ6\QWKHVLVRU,PSOHPHQWDWLRQ &UHDWH1HWOLVW ZULWHBYHULORJRUZULWHBYKGO )RU7LPLQJ6LPXODWLRQ ZULWHBVGI *DWKHU)LOHV &UHDWH3URMHFW)LOH 3DUVH8VLQJ[YORJ[YKGO &RPSLOHDQG(ODERUDWH 8VLQJ[HODE 6LPXODWLRQ8VLQJ [VLPVQDSVKRW! 'HEXJLQ:DYHIRUP 2U6HOIFKHFNLQJ7HVW%HQFK 図 7‐2 : 合成後および イ ン プ リ メ ン テーシ ョ ン後のシ ミ ュ レーシ ョ ン 次は、 コ マ ン ド ラ イ ンか ら 合成後の論理シ ミ ュ レーシ ョ ン を実行する 例です。 synth_design -top top -part xc7k70tfbg676-2 open_run synth_1 -name netlist_1 write_verilog -mode funcsim test_synth.v launch_simulation ヒ ン ト : 合成後お よ び イ ンプ リ メ ン テーシ ョ ン後の タ イ ミ ン グ シ ミ ュ レーシ ョ ン を実行す る 場合、 write_verilog の後 に write_sdf コ マ ン ド を実行す る 必要があ り ま す。 ま た、 エ ラ ボ レ ーシ ョ ンお よ びシ ミ ュ レーシ ョ ン には適切な ア ノ テー ト コ マ ン ド が必要です。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 106 第 7 章 : バ ッ チまたはス ク リ プ ト モー ド での Vivado シ ミ ュ レー タ の使用 Tcl コ マ ン ド と ス ク リ プ ト の使用 Tcl コ ン ソ ールで個別に Tcl コ マ ン ド を実行す る か、 ま たは複数の コ マ ン ド を Tcl ス ク リ プ ト に ま と めて、 シ ミ ュ レー シ ョ ン を実行す る こ と がで き ます。 ‐tclbatch オプ シ ョ ンの使用 シ ミ ュ レーシ ョ ン コ マ ン ド を Tcl フ ァ イ ルに入力 し 、 その Tcl フ ァ イ ルを次の よ う に参照す る こ と がで き ます。 -tclbatch <filename> -tclbatch オプシ ョ ンは、 フ ァ イ ル内に コ マ ン ド を含め、 シ ミ ュ レーシ ョ ン開始時にそれ ら の コ マ ン ド を実行す る ため に使用 し ます。 た と えば、 次の内容を含む run.tcl と い う フ ァ イ ルがあ る と し ます。 run 20ns current_time quit 次に、 シ ミ ュ レーシ ョ ン を次の よ う に実行 し ます。 xsim <snapshot> -tclbatch run.tcl シ ミ ュ レーシ ョ ン コ マ ン ド を表す変数を設定 し てお く と 、 よ く 使用 さ れ る シ ミ ュ レーシ ョ ン コ マ ン ド を素早 く 実行 で き ます。 Tcl コ ン ソ ールから の Vivado シ ミ ュ レー タ の起動 次は、 プ ロ ジ ェ ク ト を作成 し 、 ソ ース フ ァ イ ルを読み込み、 Vivado シ ミ ュ レー タ を起動 し 、 配置配線を実行 し 、 SDF フ ァ イ ルを書 き 出 し て、 シ ミ ュ レーシ ョ ン を再実行す る Tcl コ マ ン ド の例です。 Vivado -mode Tcl Vivado% create_project prj1 Vivado% read_verilog dut.v Vivado% synth_design -top dut Vivado% launch_simulator -simset sim_1 -mode post-synthesis -type functional Vivado% place_design Vivado% route_design Vivado% write_verilog -mode timesim -sdf_anno true -sdf_file postRoute.sdf postRoute_netlist.v Vivado% write_sdf postRoute.sdf Vivado% launch_simulator -simset sim_1 -mode post-implementation -type timing Vivado% close_project ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 107 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 第 8章 サー ド パーテ ィ シ ミ ュ レー タ の使用 概要 Vivado® Design Suite は、サー ド パーテ ィ ツールを使用 し た シ ミ ュ レーシ ョ ン をサポー ト し てい ます。サー ド パーテ ィ ツールを使用 し た シ ミ ュ レーシ ョ ンは、 Vivado 統合設計環境 (IDE) 内で直接実行で き ます。 ま たはカ ス タ ムの外部シ ミ ュ レーシ ョ ン環境を使用 し て実行で き ます。 サポー ト さ れてい る のは次のサー ド パーテ ィ ツールです。 • QuestaSim • ModelSim (PE お よ び DE) • IES • VCS • Riviera PRO シ ミ ュ レー タ (Aldec) 重要 : サポー ト さ れてい る バージ ョ ン のサー ド パーテ ィ シ ミ ュ レ ー タ のみを使用 し て く だ さ い。 サポー ト さ れ る シ ミ ュ レー タ お よ び OS の詳細は、 『Vivado Design Suite ユーザー ガ イ ド : リ リ ース ノ ー ト 、 イ ン ス ト ールお よ び ラ イ セ ン ス』 (UG973) [参照 1] の 「互換性のあ る サー ド パーテ ィ ツール」 の表を参照 し て く だ さ い。 Vivado IDE の使用については、 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 3] を参照 し て く だ さ い。 サー ド パーテ ィ シ ミ ュ レー タ の詳細については、 [参照 13] を参照 し て く だ さ い。 サー ド パーテ ィ ツールを使用 し たシ ミ ュ レーシ ョ ン の準備 シ ミ ュ レー タ のイ ン ス ト ール場所の指定 イ ン ス ト ール パ ス を定義 し ます。 1. [Tools] → [Options] → [General] を ク リ ッ ク し ます。 2. [Vivado Options] ダ イ ア ロ グ ボ ッ ク ス の [General] ページにあ る イ ン ス ト ール パ ス を指定す る フ ィ ール ド ま で ス ク ロ ールダ ウ ン し 、 イ ン ス ト ール パス を指定 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 108 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 X-Ref Target - Figure 8-1 図 8‐1 : [Vivado Options] ダ イ ア ログ ボ ッ ク スの [General] ページ でのイ ン ス ト ール パスの指定 シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ の コ ンパイル Vivado Design Suite では、 シ ミ ュ レーシ ョ ン モデルの フ ァ イ ルセ ッ ト お よ び ラ イ ブ ラ リ を提供 し てい ます。 デザ イ ン を シ ミ ュ レー ト す る 前に、 こ れ ら の フ ァ イ ルを シ ミ ュ レーシ ョ ン ツールで コ ンパ イ ル し てお く 必要があ り ます。 シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ には、 デバ イ スお よ び IP のビヘ イ ビ アーお よ び タ イ ミ ン グ モデルが含まれてい ます。 コ ンパ イ ル さ れた ラ イ ブ ラ リ は、 複数のデザ イ ン プ ロ ジ ェ ク ト で使用で き ます。 ラ イ ブ ラ リ の コ ンパ イ ルは、 同 じ バージ ョ ンの ツールを使用 し てい る 限 り 、 通常 1 度だけ行 う 作業です。 重要 : Vivado ツール ま たはシ ミ ュ レー タ バージ ョ ン を変更す る と 、 ラ イ ブ ラ リ を再度 コ ンパ イ ルす る 必要があ り ま す。 シ ミ ュ レーシ ョ ン を始め る 前に、 Tcl コ マ ン ド の compile_simlib を実行 し て、 タ ーゲ ッ ト シ ミ ュ レー タ のザ イ リ ン ク ス シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ を コ ンパ イ ル し て く だ さ い。 Vivado IDE を使用 し たシ ミ ュ レーシ ョ ン ラ イ ブ ラ リ の コ ンパイル サー ド パーテ ィ ツールを変更す る たびに、 必ずシ ミ ュ レーシ ョ ン ラ イ ブ ラ リ を再 コ ンパ イ ルす る 必要があ り ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 109 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 1. [Tools] → [Compile Simulation Libraries] を ク リ ッ ク し てダ イ ア ロ グ ボ ッ ク ス を開き ます (図 8-2)。 X-Ref Target - Figure 8-2 図 8‐2 : [Compile Simulation Libraries] ダ イ ア ロ グ ボ ッ ク ス ダ イ ア ログ ボ ッ ク スのオプ シ ョ ン [Simulator] : [Simulator] ド ロ ッ プダ ウ ン メ ニ ュ ーか ら シ ミ ュ レー タ を選択 し ます (図 8-3)。 X-Ref Target - Figure 8-3 図 8‐3 : [Simulator] ド ロ ッ プダウンの選択肢 • [Language] : 指定 し た言語用に ラ イ ブ ラ リ を コ ンパ イ ル し ます。 こ のオプシ ョ ン を指定 し ない場合、 言語は上記 で選択 し た シ ミ ュ レー タ に対応す る も のに設定 さ れます。 混合言語シ ミ ュ レー タ の場合は、 Verilog お よ び VHDL ラ イ ブ ラ リ の両方が コ ンパ イ ル さ れます。 詳細は図 8-4 を参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 110 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 X-Ref Target - Figure 8-4 図 8‐4 : 言語の選択 • [Library] : コ ンパ イ ルす る シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ を指定 し ます。 デフ ォ ル ト では、 compile_simlib コ マ ン ド ですべてのシ ミ ュ レーシ ョ ン ラ イ ブ ラ リ が コ ンパ イ ル さ れます。 詳細は図 8-5 を参照 し て く だ さ い。 X-Ref Target - Figure 8-5 図 8‐5 : シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ • [Family] : 選択 し た ラ イ ブ ラ リ を指定 し たデバ イ ス フ ァ ミ リ に対 し て コ ンパ イ ル し ます。 デフ ォ ル ト では、 すべ てのデバ イ ス フ ァ ミ リ が生成 さ れます。 詳細は図 8-6 を参照 し て く だ さ い。 X-Ref Target - Figure 8-6 図 8‐6 : フ ァ ミ リ オプ シ ョ ン ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 111 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 • [Compiled library location] : コ ンパ イ ル し た ラ イ ブ ラ リ の結果を保存する デ ィ レ ク ト リ パ ス を指定 し ます。 デフ ォ ル ト では、 非プ ロ ジ ェ ク ト モー ド では ラ イ ブ ラ リ は現在の作業デ ィ レ ク ト リ に保存 さ れ、 プ ロ ジ ェ ク ト モー ド では <project>/<project>.cache/compile_simlib デ ィ レ ク ト リ に保存 さ れます。 プ ロ ジ ェ ク ト モー ド お よ び非プ ロ ジ ェ ク ト モー ド の詳細は、 『Vivado Design Suite ユーザー ガ イ ド : デザ イ ン フ ロ ーの概要』 (UG892) [参照 11] を参照 し て く だ さ い。 • [Simulator executable path] : シ ミ ュ レー タ 実行フ ァ イ ルのデ ィ レ ク ト リ を指定 し ます。 こ のオプシ ョ ンは、 タ ー ゲ ッ ト シ ミ ュ レー タ が $PATH ま たは %PATH% 環境変数で指定 さ れていない場合や、 $PATH ま たは %PATH% 環 境変数で指定 さ れてい る パ ス と は別のパ ス を指定す る 場合に使用 し ます。 • [Overwrite current pre-compiled libraries] : 現在の コ ンパ イ ル済み ラ イ ブ ラ リ を上書 き し ます。 • [Compile 32-bit libraries] : デフ ォ ル ト の 64 ビ ッ ト の コ ンパ イ ルではな く 、 32 ビ ッ ト モー ド のシ ミ ュ レー タ コ ン パ イ ルを実行 し ます。 • [Verbose] : メ ッ セージの制限を一時的に上書 き し 、 すべての メ ッ セージ を返 し ます。 ヒ ン ト : [Compile Simulation Libraries] ダ イ ア ロ グ ボ ッ ク ス の一番下には [Command] と い う フ ィ ール ド があ り ます (図 8-2)。 こ の フ ィ ール ド の値は選択 し たオブジ ェ ク ト に よ っ て変更 さ れ ます。 [Command] フ ィ ール ド の値を使用す る と 、 Tcl ま たは非プ ロ ジ ェ ク ト モー ド でシ ミ ュ レーシ ョ ン ラ イ ブ ラ リ を生成で き ます。 Tcl モー ド 構文 : compile_simlib [-directory <arg>] [-family <arg>] [-force] [-language <arg>] [-library <arg>] [-print_library_info <arg>] -simulator <arg> [-simulator_exec_path <arg>] [-source_library_path <arg>] [-32bit] [-quiet] [-verbose] 表 8‐1 : Tcl モー ド オプ シ ョ ン 名前 説明 [-directory] コ ンパ イ ル し た結果を保存す る デ ィ レ ク ト リ パス を指定 し ます。 [-family] デバ イ ス アーキ テ ク チ ャ を選択 し ます。 デフ ォ ル ト は all です。 [-force] コ ンパ イ ル済み ラ イ ブ ラ リ を上書 き し ます。 [-language] こ こ で指定 し た言語の ラ イ ブ ラ リ を コ ンパ イ ル し ます。デフ ォ ル ト は all で す。 [-library] コ ンパ イ ルす る ラ イ ブ ラ リ を選択 し ます。 デフ ォ ル ト は all です。 [-print_library_info] コ ンパ イ ル済み ラ イ ブ ラ リ の情報を表示 し ます。 -simulator 指定 し た シ ミ ュ レー タ 用に ラ イ ブ ラ リ を コ ンパ イ ル し ます。 [-simulator_exec_path] 指定 し たデ ィ レ ク ト リ にあ る シ ミ ュ レー タ の実行フ ァ イ ルを使用 し ます。 [-source_library_path] Vivado 用の環境変数 XILINX_VIVADO で指定 さ れてい る デフ ォ ル ト パス を検索す る 前に、 指定 し たデ ィ レ ク ト リ で ラ イ ブ ラ リ ソ ース フ ァ イ ルを 検索 し ます。 [-32bit] 32 ビ ッ ト の コ ンパ イ ルを実行 し ます。 [-quiet] コ マ ン ド エ ラ ーを無視 し ます。 [-verbose] プ ロ グ ラ ム実行中の メ ッ セージの制限を解除 し 、 すべての メ ッ セージ を表 示 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 112 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 詳細を表示す る には、 Vivado Design Suite の Tcl コ ン ソ ールで compile_simlib -help と 入力 し て く だ さ い。 コ マン ド例 • 現在のデ ィ レ ク ト リ のすべての言語、 すべての ラ イ ブ ラ リ 、 すべての フ ァ ミ リ に対する シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ を生成 し ます。 compile_simlib -language all -simulator questa -library all -family all • UNISIM ラ イ ブ ラ リ が /a/b/c にあ る 場合、 Verilog 言語用の IES のシ ミ ュ レーシ ョ ン ラ イ ブ ラ リ を生成 し ます。 compile_simlib -language verilog -dir {/a/b/c} -simulator ies -library unisim -family all • UNISIM ラ イ ブ ラ リ が /a/b/c にあ る 場合、Verilog 言語用の VCS のシ ミ ュ レーシ ョ ン ラ イ ブ ラ リ を生成 し ます。 compile_simlib -language verilog -dir {/a/b/c} -simulator vcs_mx -library unisim -family all • ModelSim の実行フ ァ イ ルのパ ス が <simulator_installation_path> の場合に、 ModelSim のシ ミ ュ レー シ ョ ン ラ イ ブ ラ リ を /a/b/c に生成 し ます。 compile_simlib -language all -dir {/a/b/c} -simulator modelsim -simulator_exec_path {<simulator_installation_path>} -library all -family all コ ンパイル済みのラ イ ブ ラ リ コ ンパ イ ル プ ロ セ ス で、 Vivado は、 コ ンパ イ ル さ れた ラ イ ブ ラ リ を参照す る ためにシ ミ ュ レー タ が使用す る 、 デフ ォ ル ト の初期化フ ァ イ ルを作成 し ます。 compile_simlib コ マ ン ド は、 ラ イ ブ ラ リ の コ ンパ イ ル中に、 指定 さ れた ラ イ ブ ラ リ 出力デ ィ レ ク ト リ に フ ァ イ ルを作成 し ます。 デフ ォ ル ト の初期化フ ァ イ ルには、 リ フ ァ レ ン ス ラ イ ブ ラ リ パ ス を指定す る 変数、 最適化、 コ ンパ イ ラ ー、 シ ミ ュ レー タ の設定が含まれてい ます。 正 し い初期化フ ァ イ ルがパ ス にない場合は、 ザ イ リ ン ク ス プ リ ミ テ ィ ブ を含むデザ イ ン を シ ミ ュ レー ト で き ません。 初期化フ ァ イ ルの名前は、 次の表に示す よ う に、 使用 し てい る シ ミ ュ レー タ に よ っ て異な り ます。 表 8‐2 : コ ンパイル さ れた ラ イ ブ ラ リ を参照するのにシ ミ ュ レー タ が使用する フ ァ イル QuestaSim/ModelSim IES VCS modelsim.ini cds.lib synopsys_sim.setup シ ミ ュ レー タ 別の コ ンパ イ ル さ れた ラ イ ブ ラ リ フ ァ イ ルについては、 サー ド パーテ ィ シ ミ ュ レーシ ョ ン ツールの資 料を参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 113 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 サー ド パーテ ィ ツールでのシ ミ ュ レーシ ョ ンの実行 Flow Navigator で [Simulation Settings] を ク リ ッ ク する と 、 Vivado IDE のシ ミ ュ レーシ ョ ン設定がで き ます。 次の図 は Flow Navigator の [Simulation] を示 し てい ます。 X-Ref Target - Figure 8-7 図 8‐7 : [Simulation Settings] [Simulation Settings] を ク リ ッ ク す る と 、 シ ミ ュ レ ー タ の選択やその詳細を設定で き る ダ イ ア ロ グ ボ ッ ク ス が開 き ま す。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 114 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 サー ド パーテ ィ ツールを使用 し たシ ミ ュ レーシ ョ ン オプ シ ョ ン の選択 Flow Navigator で [Simulation Settings] を ク リ ッ ク し て [Project Settings] ダ イ ア ロ グ ボ ッ ク ス を開き ます。 X-Ref Target - Figure 8-8 1 2 3 4 5 6 7 シ ミ ュ レー タ を選択 し ます。 シ ミ ュ レー タ の言語を選択 し ます。 シ ミ ュ レーシ ョ ン セ ッ ト を選択 し ます。 シ ミ ュ レーシ ョ ンの最上位デザ イ ン名を参照 し ます。 再実行前にシ ミ ュ レーシ ョ ン フ ァ イ ルを消去 し ます。 こ のオ プシ ョ ンはオ ンに し た ま ま に し てお く こ と を推奨 し ます。 シ ミ ュ レーシ ョ ン を実行せずに ス ク リ プ ト を生成 し ます。 それぞれの カ テ ゴ リ でオプシ ョ ン を設定す る た めの タ ブ を選 択 し ます。 8 コ ンパ イ ル さ れた シ ミ ュ レーシ ョ ン ラ イ ブ ラ リ のデ ィ レ ク ト リ を指定 し ます。 9 [Compilation] のみでの設定 : イ ン ク ルー ド パ ス を設定ま た はマ ク ロ を定義す る デ ィ レ ク ト リ を指定 し ます。 10 [Compilation] のみでの設定 : ジ ェ ネ リ ッ ク /パ ラ メ ー タ ーの ロ ケーシ ョ ン を選択す る デ ィ レ ク ト リ を指定 し ます。 11 それぞれのページに対 し 、 オプシ ョ ン リ ス ト が ウ ィ ン ド ウ に表示 さ れ ま す。 オプシ ョ ン を選択す る と 、 その説明が表 示 さ れます。 図 8‐8 : [Project Settings] ダ イ ア ログ ボ ッ ク ス : サー ド パーテ ィ ツールの設定 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 115 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 注 意 : ど う し て も 必 要 な 場 合 に の み [Advanced] タ ブ で 設 定 を 変 更 し て く だ さ い。 [Include all design sources for simulation] チ ェ ッ ク ボ ッ ク ス はデフ ォ ル ト でオンにな っ てい ます。 こ のチ ェ ッ ク ボ ッ ク ス をオ フ にす る と 、 予測 し な い結果にな る 可能性があ り ます。 チ ェ ッ ク ボ ッ ク ス がオ ンにな っ てい る 限 り 、 シ ミ ュ レーシ ョ ン セ ッ ト でア ウ ト オ ブ コ ン テ キ ス ト (OOC) の IP、 IP イ ン テ グ レー タ ー フ ァ イ ル、 DCP な ど が含まれます。 シ ミ ュ レーシ ョ ン ソ ース フ ァ イルの追加または作成 シ ミ ュ レ ーシ ョ ン ソ ー ス はシ ミ ュ レ ーシ ョ ン セ ッ ト に含 ま れてお り 、 デザ イ ン フ ァ イ ルやシ ミ ュ レ ーシ ョ ン専用 フ ァ イ ルが含まれてい る 場合があ り ます。 プ ロ ジ ェ ク ト に フ ァ イ ルを追加す る と き 、 シ ミ ュ レーシ ョ ン セ ッ ト を指定 し 、 シ ミ ュ レーシ ョ ンお よ び イ ンプ リ メ ン テーシ ョ ンに対す る 関連付け を指定す る こ と がで き ます。 シ ミ ュ レーシ ョ ン ソ ース をプ ロ ジ ェ ク ト に追加する には、 次の手順に従い ます。 1. [File] → [Add] を ク リ ッ ク す る か、 ま たは [Add Sources] ボ タ ン を ク リ ッ ク し ます。 Add Sources ウ ィ ザー ド が表示 さ れます。 2. [Add or Create Simulation Sources] をオンに し 、 [Next] を ク リ ッ ク し ます。 [Add or Create Simulation Sources] ページでは、 次のオプシ ョ ンが設定で き ます。 ° [Specify Simulation Set] : テ ス ト ベンチ フ ァ イ ルお よ びデ ィ レ ク ト リ を保存す る シ ミ ュ レーシ ョ ン セ ッ ト の 名前 (デフ ォ ル ト は sim_1、 sim_2...) を入力 し ます。 新 し いシ ミ ュ レーシ ョ ン セ ッ ト を定義す る には、 ド ロ ッ プダ ウ ン メ ニ ュ ーか ら [Create Simulation Set] コ マ ン ド を選択 し ます。 複数のシ ミ ュ レーシ ョ ン セ ッ ト が使用可能な場合は、 Vivado シ ミ ュ レー タ で、 ど のシ ミ ュ レーシ ョ ン セ ッ ト が現在使用中なのかが表示 さ れます。 ° [Add Files] : プ ロ ジ ェ ク ト に追加す る シ ミ ュ レーシ ョ ン ソ ース フ ァ イ ルを選択 し ます。 ° [Add Directories] : 選択 し たデ ィ レ ク ト リ に含まれ る すべてのシ ミ ュ レーシ ョ ン ソ ース フ ァ イ ルを追加 し ま す。 指定 し たデ ィ レ ク ト リ にあ る 有効な ソ ース フ ァ イ ルがすべてプ ロ ジ ェ ク ト に追加 さ れます。 ° [Create File] : 新規シ ミ ュ レーシ ョ ン フ ァ イ ルを作成する [Create Source File] ダ イ ア ロ グ ボ ッ ク ス が開 き ま す。 ダ イ ア ロ グ ボ ッ ク ス には、 次の よ う なボ タ ンがあ り ます。 ° [Remove] : 選択 し た ソ ース フ ァ イ ルを削除 し ます。 ° [Move Selected File Up] : フ ァ イ ルを リ ス ト の上方向に移動 し ます。 ° [Move Selected File Down] : フ ァ イ ルを リ ス ト の下方向に移動 し ます。 ウ ィ ザー ド のチ ェ ッ ク ボ ッ ク ス には、 次のオプシ ョ ンがあ り ます。 ° [Scan and add RTL include files into project] : 追加 し た RTL フ ァ イ ルを ス キ ャ ン し 、参照 さ れてい る イ ン ク ルー ド フ ァ イ ルを追加 し ます。 ° [Copy sources into project] : ソ ース フ ァ イ ルをプ ロ ジ ェ ク ト デ ィ レ ク ト リ に コ ピー し ます。 プ ロ ジ ェ ク ト では ロ ーカルに コ ピー さ れたバージ ョ ンが使用 さ れます。 注記 : [Add Directories] ボ タ ン を ク リ ッ ク し て ソ ー ス フ ァ イ ルのデ ィ レ ク ト リ を追加 し た場合は、 フ ァ イ ル がプ ロ ジ ェ ク ト に ロ ーカルに コ ピー さ れ る と き 、 デ ィ レ ク ト リ 構造 も その ま ま の状態で コ ピー さ れます。 ° [Add sources from subdirectories] : [Add Directories] で指定 し たデ ィ レ ク ト リ のサブデ ィ レ ク ト リ に含まれ る ソ ース フ ァ イ ルをすべて追加 し ます。 ° [Include all design sources for simulation] : シ ミ ュ レーシ ョ ン用にデザ イ ン ソ ースすべて を含め ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 116 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 シ ミ ュ レーシ ョ ン セ ッ ト の操作 Vivado IDE では、 シ ミ ュ レ ーシ ョ ン ソ ー ス フ ァ イ ルはシ ミ ュ レ ーシ ョ ン フ ァ イ ル セ ッ ト に ま と め ら れ、 [Sources] ビ ュ ーに フ ォ ルダー と し て表示 さ れます。 リ モー ト の も の を参照 し た り 、 ロ ーカル プ ロ ジ ェ ク ト デ ィ レ ク ト リ に保 存 さ れてい る も のを使用で き ます。 シ ミ ュ レーシ ョ ン セ ッ ト を使用す る と 、 それぞれのデザ イ ン段階にあわせて ソ ース を定義 し て使用で き ます。 た と えば、 あ る シ ミ ュ レーシ ョ ン ソ ース は、 エ ラ ボ レー ト さ れたデザ イ ン、 ま たはデザ イ ンのモジ ュ ールのビヘ イ ビ アー シ ミ ュ レーシ ョ ン用に ス テ ィ ミ ュ ラ ス を供給する ための も のであ っ た り 、 別のテ ス ト ベンチは、 イ ンプ リ メ ン ト 済みデザ イ ンの タ イ ミ ン グ シ ミ ュ レーシ ョ ン用に ス テ ィ ミ ュ ラ ス を供給する ための も の、と 使い分け る こ と がで き ま す。 フ ァ イ ルを プ ロ ジ ェ ク ト に追加す る 際、 ど のシ ミ ュ レーシ ョ ン ソ ース セ ッ ト に フ ァ イ ルを追加す る か を指定で き ま す。 シ ミ ュ レーシ ョ ン セ ッ ト は次の手順で変更で き ます。 1. [Sources] ビ ュ ーで [Simulation Sources] を右 ク リ ッ ク し 、 [Edit Simulation Sets] を ク リ ッ ク し ます (図 8-9)。 X-Ref Target - Figure 8-9 図 8‐9 : [Edit Simulation Sets] オプ シ ョ ン [Add or Create Simulation Sources] ページが表示 さ れます。 2. [Add Files] を ク リ ッ ク し て フ ァ イ ルを選択 し ます。 こ れで、 プ ロ ジ ェ ク ト に関連付け ら れてい る ソ ース が、 新 し く 作成 さ れた シ ミ ュ レーシ ョ ン セ ッ ト に追加 さ れます。 3. 必要であればほかの フ ァ イ ル も 追加 し ます。 選択 し た シ ミ ュ レーシ ョ ン セ ッ ト がア ク テ ィ ブなデザ イ ン run に使用 さ れます。 重要 : 前に定義 さ れた シ ミ ュ レーシ ョ ン セ ッ ト の コ ンパ イ ルお よ びシ ミ ュ レ ーシ ョ ン設定は、 新 し く 定義 さ れた シ ミ ュ レーシ ョ ン セ ッ ト には適用 さ れません。 重要 : サー ド パーテ ィ シ ミ ュ レー タ を実行す る 前に、 コ ンパ イ ル さ れた ラ イ ブ ラ リ のデ ィ レ ク ト リ を確認 し て く だ さ い (compile_simlib が実行 さ れたパ ス、 ま たは -directory オプシ ョ ンで指定 さ れたデ ィ レ ク ト リ ) ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 117 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 Vivado IDE およびサー ド パーテ ィ ツールを使用 し たシ ミ ュ レー シ ョ ンの実行 [Run Simulation] ボ タ ン を ク リ ッ ク す る と 、 シ ミ ュ レーシ ョ ン設定に基づいてデザ イ ン を コ ンパ イ ル、 エ ラ ボ レー ト 、 シ ミ ュ レー ト す る コ マ ン ド オプシ ョ ンが設定 さ れ、 別ウ ィ ン ド ウ が開いてシ ミ ュ レー タ が起動 し ます。 デザ イ ンの合成前にシ ミ ュ レーシ ョ ン を実行す る と 、 ビヘ イ ビ アー シ ミ ュ レーシ ョ ンが実行 さ れます。 各デザ イ ン手 順 (合成お よ び イ ンプ リ メ ン テーシ ョ ン) が終了 し た ら 、論理ま たは タ イ ミ ン グ シ ミ ュ レーシ ョ ン を実行す る オプシ ョ ンが選択で き る よ う にな り ます。 シ ミ ュ レーシ ョ ン run は Flow Navigator か ら 実行す る か、 ま たは Tcl コ マ ン ド を入 力 し て開始で き ます。 Flow Navigator か ら の場合は、 図 8-10 の よ う に [Run Simulation] を ク リ ッ ク し ます。 X-Ref Target - Figure 8-10 図 8‐10 : Flow Navigator のシ ミ ュ レーシ ョ ン オプ シ ョ ン こ れに該当す る Tcl コ マ ン ド を使用す る 場合は、 launch_simulation ヒ ン ト : こ の コ マ ン ド には、 DO フ ァ イ ルま たは SH フ ァ イ ルを出力す る ための -scripts_only オプシ ョ ンがあ り ます。 ど ち ら の フ ァ イ ルが出力 さ れ る かは、 使用 し てい る シ ミ ュ レー タ に よ っ て決ま り ます。 IDE 環境外でシ ミ ュ レーシ ョ ン を実行す る には、 DO ま たは SH フ ァ イ ルを使用 し て く だ さ い。 サー ド パーテ ィ ツールを使用 し たシ ミ ュ レーシ ョ ンの実行 シ ミ ュ レ ーシ ョ ン を実行す る には、 Flow Navigator で [Run Simulation] を ク リ ッ ク し 、 次の図に示す よ う に、 ポ ッ プ ア ッ プ メ ニ ュ ーか ら 該当オプシ ョ ン を選択 し ます。 ヒ ン ト : ポ ッ プア ッ プ メ ニ ュ ーで ど のオプシ ョ ン を選択で き る かは、 デザ イ ン開発段階に よ っ て異な り ます。 た と え ば、 合成は実行 し たけれど も イ ンプ リ メ ン テーシ ョ ンは ま だであ る と い う 場合は、 ポ ッ プア ッ プ メ ニ ュ ーで イ ンプ リ メ ン テーシ ョ ンに関す る オプシ ョ ンがグ レー表示にな っ てい ます。 X-Ref Target - Figure 8-11 図 8‐11 : シ ミ ュ レーシ ョ ンの Run オプ シ ョ ン ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 118 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 サー ド パーテ ィ ツールを使用 し た RTL/ビヘ イ ビ アー シ ミ ュ レー シ ョ ンの実行 compile_simlib コ マ ン ド を実行 し 、エ ラ ー も な く プ ロ ジ ェ ク ト を作成で き た ら 、 ビヘ イ ビ アー /RTL レベル シ ミ ュ レーシ ョ ン を実行す る こ と がで き ます。こ のシ ミ ュ レーシ ョ ン を実行 し てお く と 、RTL に目的の機能が反映 さ れます。 ビヘ イ ビ アー シ ミ ュ レーシ ョ ン を実行す る には、 Flow Navigator で [Run Simulation] → [Run Behavioral Simulation] を ク リ ッ ク し ます (図 8-11)。 サー ド パーテ ィ ツールを使用 し た論理シ ミ ュ レーシ ョ ンの実行 合成後の論理シ ミ ュ レーシ ョ ン 合成を実行 し た後、 [Run Simulation] → [Post-Synthesis Functional Simulation] が使用で き る よ う にな り ます (図 8-11)。 合成後は、 シ ミ ュ レーシ ョ ン情報が さ ら に増え る ので、 デザ イ ン の機能が ど の程度要件を満た し てい る か ど う か を、 よ り 正確に確認で き ます。合成後の論理シ ミ ュ レーシ ョ ン を選択す る と 、論理ネ ッ ト リ ス ト が生成 さ れ、その UNISIM ラ イ ブ ラ リ がシ ミ ュ レーシ ョ ンに使用 さ れます。 イ ン プ リ メ ン テーシ ョ ン後の論理シ ミ ュ レーシ ョ ン イ ンプ リ メ ン テーシ ョ ン を実行 し た後は、 [Run Simulation] → [Post-Implementation Functional Simulation] が使用で き る よ う にな り ます (図 8-11)。 イ ンプ リ メ ン テーシ ョ ン後には、 シ ミ ュ レーシ ョ ン情報が さ ら に増え る ので、 デザ イ ンの機能が ど の程度要件を満た し てい る か ど う か を、 よ り 正確に確認で き ます。 イ ンプ リ メ ン テーシ ョ ン後の論理シ ミ ュ レーシ ョ ン を選択す る と 、 論理ネ ッ ト リ ス ト が生成 さ れ、 その UNISIM ラ イ ブ ラ リ がシ ミ ュ レーシ ョ ンに使用 さ れます。 タ イ ミ ング シ ミ ュ レーシ ョ ンの実行 ヒ ン ト : 合成後の タ イ ミ ン グ シ ミ ュ レーシ ョ ンは、 合成 さ れた ネ ッ ト リ ス ト か ら の予測 タ イ ミ ン グ遅延を使用 し ま す。 イ ンプ リ メ ン テーシ ョ ン後の タ イ ミ ン グ シ ミ ュ レーシ ョ ンでは実際の タ イ ミ ン グ遅延が使用 さ れます。 合成後お よ び イ ンプ リ メ ン テーシ ョ ン後の タ イ ミ ン グ シ ミ ュ レーシ ョ ン を実行する と き 、シ ミ ュ レー タ には次の も の が含まれます。 • SIMPRIM ラ イ ブ ラ リ コ ン ポーネ ン ト を含むゲー ト レベルのネ ッ ト リ ス ト • SECUREIP • 標準遅延フ ォーマ ッ ト (SDF) フ ァ イ ル 始めに、 デザ イ ン全体の機能を定義 し ます。 デザ イ ンが イ ンプ リ メ ン ト さ れ る と 、 正確な タ イ ミ ン グ情報が利用で き る よ う にな り ます。 ネ ッ ト リ ス ト お よ び SDF を作成す る には、 Vivado Design Suite は次の作業を行い ます。 • -mode timesim オプシ ョ ン を使用 し てネ ッ ト リ ス ト ラ イ タ ー write_verilog、 お よ び write_sdf (SDF ア ノ テー タ ー ) を呼び出 し ます。 • 生成 さ れたネ ッ ト リ ス ト を タ ーゲ ッ ト シ ミ ュ レー タ に送 り ます。 こ れ ら の オ プ シ ョ ン は、 20 ペ ー ジ の 「シ ミ ュ レ ー シ ョ ン 設 定」 で 説 明 さ れ て い る る シ ミ ュ レ ー シ ョ ン 設 定 で変更で き ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 119 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 重要 : 合成後 と イ ン プ リ メ ン テーシ ョ ン 後の タ イ ミ ン グ シ ミ ュ レ ー シ ョ ン は、 Verilog で のみサ ポー ト さ れ ま す。 VHDL の タ イ ミ ン グ シ ミ ュ レーシ ョ ンはサポー ト さ れ ません。 VHDL を使用す る 場合は、 合成後お よ び イ ン プ リ メ ン テーシ ョ ン後の論理シ ミ ュ レーシ ョ ン を実行 し ます ( こ の場合、 SDF ア ノ テーシ ョ ンは不要で、 シ ミ ュ レーシ ョ ン ネ ッ ト リ ス ト に UNISIM ラ イ ブ ラ リ が使用 さ れます)。 ネ ッ ト リ ス ト は write_vhdl Tcl コ マ ン ド を使用 し て作成で き ま す。使用方法の詳細は、『Vivado Design Suite Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) [参照 7] を参照 し て く だ さ い。 重要 : Vivado シ ミ ュ レー タ モデルは イ ン タ ー コ ネ ク ト 遅延を使用 し ます。 タ イ ミ ン グ シ ミ ュ レーシ ョ ン を正 し く 実 行す る には、 次の よ う なオプシ ョ ンが追加で必要にな り ます。 -transport_int_delays -pulse_r 0 -pulse_int_r 0 96 ページの表 7-2 には こ れ ら の コ マ ン ド が説明 さ れてい ます。 合成後の タ イ ミ ング シ ミ ュ レーシ ョ ン 合成を実行 し た後は、 [Run Simulation] → [Post-Synthesis Timing Simulation] が使用で き る よ う にな り ます (図 8-11)。 合成後の タ イ ミ ン グ シ ミ ュ レーシ ョ ン を選択する と 、タ イ ミ ン グ ネ ッ ト リ ス ト と SDF フ ァ イ ルが生成 さ れます。ネ ッ ト リ ス ト フ ァ イ ルには $sdf_annotate コ マ ン ド が含まれ る ので、 生成 さ れた SDF フ ァ イ ルが自動的に指定 さ れます。 イ ン プ リ メ ン テーシ ョ ン後の タ イ ミ ング シ ミ ュ レーシ ョ ン イ ンプ リ メ ン テーシ ョ ン を実行 し た後は、 [Run Simulation] → [Post-Implementation Timing Simulation] が使用で き る よ う にな り ます (図 8-11)。 イ ンプ リ メ ン テーシ ョ ン後の タ イ ミ ン グ シ ミ ュ レーシ ョ ン を選択する と 、 タ イ ミ ン グ ネ ッ ト リ ス ト と SDF フ ァ イ ル が生成 さ れます。 ネ ッ ト リ ス ト フ ァ イ ルには $sdf_annotate コ マ ン ド が含まれ る ので、 生成 さ れた SDF フ ァ イ ルが自 動的に指定 さ れます。 タ イ ミ ング シ ミ ュ レーシ ョ ン用の SDF フ ァ イルのア ノ テー ト シ ミ ュ レーシ ョ ン設定を指定 し た と き に、 SDF フ ァ イ ルを作成す る か ど う か、 そ し て、 プ ロ セ ス コ ーナーを高速に す る か低速にす る か を設定 し ま し た。 ヒ ン ト : SDF フ ァ イ ル オプシ ョ ンの設定を確認する には、 Vivado IDE の Flow Navigator で、 [Simulation Settings] を選 択 し ます。[Project Settings] ダ イ ア ロ グ ボ ッ ク ス の [Netlist] タ ブが開 き ます 第 2 章の「Vivado シ ミ ュ レー タ のプ ロ ジ ェ ク ト 設定」 も 参照 し て く だ さ い。 SDF フ ァ イ ルには、 指定 し たプ ロ セ ス コ ーナーに基づいて異な る min お よ び max 数値が含まれます。 推奨 : 2 つの異な る シ ミ ュ レーシ ョ ン を実行 し て、 セ ッ ト ア ッ プお よ びホール ド 違反をチ ェ ッ ク を し て く だ さ い。 セ ッ ト ア ッ プ チ ェ ッ ク を実行す る には、 –process コ ーナーを slow に し て SDF を作成 し 、 SDF フ ァ イ ルか ら の max 列 を使用 し ます。 ホール ド チ ェ ッ ク を実行す る には、 –process コ ーナーを fast に し て SDF フ ァ イ ルを作成 し 、 SDF フ ァ イ ルか ら の min 列を使用 し ます。 ど の SDF 遅延フ ィ ール ド を使用す る か指定す る 方法は、 使用す る シ ミ ュ レーシ ョ ン ツールに よ っ て異な り ます。 こ のオプシ ョ ンの設定方法については、 特定のシ ミ ュ レーシ ョ ン ツールの資料を参照 し て く だ さ い。 4 つの タ イ ミ ン グ シ ミ ュ レーシ ョ ンすべて を確認す る には、 次の よ う に指定 し ます。 ° 低速 コ ーナー : SDFMIN お よ び SDFMAX ° 高速 コ ーナー : SDFMIN お よ び SDFMAX ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 120 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 サー ド パーテ ィ ツールで シ ミ ュ レーシ ョ ン を実行 し た後 消費電力解析用の SAIF のダ ン プ ° 「QuestaSim/ModelSim での SAIF のダ ンプ」 ° 「IES での SAIF のダ ンプ」 ° 「VCS での SAIF のダ ンプ」 SAIF (Switching Activity Interchange Format) に関す る 詳細は、 86 ページの 「消費電力解析のための SAIF フ ァ イ ルのダ ンプ」 を参照 し て く だ さ い。 QuestaSim/ModelSim での SAIF のダ ン プ QuestaSim/ModelSim では、 専用の消費電力 コ マ ン ド を使用 し て、 SAIF フ ァ イ ルを ダ ンプ し ます。 1. 次の よ う に入力 し 、 ダ ンプす る 範囲ま たは信号を指定 し ます。 power add <hdl_objects> 2. 特定時間 (ま たは run -all)、 シ ミ ュ レーシ ョ ン を実行 し ます。 3. 次の よ う に入力 し 、 消費電力レ ポー ト を ダ ンプ し ます。 power report -all filename.saif 各 コ マ ン ド の使用方法や詳細については、 ModelSim の資料 [参照 13] を参照 し て く だ さ い。 DO フ ァ イルの例 power add tb/fpga/* run 500us power report -all -bsaif routed.saif quit IES での SAIF のダ ン プ IES には、 SAIF を特定要件で生成す る ための消費電力コ マ ン ド が含まれます。 1. 次の よ う に入力 し 、 ダ ンプす る 範囲 と 出力す る SAIF フ ァ イ ルの名前を指定 し ます。 dumpsaif -scope hdl_objects -output filename.saif 2. シ ミ ュ レーシ ョ ン を実行 し ます。 3. 次の よ う に入力 し て SAIF ダ ンプ を終了 し ます。 dumpsaif -end IES コ マ ン ド の使用方法や詳細については、 Cadence 社の IES のユーザー ガ イ ド [参照 13] を参照 し て く だ さ い。 VCS での SAIF のダ ン プ VCS には、 SAIF を特定要件で生成す る ための消費電力 コ マ ン ド が含まれます。 1. 次の よ う に入力 し 、 生成す る 範囲ま たは信号を指定 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 121 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 power <hdl_objects> 2. SAIF ダ ンプ を イ ネーブルに し ます。 シ ミ ュ レー タ ワ ー ク スペース で コ マ ン ド ラ イ ン を使用で き ます。 power -enable 3. 特定時間、 シ ミ ュ レーシ ョ ン を実行 し ます。 4. 次の よ う に入力 し 、 消費電力のダ ンプ をデ ィ ス エーブルに し 、 SAIF を レ ポー ト し ます。 power -disable power -report filename.saif 各 コ マ ン ド の使用方法や詳細については、 Synopsys 社の VCS の資料を参照 し て く だ さ い。 消費電力解析またはデバ ッ グ用の VCD のダ ン プ ° 「QuestaSim/ModelSim での VCD のダ ンプ」 ° 「IES での VCD ダ ンプ」 ° 「VCSでの VCD のダ ンプ」 QuestaSim/ModelSim での VCD のダ ン プ QuestaSim/ModelSim では、 VCD コ マ ン ド を使用 し て、 VCD フ ァ イ ルを ダ ンプ し ます。 1. VCD フ ァ イ ルを開 き ます。 vcd file my_vcdfile.vcd 2. ダ ンプす る 範囲ま たは信号を指定 し ます。 vcd add <hdl_objects> 3. 特定時間 (ま たは run -all)、 シ ミ ュ レーシ ョ ン を実行 し ます。 各 コ マ ン ド の使用方法や詳細については、 ModelSim の資料 [参照 13] を参照 し て く だ さ い。 DO フ ァ イルの例 vcd file my_vcdfile.vcd vcd add -r tb/fpga/* run 500us quit IES での VCD ダ ン プ 1. 次の コ マ ン ド を実行す る と 、vcddb と い う 名前の VCD デー タ ベース が開き ます。 フ ァ イ ル名は verilog.dump です。 -timescale オプシ ョ ン を使用す る と 、 VCD フ ァ イ ルの $timescale 値が 1ns に設定 さ れ ま す。 VCD フ ァ イ ルの値が 1ns に変わ り ます。 database -open -vcd vcddb -into verilog.dump -default -timescale ns 2. 次の probe コ マ ン ド は、 ス コ ープの top.counter のすべてのポー ト にプ ロ ーブ を作成 し ます。 デー タ はデフ ォ ル ト の VCD デー タ ベース に送信 さ れます。 probe -create -vcd top.counter -ports 3. シ ミ ュ レーシ ョ ン を実行 し ます。 VCSでの VCD のダ ン プ VCS では、dumpvar コ マ ン ド を使用 し て VCD フ ァ イ ルを生成する こ と がで き ます。 フ ァ イ ル名お よ び イ ン ス タ ン ス 名を指定 し ます (デフ ォ ル ト では階層全体にな り ます)。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 122 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 vcs +vcs+dumpvars+test.vcd IP のシ ミ ュ レーシ ョ ン 次の例では、 accum_0.xci がザ イ リ ン ク ス IP カ タ ロ グか ら 生成 さ れた IP です。 シ ミ ュ レーシ ョ ン を次の コ マ ン ド を使用 し て実行 し ます。 set_property target_simulator VCS [current_project] set_property compxlib.compiled_library_dir <compiled_library_location> launch_simulation -noclean_dir -of_objects [get_files accum_0.xci] Verilog UNIFAST ラ イ ブ ラ リ の使用 UNIFAST モデルを使用 し てシ ミ ュ レー ト す る には、 次の 2 つの方法があ り ます。 方法 1 : すべての UNIFAST モデルを使用 し てシ ミ ュ レーシ ョ ンする のに推奨 さ れ る 方法です。 [Simulation Settings] を ク リ ッ ク し て [Enable fast simulation models] チ ェ ッ ク ボ ッ ク ス をオンに し て、Vivado プ ロ ジ ェ ク ト 環境の ModelSim で UNIFAST がサポー ト さ れ る よ う に し ます。 詳細は、 18 ページの 「UNIFAST ラ イ ブ ラ リ 」 を参 照 し て く だ さ い。 方法 2 : 上級ユーザー用で、 UNIFAST モデル と 一緒に使用す る モジ ュ ールを指定 し ます。 こ の方法については、 19 ページの 「方法 2 : 特定 UNIFAST モジ ュ ールの使用」 を参照 し て く だ さ い。 AXI バス フ ァ ン ク シ ョ ン モデルを使用 し たデザイ ン のシ ミ ュ レーシ ョ ン AXI バス フ ァ ン ク シ ョ ン モデル (BFM) は、使用前に AXI BFM ラ イ セ ン ス があ る こ と を確認す る 、ラ イ セ ン ス チ ェ ッ ク を実行 し ます。 AXI BFM がデザ イ ンにあ る 場合、 ラ イ セ ン ス パ ス を参照す る ため、 次の追加ス テ ッ プが実行 さ れ ます。 1. 次の構文を使用 し て LD_LIBRARY_PATH 環境変数を設定 し ます。 setenv LD_LIBRARY_PATH $XILINX_VIVADO/lib/lnx64.o/:$LD_LIBRARY_PATH 2. VCS オプシ ョ ン フ ァ イ ルに次のオプシ ョ ン を追加 し ます。 "-load $XILINX_VIVADO/lib/lnx64.o/libxil_vcs.so:xilinx_register_systf" ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 123 第 8 章 : サー ド パーテ ィ シ ミ ュ レー タ の使用 統合 さ れたシ ミ ュ レーシ ョ ンの実行中のカ ス タ ム DO フ ァ イルの使用 Vivado IDE は、 起動のたびにシ ミ ュ レーシ ョ ン デ ィ レ ク ト リ を削除 し 、 新 し いデ ィ レ ク ト リ を作成 し ます。 そ こ で、 カ ス タ ムの DO フ ァ イ ルま たは UDO フ ァ イ ルを使用 し てい る 場合は、 それを シ ミ ュ レーシ ョ ン デ ィ レ ク ト リ 以外の 場所に移動 さ せて、 シ ミ ュ レー タ がその フ ァ イ ルを ポ イ ン ト す る よ う に し て く だ さ い。 次の コ マ ン ド を使用 し て、 カ ス タ ムの DO フ ァ イ ルま たは UDO フ ァ イ ルのデ ィ レ ク ト リ を指定 し ます。 QuestaSim/ModelSim set_property MODELSIM.CUSTOM_DO <Customized do file name> [get_filesets sim_1] set_property MODELSIM.CUSTOM_UDO <Customized udo file name> [get_filesets sim_1] IES set_property IES.CUSTOM_DO <Customized do file name> [get_filesets sim_1] set_property IES.CUSTOM_UDO <Customized udo file name> [get_filesets sim_1] VCS set_property VCS.CUSTOM_DO <Customized do file name> [get_filesets sim_1] set_property VCS.CUSTOM_UDO <Customized udo file name> [get_filesets sim_1] シ ミ ュ レー タ 別の run デ ィ レ ク ト リ の生成 Vivado IDE は、 シ ミ ュ レー タ を変更 し た と し て も 、 デフ ォ ル ト で同 じ デ ィ レ ク ト リ に実行フ ァ イ ルを生成 し ます。 デ ィ レ ク ト リ はシ ミ ュ レー タ 別に作成す る こ と がで き ます。次の Tcl コ マ ン ド を使用 し てデ ィ レ ク ト リ を生成 し ます。 set_param project.addSimulatorDirForUnifiedSim 1 Vivado IDE を起動 し た直後に こ の コ マ ン ド を設定 し て く だ さ い。init.tcl フ ァ イ ルに こ の コ マ ン ド を含めてお く と よ いで し ょ う 。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 124 付録 A : Vivado シ ミ ュ レー タ の Tcl コ マ ン ド の値の規則 付録 A Vivado シ ミ ュ レー タ の Tcl コ マ ン ド の値の 規則 概要 こ の付録には、 Tcl コ マ ン ド の add_force お よ び set_value の両方に適用 さ れ る 値の規則が含まれます。 文字列の値の解釈 文字列の値は、 HDL オブジ ェ ク ト の宣言型 と -radix コ マ ン ド ラ イ ン オプシ ョ ンで決ま り ます。 -radix を使用す る と 、 HDL オブジ ェ ク ト 型で決定 さ れたデフ ォ ル ト の基数が常に上書 き さ れます。 • logic 型の HDL オブジ ェ ク ト の場合、 値は or で、 1 次元配列の logic 型の場合、 値は指定 し た基数の桁数の文字列 です。 ° 文字列の指定す る ビ ッ ト が予測 さ れ る 型 よ り も 小 さ い場合、 文字列はその型の長 さ に一致す る よ う に暗示的 にゼ ロ 拡張 (符号拡張ではない) にな り ます。 ° 文字列の指定す る ビ ッ ト が予測 さ れ る がた よ り も 大 き い場合、 MSB 側の余分ビ ッ ト が 0 にな っ ていない と 、 サ イ ズの不一致エ ラ ーにな り ます。 た と えば、 基数が 16 進数で 6 ビ ッ ト の logic 配列を使用す る 場合、 値 3F は 8 ビ ッ ト (16 進数の桁ご と に 4 ビ ッ ト ) にな り ます。 こ れは、 2 進数では 0011 1111 です。 し か し 、 3 の う ち上位 2 ビ ッ ト が 0 なので、 値は HDL オブジ ェ ク ト に代入で き ます。反対に、7F の場合、上位 2 ビ ッ ト が 0 ではないので、エ ラ ーにな り ます。 ° scalar (array ま たは record ではない) の logic の HDL オブジ ェ ク ト の暗示的長 さ は 1 ビ ッ ト です。 ° a [left:right] (Verilog) ま たは a(left TO/DOWNTO right) と 宣言 さ れ る logic 配列の場合、一番左の値のビ ッ ト (拡 張/切 り 捨て後) が a[left] に代入 さ れ、 一番右のビ ッ ト が a[right] に代入 さ れます。 Vivado Design Suite シ ミ ュ レーシ ョ ン ロ ジ ッ ク logic は、 HDL で定義 さ れ る 概念ではあ り ませんが、 Vivado® シ ミ ュ レー タ で使用 さ れ る 発見的な も のです。 • Verilog オブジ ェ ク ト は、 暗示的な Verilog の bit 型の場合は wire お よ び reg オブジ ェ ク ト や整数、 時間を含めた logic 型の一部 と し て考え ら れます。 • VHDL オブジ ェ ク ト は、 オブジ ェ ク ト 型が bit、 std_logic、 ま たは列挙型 (列挙子が std_logic の列挙型のサブセ ッ ト で少な く と も 0 お よ び 1 が含ま れ る ) の場合、 ま たはオブジ ェ ク ト の型が こ の よ う な型の 1 次元配列であ る 場 合は、 logic 型の一部 と し て考え ら れます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 125 付録 A : Vivado シ ミ ュ レー タ の Tcl コ マ ン ド の値の規則 • VHDL 列挙型の HDL オブジ ェ ク ト の場合、値は列挙子文字列のいずれかにな り ます。 列挙子が文字ではない場合 シ ン グル ク ォーテーシ ョ ン (') は含め ません。 基数は無視 さ れます。 • 整数型の VHDL オブジ ェ ク ト の場合、 その型の範囲内で値は符号付 き の 10 進数の整数にで き ます。 基数は無視 さ れます。 • VHDL お よ び Verilog の浮動小数点型の場合、 値は浮動小数点にな り ます。 基数は無視 さ れます。 • すべての型の HDL オブジ ェ ク ト で Tcl コ マ ン ド set に よ る 値の設定はサポー ト さ れません。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 126 付録 B Vivado シ ミ ュ レー タ の混合言語サポー ト お よび例外 概要 Vivado® Integrated Design Environment (IDE) では、 次の言語がサポー ト さ れます。 • VHLD の場合は、 『IEEE 規格 VHDL 言語 リ フ ァ レ ン ス マニ ュ アル (IEEE-STD-1076-1993) [参照 1] を参照 し て く だ さ い。 • Verilog の場合は、 『IEEE 規格 Verilog ハー ド ウ ェ ア記述言語 (IEEE-STD-1364-2001) [参照 2] を参照 し て く だ さ い。 • 合成可能な SystemVerilog サブセ ッ ト の場合は、『IEEE 規格 Verilog ハー ド ウ ェ ア記述言語 (IEEE-STD-1800-2009)』 [参照 3] を参照 し て く だ さ い。 • IEEE P1735 暗号化の場合は、 『Recommended Practice for Encryption and Management of Electronic Design Intellectual Property (IP)』 (IEEE-STD-P1735) [参照 5] を参照 し て く だ さ い。 こ の付録では、 Vivado シ ミ ュ レー タ で適用 さ れ る 混合言語 と 、 Verilog、 SystemVerilog、 VHDL サポー ト に対す る 例外 について説明 し ます。 混合言語シ ミ ュ レーシ ョ ンの使用 Vivado シ ミ ュ レー タ では、 混合言語プ ロ ジ ェ ク ト フ ァ イ ルお よ び混合言語シ ミ ュ レーシ ョ ンがサポー ト さ れ る ので、 Verilog モジ ュ ールを VHDL デザ イ ンに含めた り 、 VHDL モジ ュ ールを Verilog/System Verilog (SV) デザ イ ンに含めた り で き ます。 シ ミ ュ レーシ ョ ン での混合言語の制限 • VHDL デザ イ ンには Verilog/System Verilog (SV) モジ ュ ールを イ ン ス タ ン シエー ト で き 、 Verilog/SV デザ イ ンには VHDL コ ン ポーネ ン ト を イ ン ス タ ン シエー ト で き ます。Verilog/SV モジ ュ ール と VHDL コ ン ポーネ ン ト の結合に は、 コ ン ポーネ ン ト イ ン ス タ ン シエーシ ョ ン ベース のデフ ォ ル ト の結合が使用 さ れ ます。 VHDL プ ロ セ ス文で Verilog フ ァ ン ク シ ョ ン を呼び出す と い っ た よ う な VHDL と Verilog の混合使用はサポー ト さ れません。 • VHDL 型、 ジ ェ ネ リ ッ ク 、 ポー ト のサブセ ッ ト が Verilog/SV モジ ュ ールへのバ ウ ン ダ リ 上で使用で き ます。 同様 に、 Verilog/SV 型、 パ ラ メ ー タ ー、 ポー ト のサブセ ッ ト が VHDL コ ン ポーネ ン ト に対す る バ ウ ン ダ リ 上で使用で き ます。 詳細は、 130 ページの表 B-2を参照 し て く だ さ い。 重要 : Verilog オブジ ェ ク ト への VHDL レ コ ー ド オブジ ェ ク ト の接続はサポー ト さ れてい ませんが、 サポー ト さ れ る がたの VHDL レ コ ー ド エ レ メ ン ト は互換性のあ る Verilog ポー ト に接続で き ます。 • Verilog/SV 階層参照では VHDL ユニ ッ ト は参照で き ず、 VHDL 拡張/選択名では Verilog/SV ユニ ッ ト は参照で き ません。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 127 付録 B : Vivado シ ミ ュ レー タ の混合言語サポー ト および例外 ただ し 、 Verilog/SV ユニ ッ ト は、 Verilog 階層 リ フ ァ レ ン ス を使用する と 、 中間的な VHDL イ ン ス タ ン ス を介 し て 別の Verilog/SV ユニ ッ ト に伝搬で き ます。 次の コ ー ド 例の場合、 I1.const1 は Verilog/SV モ ジ ュ ールの top で参照 さ れ る VHDL 定数です。 こ の タ イ プ の Verilog/SV 階層 リ フ ァ レ ン ス は、 Vivado シ ミ ュ レ ー タ では使用で き ま せん。 た だ し 、 I1.I2.data は Verilog/SV モ ジ ュ ールの top 内で使用で き ます。 こ の場合、 I2 は Verilog/SV イ ン ス タ ン ス で、 I1 は VHDL イ ン ス タ ン ス です。 -- Bottom Verilog Module module bot; wire data; endmodule // Intermediate VHDL Entity entity mid is end entity mid; architecture arch of mid is constant const1 : natural := 10; begin bot I2(); end architecture arch; -- Top Verilog Module module top(input in1,output reg out1); mid I1(); always@(in1) begin // This hierarchical reference into a VHDL instance is not allowed if(I1.const1 >= 10) out1 = in1; // This hierarchical reference into a Verilog instance traversing through a // VHDL instance is allowed if (I1.I2.data == 1)out1 = ~in1; end endmodule 混合言語シ ミ ュ レーシ ョ ン での重要な手順 1. 混合言語プ ロ ジ ェ ク ト のデザ イ ン ラ イ ブ ラ リ 内で VHDL コ ン ポーネ ン ト ま たは Verilog/SV モジ ュ ールの検索順 を指定で き ます (オプシ ョ ン)。 2. xelab -L を使用す る と 、 混合言語プ ロ ジ ェ ク ト のデザ イ ン ラ イ ブ ラ リ 内で VHDL コ ン ポーネ ン ト ま たは Verilog/SV モジ ュ ールの結合順を指定で き ます。 注記 : Verilog モジ ュ ール と 別の Verilog モジ ュ ールの結合に も 、-L で指定 し た ラ イ ブ ラ リ 検索順が使用 さ れます。 混合言語の結合 と 検索 VHDL コ ン ポーネ ン ト ま たは Verilog/SV モジ ュ ールに、 Verilog/SV モジ ュ ールを VHDL アーキ テ ク チ ャ に イ ン ス タ ン シエー ト す る には、 xelab コ マ ン ド を使用 し ます。 • まず、 イ ン ス タ ン シエー ト す る デザ イ ン ユニ ッ ト と し て同 じ 言語のユニ ッ ト を検索 し ます。 • 同 じ 言語のユニ ッ ト が見つか ら ない場合は、 xelab を使用 し 、 -L オプシ ョ ン で指定 し た ラ イ ブ ラ リ 内で両方の言 語のデザ イ ン ユニ ッ ト を検索 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 128 付録 B : Vivado シ ミ ュ レー タ の混合言語サポー ト および例外 こ の検索順は、 xelab コ マ ン ド ラ イ ン で ラ イ ブ ラ リ が表示 さ れ る 順序 と 同 じ です。 詳細は、 19 ページの 「方法 1 : 完 全 UNIFAST ラ イ ブ ラ リ (推奨)」 を参照 し て く だ さ い。 注記 : Vivado IDE を使用す る 場合、 ラ イ ブ ラ リ 検索順は自動的に指定 さ れます。 ユーザーは設定す る 必要がないので、 設定で き ません。 混合言語 コ ンポーネ ン ト のイ ン ス タ ン シ エーシ ョ ン 混合言語デザ イ ンの場合、 次のセ ク シ ョ ン で説明す る よ う に、 Verilog/SV モジ ュ ールを VHDL アーキ テ ク チ ャ に、 ま たは VHDL コ ン ポーネ ン ト を Verilog/SV モジ ュ ールに イ ン ス タ ン シエー ト で き ます。 ポー ト タ イ プが一致 し てい る か ど う かは、 130 ページの 「ポー ト マ ッ プお よ びサポー ト さ れ る ポー ト タ イ プ」 を参照 し て く だ さ い。 VHDL デザイ ン ユニ ッ ト への Verilog モ ジ ュ ールのイ ン ス タ ン シ エーシ ョ ン 1. VHDL コ ン ポーネ ン ト を イ ン ス タ ン シエー ト す る Verilog モジ ュ ール と 同 じ 名前で宣言 し ます。次は、その例です。 COMPONENT MY_VHDL_UNIT PORT ( Q : out STD_ULOGIC; D : in STD_ULOGIC; C : in STD_ULOGIC ); END COMPONENT; 2. 名前ま たは位置的な関連付け を使用 し 、 Verilog モジ ュ ールを イ ン ス タ ン シエー ト ます。 次は、 その例です。 UUT :MY_VHDL_UNIT PORT MAP( Q => O, D => I, C => CLK); Verilog/SV デザイ ン ユニ ッ ト への VHDL コ ンポーネン ト のイ ンス タ ン シエーシ ョ ン Verilog/SV デザ イ ン ユ ニ ッ ト に VHDL コ ン ポーネ ン ト を イ ン ス タ ン シ エー ト す る には、 VHDL コ ン ポーネ ン ト を Verilog/SV モジ ュ ールの よ う に イ ン ス タ ン シエー ト する 必要があ り ます。 次は、 その例です。 module testbench ; wire in, clk; wire out; FD FD1( .Q(Q_OUT), .C(CLK); .D(A); ); ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 129 付録 B : Vivado シ ミ ュ レー タ の混合言語サポー ト および例外 ポー ト マ ッ プおよびサポー ト さ れるポー ト タ イ プ 表 B-1 は、 サポー ト さ れ る ポー ト タ イ プ を リ ス ト し てい ます。 表 B‐1 : サポー ト さ れるポー ト タ イ プ VHDL 1 Verilog/SV 2 IN INPUT OUT OUTPUT INOUT INOUT 1. VHDL のバ ッ フ ァ お よ び リ ン ケージ ポー ト はサポー ト さ れません。 2. Verilog の双方向パ ス オプシ ョ ンへの接続はサポー ト さ れません。名前の付いていない Verilog ポー ト は混合デザ イ ンのバ ウ ン ダ リ では使用で き ません。 次の表は、 混合言語デザ イ ンのバ ウ ン ダ リ でサポー ト さ れ る ポー ト の VHDL お よ び Verilog デー タ 型を示 し てい ます。 表 B‐2 : サポー ト さ れる VHDL および Verilog デー タ 型 VHDL ポー ト Verilog ポー ト bit net std_logic net bit_vector vector net signed vector net unsigned vector net std_ulogic_vector vector net std_logic_vector vector net 注記 : Verilog 出力ポー ト の reg 型は、 混合言語バ ウ ン ダ リ でサポー ト さ れます。 バ ウ ン ダ リ 上では、 出力ポー ト reg が 出力ネ ッ ト ( ワ イ ヤ) ポー ト の よ う に処理 さ れます。 こ れ以外の型が混合言語バ ウ ン ダ リ で使用 さ れ る と 、 エ ラ ー と な り ます。 注記 : Vivado シ ミ ュ レ ー タ では、 混合 ド メ イ ン に イ ン ス タ ン シ エー ト さ れ る Verilog モ ジ ュ ールのポー ト マ ッ プで actual と し て レ コ ー ド エ レ メ ン ト がサポー ト さ れます。 VHDL ポー ト でサポー ト さ れ る こ れ ら の タ イ プ (表 B-2) はす べて レ コ ー ド エ レ メ ン ト と し て も サポー ト さ れます。 表 B‐3 : サポー ト さ れる SV お よび VHDL デー タ 型 SV デー タ 型 VHDL デー タ 型 Int bit_vector std_logic_Vector std_ulogic_vector signed unsigned byte bit_vector std_logic_Vector std_ulogic_vector ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 130 付録 B : Vivado シ ミ ュ レー タ の混合言語サポー ト および例外 表 B‐3 : サポー ト さ れる SV お よび VHDL デー タ 型 (Cont’d) SV デー タ 型 VHDL デー タ 型 signed unsigned shortint bit_vector std_logic_Vector std_ulogic_vector signed unsigned longint bit_vector std_logic_Vector std_ulogic_vector signed unsigned integer bit_vector std_logic_Vector std_ulogic_vector signed unsigned vector of bit(1D) bit_vector std_logic_Vector std_ulogic_vector signed unsigned vector of logic(1D) bit_vector std_logic_Vector std_ulogic_vector signed unsigned vector of reg(1D) bit_vector std_logic_Vector std_ulogic_vector ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 131 付録 B : Vivado シ ミ ュ レー タ の混合言語サポー ト および例外 表 B‐3 : サポー ト さ れる SV お よび VHDL デー タ 型 (Cont’d) SV デー タ 型 VHDL デー タ 型 signed unsigned logic/bit bit std_logic std_ulogic bit_vector std_logic_Vector std_ulogic_vector signed unsigned ジ ェ ネ リ ッ ク (パラ メ ー タ ー ) のマ ッ プ Vivado シ ミ ュ レー タ では、 次の VHDL ジ ェ ネ リ ッ ク タ イ プ (お よ び Verilog/System Verilog (SV) の対応する も の) がサ ポー ト さ れます。 • integer • real • string • boolean 注記 : こ れ以外のジ ェ ネ リ ッ ク 型が混合言語バ ウ ン ダ リ で使用 さ れ る と 、 エ ラ ー と な り ます。 VHDL および Verilog 値のマ ッ プ 表 B-4 は、 std_logic お よ び bit への Verilog ス テー ト のマ ッ プを リ ス ト し てい ます。 表 B‐4 : std_logic および bit へマ ッ プ さ れる Verilog ス テー ト Verilog std_logic bit Z Z 0 0 0 0 1 1 1 X X 0 注記 : Verilog の駆動電流は無視 さ れます。 VHDL には、 こ れに対応する マ ッ プがあ り ません。 表 B-5 は、 Verilog ス テー ト にマ ッ プ さ れ る VHDL 型 bit を リ ス ト し てい ます。 表 B‐5 : Verilog ス テー ト にマ ッ プ さ れる VHDL の bit bit Verilog 0 0 1 1 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 132 付録 B : Vivado シ ミ ュ レー タ の混合言語サポー ト および例外 表 B-6 は、 Verilog ス テー ト にマ ッ プ さ れ る VHDL 型 std_logic を リ ス ト し てい ます。 表 B‐6 : Verilog ス テー ト にマ ッ プ さ れる VHDL の std_logic std_logic Verilog U X X X 0 0 1 1 Z Z W X L 0 H 1 - X Verilog では大文字/小文字が区別 さ れ る ので、 コ ン ポーネ ン ト 宣言で使用す る 関連付けお よ び ロ ーカ ル ポー ト 名は Verilog ポー ト 名の大文字/小文字 と 一致 し てい る 必要があ り ます。 VHDL 言語サポー ト の例外 言語の コ ン ス ト ラ ク ト の中には、 Vivado シ ミ ュ レー タ でサポー ト さ れない も の も あ り ます。 表 B-7 は、 VHDL 言語サ ポー ト の例外を リ ス ト し てい ます。 . 表 B‐7 : VHDL 言語サポー ト の例外 サポー ト さ れる VHDL コ ン ス ト ラ ク ト 例外 abstract_literal 底付 き 定数 と し て表示 さ れ る 浮動小数点はサポー ト さ れ ま せん。 alias_declaration オブジ ェ ク ト 以外へのエ イ リ ア ス は通常、 特に次の場合サ ポー ト さ れません。 エ イ リ ア ス のエ イ リ ア ス subtype_indication な し のエ イ リ ア ス宣言 エ イ リ ア ス宣言のシ グナチ ャ alias_designator と し ての演算子シ ン ボル 演算子シ ン ボルのエ イ リ ア ス エ イ リ ア ス宣言 と し ての文字 リ テ ラ ル alias_designator alias_designator と し ての operator_symbol alias_designator と し ての character_literal association_element 結合エ レ メ ン ト の実際の ス ラ イ ス については、グ ロ ーバル、 ロ ーカルな固定範囲を使用で き ます。 attribute_name 接頭語の後のシ グナチ ャ はサポー ト さ れません。 binding_indication entity_aspect を 使用 し な い binding_indication はサ ポー ト さ れません。 bit_string_literal 空の bit_string_literal (" ") はサポー ト さ れません。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 133 付録 B : Vivado シ ミ ュ レー タ の混合言語サポー ト および例外 表 B‐7 : VHDL 言語サポー ト の例外 (Cont’d) サポー ト さ れる VHDL コ ン ス ト ラ ク ト 例外 block_statement guard_expression はサポー ト さ れません。 た と えば、 保護付 き ブ ロ ッ ク 、 保護付 き 信号、 保護付 き タ ーゲ ッ ト お よ び保 護付 き 代入はサポー ト さ れません。 choice case 文での choice と し ての aggregate の使用はサポー ト さ れ ません。 concurrent_assertion_statement postponed はサポー ト さ れてい ません。 concurrent_signal_assignment_statement postponed はサポー ト さ れてい ません。 concurrent_statement wait 文を含む並列手続き 呼び出 し はサポー ト さ れません。 conditional_signal_assignment オプシ ョ ン の一部で あ る キー ワ ー ド guarded は、 保護付 き 信号代入がサポー ト さ れないため、 サポー ト さ れません。 configuration_declaration コ ン フ ィ ギ ュ レーシ ョ ン で使用 さ れ る generate イ ンデ ッ ク ス の ロ ーカルではない固定範囲はサポー ト さ れません。 entity_class エン テ ィ テ ィ ク ラ ス と し ての リ テ ラ ル、 ユニ ッ ト 、 フ ァ イ ル、 グループはサポー ト さ れません。 entity_class_entry グ ループ テ ン プ レ ー ト と 共に使用す る 目的ではオプ シ ョ ンの < > はサポー ト さ れません。 file_logical_name file_logical_name では、 ワ イ ル ド カー ド を使用 し て ス ト リ ン グ値を評価で き ますが、 リ テ ラ ル文字列お よ び識別子のみ が フ ァ イ ル名 と し て使用で き ます。 function_call function_call 内のパ ラ メ ー タ ー関連付けでは、 ス ラ イ ス、 イ ン デ ッ ク ス お よ び フ ォ ーマルの選択がサ ポー ト さ れ ま せ ん。 instantiated_unit ダ イ レ ク ト コ ン フ ィ ギ ュ レ ー シ ョ ン イ ン ス タ ン シ エー シ ョ ンはサポー ト さ れません。 mode リ ン ケージお よ びバ ッ フ ァ ポー ト は完全にはサ ポー ト さ れません。 options guarded はサポー ト さ れません。 primary primary が使用 さ れた場所で、 ア ロ ケー タ ーが拡張 さ れ ま す。 procedure_call procedure_call 内のパ ラ メ ー タ ー関連付けでは、 ス ラ イ ス、 イ ンデ ッ ク スお よ びフ ォーマルの選択がサポー ト さ れ ませ ん。 process_statement postponed プ ロ セ ス はサポー ト さ れません。 selected_signal_assignment オプシ ョ ン の一部で あ る キー ワ ー ド guarded は、 保護付 き 信号代入がサポー ト さ れないため、 サポー ト さ れません。 signal_declaration signal_kind はサポー ト さ れ ま せん。 signal_kind はサポー ト さ れない保護付 き 信号を宣言す る ために使用 さ れます。 subtype_indication 分解 さ れた複合体 (配列お よ びレ コ ー ド ) のサブ タ イ プはサ ポー ト さ れません。 waveform unaffected はサポー ト さ れてい ません。 waveform_element 空の waveform エ レ メ ン ト は、保護付き 信号にのみ関連する ため、 サポー ト さ れません。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 134 付録 B : Vivado シ ミ ュ レー タ の混合言語サポー ト および例外 Verilog 言語サポー ト の例外 表 B-8 では、 Verilog の言語サポー ト の例外について リ ス ト し ます。 表 B‐8 : Verilog 言語サポー ト の例外 Verilog コ ン ス ト ラ ク ト 例外 コ ンパイ ラ ー指示子の コ ン ス ト ラ ク ト `unconnected_drive サポー ト な し `nounconnected_drive サポー ト な し 属性 attribute_instance サポー ト な し attr_spec サポー ト な し attr_name サポー ト な し プ リ ミ テ ィ ブ ゲー ト およびス イ ッ チ タ イ プ cmos_switchtype サポー ト な し mos_switchtype サポー ト な し pass_en_switchtype サポー ト な し 生成 さ れた イ ン ス タ ン シ エーシ ョ ン generated_instantiation ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 module_or_generate_item 選択肢はサポー ト さ れません。 規格 ( 『IEEE 規格 Verilog ハー ド ウ ェ ア記述言語 (IEEE 1364-2001) セ ク シ ョ ン 13.2 [参照 2]) か ら の出力 generate_item_or_null ::= generate_conditonal_statement | generate_case_statement | generate_loop_statement | generate_block | module_or_generate_item シ ミ ュ レー タ でサポー ト さ れ る 出力 generate_item_or_null ::= generate_conditional_statement| generate_case_statement | generate_loop_statement | generate_blockgenerate_condition japan.xilinx.com 135 付録 B : Vivado シ ミ ュ レー タ の混合言語サポー ト および例外 表 B‐8 : Verilog 言語サポー ト の例外 (Cont’d) Verilog コ ン ス ト ラ ク ト genvar_assignment 例外 部分的にサポー ト 。 すべての generate ブ ロ ッ ク に名前を付け る 必要があ り ます。 規格 ( 『IEEE 規格 Verilog ハー ド ウ ェ ア記述言語 (IEEE 1364-2001) セ ク シ ョ ン 13.2 [参照 2]) か ら の出力 generate_block ::= begin [ : generate_block_identifier ] { generate_item } end シ ミ ュ レー タ でサポー ト さ れ る 出力 generate_block ::= begin: generate_block_identifier { generate_item } end ソ ース テキス ト コ ン ス ト ラ ク ト ラ イ ブ ラ リ ソ ース テキス ト library_text サポー ト な し library_descriptions サポー ト な し library_declaration サポー ト な し include_statement ラ イ ブ ラ リ マ ッ プ フ ァ イ ル内の include 文を参照 し ます ( 『IEEE 規格 Verilog ハー ド ウ ェ ア記述言語』 (IEEE 1364-2001) セ ク シ ョ ン 13.2 [参 照 2])。 こ れは、 `include コ ンパ イ ラ ー指示子は参照 し ません。 シス テム タ イ ミ ング チ ェ ッ ク コ マ ン ド $skew_timing_check サポー ト な し $timeskew_timing_check サポー ト な し $fullskew_timing_check サポー ト な し $nochange_timing_check サポー ト な し シス テム タ イ ミ ング チ ェ ッ ク コ マ ン ド の引数 checktime_condition サポー ト な し PLA モデ リ ング タ ス ク $async$nand$array サポー ト な し $async$nor$array サポー ト な し $async$or$array サポー ト な し $sync$and$array サポー ト な し $sync$nand$array サポー ト な し $sync$nor$array サポー ト な し $sync$or$array サポー ト な し $async$and$plane サポー ト な し $async$nand$plane サポー ト な し ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 136 付録 B : Vivado シ ミ ュ レー タ の混合言語サポー ト および例外 表 B‐8 : Verilog 言語サポー ト の例外 (Cont’d) Verilog コ ン ス ト ラ ク ト 例外 $async$nor$plane サポー ト な し $async$or$plane サポー ト な し $sync$and$plane サポー ト な し $sync$nand$plane サポー ト な し $sync$nor$plane サポー ト な し $sync$or$plane サポー ト な し Value Change Dump (VCD) フ ァ イル $dumpportson $dumpports $dumpportsoff $dumpportsflush $dumpportslimit $vcdplus ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 サポー ト な し japan.xilinx.com 137 付録 C : Vivado シ ミ ュ レー タ ク イ ッ ク リ フ ァ レ ン ス ガ イ ド 付録 C Vivado シ ミ ュ レー タ ク イ ッ ク リ フ ァ レ ン ス ガイ ド 概要 表 C-1 は、 よ く 使用 さ れ る Vivado® シ ミ ュ レー タ コ マ ン ド の ク イ ッ ク リ フ ァ レ ン スお よ び例を示 し てい ます。 . 表 C‐1 : 標準モー ド : コ マ ン ド ラ イ ンか らの解析、 エ ラ ボレー ト 、 シ ミ ュ レーシ ョ ンの実行 HDL フ ァ イルの解析 Vivado シ ミ ュ レー タ では、 Verilog、 SystemVerilog お よ び VHDL の 3 つの タ イ プの HDL フ ァ イ ルがサポー ト さ れて い ます。 こ れ ら のサポー ト さ れ る フ ァ イ ルは XVHDL お よ び XVLOG コ マ ン ド を使用 し て解析で き ます。 xvhdl file1.vhd file2.vhd VHDL フ ァ イルの解 xvhdl -work worklib file1.vhd file2.vhd 析 xvhdl -prj files.prj Verilog フ ァ イルの 解析 SystemVerilog フ ァ イルの解析 xvlog file1.v file2.v xvlog -work worklib file1.v file2.v xvlog -prj files.prj xvlog -sv file1.v file2.v xvlog -work worklib -sv file1.v file2.v xvlog -prj files.prj 注記 : PRJ フ ァ イ ル形式に関す る 詳細は、 第 7 章の 「プ ロ ジ ェ ク ト フ ァ イ ル (.prj) の構文」 を参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 138 付録 C : Vivado シ ミ ュ レー タ ク イ ッ ク リ フ ァ レ ン ス ガ イ ド 表 C‐1 : 標準モー ド : コ マ ン ド ラ イ ンか らの解析、 エ ラ ボレー ト 、 シ ミ ュ レーシ ョ ンの実行 (続き) その他の xvlog および xvhdl オプ シ ョ ン コ マ ン ド オプシ ョ ンの全 リ ス ト については、 96 ページの表 7-2を参照 し て く だ さ い。 次は、 xvlog お よ び xvhdl の主なオプシ ョ ンです。 xvlog お よび xvhdl の主なオプ シ ョ ン 主なオプシ ョ ン 適用先 「-d [define] <name>[=<val>]」 xvlog 「-h [-help]」 xvlog, xvhdl 「-i [include] <directory_name>」 xvlog 「-initfile <init_filename>」 xvlog, xvhdl 「-L [-lib] <library_name> [=<library_dir>]」 xvlog, xvhdl 「-log <filename>」 xvlog, xvhdl 「-prj <filename>」 xvlog, xvhdl 「-relax」 xvhdl, vlog 「-work <library_name> [=<library_dir>]」 xvlog, xvhdl 実行可能なスナ ッ プ シ ョ ッ ト のエ ラ ボレー ト および生成 解析後は、 xelab コ マ ン ド を使用 し てデザ イ ン を Vivado シ ミ ュ レー タ でエ ラ ボ レー ト で き ます。 xelab では、 実行可 能な ス ナ ッ プシ ョ ッ ト が生成 さ れます。 注記 : 解析段階を飛ば し て、 直接 xelab コ マ ン ド を実行 し て、 PRJ フ ァ イ ルを使用 し ない よ う にす る こ と も で き ます。 xelab で はフ ァ イ ルの解析に XVLOG お よ び XVHDL が使用 さ れます。 xelab top1 top2 2 つの最上位デザ イ ン ユニ ッ ト (top1 お よ び top2) を含むデ ザ イ ン をエ ラ ボ レー ト し ます。 こ の例では、 デザ イ ン ユニ ッ ト が /work ラ イ ブ ラ リ に コ ンパ イ ル さ れます。 xelab lib1.top1 lib2.top2 2 つの最上位デザ イ ン ユニ ッ ト (top1 お よ び top2) を含むデ ザ イ ン をエ ラ ボ レー ト し ます。 次の例では、 デザ イ ン ユニ ッ ト が lib1 お よ び lib2 にそれぞれ コ ンパ イ ル さ れます。 xelab top1 top2 -prj files.prj 2 つの最上位デザ イ ン ユニ ッ ト (top1 お よ び top2) を含むデ ザ イ ン をエ ラ ボ レー ト し ます。 こ の例では、 デザ イ ン ユニ ッ ト が /work ラ イ ブ ラ リ に コ ンパ イ ル さ れ ます。 files.prj フ ァ イ ルには、 次の よ う な コ ー ド が含まれます。 verilog <libraryName> <VerilogDesignFileName> vhdl <libraryName> <VHDLDesignFileName> sv <libraryName> <SystemVerilogDesignFileName> xelab top1 top2 -s top 2 つの最上位デザ イ ン ユニ ッ ト (top1 お よ び top2) を含むデ ザ イ ン をエ ラ ボ レー ト し ます。 こ の例では、 デザ イ ン ユニ ッ ト が /work ラ イ ブ ラ リ に コ ンパ イ ル さ れます。コ ンパ イ ルが 終わ っ た ら 、xelab に よ り top と い う 名前の実行可能な スナ ッ プシ ョ ッ ト が生成 さ れます。 -s top オプシ ョ ン を付けない場 合、 xelab で は すべ て の ユ ニ ッ ト 名 を ま と め て ス ナ ッ プ シ ョ ッ ト が作成 さ れます。 使用法 コ マ ン ド ラ イ ン ヘルプ お よ び xelab オ プ シ ョ ン xelab -help 96 ページの 「xelab、 xvhd、 xvlog コ マ ン ド オプシ ョ ン」 シ ミ ュ レーシ ョ ンの実行 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 139 付録 C : Vivado シ ミ ュ レー タ ク イ ッ ク リ フ ァ レ ン ス ガ イ ド 表 C‐1 : 標準モー ド : コ マ ン ド ラ イ ンか らの解析、 エ ラ ボレー ト 、 シ ミ ュ レーシ ョ ンの実行 (続き) 解析、 エ ラ ボ レー ト 、 コ ンパ イ ル段階が問題な く 終了 し た ら 、 xsim に よ り 、 シ ミ ュ レーシ ョ ン を実行す る 実行可能 な ス ナ ッ プシ ョ ッ ト が生成 さ れます。 使用法 xsim top -R デザ イ ン を最後ま でシ ミ ュ レーシ ョ ン し ます。 xsim top -gui Vivado シ ミ ュ レー タ の GUI の起動 し ます。 xsim top Vivado Design Suite コ マ ン ド プ ロ ン プ ト を Tcl モー ド で開 き ます。 こ こ か ら 次のオプシ ョ ン を実行で き ます。 run -all run 100 ns 重要な シ ョ ー ト カ ッ ト 解析、 エ ラ ボ レーシ ョ ン、 実行フ ァ イ ル生成、 シ ミ ュ レーシ ョ ン を 1 ~ 3 段階で実行で き ます。 3 段階 xvlog bot.v xvhdl top.vhd xelab work.top -s top xsim top -R xelab -prj my_prj.prj work.top -s top xsim top -R 2 段階 my_prj.prj フ ァ イ ルには、 次が含まれます。 verilog work bot.v vhdl work top.vhd 1 段階 xelab -prj my_prj.prj work.top -s top -R my_prj.prj フ ァ イ ルには、 次が含まれます。 verilog work bot.v vhdl work top.vhd Vivado シ ミ ュ レ ー シ ョ ンの Tcl コ マ ン ド 次は、 よ く 使用 さ れ る Tcl コ マ ン ド です。 すべての リ ス ト については、 Tcl コ ン ソ ールで次の コ マ ン ド を入力 し て く だ さ い。 • load_features simulator • help -category simulation Tcl コ マ ン ド の詳細は、 次を入力 し て く だ さ い。 -help <Tcl_command> ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 140 付録 C : Vivado シ ミ ュ レー タ ク イ ッ ク リ フ ァ レ ン ス ガ イ ド 表 C‐1 : 標準モー ド : コ マ ン ド ラ イ ンか らの解析、 エ ラ ボレー ト 、 シ ミ ュ レーシ ョ ンの実行 (続き) よ く 使用 さ れる Vivado シ ミ ュ レー タ の Tcl コ マ ン ド add_bp HDL ソ ース の行にブ レー ク ポ イ ン ト を追加 し ます。 Tcl コ マ ン ド 例は、 64 ページ を参照 し て く だ さ い。 add_force 信号、 ワ イ ヤ、 ま たはレ ジ ス タ を特定の値に強制的に設定 し ます。 Tcl コ マ ン ド 例は、 68 ページ を参照 し て く だ さ い。 current_time now 現在のシ ミ ュ レーシ ョ ン時間を レ ポー ト し ます。 Tcl ス ク リ プ ト での こ の コ マ ン ド の例は、 107 ページの 「current_time」 を参照 し て く だ さ い。 current_scope 現在の作業中の HDL ス コ ープを レ ポー ト ま たは設定 し ます。 詳細は、 34 ページの 「その他の ス コ ープお よ び ソ ース オプ シ ョ ン」 を参照 し て く だ さ い。 get_objects 1 つま たは複数の HDL ス コ ープで、 指定 し たパ タ ーン ご と に HDL オブジ ェ ク ト の リ ス ト を取得 し ます。 た と えば、 コ マ ン ド の使用方法については、 74 ページの 「log_saif [get_objects -filter {type == in_port || type == out_port || type == inout_port || type == port } /tb/UUT/* ]」 を参照 し て く だ さ い。 get_scopes 子 HDL ス コ ープの リ ス ト を取得 し ます。 詳細は、 34 ページ の 「その他の ス コ ープお よ び ソ ース オプシ ョ ン」 を参照 し て く だ さ い。 get_value 選択し た HDL オブジ ェ ク ト (変数、 信号、 ワ イ ヤ、 レ ジ ス タ) の現在の値を取得し ます。 詳細は、 Tcl コ ン ソ ールに get_value -help と 入力する と 取得で き ます。 launch_simulation Vivado シ ミ ュ レー タ を使用 し てシ ミ ュ レーシ ョ ン を実行 し ま す。 remove_bps シ ミ ュ レーシ ョ ンか ら ブ レー ク ポ イ ン ト を削除 し ます。 Tcl コ マ ン ド 例は、 65 ページ を参照 し て く だ さ い。 report_drivers HDL ワ イ ヤ ま たは信号オブジ ェ ク ト の ド ラ イ バー と 現在の 駆動値を表示 し ます。 詳細は74 ページの 「Tcl コ マ ン ド report_drivers の使用」 を参照 し て く だ さ い。 report_values 指定 し た HDL オブジ ェ ク ト (変数、 信号、 ワ イ ヤ、 ま たはレ ジ ス タ ) の現在のシ ミ ュ レーシ ョ ン値を表示 し ます。 Tcl コ マ ン ド 例は、 34 ページ を参照 し て く だ さ い。 restart シ ミ ュ レーシ ョ ン をデザ イ ン を読み込んだ後の よ う な状態に 戻 し 、 時間を 0 に設定 し ます。 詳細は、 29 ページ を参照 し て く だ さ い。 set_value HDL オブジ ェ ク ト (変数、 信号、 ワ イ ヤ、 ま たはレ ジ ス タ ) を特定の値に設定 し ます。 詳細は付録 A 「Vivado シ ミ ュ レー タ の Tcl コ マ ン ド の値の規則」 を参照 し て く だ さ い。 step シ ミ ュ レーシ ョ ン を次の文に進め ます。 63 ページの 「シ ミ ュ レーシ ョ ンの ス テ ッ プ実行」 を参照 し て く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 141 付録 D : Vivado シ ミ ュ レー タ でサポー ト さ れる SystemVerilog コ ン ス ト ラ ク ト 付録 D Vivado シ ミ ュ レー タ でサポー ト さ れる SystemVerilog コ ン ス ト ラ ク ト 概要 Vivado® シ ミ ュ レー タ では、 合成可能な SystemVerilog RTL の一部がサポー ト さ れます。 その リ ス ト は、 表 D-1 を参照 し て く だ さ い。 特定の フ ァ イルで SystemVerilog を使用 Vivado シ ミ ュ レー タ は、 デフ ォ ル ト で、 Verilog 2001 構文の V フ ァ イ ル、 SystemVerilog 構文の SV フ ァ イ ルを コ ンパ イ ル し ます。 Vivado IDE で特定の V フ ァ イ ルに SystemVerilog を使用する には、 次の手順に従い ます。 1. フ ァ イ ルを右 ク リ ッ ク し て [Set File Type] を ク リ ッ ク し ます (次の図を参照)。 X-Ref Target - Figure D-1 図 D‐1 : [Set File Type] コ ン テキス ト メ ニ ュ ー ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 142 付録 D : Vivado シ ミ ュ レー タ でサポー ト さ れる SystemVerilog コ ン ス ト ラ ク ト 2. 次の図に示す よ う に、[Set Type] で、[File type] を [Verilog] か ら [SystemVerilog] に変更 し 、[OK] を ク リ ッ ク し ます。 X-Ref Target - Figure D-2 図 D‐2 : [Source Node Properties] → [Set File Type] ま たは、 Tcl コ ン ソ ールで次の Tcl コ マ ン ド を使用する こ と も で き ます。 set_property file_type SystemVerilog [get_files <filename>.v] ス タ ン ド ア ロ ン または PRJ モー ド での SystemVerilog の実行 ス タ ン ド ア ロ ン モー ド SystemVerilog フ ァ イ ルを読み込む場合は、 次の よ う に xvlog に -sv オプシ ョ ン を使用で き ます。 xvlog -sv <Design file list> xvlog -sv -work <LibraryName> <Design File List> xvlog -sv -f <FileName> [Where FileName contain path of test cases] PRJ モー ド Vivado シ ミ ュ レー タ を prj ベース の フ ロ ーで実行す る 場合は、verilog ま たは vhdl の よ う に フ ァ イ ル タ イ プに sv を使用 し ます。 xvlog -prj <prj File> xelab -prj <prj File> <topModuleName> <other options> ..prj フ ァ イ ルのエン テ ィ テ ィ は次の よ う に表示 さ れます。 verilog sv vhdl sv library1 library1 library2 library3 <FileName> <FileName> [File parsed in SystemVerilog mode] <FileName> <FileName> [File parsed in SystemVerilog mode] 表 D‐1 : SystemVerilog 1800‐2009 の合成可能なセ ッ ト プ ラ イ マ リ コ ン ス ト ラ ク ト セ カ ンダ リ コ ンス ト ラ ク ト LRM セ ク シ ョ ン ス テー タ ス 6 デー タ 型 単一ま たは集成型 6.4 サポー ト あ り ネ ッ ト お よ び変数 6.5 サポー ト あ り 変数宣言 6.8 サポー ト あ り ベ ク タ ー宣言 6.9 サポー ト あ り ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 143 付録 D : Vivado シ ミ ュ レー タ でサポー ト さ れる SystemVerilog コ ン ス ト ラ ク ト 表 D‐1 : SystemVerilog 1800‐2009 の合成可能なセ ッ ト (続き) プ ラ イ マ リ コ ン ス ト ラ ク ト セ カ ンダ リ コ ンス ト ラ ク ト LRM セ ク シ ョ ン ス テー タ ス 6.11.2 サポー ト あ り 単一お よ び符号な し 整数デー 6.11.3 タ型 サポー ト あ り real、 shortreal、 お よ び realtime 6.12 デー タ 型 サポー ト あ り ユーザー定義型 6.18 サポー ト あ り 列挙型 6.19 サポー ト あ り 新規デー タ 型 を 列挙型 と し て 定義 6.19.1 サポー ト あ り 列挙型の範囲 6.19.2 サポー ト あ り 型チ ェ ッ ク 6.19.3 サポー ト あ り 数式の列挙型 6.19.4 サポー ト あ り 列挙型 メ ソ ッ ド 6.19.5 サポー ト あ り 型パ ラ メ ー タ ー 6.20.3 サポー ト あ り Const 定数 6.20.6 サポー ト あ り 型演算子 6.23 サポー ト あ り キ ャ ス ト 演算子 6.24.1 サポー ト あ り $cast ダ イ ナ ミ ッ ク キ ャ ス ト 6.24.2 サポー ト な し ビ ッ ト ス ト リ ーム キ ャ ス ト 6.24.3 サポー ト あ り 2 ス テー ト (2 値) お よ び 4 ス テー ト (4 値) デー タ 型 7 集成デー タ 型 ス ト ラ ク ト (struct) 7.2 サポー ト あ り パ ッ ク /パ ッ ク な し 構造 7.2.1 サポー ト あ り ス ト ラ ク ト への代入 7.2.2 サポー ト あ り ユニオン 7.3 サポー ト あ り パ ッ ク /パ ッ ク な し ユニオン 7.3.1 サポー ト あ り タ グ付 き ユニオン 7.3.2 サポー ト な し パ ッ ク 配列 7.4.1 サポー ト あ り パ ッ ク な し 配列 7.4.2 サポー ト あ り 配列の演算 7.4.3 サポー ト あ り 多次元配列 7.4.5 サポー ト あ り 配列の イ ン デ ッ ク ス お よ び ス ライス 7.4.6 サポー ト あ り 配列代入 7.6 サポー ト あ り サブルーチ ン への引数 と し て の配列 7.7 サポー ト あ り 配列 ク エ リ ー関数 7.11 サポー ト あ り 配列操作 メ ソ ッ ド ( キ ュ ー型 7.12 を返 さ ない メ ソ ッ ド ) サポー ト あ り プ ロ セス ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 9 japan.xilinx.com 144 付録 D : Vivado シ ミ ュ レー タ でサポー ト さ れる SystemVerilog コ ン ス ト ラ ク ト 表 D‐1 : SystemVerilog 1800‐2009 の合成可能なセ ッ ト (続き) プ ラ イ マ リ コ ン ス ト ラ ク ト セ カ ンダ リ コ ンス ト ラ ク ト LRM セ ク シ ョ ン ス テー タ ス 組 み 合 わ せ ロ ジ ッ ク always_comb プ ロ シージ ャ 9.2.2 サポー ト あ り 暗示的な always_comb の セ ン シテ ビ テ ィ 9.2.2.1 サポー ト あ り ラ ッチ ロジッ ク always_latch プ ロ シージ ャ 9.2.2.3 サポー ト あ り 順次 ロ ジ ッ ク always_ff プ ロ シージ ャ 9.2.2.4 サポー ト あ り 順次ブ ロ ッ ク 9.3.1 サポー ト あ り 並列ブ ロ ッ ク 9.3.2 サポー ト な し プ ロ シージ ャ タ イ ミ ン グ制御 9.4 サポー ト あ り 条件付 き イ ベン ト 制御 9.4.2.3 サポー ト あ り 順次 イ ベン ト 9.4.2.4 サポー ト な し 10 代入文 連続代入文 10.3.2 サポー ト あ り 変数宣言代入 (変数初期化) 10.5 サポー ト あ り 代入の よ う な コ ン テ キ ス ト 10.8 サポー ト あ り 配列代入パ タ ーン 10.9.1 サポー ト あ り ス ト ラ ク ト 代入パ タ ーン 10.9.2 サポー ト あ り パ ッ ク な し の配列連結 10.10 サポー ト あ り ネッ ト エイ リ アス 10.11 サポー ト な し 11 演算子および演算式 定数式 11.2.1 サポー ト あ り 集合体式 11.2.2 サポー ト あ り 実数オペ ラ ン ド 11.3.1 サポー ト あ り ロ ジ ッ ク (4 ス テー ト ) お よ び ビ ッ ト (2 ス テー ト ) 型の演算 11.3.4 サポー ト あ り 演算式内の代入 11.3.6 サポー ト あ り 代入演算子 11.4.1 サポー ト あ り イ ン ク リ メ ン ト お よ びデ ク リ メ ン ト 演算子 11.4.2 サポー ト あ り 符号な し お よ び符号付 き 型 を 使用 し た演算式 11.4.3.1 サポー ト あ り ワ イ ル ド カー ド 等化演算子 11.4.6 サポー ト あ り 連結演算子 11.4.12 サポー ト あ り メ ンバーシ ッ プ演算子の設定 11.4.13 サポー ト あ り stream_expressions の 連 結 11.4.14.1 サポー ト あ り ジ ェ ネ リ ッ ク ス ト リ ーム の並 び替え 11.4.14.2 サポー ト あ り ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 145 付録 D : Vivado シ ミ ュ レー タ でサポー ト さ れる SystemVerilog コ ン ス ト ラ ク ト 表 D‐1 : SystemVerilog 1800‐2009 の合成可能なセ ッ ト (続き) プ ラ イ マ リ コ ン ス ト ラ ク ト セ カ ンダ リ コ ンス ト ラ ク ト LRM セ ク シ ョ ン ス テー タ ス 代入 タ ーゲ ッ ト と し て の連結 11.4.14.3 の ス ト リ ー ミ ン グ (ア ンパ ッ ク) サポー ト な し 11.4.14.4 サポー ト な し ダ イ ナ ミ ッ ク な大 き さ のデー タのス ト リ ー ミ ング 12 手続き プ ログ ラ ム文 Unique-if、 unique0-if お よ び priority-if 12.4.2 サポー ト あ り B-if、 unique0-if、 お よ び priority-if コ ン ス ト ラ ク ト で生 成 さ れた違反レ ポー ト 12.4.2.1 サポー ト あ り if 文違反 レ ポー ト お よ び複数 12.4.2.2 プ ロ セ ス文 サポー ト あ り u n i q u e - c a s e 、 12.5.3 unique0-case、 お よ び priority-case サポー ト あ り u n i q u e - c a s e 、 12.5.3.1 unique0-case、 お よ び priority-case コ ン ス ト ラ ク ト で生成 さ れた違反 レ ポー ト サポー ト あ り case 文違反 レ ポー ト お よ び複 12.5.3.2 数プ ロ セ ス文 サポー ト あ り メ ンバーシ ッ プ case 文の設定 12.5.4 サポー ト あ り パ タ ーン一致条件文 12.6 サポー ト な し ループ文 12.7 サポー ト あ り ジ ャ ンプ文 12.8 サポー ト あ り 13.3 タスク ス タ テ ィ ッ ク お よ び自動 タ ス ク 13.3.1 サポー ト あ り メ モ リ 使用量お よ び同時処理 ア ク テ ィ ベーシ ョ ン 13.3.2 サポー ト あ り 13.4 関数 戻 り 値 と void 関数 13.4.1 サポー ト あ り ス タ テ ィ ッ ク お よ び自動関数 13.4.2 サポー ト あ り 定数関数 13.4.3 サポー ト あ り 関数呼び出 し で生成 さ れ る バッ ク グ ラ ウ ン ド プロセス 13.4.4 サポー ト な し 13.5 サブルーチ ン呼び出 し お よび引数渡 し 値渡 し 13.5.1 サポー ト あ り 参照渡 し 13.5.2 サポー ト あ り デフ ォ ル ト の引数値 13.5.3 サポー ト あ り ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 146 付録 D : Vivado シ ミ ュ レー タ でサポー ト さ れる SystemVerilog コ ン ス ト ラ ク ト 表 D‐1 : SystemVerilog 1800‐2009 の合成可能なセ ッ ト (続き) プ ラ イ マ リ コ ン ス ト ラ ク ト セ カ ンダ リ コ ンス ト ラ ク ト LRM セ ク シ ョ ン ス テー タ ス 名前に よ る 引数バ イ ン デ ィ ン グ 13.5.4 サポー ト あ り オプシ ョ ンの引数 リ ス ト 13.5.5 サポー ト あ り イ ン ポー ト お よ びエ ク ス ポー ト 関数 13.6 サポー ト な し タ ス ク お よ び関数名 13.7 サポー ト あ り ユーテ ィ リ テ ィ シ ス テム タ ス ク およびシス テム関 数 (合成可能セ ッ ト のみ) 20 サポー ト あ り I/O シ ス テム タ ス ク およ びシス テム関数 (合成可能 セ ッ ト のみ) 21 サポー ト あ り コ ンパイ ラ ー指示子 22 サポー ト あ り モ ジ ュ ールおよび階層 23 23.2.2.4 デフ ォ ル ト のポー ト 値 サポー ト あ り 最 上 位 モ ジ ュ ー ル お よ び 23.3.1 $root サポー ト あ り モジ ュ ール イ ン ス タ ン シエー シ ョ ン構文 23.3.2 サポー ト あ り ネ ス ト 化 さ れたモジ ュ ール 23.4 サポー ト あ り 外部モジ ュ ール 23.5 サポー ト あ り 階層名 23.6 サポー ト あ り メ ンバー選択お よ び階層名 23.7 サポー ト あ り 上向 き の名前参照 23.8 サポー ト あ り モジ ュ ール パ ラ メ ー タ ーの上 23.10 書き サポー ト あ り 23.11 サポー ト な し ス コ ープ ま た は イ ン ス タ ン ス への補助 コ ー ド のバ イ ン デ ィ ング 25 イ ン ターフ ェ イス イ ン タ ーフ ェ イ ス構文 25.3 サポー ト あ り ネ ス ト 化 さ れた イ ン タ ー フ ェ イス 25.3 サポー ト あ り イ ン タ ーフ ェ イ ス のポー ト 25.4 サポー ト あ り 指定ポー ト バン ド ルの例 25.5.1 サポー ト あ り ポー ト バン ド ルの接続例 25.5.2 サポー ト あ り ポー ト バン ド ルのジ ェ ネ リ ッ ク イ ン タ ーフ ェ イ スへの接続 例 25.5.3 サポー ト あ り modport 演算式 25.5.4 サポー ト あ り ク ロ ッ ク 供給ブ ロ ッ ク お よ び modport 25.5.5 サポー ト な し ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 147 付録 D : Vivado シ ミ ュ レー タ でサポー ト さ れる SystemVerilog コ ン ス ト ラ ク ト 表 D‐1 : SystemVerilog 1800‐2009 の合成可能なセ ッ ト (続き) プ ラ イ マ リ コ ン ス ト ラ ク ト セ カ ンダ リ コ ンス ト ラ ク ト LRM セ ク シ ョ ン ス テー タ ス イ ン タ ー フ ェ イ ス お よ び指定 ブロ ッ ク 25.6 サポー ト な し イ ン タ ー フ ェ イ ス での タ ス ク の使用例 25.7.1 サポー ト あ り modport での タ ス ク の使用例 25.7.2 サポー ト あ り タ ス ク お よ び関数の エ ク ス ポー ト 例 25.7.3 サポー ト あ り 複数 タ ス ク のエ ク ス ポー ト 例 25.7.4 サポー ト な し パ ラ メ ー タ ー指定 さ れた イ ン タ ーフ ェ イ ス 25.8 サポー ト あ り 仮想 イ ン タ ーフ ェ イ ス 25.9 サポー ト な し 26 パ ッ ケージ パ ッ ケージ宣言 26.2 サポー ト あ り パ ッ ケージでのデー タ 参照 26.3 サポー ト あ り モジ ュ ール ヘ ッ ダーでのパ ッ ケージの使用 26.4 サポー ト あ り パ ッ ケージ か ら の イ ン ポー ト さ れた名前のエ ク ス ポー ト 26.6 サポー ト あ り std ビル ト イ ン パ ッ ケージ 26.7 サポー ト な し 27 サポー ト あ り generate コ ン ス ト ラ ク ト ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 148 付録 D : Vivado シ ミ ュ レー タ でサポー ト さ れる SystemVerilog コ ン ス ト ラ ク ト ダ イ ナ ミ ッ ク タ イ プ : アー リ ー ア ク セス 次の表に示す よ う に、 Vivado シ ミ ュ レー タ には、 よ く 使用 さ れ る ダ イ ナ ミ ッ ク タ イ プの一部の基本サポー ト が追加 さ れてい ます。 重要 : こ のサポー ト は現時点ではアー リ ー ア ク セ ス にな っ てい ます。 表 D‐2 : サポー ト さ れる ダ イ ナ ミ ッ ク タ イ プ コ ン ス ト ラ ク ト : アー リ ー ア ク セス コ ンス ト ラ ク ト 名 サポー ト 機能の詳細 文字列 • • • • キ ュー • 一定順序でのキ ュ ー挿入。 シ ス テ ム メ モ リ がい っぱいにな る ま でキ ュ ーを ダ イ ナ ミ ッ ク に増やす こ と も 、 こ れに含まれます。 ° push_front()、 push_back() • 一定順序でのキ ュ ーの削除 • キ ュー フ ァ ン ク シ ョ ン ° size()、 delete() • 一定順序での ラ ン ダ ム ア ク セ ス (my_queue[i] で読み出 し お よ び書き 込み の両方) • 前回 ロ ケーシ ョ ンでの イ ンデ ッ ク ス化に よ る 挿入をサポー ト 連想配列 次の タ イ プのキーをサポー ト : • ベ ク タ ー、 multi-D array、 packed struct、 class ° ダ イ ナ ミ ッ ク タ イ プ を含む、 サポー ト さ れてい る タ イ プの値 • 連想配列 メ ソ ッ ド ° size()、 number()、 delete() ° first()、 next()、 last()、 prev() クラス • • • • 合成で き ない コ ン ス ト ラ ク ト • fork-join_none • $urandom お よ び $urandom_range ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 文字列割 り 当て ス ト ラ ク ト メ ンバー と し ての文字列 すべての文字列演算子 文字列 メ ソ ッ ド ° len()、 putc()、 getc() ° toupper()、 tolower() ° compare()、 icompare() ° substr()、 atoi() ° atobin()、 atohex() new で呼び出 さ れ る コ ン ス ト ラ ク タ 初期値での メ ンバー メ ンバー フ ァ ン ク シ ョ ン キー ワー ド this japan.xilinx.com 149 付録 E : Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ログ ラ ミ ング イ ン タ ー フ ェ イ ス (DPI) 付録 E Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ログ ラ ミ ング イ ン タ ー フ ェ イ ス (DPI) 概要 SystemVerilog ダ イ レ ク ト プ ロ グ ラ ミ ン グ イ ン タ ーフ ェ イ ス (DPI) を使用す る と 、 C コ ー ド と SystemVerilog コ ー ド を ま と め る こ と がで き る ほか、 SystemVerilog コ ー ド で C 関数を呼び出 し た り 、 C 関数か ら SystemVerilog タ ス ク ま たは 関数を呼び戻 し た り で き ます。 Vivado® シ ミ ュ レー タ では、 現在の と こ ろ、 次に示す DPI の機能がサポー ト さ れてい ます。 C コ ー ド の コ ンパイル xsc と い う コ ンパ イ ラ 実行フ ァ イ ルが新 し く 含まれてお り 、 C コ ー ド を オブジ ェ ク ト コ ー ド に変換 し て、 複数のオブ ジ ェ ク ト コ ー ド フ ァ イ ルを共有 ラ イ ブ ラ リ (Windows の場合は .a、 Linux の場合は .so) に リ ン ク で き る よ う にな っ てい ます。 xsc コ ンパ イ ラ は、 <Vivado installation>/bin デ ィ レ ク ト リ に含 ま れ ま す。 -sv_lib を使用す る と 、 C コ ー ド を含む共有 ラ イ ブ ラ リ を Vivado シ ミ ュ レー タ /エ ラ ボ レー タ ー実行フ ァ イ ルに変換で き ます。 xsc コ ンパ イ ラ は、 gcc な ど の C コ ンパ イ ラ ー と 同 じ よ う に使用 し ます。 xsc コ ンパ イ ラ では、 次が呼び出 さ れます。 • LLVM clang コ ンパ イ ラ : C コ ー ド をオブジ ェ ク ト コ ー ド に変換 • GNU リ ン カー : その C フ ァ イ ルに該当する オブジ ェ ク ト フ ァ イ ル 1 つま たは複数か ら 共有 ラ イ ブ ラ リ (Windows の場合は .a、 Linux の場合は .so) を作成 xsc コ ンパ イ ラ ーで生成 さ れた共有 ラ イ ブ ラ リ は、次に示す よ う に xelab に新 し く 追加 さ れたオプシ ョ ン を 1 つま たは 複数使用す る と 、 Vivado シ ミ ュ レ ー タ カーネルに リ ン ク さ れ ま す。 xelab で作成 さ れた シ ミ ュ レ ーシ ョ ン ス ナ ッ プ シ ョ ッ ト には、 コ ンパ イ ル さ れた C コ ー ド と コ ンパ イ ル さ れた SystemVerilog コ ー ド を接続 し て、 C と SystemVerilog 間の効率的な通信を可能にす る 機能があ り ます。 xsc コ ンパイ ラ ーの説明 xsc コ ンパ イ ラ ーを使用す る と 、 1 つま たは複数の C フ ァ イ ルか ら 共有 ラ イ ブ ラ リ (Windows の場合は .a、 Linux の場 合は .so) を作成で き ます。 こ の xsc で生成 さ れた共有 ラ イ ブ ラ リ を残 り のデザ イ ンに含め る には、 xelab を使用 し ま す。 共有 ラ イ ブ ラ リ を作成す る には、 1 段階プ ロ セ ス と 2 段階プ ロ セ ス の 2 つの方法があ り ます。 ワンステ ップ プロセス : -compile や -link オプシ ョ ン を付けずに、 すべての C フ ァ イ ルを xsc に渡 し ます。 ツー ス テ ッ プ プ ロ セ ス : xsc -compile <C files> ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 150 付録 E : Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ログ ラ ミ ング イ ン タ ー フ ェ イ ス (DPI) xsc -link <object files> 使用方法 : xsc [options] <files...> オプ シ ョ ン オプシ ョ ンには、 ダブル ダ ッ シ ュ (--) かダ ッ シ ュ (-) を使用で き ます。 表 E‐1 : XSC コ ンパイ ラ オプ シ ョ ン -compile オブジ ェ ク ト フ ァ イ ルを ソ ース C フ ァ イ ルか ら のみ生成 し ます。 リ ン ク ス テージは実行 さ れません。 -f [ -file ] arg 指定 し た フ ァ イ ルか ら 追加オプシ ョ ン を読み出 し ます。 -h [ -help ] こ のヘルプ メ ッ セージ を表示 し ます。 -i [ -input_file ] arg コ ンパ イ ルま たは リ ン ク 用の入力フ ァ イ ルを リ ス ト し ます (1 つのオプ シ ョ ンに 1 つの フ ァ イ ル)。 -link リ ン ク ス テージのみを実行 し て、 オブジ ェ ク ト フ ァ イ ル (.a ま たは .so) か ら 共有 ラ イ ブ ラ リ を生成 し ます。 -mt arg (=auto) 並列実行可能なサブ コ ンパ イ ル ジ ョ ブの数を指定 し ます。 選択肢は次の と お り です。 auto : 自動 n : n は 1 よ り 大き い整数 off : マルチ ス レ ッ ド を オ フ (デフ ォ ル ト : auto) -o [ -output ] arg 出力 さ れ る 共有 ラ イ ブ ラ リ の名前を指定 し ます。 -link オプシ ョ ン と の み併用で き ます。 -work arg 出力 さ れ る 作業デ ィ レ ク ト リ を指定 し ます。 (デフ ォ ル ト : <current_directory>/xsim.dir/xsc) -v [ -verbose ] arg 表示 メ ッ セージの詳細レベルを指定 し ます。 使用で き る 値 : 0、 1 (デフ ォ ル ト : 0) 例 xsc function1.c function2.c xelab -svlog file.sv -sv_lib dpi 例 xsc -compile function1.c function2.c -work abc xsc -link abc/function1.lnx64.o abc/function2.lnx64.o -work abc ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 151 付録 E : Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ログ ラ ミ ング イ ン タ ー フ ェ イ ス (DPI) xelab を使用 し た コ ンパイル済み C コ ー ド の SystemVerilog への統合 コ ンパ イ ル し た C コ ー ド を SystemVerilog に統合する xelab の DPI に関す る オプシ ョ ンは、 次の と お り です。 -sv_root arg 検索す る 必要の あ る DPI 共有 ラ イ ブ ラ リ に関連す る ルー ト デ ィ レ ク ト リ (デ フ ォ ル ト : <current_directory>/xsim.dir/xsc) -sv_lib arg SystemVerilog に イ ン ポー ト さ れ る C 関数を定義す る DPI 共有 ラ イ ブ ラ リ の名 前 (フ ァ イ ル拡張子な し ) -sv_liblist arg DPI 共有 ラ イ ブ ラ リ を ポ イ ン ト する ブー ト ス ト ラ ッ プ フ ァ イ ル -dpiheader arg イ ン ポ ー ト お よ びエ ク ス ポー ト さ れ た フ ァ ン ク シ ョ ン の C 宣言 を 含む DPI ヘ ッ ダー フ ァ イ ルを生成 r-sv_liblist arg の詳細は、『IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language』 [参照 3] の 1228 ページ目の付録 J.4.1 を参照 し て く だ さ い。 C および SystemVerilog のバウン ダ リ で使用可能な デー タ 型 『IEEE Standard for SystemVerilog』 [参照 3] では、C お よ び SystemVerilog バ ウ ン ダ リ の C お よ び SystemVerilog デー タ 型 のサブセ ッ ト のみが許可 さ れてい ます。 次は、 Vivado シ ミ ュ レー タ でサポー ト さ れ る デー タ 型 と 、 C と SystemVerilog デー タ 型間のマ ッ ピ ン グの詳細について示 し てい ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 152 付録 E : Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ログ ラ ミ ング イ ン タ ー フ ェ イ ス (DPI) サポー ト さ れるデー タ 型 次の表は、 C お よ び SystemVerilog バ ウ ン ダ リ で使用可能なデー タ 型 と 、 C か ら SystemVerilog ま たは SystemVerilog か ら C へのデー タ 型のマ ッ ピ ン グについて ま と めてい ます。 表 E‐2 : C および SystemVerilog バウン ダ リ で使用可能なデー タ 型 SystemVerilog C サポー ト あ り コメント byte char あり なし shortint short int あり なし int int あり なし longint long long あり なし real double あり なし shortreal float あり なし chandle void * あり なし string const char* あり なし bit unsigned char あり sv_0, sv_1, sv_z, sv_x svdpi.h を使用 し た場合 C でのみ使用可能 logic, reg unsigned char あり sv_0, sv_1, sv_z, sv_x: bit のア レ イ (パ ッ ク 済み) svBitVecVal あり svdpi.h で定義 logic/reg のア レ イ (パ ッ ク 済み) svLogicVecVal あり svdpi.h で定義 enum 基本的な enum 型 あり なし bit、 logic のパ ッ ク さ れた ア レ イ ア レ イ と し て渡 さ れ る あり なし パ ッ ク さ れた struct、 union ア レ イ と し て渡 さ れ る あり なし bit、 logic のア ンパ ッ ク さ れた ア レ イ のみ ア レ イ と し て渡 さ れ る エ ク ス ポー ト のみ C は SystemVerilog を呼び出 し 可能 ア ンパ ッ ク さ れた struct struct と し て渡 さ れ る あり なし ア ンパ ッ ク さ れた unions struct と し て渡 さ れ る × なし ア レ イ を開 く svOpenArrayHandle × なし SystemVerilog デー タ 型の C デー タ 型への マ ッ プ方法 を 示す C ヘ ッ ダ ー フ ァ イ ル を 生成す る に は、 -dpiheader <file name> パ ラ メ ー タ ー を xelab に渡 し ま す。 デー タ 型マ ッ ピ ン グ に関す る その他の詳細については、 『IEEE Standard for SystemVerilog』 [参照 3] を参照 し て く だ さ い。 ユーザー定義型のマ ッ ピ ング enum 同等の SystemVerilog 型 (enum の基本型に よ っ て svLogicVecVal ま た は svBitVecVal) への変換に は、 列挙型 (enum) を定義で き ます。 列挙型のア レ イ の場合は、 同等の SystemVerilog ア レ イ が作成 さ れます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 153 付録 E : Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ログ ラ ミ ング イ ン タ ー フ ェ イ ス (DPI) 例 : SystemVerilog 型 : typedef enum reg [3:0] { a = 0, b = 1, c} eType; eType e; eType e1[4:3]; | typedef enum bit { a = 0, b = 1} eTypeBit; eTypeBit e3; eTypeBit e4[3:1] ; C 型 : svLogicVecVal e[SV_PACKED_DATA_NELEMS(4)]; svLogicVecVal e1[2][SV_PACKED_DATA_NELEMS(4)]; svBit e3; svBit e4[3]; ヒ ン ト : C 引数型は、 enum の基本的な型 と その方向に よ っ て異な り ます。 パ ッ ク さ れた struct/union パ ッ ク さ れ た struct や union 型 を 使 用す る 場合 は、 同等 の SystemVerilog 型 で あ る svLogicVecVal ま た は svBitVecVal が DPI の C 側で作成 さ れます。 例 SystemVerilog 型 : typedef struct packed { int i; bit b; reg [3:0]r; logic [2:0] [4:8][9:1] l; } sType; sType c_obj; sType [3:2] c_obj1[5]; C型: svLogicVecVal svLogicVecVal c_obj[SV_PACKED_DATA_NELEMS(172)]; c_obj1[5][SV_PACKED_DATA_NELEMS(344)]; ア レ イ は、 パ ッ ク さ れていて も さ れていな く て も 、 svLogicVecVal ま たは svBitVecVal のア レ イ と し て表記 さ れ ます。 ア ンパ ッ ク さ れた struct/union 同等のア ンパ ッ ク 型は C 側で作成 さ れ、 すべての メ ンバーが同等の C 表記に変換 さ れます。 例 : SystemVerilog 型 : ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 154 付録 E : Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ログ ラ ミ ング イ ン タ ー フ ェ イ ス (DPI) typedef struct { int i; bit b; reg r[3:0]; logic [2:0] l[4:8][9:1]; } sType; C型: typedef struct { int i; svBit b; svLogic r[4]; svLogicVecVal l[5][9][SV_PACKED_DATA_NELEMS(3)]; } sType; svdpi.h 関数のサポー ト svdpi.h ヘ ッ ダー フ ァ イ ルは、 次のデ ィ レ ク ト リ に含まれます。 <vivado installation>/data/xsim/include 次の svdpi.h 関数がサポー ト さ れます。 svBit svGetBitselBit(const svBitVecVal* s, int i); svLogic svGetBitselLogic(const svLogicVecVal* s, int i); void svPutBitselBit(svBitVecVal* d, int i, svBit s); void svPutBitselLogic(svLogicVecVal* d, int i, svLogic s); void svGetPartselBit(svBitVecVal* d, const svBitVecVal* s, int i, int w); void svGetPartselLogic(svLogicVecVal* d, const svLogicVecVal* s, int i, int w); void svPutPartselBit(svBitVecVal* d, const svBitVecVal s, int i, int w); void svPutPartselLogic(svLogicVecVal* d, const svLogicVecVal s, int i, int w); 例 注記 : 次のすべての例は、 問題な く 実行 さ れ る と PASSED と 表示 さ れます。 次に例を示 し ます。 • 「-sv_lib、 -sv_liblist、 お よ び -sv_root を使用 し た イ ン ポー ト 例」 : -sv_lib、 -sv_liblist お よ び -sv_root オ プシ ョ ン を使用す る イ ン ポー ト 例 • 「出力を含む関数」 :出力引数を含む関数 • 「単純な イ ン ポー ト → エ ク ス ポー ト フ ロ ー (xelab -dpiheader フ ロ ー )」 : 単純な イ ン ポー ト か ら エ ク ス ポー ト の フ ロ ー ( xelab -dpiheader <filename> フ ロ ー ) を示す例 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 155 付録 E : Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ログ ラ ミ ング イ ン タ ー フ ェ イ ス (DPI) ‐sv_lib、 ‐sv_liblist、 および ‐sv_root を使用 し た イ ンポー ト 例 コー ド 次の フ ァ イ ルが存在す る と 仮定 し ます。 • C 関数を含むフ ァ イ ル 2 つ • こ れ ら の関数を使用す る SystenVerilog フ ァ イ ル 1 つ cat function1.c #include "svdpi.h" DPI_DLLESPEC int myFunction1() { return 5; } cat function2.c #include <stdio.h> DPI_DLLESPEC int myFunction2() { return 10; } cat file.sv module m(); import "DPI-C" pure function int myFunction1 (); import "DPI-C" pure function int myFunction2 (); integer i, j; initial begin #1; i = myFunction1(); j = myFunction2(); $display(i, j); if( i == 5 && j == 10) $display("PASSED"); else $display("FAILED"); end endmodule 使用法 次に C フ ァ イ ルを コ ンパ イ ル し て Vivado シ ミ ュ レー タ に リ ン ク する 方法を示 し ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 156 付録 E : Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ログ ラ ミ ング イ ン タ ー フ ェ イ ス (DPI) ワ ン ス テ ッ プ フ ロー (最 も 簡単な フ ロー ) xsc function1.c function2.c xelab -svlog file.sv -sv_lib dpi フ ロ ーの説明 : xsc コ ンパ イ ラ ーが C コ ー ド を コ ンパ イ ル し て リ ン ク し て、 共有 ラ イ ブ ラ リ (xsim.dir/xsc/dpi.so) を作成 し 、 xelab が こ の共有 ラ イ ブ ラ リ を -sv_lib オプシ ョ ン を使用 し て参照 し ます。 ツース テ ッ プ フ ロー : xsc -compile function1.c function2.c -work abc xsc -link abc/function1.lnx64.o abc/function2.lnx64.o -work abc xelab -svlog file.sv -sv_root abc -sv_lib dpi -R フ ロ ーの説明 : ° 2 つの C フ ァ イ ルを作業デ ィ レ ク ト リ (abc) で該当する オブジ ェ ク ト コ ー ド に コ ンパ イ ル し ます。 ° こ れ ら の 2 つのフ ァ イ ルを リ ン ク し て共有 ラ イ ブ ラ リ (dpi.so) を作成 し ます。 ° sv_root オプシ ョ ン を使用 し て、 こ の ラ イ ブ ラ リ が 作業デ ィ レ ク ト リ (abc) か ら 検索 さ れ る よ う に し ます。 ヒ ン ト : sv_root には、 sv_lib オプシ ョ ンで指定 さ れた共有 ラ イ ブ ラ リ を検索する デ ィ レ ク ト リ を指定 し ます。 2 段階 フ ロー (上記よ り も さ ら にオプ シ ョ ン を追加) xsc -compile function1.c function2.c -work "abc" -v 1 xsc -link "abc/function1.lnx64.o" "abc/function2.lnx64.o" -work "abc" xelab -svlog file.sv -sv_root "abc" -sv_lib final -R -o final -v 1 フ ロ ーの説明 : ユーザー自身が コ ンパ イ ルお よ び リ ン ク を実行す る 場合は、 -v (verbose) オプシ ョ ン を使用する と 、 コ ンパ イ ラ が起動 さ れ る 際のパ スお よ びオプシ ョ ン を確認で き ます。 こ れ ら は こ の後必要に合わせて調整で き ます。 上記の例の場合、 final と い う 共有 ラ イ ブ ラ リ が作成 さ れます。 こ の例では、 フ ァ イ ル パ ス の スペース が ど の よ う に処理 さ れ る か も 示 し てい ます。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 157 付録 E : Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ログ ラ ミ ング イ ン タ ー フ ェ イ ス (DPI) 出力を含む関数 コー ド cat file.sv /*- - - -*/ package pack1; import "DPI-C" pure function int myFunction1(input int v, output int o); import "DPI-C" pure function void myFunction2 (input int v1, input int v2, output int o); endpackage /*-- ---*/ module m(); int i, j; int o1 ,o2, o3; initial begin #1; j = 10; o3 =pack1:: myFunction1(j, o1);//should be 10/2 = 5 pack1::myFunction2(j, 2+3, o2); // 5 += 10 + 2+3 $display(o1, o2); if( o1 == 5 && o2 == 15) $display("PASSED"); else $display("FAILED"); end endmodule cat function.c #include "svdpi.h" DPI_DLLESPEC int myFunction1(int j, int* o) { *o = j /2; return 0; } DPI_DLLESPEC void myFunction2(int i, int j, int* o) { *o = i+j; return; } ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 158 付録 E : Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ログ ラ ミ ング イ ン タ ー フ ェ イ ス (DPI) cat run.ksh xsc function.c xelab -vlog file.sv -sv -sv_lib dpi -R 単純な イ ンポー ト → エ ク スポー ト フ ロー (xelab ‐dpiheader フ ロー ) こ の フ ロ ーでは、 次が実行 さ れます。 • xelab に -dpiheader オプシ ョ ン を付けて実行 し 、 file.h ヘ ッ ダー フ ァ イ ルを作成 し ます。 • file.c の コ ー ド を xelab で生成 さ れたヘ ッ ダー フ ァ イ ル (file.h) に含め ます。 こ れは最後に リ ス ト さ れます。 • 前 と 同様 file.c お よ び test.sv の コ ー ド を コ ンパ イ ル し て、 シ ミ ュ レーシ ョ ン実行フ ァ イ ルを生成 し ます。 cat file.c #include "file.h" /* NOTE:This file is generated by xelab -dpiheader <filename> flow */ int cfunc (int a, int b) { //Call the function exported from SV. return c_exported_func (a,b); } cat test.sv module m(); export "DPI-C" c_exported_func = function func; import "DPI-C" pure function int cfunc (input int a ,b); /*This function can be called from both SV or C side.*/ function int func(input int x, y); begin func = x + y; end endfunction int z; initial begin #5; z = cfunc(2, 3); if(z == 5) $display("PASSED"); else $display("FAILED"); end endmodule cat run.ksh xelab -dpiheader file.h -svlog test.sv xsc file.c xelab -svlog test.sv -sv_lib dpi -R ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 159 付録 E : Vivado シ ミ ュ レー タ のダ イ レ ク ト プ ログ ラ ミ ング イ ン タ ー フ ェ イ ス (DPI) cat file.h /**********************************************************************/ /* ____ ____ */ /* / /\/ / */ /* /___/ \ / */ /* \ \ \/ */ /* \ \ Copyright (c) 2003-2013 Xilinx, Inc. */ /* / / All Right Reserved.*/ /* /---/ /\ */ /* \ \ / \ */ /* \___\/\___\ */ /**********************************************************************/ /* NOTE:DO NOT EDIT.AUTOMATICALLY GENERATED FILE.CHANGES WILL BE LOST.*/ #ifndef DPI_H #define DPI_H #ifdef __cplusplus #define DPI_LINKER_DECL #else #define DPI_LINKER_DECL #endif extern "C" #include "svdpi.h" /* Exported (from SV) function */ DPI_LINKER_DECL DPI_DLLISPEC int c_exported_func( int x, int y); /* Imported (by SV) function */ DPI_LINKER_DECL DPI_DLLESPEC int cfunc( int a, int b); #endif Vivado Design Suite に含まれる DPI 例 Vivado Design Suite に含まれ る 2 つの例を使用す る と 、 Vivado シ ミ ュ レー タ での DPI の使用方法が理解 し やす く な り ます。 こ れ ら の例は、 <vivado installation dir>/examples/xsim/systemverilog/dpi と い う イ ン ス ト ール デ ィ レ ク ト リ 内の 次のデ ィ レ ク ト リ にあ り ます。 まず、 こ のデ ィ レ ク ト リ に含まれ る README フ ァ イ ルを参照す る こ と をお勧め し ます。 含まれ る 例は、 次の と お り です。 • simple_import : 純粋な関数の単純な イ ン ポー ト • simple_import : 純粋な関数の単純なエ ク ス ポー ト ヒ ン ト : 「純粋な関数」 と は、 関数の return 値がその入力値にのみに基づいて計算 さ れ る 関数の こ と です。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 160 付録 F : その他の リ ソ ースおよび法的通知 付録 F その他の リ ソ ースおよび法的通知 ザイ リ ン ク ス リ ソ ース ア ンサー、 資料、 ダ ウ ン ロ ー ド 、 フ ォー ラ ム な ど のサポー ト リ ソ ース は、 次のザ イ リ ン ク ス サポー ト サ イ ト を参照 し て く だ さ い。 ソ リ ュ ーシ ョ ン セ ン タ ー デバ イ ス、 ツール、 IP のサポー ト については、 ザ イ リ ン ク ス ソ リ ュ ーシ ョ ン セ ン タ ーを参照 し て く だ さ い。 ト ピ ッ ク には、 デザ イ ン ア シ ス タ ン ト 、 ア ド バ イ ザ リ 、 ト ラ ブルシ ュ ー ト ヒ ン ト な ど が含まれます。 参照資料 Vivado® Design Suite の資料 : 1. 『Vivado Design Suite ユーザー ガ イ ド : リ リ ース ノ ー ト 、 イ ン ス ト ールお よ び ラ イ セ ン ス』 (UG973) 2. 『Vivado Design Suite ユーザー ガ イ ド : シ ス テ ム レベル デザ イ ン入力』 (UG895) 3. 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) 4. Vivado Design Suite ユーザー ガ イ ド : Tcl ス ク リ プ ト 機能の使用』 (UG894) 5. 『Writing Efficient Testbenches』 (XAPP199) 6. 『Vivado Design Suite 7 シ リ ーズ FPGA お よ び Zynq-7000 All Programmable SoC ラ イ ブ ラ リ ガ イ ド 』 (UG953) 7. 『Vivado Design Suite Tcl コ マ ン ド リ フ ァ レ ン ス ガ イ ド 』 (UG835) 8. 『Vivado Design Suite ユーザー ガ イ ド : 消費電力の解析お よ び最適化』 (UG907) 9. 『Vivado Design Suite ユーザー ガ イ ド : 制約の使用』 (UG903) 10. 『Vivado Design Suite チ ュ ー ト リ アル : ロ ジ ッ ク シ ミ ュ レーシ ョ ン』 (UG937) 11. 『Vivado Design Suite ユーザー ガ イ ド : デザ イ ン フ ロ ーの概要』 (UG892) 12. 『Vivado Design Suite プ ロ パテ ィ リ フ ァ レ ン ス ガ イ ド 』 (UG912) ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 161 付録 F : その他の リ ソ ースおよび法的通知 サー ド パーテ ィ シ ミ ュ レー タ に関する情報への リ ン ク 13. 詳細は、 該当す る シ ミ ュ レー タ の リ ン ク を参照 し て く だ さ い。 ° ° QuestaSim/ModelSim シ ミ ュ レー タ : - www.mentor.com/products/fv/questa/ - www.mentor.com/products/fv/modelsim/ Cadence IES シ ミ ュ レー タ : - ° www.cadence.com/products/fv/enterprise_simulator/pages/default.aspx Synopsys VCS シ ミ ュ レー タ : - www.synopsys.com/Tools/Verification/FunctionalVerification/Pages/VCS.aspx 言語および暗号化サポー ト 規格への リ ン ク 1. 『IEEE 規格 VHDL 言語参照マニ ュ アル』 (IEEE-STD-1076-1993) 2. 『IEEE 規格 Verilog ハー ド ウ ェ ア記述言語』 (IEEE-STD-1364-2001) 3. SystemVerilog (統合ハー ド ウ ェ ア設計、 仕様、 お よ び検証言語) の IEEE 規格 (IEEE-STD-1800-2009) 4. 『標準遅延フ ォーマ ッ ト 仕様』 (SDF) (Version 2.1) 5. 『Recommended Practice for Encryption and Management of Electronic Design Intellectual Property (IP)』 (IEEE-STD-P1735) ト レーニ ング リ ソ ース ザ イ リ ン ク ス では、本書に含まれ る コ ン セプ ト を説明す る さ ま ざ ま な ト レーニ ン グ コ ースお よ びオン ラ イ ン ビデオを 提供 し てい ます。 次の リ ン ク か ら 関連す る ト レーニ ン グ リ ソ ース を参照 し て く だ さ い。 1. Vivado デザ イ ン ツール フ ロ ー ト レーニ ン グ コ ース 2. Vivado Design Suite 入門ワ ー ク シ ョ ッ プ ト レーニ ン グ コ ース 3. Vivado Design Suite ビデオ チ ュ ー ト リ アル : ロ ジ ッ ク シ ミ ュ レーシ ョ ン 4. Vivado Design Suite ビデオ チ ュ ー ト リ アル ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 162 付録 F : その他の リ ソ ースおよび法的通知 法的通知 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 Xilinx’s limited warranty, please refer to Xilinx’s Terms of Sale which can be viewed at http://www.xilinx.com/legal.htm#tos; 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 such critical applications, please refer to Xilinx’s Terms of Sale which can be viewed at http://www.xilinx.com/legal.htm#tos. PCI, PCIe and PCI Express are trademarks of PCI-SIG and used under license.All other trademarks are the property of their respective owners. © Copyright 2012-2015 Xilinx, Inc. Xilinx, the Xilinx logo, Artix, ISE, Kintex, Spartan, Virtex, Vivado, Zynq, and other designated brands included herein are trademarks of Xilinx in the United States and other countries.All other trademarks are the property of their respective owners. こ の資料に関す る フ ィ ー ド バ ッ ク お よ び リ ン ク な ど の問題につ き ま し ては、 [email protected] ま で、 ま たは各ページの 右下にあ る [フ ィ ー ド バ ッ ク 送信] ボ タ ン を ク リ ッ ク す る と 表示 さ れ る フ ォ ーム か ら お知 ら せ く だ さ い。 フ ィ ー ド バ ッ ク は日本語で 入力可能です。 いただ き ま し た ご意見を参考に早急に対応 さ せていただ き ます。 なお、 こ の メ ール ア ド レ スへのお問い合わせは受 け付けてお り ません。 あ ら か じ めご了承 く だ さ い。 ロ ジ ッ ク シ ミ ュ レーシ ョ ン UG900 (v2015.2) 2015 年 6 月 24 日 japan.xilinx.com 163
© Copyright 2024 ExpyDoc